##
## Copyright 2016 Google Inc.  All rights reserved.
##
## 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

config DRIVER_CONSOLE_CBMEM
	bool "Provide a console which stores log messages in memory"
	default n

config DRIVER_CONSOLE_CBMEM_SIZE
	int "Default CBMEM buffer size"
	default 8192

config DRIVER_CONSOLE_DISPLAY
	bool "Provide a console on the display device"
	default n

config DRIVER_CONSOLE_UART
	bool "Provide a console over the debug UART"
	default n

config DRIVER_CONSOLE_UEFI
	bool "Provide a console which calls back into UEFI"
	default n


config SERIAL_SET_SPEED
	bool "Override the serial console baud rate"
	default n
	depends on DRIVER_CONSOLE_UART

config SERIAL_BAUD_RATE
	int "Serial console baud rate (default 115200)"
	depends on SERIAL_SET_SPEED
	default 115200
