# Bluetooth ATT/GATT configuration options

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

menu "L2CAP Options"

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
	depends on BT_HCI_ACL_FLOW_CONTROL
	help
	  Maximum size of each incoming L2CAP PDU.

config BT_L2CAP_TX_BUF_COUNT
	int "Number of L2CAP TX buffers"
	default NET_BUF_TX_COUNT if NET_L2_BT
	default BT_CTLR_TX_BUFFERS if BT_CTLR
	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 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 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_DEBUG_L2CAP
	bool "Bluetooth L2CAP debug"
	depends on BT_DEBUG
	help
	  This option enables debug support for the Bluetooth
	  L2ACP layer.

endmenu
