Debugging Stop 0xA5 – ACPI_BIOS_ERROR

To begin this is the first time I’ve personally seen this bugcheck, however, Patrick (@bsodanalysis) has beeen noticing this bugchecks occur on the HP Envy 700-074 model with Windows 8/Windows 8.1. The best resource you could use with this bugcheck is downloading yourself a copy of the ACPI Specification and then reading through the relevant parts of the documentation. Operating Regions should be located on Page 33, but I will explaining those in this blog post anyhow.

The most important part is the first parameter, which indicates the exact problem which has happened, this is partly due to poor ASL (ACPI Source Language) code used by the vendor, which is then complied into bytecode called AML (ACPI Machine Language). The only method to fix this problem is to search for a later version of the BIOS.

We can gather some BIOS information using the !sysinfo machineid and !sysinfo smbios extensions.

This information can used to the vendor which BIOS version this problem is happening with, and where they need to debug their code.

Using the above information, we know why the system crashed and what component caused it, and we have gathered some system information which we can provide to the vendor. Let’s investigate further into the concept of address spaces at ACPI Level and how they relate to Operation Regions.

Address Spaces are used to access hardware which isn’t within the scope of the ASL code, these include the CMOS and RAM. A operation region is used to provide access and create a form of scope into the address space. The programmer who is writing the ASL code will provide boundaries to these operating regions, such as the range of the address space to be accessed.

These address spaces can then be defined with a field, which is later used by AML Interpreter to create a address which can be passed to the Address Space Handler to access a physical address. The address is created from the field’s address and the operation region’s address offset. Each address space is said to belong to a certain device, and any references within that device’s address space will be handled by the device’s Address Space Handlers. Each Address Space Handler will need to created with the device’s namespace object to conform with the scoping rules.

With this bugcheck, the BIOS will define which operation regions and address spaces the operating system is available to access and use, however, if these operation regions were changed to be used by a particular device, and the operating system accesses these regions, then the system will bugcheck.

Furthermore, as a side note, each operating region will need to register a operating region handler to the ACPI driver using the RegisterOpRegionHandler function. By registering the handler, the ACPI device can transfer data to the ACPI device’s function driver. However, the ACPI_OPREGION_ACCESS_AS_COOKED access type must be specified to enable the transfer of information.

Debugging Tools:

WinDbg does support ACPI debugging, but only if you have a checked build of Windows or a checked ACPI.sys driver, which you can obtain separately. More Information – ACPI Debugging 

On the other hand, I have managed to find a freeware tool called RWEverything, which is designed for Windows operating systems, and will give similar information to the WinDbg extensions.

References:

Accessing a Operation Region

RegisterOpRegionHandler

ACPI Specification – Operation Regions

Advertisements

About 0x14c

I'm a Computer Science student and writer. My primary interests are Graph Theory, Number Theory, Programming Language Theory, Logic and Windows Debugging.
This entry was posted in Stop 0xA5. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s