##
## 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; 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.
##
## 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 VENDOR_GIGABYTE

choice
	prompt "Mainboard model"

config BOARD_GIGABYTE_GA_2761GXDK
	bool "GA-2761GXDK"
config BOARD_GIGABYTE_GA_6BXC
	bool "GA-6BXC"
config BOARD_GIGABYTE_GA_6BXE
	bool "GA-6BXE"
config BOARD_GIGABYTE_M57SLI
	bool "GA-M57SLI-S4"
config BOARD_GIGABYTE_MA785GMT
	bool "GA-MA785GMT-UD2H"
config BOARD_GIGABYTE_MA785GM
	bool "GA-MA785GM-US2H"
config BOARD_GIGABYTE_MA78GM
	bool "GA-MA78GM-US2H"

endchoice

source "src/mainboard/gigabyte/ga_2761gxdk/Kconfig"
source "src/mainboard/gigabyte/ga-6bxc/Kconfig"
source "src/mainboard/gigabyte/ga-6bxe/Kconfig"
source "src/mainboard/gigabyte/m57sli/Kconfig"
source "src/mainboard/gigabyte/ma785gmt/Kconfig"
source "src/mainboard/gigabyte/ma785gm/Kconfig"
source "src/mainboard/gigabyte/ma78gm/Kconfig"

config MAINBOARD_VENDOR
	string
	default "GIGABYTE"

endif # VENDOR_GIGABYTE
