- 1.1.8
  - Store everything in arch
- 1.1.7
  - The configuration language has been cleaned up.  No more link keyword.
  - Everything is now in the device tree.
  - The static and dynamic device trees have been unified
  - Support for setting the pci subsystem vendor and pci subsystem device has been added.
  - 64bit resource support
  - Generic smbus support
- 1.1.6
  - pnp/superio devices are now handled cleanly with very little code
  - Initial support for finding x86 BIST errors
  - static resource assignments can now be specified in Config.lb
  - special VGA I/O decode now should work
  - added generic PCI error reporting enables
  - build_opt_tbl now generates a header that allows cmos settings to
    be read from romcc compiled code.
  - split IORESOURCE_SET into IORESOURCE_ASSIGNED and IORESOURCE_STORED
  - romcc now gracesfully handles function pointers instead of dying mysteriously
  - First regression test in amdk8/raminit_test
- 1.1.5
  - O2, enums, and switch statements work in romcc
  - Support for compiling romcc on non x86 platforms
  - new romc options -msse and -mmmx for specifying extra registers to use
  - Bug fixes to device the device disable/enable framework and an amd8111 implementation
  - Move the link specification to the chip specification instead of the path
  - Allow specifying devices with internal bridges.
  - Initial via epia support
  - Opteron errata fixes
- 1.1.4
  Major restructuring of hypertransport handling.
  Major rewerite of superio/NSC/pc87360 as a proof of concept for handling superio resources dynamically
  Updates to hard_reset handling when resetting because of the need to change hypertransport link
    speeds and widths. 
    (a) No longer assume the boot is good just because we get to a hard reset point.
    (b) Set a flag to indicate that the BIOS triggered the reset so we don't decrement the
        boot counter.
  Updates to arima/hdama mptable so it tracks the new bus numbers
- 1.1.3
  Major update of the dyanmic device tree to so it can handle
  * subtractive resources
  * merging with the static device tree
  * more device types than just pci
- 1.1.2
  Add back in the hard_reset method from freebios1 this allows generic
  code to reset the box.  
  Update the hypertransport setup code to automatically optimize
  hypertransport link widths and frequencies, and to call hard_reset
  if necessary for the changes to go into effect.
- 1.1.1
  Updates to the new configuration system so it works more reliably
  Removed a bunch of unused configuration variables
  Removed a bunch of unused assembly code
- 1.1.0
  A whole bunch of random ppc and opteron work we never put a good label on
- 1.1.0
Intial development release of LinuxBIOS.
Everything is thrown overboard and will be reincluded as necessary so we can
get rid of the legacy baggage.  Since LinuxBIOS was started we have developed
some better techniques for some things, but we still hang on to the old ways
because some ports that we want not to break depend on them.  So we preserve
them by preserve the 1.0.x series and keeping only the best practices for
the 1.1.x series.  When there is a stable port this code base will
become LinuxBIOS 2.0.x and the core will become frozen.

