##
## Copyright 2015 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 FASTBOOT_MODE
	bool "Enable fastboot mode"
	default n
	help
	  Fastboot mode is enabled by this config option. It allows a board to
	  use fastboot protocol to communicate with a host and flash images onto
	  the device.

config FASTBOOT_USBVID
	hex "Fastboot USB Vendor ID"
	default 0x0
	depends on FASTBOOT_MODE

config FASTBOOT_USBDID
	hex "Fastboot USB Vendor ID"
	default 0x0
	depends on FASTBOOT_MODE

config FASTBOOT_HEAP_SIZE
	hex "Heap size required for fastboot operations"
	default 0x0 if !FASTBOOT_MODE
	default 0x20000000 if FASTBOOT_MODE
	help
	  The size of the heap required for fastboot operations in bytes, minus
	  any padding needed to align it to a 16 byte boundary. (Do not
	  override in defconfig, since it would increase the heap size for
	  non-fastboot images as well).
