Specifications

224 AMD Geode™ GeodeROM Functional Specification
System Management Mode Software
32087C
15.10.6 SYS_SW_INTERRUPT
The SYS_SW_INTERRUPT system call performs a software interrupt. Some interrupts may not be supported. Typical inter-
rupts are INT 13h and INT 15h. The interrupt vector to which control is transferred depends on when the system call is exe-
cuted. The System Manager snapshots the interrupt vector once when VSA2 is installed (early POST), and again at the
end of POST. Caution must be used if this system call is used in response to a MSG_INITIALIZE with the parameter indi-
cating “early POST’. Some vectors may not exist since the BIOS may not have initialized the interrupt vector yet. Also, some
interrupts perform INT instructions so those vectors must be initialized too.
Parameter0: INT number
Parameter1: Offset of a register structure
Examples of usage:
Regs Registers;
Registers.R_AH = 0x88;
SYS_SW_INTERRUPT(0x15, &Registers); // Perform INT 15h function 0x88
15.10.7 SYS_YIELD_CONTROL
The SYS_YIELD_CONTROL system call returns control to the System Manager in order to give other VSMs with lower pri-
ority events a chance to execute. This is typically used in cases where a VSM is performing a lengthy procedure, such as
waiting for an IDE drive to become ready. Rather than continually poll, other work can be done by scheduling another VSM.
Parameter0: Maximum number of milliseconds to yield
Note: If Parameter0 = 00000000h, then no particular preemption interval is guaranteed.
Example of usage:
SYS_YIELD(500); // Yield control for up to 500 ms
15.10.8 SYS_GET_SYSTEM_INFO
The SYS_GET_SYSTEM_INFO system call is used to get information about the system on which the VSM is currently exe-
cuting. This allows a VSM to tailor its behavior to execute on a variety of platforms.
Parameter0: Offset to a hardware structure
typedef struct {
ULONG Chipset_Base; //South Bridge's PCI address (e.g. 0x80009000)
USHORT Chipsete_ID; //South Bridge's PCI device ID (see DEVICE_ID_55x0 below)
USHORT Chipset_Rev; //South Bridge's revision
USHORT CPU_ID; //CPU's PCI device ID
USHORT CPU_Revision; //CPU's version DIR0::DIR1
USHORT CPU_MHz; //Units = MHz
ULONG SystemMemory; //Units = bytes
Example of usage:
Hardware SysInfo;
SYS_GET_SYS_INFO(&SysInfo);