Windows XP is a bit quirky when there's a difference between the ACPI BIOS and operating system ACPI. We'll describe the cause of the problem and several methods you can use to correct it.
So your company just spent a bunch of money on new systems running Windows XP, yet when your users boot up, they receive this message:
ERROR AMLI: ACPI BIOS is attempting to write to an illegal IO port address (0x70), which lies in the 0x70-0x71 protected address range. This machine has suffered a fatal error and needs to be shutdown as quickly as possible.
They may also receive a variation of this error in the event log, referring to ports other than 0x70-0x71. What does it mean?
The variances between ACPI in the BIOS and in the operating system can cause different outcomes in different systems when simultaneous I/O read/write operations are attempted. These outcomes are usually determined by whether the system’s ACPI BIOS (AML) is compatible with XP or not. In this Daily Feature, I’ll examine this and other errors related to ACPI, the Advanced Configuration and Power Interface. I'll provide some technical background on the problem, and then I'll look at a few remedies.
What is ACPI?
The Advanced Configuration and Power Interface (ACPI) is a part of the BIOS and the operating system. The presence of ACPI in the BIOS on a given system determines whether operating systems of the Windows 2000/XP generation can make full use of features such as Power Management and Plug and Play (PnP).
The Power Management applet, accessed in the Control Panel, lets you control power usage and power savings. For example, you can configure a system to go into hibernation (sleep mode) after a preset time period, or to restore power at the touch of a button.
ACPI has its uses on all systems, but it's particularly beneficial on laptops, where power management can be crucial. ACPI also interacts with PnP and can help PnP routines successfully load drivers for PnP devices.
An error such as the one above involves interaction between the BIOS and the operating system via the Hardware Abstraction Layer (HAL) driver. To fully understand what's going on, let’s take a deeper look at how ACPI in the BIOS (ACPI BIOS) and in the operating system (ACPI OS) talk to each other in situations that might give rise to this error.
Part of Microsoft's development of XP involved finding new ways for ACPI BIOS implementations to access and modify hardware resources. Traditionally, ACPI BIOS implementations try to manipulate hardware resources directly through BIOS code. When the ACPI BIOS tries to access and/or modify the hardware resources at the same time as the operating system, an imbalance arises because these operations can't be synchronized. This imbalance can give rise to system instability and/or a hung machine, which needs to be shut down. It's at this point the user is likely to see an ACPI-related error message such as the one above. In pre-Win2K operating systems, this error would often be unrecoverable, and the machine would crash with a Blue Screen of Death. So, although the error is annoying, at least it's an improvement over the previous situation.
The work to improve this weakness involved identifying which system resources would generate the error, and the result was a list of affected resources called I/O Blocked Ports. This list is shown in Table A.
As you can see, the 0x70-0x71 address range appears in the list, and it refers specifically to problems with CMOS/RTC. The ACPI interpreter, which ships with the XP kernel, monitors all events that attempt to read or write to or from the above list of restricted ports. When such an event occurs, there are various possible outcomes:
- The event log will flag an error stating that the ACPI interpreter has detected such an illegal operation.
- If the ACPI BIOS code is compatible with XP’s version of ACPI, the operating system will prohibit the read or write from happening, but an error will still be logged in the event viewer.
- If the BIOS code is compatible only with pre-XP operating systems, XP will attempt to synchronize access to resources, and the read/write events will likely be allowed. However, an error will be logged in the event viewer.
In this last situation, the machine may remain unstable. The exception is when the Programmable Interrupt Controller (PIC) and cascaded PIC are involved in attempted read/writes—these addresses are always blocked because they can induce catastrophic system failure. In multiprocessor configurations, the relevant address register can actually become corrupted.
Now that we’ve looked at how BIOS ACPI and operating system ACPI work (or don't work) together, let’s take a look at how to recover from this error.
This error shouldn't prevent your system from booting, even if it does demand that it be shut down immediately. If you're having boot problems, it's likely there's at least one other issue involved.
Flash the BIOS
Flashing the BIOS simply means you need to find, download, and apply the latest BIOS update for your motherboard. These updates are usually ready for download from the Web site of your motherboard's manufacturer. If you’re not sure which motherboard and BIOS you’re using, this information is presented on the screen when you first boot a system. Just write it down and go from there.
A potential problem with this solution is that the latest BIOS updates don't always correct these types of ACPI problems. This is because different motherboards run different chipsets, which in turn run different BIOSs, and it’s up to the manufacturer to decide when to release a given update. Whether that BIOS update will actually include the required ACPI version update can be anyone’s guess. For more information, you should contact technical support at your motherboard manufacturer.
Load the default BIOS settings
If flashing the BIOS doesn’t work, you can also try to load the BIOS’s default settings. Most BIOS interfaces have an option to "Load Safe Defaults." This may remedy the situation, or at least give you general stability so that you can tweak various other settings and restore normal operations.
A further step is to disable ACPI in the BIOS, although not all BIOSs allow this procedure. If you do, you may lose all ACPI-related functions in the operating system, and you may not be able to boot XP at all. So use this measure with great caution.
Install Windows XP as a ‘Standard PC’
Another reported fix is to install XP as a "Standard PC," which disables ACPI and changes the HAL driver.
For more in-depth information on BIOS ACPI versioning, please check out the Microsoft Windows Platform Development Web site.