bits-640 released with these changes:
The Python acpi.evaluate function can now call ACPI methods which take arguments. The acpi module now provides unique Python types for each ACPI type, and maps between them for both arguments and return values.
Dynamically generate the test menu from Python, and add infrastructure to register individual tests, including grouping tests into submenus. This eliminates the need to wire up each new test with a boilerplate GRUB cfg snippet. More importantly, BITS now has a "Run all standard tests" option, which will run all tests except those which target non-standard system configurations or for which failures might require a reboot.
Port the majority of BITS tests, commands, and infrastructure from GRUB config files and C functions to Python:
- Port the acpi_terminate, msr_available, test_cpuid_consistent, test_msr and test_msr_consistency, test_pci, test_options, and test_summary commands to Python.
- Simplify the msr_available command to drop support for the --cpu, $viewpoint, and non-quiet options, all unused in any test script.
- Port the CPU-specific MSR consistency tests to Python.
- Port the Nehalem and Sandy Bridge power management tests to Python.
- Port the SMRR test to Python.
- Nehalem and Sandy Bridge power management test suites.
- Port CPU frequency detection and display from C to Python.
- Delete the C versions of ACPI dissection routines, and the corresponding menu in the Explore menu, in favor of the Python versions.
- The Python and C testsuite infrastructures now share verbosity level and test pass/fail counts via the environment, to allow incremental porting. This will go away when the last of the C tests get ported to Python.
- Drop all the corresponding commands and infrastructure from the testsuite and acpica modules.
- Remove newly obsoleted GRUB cfg files, and remove much of the infrastructure for loading CPU-specific GRUB cfg files, since none will get reintroduced in the future.
Update README.Developers.txt for the wonderful world of Python scripting. In particular, document the most common places to hook in new code.
Python API improvements:
- Automatically export all environment variables set from Python (via os.putenv or os.environ), so that they'll remain present when descending to GRUB submenus.
- The acpi module has started introducing better handling for parse errors, by throwing exceptions rather than just silently ignoring malformed tables and structures.
- The acpi module now provides functions and types for parsing the MADT and MCFG tables, and the per-CPU _MAT structures.
- Add an acpi.dump function for convenient command-line debugging.
Use the MCFG table to initialize the PCI Express base address, so PCI Express works automatically on most systems without requiring CPU-specific initialization.
Add support and tests for Jaketown:
- MSR consistency test.
- Power optimization profile tests.
Improve Sandy Bridge MSR consistency blacklist, adding MSR_PKG_ENERGY_STATUS, MSR_PP0_ENERGY_STATUS, and MSR 613h.
Update to ACPICA version 20111123.
Support adding and removing ACPI OSI interface strings from Python. Using that support, improve the ACPI OS emulation to support OSI("Processor Device") when emulating current Windows or supporting all features.
The explore menu now includes an option to decode and display the MCFG.
- When printing additional details about a test, wrap and indent each line, so that the top-level test messages stand out as headings.
- Formatting improvements to ACPI display routines and to the string representations of ACPI types.
- Formatting improvements to the "cpu" command.
- Propagate the return value of Python-implemented GRUB commands back to GRUB, so that GRUB configuration files can use Python-implemented GRUB commands in conditionals.
- GRUB commands accepting MSR numbers now produce an appropriate error when asking for an MSR number larger than 32 bits.
- Fix acpi_os.cfg to import the acpi module before calling functions from it.
- Fix memory leak of memory read results in testsuite module. (Not normally relevant since GRUB doesn't normally unload modules or free memory before booting an OS.)