##
## This file is part of the coreboot project.
##
## Copyright (C) 2009 Michael Gold <mgold@ncf.ca>
##
## 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_COMPRESSED_PAYLOAD_LZMA
uses CONFIG_CONSOLE_SERIAL8250
uses CONFIG_CONSOLE_VGA
uses CONFIG_CROSS_COMPILE
uses CONFIG_DEFAULT_CONSOLE_LOGLEVEL
uses CONFIG_FALLBACK_SIZE
uses CONFIG_HAVE_FALLBACK_BOOT
uses CONFIG_HAVE_HARD_RESET
uses CONFIG_HAVE_MP_TABLE
uses CONFIG_HAVE_OPTION_TABLE
uses CONFIG_HAVE_PIRQ_TABLE
uses CONFIG_HEAP_SIZE
uses CONFIG_IRQ_SLOT_COUNT
uses CONFIG_MAINBOARD
uses CONFIG_MAINBOARD_PART_NUMBER
uses CONFIG_MAINBOARD_VENDOR
uses CONFIG_MAXIMUM_CONSOLE_LOGLEVEL
uses CONFIG_OBJCOPY
uses CONFIG_PAYLOAD_SIZE
uses CONFIG_PCI_ROM_RUN
uses CONFIG_RAMBASE
uses CONFIG_ROMBASE
uses CONFIG_ROM_IMAGE_SIZE
uses CONFIG_ROM_PAYLOAD
uses CONFIG_ROM_PAYLOAD_START
uses CONFIG_ROM_SECTION_OFFSET
uses CONFIG_ROM_SECTION_SIZE
uses CONFIG_ROM_SIZE
uses CONFIG_STACK_SIZE
uses CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2
uses CONFIG_TTYS0_BASE
uses CONFIG_TTYS0_BAUD
uses CONFIG_TTYS0_LCS
uses CONFIG_UDELAY_TSC
uses CONFIG_USE_FALLBACK_IMAGE
uses CONFIG_USE_INIT
uses CONFIG_USE_OPTION_TABLE
uses CONFIG_VIDEO_MB
uses CONFIG_XIP_ROM_BASE
uses CONFIG_XIP_ROM_SIZE
uses COREBOOT_EXTRA_VERSION
uses HOSTCC

# Motherboard info, tables, etc.
default CONFIG_MAINBOARD_VENDOR = "Mitac"
default CONFIG_MAINBOARD_PART_NUMBER = "6513WU"
default CONFIG_IRQ_SLOT_COUNT = 8
default CONFIG_HAVE_PIRQ_TABLE = 1
default CONFIG_HAVE_MP_TABLE = 0
default CONFIG_HAVE_OPTION_TABLE = 0
default CONFIG_USE_OPTION_TABLE = 0

# ROM layout
default CONFIG_ROM_SIZE = 512 * 1024
default CONFIG_ROM_IMAGE_SIZE = 128 * 1024
default CONFIG_FALLBACK_SIZE = CONFIG_ROM_IMAGE_SIZE
default CONFIG_HAVE_FALLBACK_BOOT = 1
default CONFIG_ROM_PAYLOAD = 1
default CONFIG_CBFS=1

# RAM layout
default CONFIG_RAMBASE = 0x00004000
default CONFIG_STACK_SIZE = 8 * 1024
default CONFIG_HEAP_SIZE = 16 * 1024

# Misc. settings
default CONFIG_USE_INIT = 0
default CONFIG_HAVE_HARD_RESET = 0
default CONFIG_UDELAY_TSC = 1
default CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2 = 1

# Compiler setup
default CONFIG_CROSS_COMPILE = ""
default CC = "$(CONFIG_CROSS_COMPILE)gcc -m32"
default HOSTCC = "gcc"

# Console settings
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 = 7  # No debugging/spew
default CONFIG_MAXIMUM_CONSOLE_LOGLEVEL = 9

# Enable onboard video
default CONFIG_CONSOLE_VGA = 1
default CONFIG_PCI_ROM_RUN = 1
default CONFIG_VIDEO_MB = 1

end
