# Bluetooth ATT/GATT configuration options

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

menu "L2CAP Options"

config BT_L2CAP_TX_BUF_COUNT
	int "Number of L2CAP TX buffers"
	default BT_BUF_ACL_TX_COUNT
	range 2 $(UINT8_MAX)
	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 $(UINT8_MAX)
	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_CLASSIC
	default 66 if BT_EATT
	default 65 if BT_SMP
	default 64 if BT_BAP_UNICAST_SERVER || \
		      BT_BAP_UNICAST_CLIENT || \
		      BT_BAP_BROADCAST_SINK || \
		      BT_BAP_SCAN_DELEGATOR || \
		      BT_BAP_BROADCAST_ASSISTANT
	default 49 if BT_HAS || BT_HAS_CLIENT
	default 33 if BT_MESH_GATT
	default 23
	range 66 2000 if BT_EATT
	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_L2CAP_SEG_RECV
	bool "L2CAP Receive segment direct API [EXPERIMENTAL]"
	select EXPERIMENTAL
	help

	  Enable API for direct receiving of L2CAP SDU segments, bypassing the
	  Host's fixed-function SDU re-assembler, RX SDU buffer management and
	  credit issuer.

	  This API enforces conformance with L2CAP TS, but is otherwise as
	  flexible and semantically simple as possible.

endmenu
