##
## This file is part of the coreboot project.
##
## Copyright (C) 2010 Anders Jenbo <anders@jenbo.dk>
##
## 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
##
if BOARD_GIGABYTE_GA_6BXE

config BOARD_SPECIFIC_OPTIONS # dummy
	def_bool y
	select ARCH_X86
	select CPU_INTEL_SLOT_1
	select NORTHBRIDGE_INTEL_I440BX
	select SOUTHBRIDGE_INTEL_I82371EB
	select SUPERIO_ITE_IT8671F
	select HAVE_PIRQ_TABLE
	select UDELAY_TSC
	select BOARD_ROMSIZE_KB_256
	select SDRAMPWR_4DIMM

config MAINBOARD_DIR
	string
	default gigabyte/ga-6bxe

config MAINBOARD_PART_NUMBER
	string
	default "GA-6BXE"

config IRQ_SLOT_COUNT
	int
	default 7

endif # BOARD_GIGABYTE_GA_6BXE
