# SPDX-License-Identifier: GPL-2.0-only
#
# CAIF net configurations
#

menuconfig CAIF
	tristate "CAIF support"
	select CRC_CCITT
	default n
	---help---
	The "Communication CPU to Application CPU Interface" (CAIF) is a packet
	based connection-oriented MUX protocol developed by ST-Ericsson for use
	with its modems. It is accessed from user space as sockets (PF_CAIF).

	Say Y (or M) here if you build for a phone product (e.g. Android or
	MeeGo ) that uses CAIF as transport, if unsure say N.

	If you select to build it as module then CAIF_NETDEV also needs to be
	built as modules. You will also need to say yes to any CAIF physical
	devices that your platform requires.

	See Documentation/networking/caif for a further explanation on how to
	use and configure CAIF.

config  CAIF_DEBUG
	bool "Enable Debug"
	depends on CAIF
	default n
	---help---
	Enable the inclusion of debug code in the CAIF stack.
	Be aware that doing this will impact performance.
	If unsure say N.

config CAIF_NETDEV
	tristate "CAIF GPRS Network device"
	depends on CAIF
	default CAIF
	---help---
	Say Y if you will be using a CAIF based GPRS network device.
	This can be either built-in or a loadable module,
	If you select to build it as a built-in then the main CAIF device must
	also be a built-in.
	If unsure say Y.

config CAIF_USB
	tristate "CAIF USB support"
	depends on CAIF
	default n
	---help---
	Say Y if you are using CAIF over USB CDC NCM.
	This can be either built-in or a loadable module,
	If you select to build it as a built-in then the main CAIF device must
	also be a built-in.
	If unsure say N.
