##
## This file is part of the coreboot project.
##
## Copyright (C) 2007-2008 coresystems GmbH
## Copyright (C) 2014 Vladimir Serbinenko
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

# -----------------------------------------------------------------
entries

# -----------------------------------------------------------------
# Status Register A
# -----------------------------------------------------------------
# Status Register B
# -----------------------------------------------------------------
# Status Register C
#96           4       r       0        status_c_rsvd
#100          1       r       0        uf_flag
#101          1       r       0        af_flag
#102          1       r       0        pf_flag
#103          1       r       0        irqf_flag
# -----------------------------------------------------------------
# Status Register D
#104          7       r       0        status_d_rsvd
#111          1       r       0        valid_cmos_ram
# -----------------------------------------------------------------
# Diagnostic Status Register
#112          8       r       0        diag_rsvd1

# -----------------------------------------------------------------
0            120     r       0        reserved_memory
#120          264     r       0        unused

# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
384          1       e       4        boot_option
388          4       r       0        reboot_bits
#390          2       r       0        unused?

# -----------------------------------------------------------------
# coreboot config options: console
392          3       e       5        baud_rate
395          4       e       6        debug_level
#399          1       r       0        unused

400          8       h       0        volume

# coreboot config options: southbridge
408          1       e       1        nmi
409          2       e       7        power_on_after_fail

# coreboot config options: EC
411          1       e       8        first_battery
412          1       e       1        bluetooth
413          1       e       1        wwan
414          1       e       1        touchpad
415          1       e       1        wlan
416          1       e       1        trackpoint
417          1       e       1        fn_ctrl_swap
418          1       e       1        sticky_fn
419          1       e       1        power_management_beeps
421          1       e       9        sata_mode
#422          2       r       1        unused

# coreboot config options: cpu
424          1       e       2        hyper_threading
#425          7       r       0        unused

# coreboot config options: northbridge
432          3       e       11       gfx_uma_size
#435          549     r       0        unused

# SandyBridge MRC Scrambler Seed values
896          32      r       0        mrc_scrambler_seed
928          32      r       0        mrc_scrambler_seed_s3
960          16      r       0        mrc_scrambler_seed_chk

# coreboot config options: check sums
984          16      h       0        check_sum

# -----------------------------------------------------------------

enumerations

#ID value   text
1     0     Disable
1     1     Enable
2     0     Enable
2     1     Disable
4     0     Fallback
4     1     Normal
5     0     115200
5     1     57600
5     2     38400
5     3     19200
5     4     9600
5     5     4800
5     6     2400
5     7     1200
6     1     Emergency
6     2     Alert
6     3     Critical
6     4     Error
6     5     Warning
6     6     Notice
6     7     Info
6     8     Debug
6     9     Spew
7     0     Disable
7     1     Enable
7     2     Keep
8     0     Secondary
8     1     Primary
9     0     AHCI
9     1     Compatible
10    0     Both
10    1     Keyboard only
10    2     Thinklight only
10    3     None
11    0     32M
11    1     64M
11    2     96M
11    3     128M
11    4     160M
11    5     192M
11    6     224M

# -----------------------------------------------------------------
checksums

checksum 392 415 984
