throttle source code
jeff leyda
jeff@silent.net

released 3-24-04 to the public domain


welcome, oh brave soul, to the source code for throttle.

Here's the file breakdown:
CMDLINE  ASM         command line parsing routines
CONSTANT INC         stuff that never changes
EQUATES  INC         vendor IDs and handy things
MACROS   INC         macros for quick text printing
MAKEFILE             build instructions for masm
MISC     ASM         converters, printers, whatever
PCI      ASM         PCI reader/writers/scanners
README   TXT         right here baby!
SBSTRUC  ASM         structures for all the known southbridges
SOUTHB   ASM         helper routines for manipulating southbridges
THROTTLE ASM         main executable


The concept behind throttle is quite simple.  Just tweak the ACPI processor
control register to change the throttle value, and then enable it.
It's literally 4 bits of a single I/O register that need to be changed.

The problem and bulk of throttle's code is locating WHERE that darn ACPI
base address is.  Since throttle works under windows, it's impossible for
it to scan through upper memory to locate the ACPI FAC tables to get the
base address that way, so I went the route of IDing the southbridge that
actually contains the base address registers and fetching them out of PCI.

Throttle is quickly dying of old age.  As CPU speeds reach 2 and 3GHz and
higher, even maximum throttling can barely make a dent.

Back in the days when 800MHz was screaming, it was possible to get a machine
to perform as slowly as a 286 using throttle.  Now a high end machine still
acts like a high end machine, even at maximum throttling.
Oh well, we had a good run.  Until hardware changes to give us more options,
there's not much more that can be done.


I'm still willing to support throttle on newer chipsets, just email me and
ask.  Otherwise, take this code and tweak it yourself.  Please send me the
changes, and if they're good, I'll officially add them to the core and update
the site.

have fun,

-jeff!
