# Bluetooth ATT/GATT configuration options

# Copyright (c) 2019 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "L2CAP Options"

config BT_L2CAP_TX_BUF_COUNT
	int "Number of L2CAP TX buffers"
	default NET_BUF_TX_COUNT if NET_L2_BT
	default BT_BUF_ACL_TX_COUNT
	range 2 255
	help
	  Number of buffers available for outgoing L2CAP packets.

config BT_L2CAP_TX_FRAG_COUNT
	int "Number of L2CAP TX fragment buffers"
	default NET_BUF_TX_COUNT if NET_L2_BT
	default 2
	range 0 255
	help
	  Number of buffers available for fragments of TX buffers. Warning:
	  setting this to 0 means that the application must ensure that
	  queued TX buffers never need to be fragmented, i.e. that the
	  controller's buffer size is large enough. If this is not ensured,
	  and there are no dedicated fragment buffers, a deadlock may occur.
	  In most cases the default value of 2 is a safe bet.

config BT_L2CAP_TX_MTU
	int "Maximum supported L2CAP MTU for L2CAP TX buffers"
	default 253 if BT_BREDR
	default 69 if BT_MESH_PROXY
	default 65 if BT_SMP
	default 23
	range 65 2000 if BT_SMP
	range 23 2000
	help
	  Maximum L2CAP MTU for L2CAP TX buffers.

config BT_L2CAP_DYNAMIC_CHANNEL
	bool "L2CAP Dynamic Channel support"
	depends on BT_SMP
	help
	  This option enables support for LE Connection oriented Channels,
	  allowing the creation of dynamic L2CAP Channels.

config BT_L2CAP_ECRED
	bool "L2CAP Enhanced Credit Based Flow Control support"
	depends on BT_L2CAP_DYNAMIC_CHANNEL
	help
	  This option enables support for LE Connection oriented Channels with
	  Enhanced Credit Based Flow Control support on dynamic L2CAP Channels.

config BT_DEBUG_L2CAP
	bool "Bluetooth L2CAP debug"
	depends on BT_DEBUG
	help
	  This option enables debug support for the Bluetooth
	  L2ACP layer.

endmenu
