##
## 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_ASUS_P2B_F
	bool "P2B-F"
	select ARCH_X86
	select CPU_INTEL_SLOT_2
	select NORTHBRIDGE_INTEL_I440BX
	select SOUTHBRIDGE_INTEL_I82371EB
	select SUPERIO_WINBOND_W83977TF
	select HAVE_PIRQ_TABLE
	select UDELAY_IO
	select PCI_ROM_RUN
	select CONSOLE_VGA
	help
	  ASUS P2B-F mainboard.

config MAINBOARD_DIR
	string
	default asus/p2b-f
	depends on BOARD_ASUS_P2B_F

config MAINBOARD_VENDOR
	string
	default "ASUS"
	depends on BOARD_ASUS_P2B_F

config MAINBOARD_PART_NUMBER
	string
	default "P2B-F"
	depends on BOARD_ASUS_P2B_F

config HAVE_OPTION_TABLE
	bool
	default n
	depends on BOARD_ASUS_P2B_F

config IRQ_SLOT_COUNT
	int
	default 7
	depends on BOARD_ASUS_P2B_F

