##
## This file is part of the coreboot project.
##
## Copyright (C) 2008 Joseph Smith <joe@settoplinux.org>
##
## 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; either version 2 of the License, or
## (at your option) any later version.
##
## 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.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
##

uses CC
uses CONFIG_CBFS
uses CONFIG_CONSOLE_SERIAL8250
uses CONFIG_CONSOLE_VGA
uses CONFIG_COMPRESSED_PAYLOAD_LZMA
uses CONFIG_IOAPIC
uses CONFIG_PCI_OPTION_ROM_RUN_REALMODE
uses CONFIG_PCI_ROM_RUN
uses CONFIG_ROM_PAYLOAD
uses CONFIG_ROM_PAYLOAD_START
uses CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2
uses CONFIG_UDELAY_TSC
uses CONFIG_VIDEO_MB
uses CONFIG_CROSS_COMPILE
uses CONFIG_DEFAULT_CONSOLE_LOGLEVEL
uses CONFIG_FALLBACK_SIZE
uses CONFIG_HAVE_ACPI_TABLES
uses CONFIG_HAVE_ACPI_RESUME
uses CONFIG_HAVE_FALLBACK_BOOT
uses CONFIG_HAVE_MP_TABLE
uses CONFIG_HAVE_OPTION_TABLE
uses CONFIG_HAVE_PIRQ_TABLE
uses CONFIG_HEAP_SIZE
uses HOSTCC
uses CONFIG_IRQ_SLOT_COUNT
uses COREBOOT_EXTRA_VERSION
uses CONFIG_MAINBOARD
uses CONFIG_MAINBOARD_VENDOR
uses CONFIG_MAINBOARD_PART_NUMBER
uses CONFIG_MAXIMUM_CONSOLE_LOGLEVEL
uses CONFIG_OBJCOPY
uses CONFIG_PAYLOAD_SIZE
uses CONFIG_RAMBASE
uses CONFIG_ROMBASE
uses CONFIG_ROM_IMAGE_SIZE
uses CONFIG_ROM_SECTION_SIZE
uses CONFIG_ROM_SECTION_OFFSET
uses CONFIG_ROM_SIZE
uses CONFIG_STACK_SIZE
uses CONFIG_TTYS0_BASE
uses CONFIG_TTYS0_BAUD
uses CONFIG_TTYS0_LCS
uses CONFIG_USE_FALLBACK_IMAGE
uses CONFIG_USE_OPTION_TABLE
uses CONFIG_XIP_ROM_SIZE
uses CONFIG_XIP_ROM_BASE

default CONFIG_ROM_SIZE = 512 * 1024
default CONFIG_ROM_IMAGE_SIZE = 128 * 1024
default CONFIG_HAVE_FALLBACK_BOOT = 1
default CONFIG_FALLBACK_SIZE = CONFIG_ROM_IMAGE_SIZE
default CONFIG_UDELAY_TSC = 1
default CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2 = 1
default CONFIG_HAVE_PIRQ_TABLE = 1
default CONFIG_IRQ_SLOT_COUNT = 7
default CONFIG_HAVE_MP_TABLE = 0
default CONFIG_HAVE_ACPI_TABLES = 0
default CONFIG_IOAPIC = 0
default CONFIG_HAVE_OPTION_TABLE = 0
default CONFIG_CONSOLE_VGA = 0
default CONFIG_PCI_ROM_RUN = 0
default CONFIG_PCI_OPTION_ROM_RUN_REALMODE = 0
default CONFIG_VIDEO_MB = 0
default CONFIG_STACK_SIZE = 0x2000
default CONFIG_HEAP_SIZE = 0x4000
default CONFIG_RAMBASE = 0x00004000
default CONFIG_USE_OPTION_TABLE = 0
default CONFIG_ROM_PAYLOAD = 1
default CC="$(CONFIG_CROSS_COMPILE)gcc -m32"
default HOSTCC="gcc"
default CONFIG_CONSOLE_SERIAL8250 = 1
default CONFIG_TTYS0_BAUD = 115200
default CONFIG_TTYS0_BASE = 0x3f8
default CONFIG_TTYS0_LCS = 0x3	# 8n1
default CONFIG_DEFAULT_CONSOLE_LOGLEVEL = 9
default CONFIG_MAXIMUM_CONSOLE_LOGLEVEL = 9
default CONFIG_MAINBOARD_VENDOR = "RCA"
default CONFIG_MAINBOARD_PART_NUMBER = "RM4100"
#
# CBFS
#
#
default CONFIG_CBFS=1
end
