bits-574 released with these changes:
New Python functionality:
- Add a usb module, with support for EHCI handoff and showing host controllers
- Add a pci module, which currently supports probing for devices by classcode.
- The bits module now has functions to read and write memory, as bytes, words, or dwords.
- Preliminary support for reading from stdin from Python; sufficient to allow reading individual characters to implement prompts.
- New bits.set_mwait function, to set the MWAIT state used internally by BITS to idle CPUs when not in use.
- New bits.bclk function, returning the CPU bclk, which indicates the speed of the APIC timer.
- bits.cpuid now returns a namedtuple, allowing access to the return value via named fields (.eax, .ebx, .ecx, .edx) as well as positionally. Use this to clean up various other code.
- In grubcmds, add support for registering GRUB commands together with an argparse argument parser. This extracts the help text and synopsis, to make GRUB's "help" command work.
Initialize Python and register Python GRUB commands before running other GRUB scripts. This allows us to implement commands in Python that other GRUB scripts need.
Port many GRUB commands from C to Python. Shared state used by both C and Python commands now lives in GRUB environment variables; once all commands have migrated to Python, the environment variables will go away.
- brandstring
- cpu
- cpu_sleep
- cpuid32 (now computes and displays the common bits and common mask for each register, highlighting the differences between CPUs)
- pci_read and pci_write
- pcie_read and pcie_write
- rdmsr (now computes and displays the common bits and common mask, highlighting the differences between CPUs)
- set_mwait
- timer
- wrmsr
Delete some unused GRUB commands:
- test_msr_available
- test_pci_consistency
- test_pcie
- testsuite (internal implementation detail)
Add more Python modules from the standard library:
- argparse
- gettext
- locale
- textwrap
- timeit
Make C and Python testsuites share passed/failed counts via environment variables. This allows incremental migration of test_* commands from C to Python.
Redirect output from Python to a log before running other Python initialization, to capture any errors that might occur.
Add some preliminary parsing for the ACPI MCFG table. In the future, BITS will provide tests for MCFG, and will use it to obtain the PCIe base address.
Updates to runppm:
- Add new error code from PPM RCM v12.1 for reporting locked registers/interfaces.
- Only print verbose information when the PPM RCM exits unsuccessfully. When successful, shut up about it.
- On Sandy Bridge family, don't try to use PPM reference code without a compiled copy of the PPM RCM available. The built-in PPM code only has full support for Nehalem family, and eventually the built-in code will go away entirely in favor of the standalone reference code. We don't want to maintain the same reference code in two places.
Fix warnings from GCC's new -Wunused-but-set-variable option in the RCM code, and backport upstream GRUB fixes for those warnings in the GRUB codebase. These warnings broke the BITS build with GCC 4.6 and newer.
Update README.txt for changes to the top-level BITS menu options.
Update README.Developers.txt with some guidelines for Python code.
Build system fixes:
- Fix name of source archive for fdlibm to use .tar.gz, not just .gz
- Check for Python, fdlibm, and ACPICA before trying to build, rather than mysteriously failing later in the build process.
Bugfixes:
- Fix the docstring of bits.wrmsr to document the return value correctly.
- Fix ACPI common prefix printing to not print {} at the end of one-CPU lists