##
## This file is part of the coreboot project.
##
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
##
## 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
##

config BOARD_GIGABYTE_GA_6BXC
	bool "GA-6BXC"
	select ARCH_X86
	select CPU_INTEL_SLOT_2
	select NORTHBRIDGE_INTEL_I440BX
	select SOUTHBRIDGE_INTEL_I82371EB
	select SUPERIO_ITE_IT8671F
	select HAVE_PIRQ_TABLE
	select UDELAY_TSC
	select BOARD_ROMSIZE_KB_256

config MAINBOARD_DIR
	string
	default gigabyte/ga-6bxc
	depends on BOARD_GIGABYTE_GA_6BXC

config MAINBOARD_PART_NUMBER
	string
	default "GA-6BXC"
	depends on BOARD_GIGABYTE_GA_6BXC

config HAVE_OPTION_TABLE
	bool
	default n
	depends on BOARD_GIGABYTE_GA_6BXC

config IRQ_SLOT_COUNT
	int
	default 5
	depends on BOARD_GIGABYTE_GA_6BXC

