# Kconfig - Bluetooth ATT/GATT configuration options

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

menu "L2CAP Options"

if BT_HCI_ACL_FLOW_CONTROL
config BT_L2CAP_RX_MTU
	int "Maximum supported L2CAP MTU for incoming data"
	default 200 if BT_BREDR
	default 65 if BT_SMP
	default 23
	range 65 1300 if BT_SMP
	range 23 1300
	help
	  Maximum size of each incoming L2CAP PDU.
endif # BT_HCI_ACL_FLOW_CONTROL

config BT_L2CAP_TX_BUF_COUNT
	int "Number of L2CAP TX buffers"
	default 3
	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 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 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.

if BT_DEBUG
config BT_DEBUG_L2CAP
	bool "Bluetooth L2CAP debug"
	help
	  This option enables debug support for the Bluetooth
	  L2ACP layer.
endif # BT_DEBUG

endmenu
