##
##
## Copyright (C) 2008 Advanced Micro Devices, Inc.
## Copyright (C) 2008 coresystems GmbH
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
## 1. Redistributions of source code must retain the above copyright
##    notice, this list of conditions and the following disclaimer.
## 2. Redistributions in binary form must reproduce the above copyright
##    notice, this list of conditions and the following disclaimer in the
##    documentation and/or other materials provided with the distribution.
## 3. The name of the author may not be used to endorse or promote products
##    derived from this software without specific prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
## ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##

mainmenu "Libpayload Configuration"

menu "Generic Options"

config GPL
	bool "GPLv2-licensed Options"
	default y if CHROMEOS
	default n
	help
	  Prompt for options that will build code licensed under the GNU General
	  Public License (version 2). This will subject the whole payload to the
	  terms of this license (including its provision to release all sources,
	  please see the LICENSE_GPL file for details).

config EXPERIMENTAL
	bool "Experimental Options"
	default n
	help
	  Prompt for experimental functionality. Attention: This is not likely
	  to work without problems

config DEVELOPER
	bool "Developer Options"
	default n
	help
	  Prompt for developer options. These options are only interesting for
	  libpayload developers.

config CHROMEOS
	bool "Chrome OS Options"
	default n
	help
	  Select configuration defaults appropriate for Chrome OS boards.

choice
	prompt "Compiler to use"
	default COMPILER_GCC
	help
	  This option allows you to select the compiler.

config COMPILER_GCC
	bool "GCC"
	help
	  Use the GNU Compiler Collection (GCC).

config COMPILER_LLVM_CLANG
	bool "LLVM/clang"
	help
	  Use LLVM/clang.

endchoice

config REMOTEGDB
	bool "Remote GDB stub"
	default n
	depends on GPL
	help
	  Enable Remote GDB debugging support.

config MEMMAP_RAM_ONLY
	bool "Only consider RAM entries in memory map for further processing"
	default n

endmenu

menu "Architecture Options"

choice
        prompt "Target Architecture"
        default ARCH_X86

config ARCH_ARM
        bool "ARM"
        help
          Support the ARM architecture

config ARCH_X86
        bool "x86"
        help
          Support the x86 architecture

config ARCH_ARM64
        bool "ARM64"
        help
          Support the ARM64 architecture

endchoice

config MULTIBOOT
	bool "Multiboot header support"
	depends on ARCH_X86
	default y if !CHROMEOS

config HEAP_SIZE
	int "Heap size"
	default 131072
	help
	  This is the heap size (malloc'able size) available
	  to the payload.

	  If unsure, set to 131072 (128K)

config STACK_SIZE
	int "Stack size"
	default 16384
	help
	  This is the stack size available to the payload.

	  If unsure, set to 16384 (16K)

config BASE_ADDRESS
	hex "Base address"
	default 0x04000000 if ARCH_ARM
	default 0x80100000 if ARCH_ARM64
	default 0x00100000 if ARCH_X86
	help
	  This is the base address for the payload.

	  If unsure, set to 0x00100000 on x86,
	  0x04000000 on ARM or 0x80100000 on ARM64.

endmenu

config USE_MARCH_586
	bool "Use march=586 qualifier to build"
	default n
	depends on ARCH_X86
	help
	  Allow a platform or processor to select to be compiled using
	  the '-march=i586' option instead of the typical '-march=i686'

menu "Standard Libraries"

config LIBC
	bool "Enable C library support"
	default y

config CURSES
	bool "Build a curses library"
	default y if !CHROMEOS

choice
	prompt "Curses implementation"
	default PDCURSES
	depends on CURSES

config TINYCURSES
	bool "TinyCurses"
	help
	  TinyCurses was the first curses implementation for libpayload.
	  It features low memory consumption, static allocation of larger
	  data structures (so few or no memory allocation calls) and a
	  reduced feature set.

config PDCURSES
	bool "PDCurses"
	help
	  libpayload's PDCurses port provides a full features curses
	  implementation, including libpanel, libmenu and libform (which
	  are taken from ncurses).
	  It requires more system resources, in particularily heap memory.

endchoice

config CBFS
	bool "CBFS support"
	default y
	help
	  CBFS is the archive format of coreboot

config LZMA
	bool "LZMA decoder"
	default y
	help
	  LZMA decoder implementation, usable eg. by CBFS,
	  but also externally.

config LZ4
	bool "LZ4 decoder"
	default y
	help
	  Decoder implementation for the LZ4 compression algorithm.
	  Adds standalone functions (CBFS support coming soon).
endmenu

menu "Console Options"

config SKIP_CONSOLE_INIT
	bool "Skip initializing the consoles at startup"
	default y if CHROMEOS
	default n
	help
	  Normally, libpayload will initialize console input/output on startup
	  before the payload itself gets control. This option disables that
	  behavior and leaves console initialization up to the payload.

config CBMEM_CONSOLE
	bool "Send output to the in memory CBMEM console"
	default y

config SERIAL_CONSOLE
	bool "See output on the serial port console"
	default y

config 8250_SERIAL_CONSOLE
	bool "8250-compatible serial port driver (including IO and MMIO)"
	depends on SERIAL_CONSOLE
	default y if ARCH_X86

config S5P_SERIAL_CONSOLE
	bool "Exynos SOC, S5P compatible serial port driver"
	depends on SERIAL_CONSOLE
	default n

config IPQ806X_SERIAL_CONSOLE
	bool "IPQ806x SOC compatible serial port driver"
	depends on SERIAL_CONSOLE
	default n

config IPQ40XX_SERIAL_CONSOLE
	bool "IPQ40xx SOC compatible serial port driver"
	depends on SERIAL_CONSOLE
	default n

config QCS405_SERIAL_CONSOLE
	bool "QCS405 SOC compatible serial port driver"
	depends on SERIAL_CONSOLE
	default n

config QUALCOMM_QUPV3_SERIAL_CONSOLE
	bool "Qualcomm QUPV3 serial port driver"
	depends on SERIAL_CONSOLE
	default n

config PL011_SERIAL_CONSOLE
	bool "PL011 compatible serial port driver"
	depends on 8250_SERIAL_CONSOLE
	default n

config SERIAL_IOBASE
	## This default is currently not used on non-x86 systems.
	hex "Default I/O base for the serial port (default 0x3f8)"
	depends on SERIAL_CONSOLE && ARCH_X86
	default 0x3f8

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

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

config SERIAL_ACS_FALLBACK
	bool "Use plain ASCII characters for ACS"
	default n
	depends on SERIAL_CONSOLE
	help
	  The alternate character set (ACS) is used for drawing lines and
	  displaying a couple of other special graphics characters.  The
	  ACS characters generally look good on screen, but can be difficult
	  to cut and paste from a terminal window to a text editor.

	  Say 'y' here if you want to always use plain ASCII characters to
	  approximate the appearance of ACS characters on the serial port
	  console.

config VIDEO_CONSOLE
	bool "See output on a video console"
	default y

config VGA_VIDEO_CONSOLE
	bool "VGA video console driver"
	depends on ARCH_X86 && VIDEO_CONSOLE
	default y if !CHROMEOS

config GEODELX_VIDEO_CONSOLE
	bool "Geode LX video console driver"
	depends on ARCH_X86 && VIDEO_CONSOLE
	default n

config COREBOOT_VIDEO_CONSOLE
	bool "coreboot video console driver"
	depends on VIDEO_CONSOLE && !GEODELX_VIDEO_CONSOLE
	default y if CHROMEOS
	default n
	help
	  Say Y here if coreboot switched to a graphics mode and
	  your payload wants to use it.

config COREBOOT_VIDEO_CENTERED
	bool "Center a classic 80x25 console on bigger screens"
	depends on COREBOOT_VIDEO_CONSOLE
	help
	  Say 'y' here if your payload is hardcoded to a 80x25 console. Otherwise
	  its output would look squeezed into the upper-left corner of the screen.

config FONT_SCALE_FACTOR
	int "Scale factor for the included font"
	depends on GEODELX_VIDEO_CONSOLE || COREBOOT_VIDEO_CONSOLE
	default 0
	help
	  By default (value of 0), the scale factor is automatically
	  calculated to ensure at least 130 columns (when possible).

config CBGFX_FAST_RESAMPLE
	bool "CBGFX: use faster (less pretty) image scaling"
	default n
	help
	  When payloads use the CBGFX library to draw .BMPs on the screen,
	  they will be resampled with an anti-aliasing filter to scale to the
	  requested output size. The default implementation should normally be
	  fast enough, but if desired this option can make it about 50-100%
	  faster at the cost of quality. (It changes the 'a' parameter in the
	  Lanczos resampling algorithm from 3 to 2.)

	  Only affects .BMPs that aren't already provided at the right size.

config PC_I8042
	bool "A common PC i8042 driver"
	default y if PC_KEYBOARD || PC_MOUSE
	default n
	help
	  To be used by PC_KEYBOARD and PC_MOUSE.

config PC_MOUSE
	bool "Allow input from a PC mouse"
	default n if CHROMEOS
	default y if ARCH_X86 # uses IO
	default n
	help
	  PS/2 mouse driver on top of PC_I8042.

config PC_KEYBOARD
	bool "Allow input from a PC keyboard"
	default y if ARCH_X86 # uses IO
	default n

config PC_KEYBOARD_AT_TRANSLATED
	bool "AT Translation keyboard device"
	default n

config PC_KEYBOARD_LAYOUT_US
	bool "English (US) keyboard layout"
	depends on PC_KEYBOARD
	default y

config PC_KEYBOARD_LAYOUT_DE
	bool "German keyboard layout"
	depends on PC_KEYBOARD
	default n

endmenu

menu "Drivers"

config PCI
	bool "Support for PCI devices"
	depends on ARCH_X86 # for now
	default y

config NVRAM
	bool "Support for reading/writing NVRAM bytes"
	depends on ARCH_X86 # for now
	default y

config MOUSE_CURSOR
	bool "Support for mouse cursor handling"
	default y if PC_MOUSE
	default n
	help
	  Provides a common interface for various mouse cursor drivers.
	  * Supports up to 32 buttons.
	  * Supports 3 axis mice.
	  * Applies simple cursor acceleration.
	  * Allows to set cursor acceleration and cursor speed.

config RTC_PORT_EXTENDED_VIA
	bool "Extended RTC ports are 0x74/0x75"
	default n
	help
	  For recent chipsets with 256 NVRAM bytes, you have to access the
	  upper 128 bytes (128-255) using two different I/O ports,
	  usually 0x72/0x73.

	  On some chipsets this can be a different set of ports, though.
	  The VIA VT8237R for example only recognizes the ports 0x74/0x75
	  for accessing the high 128 NVRAM bytes (as seems to be the case for
	  multiple VIA chipsets).

	  If you want to read or write CMOS bytes on computers with one of
	  these chipsets, say 'y' here.

config SPEAKER
	bool "Support for PC speaker"
	depends on ARCH_X86
	default y if !CHROMEOS

source "drivers/timer/Kconfig"
source "drivers/storage/Kconfig"
source "drivers/usb/Kconfig"

endmenu

menu "Debugging"
	depends on DEVELOPER

config DEBUG_MALLOC
	bool "Debug memory allocator"
	default n
	help
	  Select this option if you want to debug the memory allocator. This
	  option logs all uses of the following functions:

	    void free(void *ptr);
	    void *malloc(size_t size);
	    void *calloc(size_t nmemb, size_t size);
	    void *realloc(void *ptr, size_t size);
	    void *memalign(size_t align, size_t size);

	  Say N here unless you are debugging memory allocator problems.

endmenu

config BIG_ENDIAN
	default n
	bool

config LITTLE_ENDIAN
	default n
	bool

config IO_ADDRESS_SPACE
	default n
	bool
	help
	  This option is turned on if the target system has a separate
	  IO address space. This is typically only the case on x86.

source "arch/arm/Kconfig"
source "arch/arm64/Kconfig"
source "arch/x86/Kconfig"
