A pointer to the AMD Atombios may be found in either the BAR0 or expansion ROM fields in the PCI config space of most current AMD graphics cards, as well as AMD's integrated graphics processors.
To use execute the commands in the command tables, one needs to write an Atombios Bytecode interpreter. Example Atombios interpreter code can be found in the Linux source tree in drivers/gpu/drm/radeon. Check around in the files atom.c and atom.h. One of the first commands one would need to issue is the ASIC_Init command at index 0, which initializes the ASIC (Application Specific Integrated Circuit). These commands provide an API for the driver to configure the graphics card without necessarily knowing the specific registers and values to write.
Data
The data table points to other tables which give useful information about the graphics card, like the engine, memory and reference clocks.
Structures
All offsets are from the beginning of the ROM image. To find the offsets of other tables, see this table, with some important fields:
Most tables will have a header with the following structure:
Offset
Size
Description
0x00
Word
Structure Size
0x02
Byte
Table Format Revision, changed when parser is not backward compatible
0x03
Byte
Table Content Revision
Atom ROM table
Offset
Size
Description
0x00
4 bytes
Common header
0x04
4 bytes
Atom Magic, should be "ATOM"
0x08
Word
BIOS Runtime Segment Address
0x0A
Word
Protected Mode Info Offset
0x0C
Word
Config Filename Offset
0x0E
Word
CRC Block Offset
0x10
Word
Name String offset, sometimes zero terminated. Maximum 512 bytes.
0x12
Word
Int 10 offset
0x14
Word
PCI Bus Device Init Code
0x16
Word
IO Base Address
0x18
Word
Subsystem Vendor ID
0x1A
Word
Subsystem ID
0x1C
Word
PCI Info Offset
0x1E
Word
Command Table Base
0x20
Word
Data Table Base
0x22
Byte
Extended Function Code
0x23
Byte
Reserved
Command Table
The offset for this table is found at offset 0x1E of the Atom ROM table. Many of these tables are only internally between functions. All of the values in this table are offsets from the start of the ROM image, except for the header.
The offset for this table is found at offset 0x0C of the Data Table. Clock values are in 10KHz units. This table has many versions, but many of the fields are the same. In versions other than 1.1, only the changed fields will be listed.