# 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 10 if BT_MCS
	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_GATT
	default 65 if BT_SMP
	default 64 if BT_AUDIO_UNICAST_SERVER || BT_AUDIO_UNICAST_CLIENT || BT_AUDIO_BROADCAST_SINK || BT_BASS || BT_BASS_CLIENT
	default 49 if BT_HAS || BT_HAS_CLIENT
	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
