# 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 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 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 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_RESCHED_MS
	int
	default 1000
	help
	  Delay between retries for sending L2CAP segment. Necessary because the
	  stack might not be able to allocate enough conn contexts and might not
	  have enough credits, leading to a state where an SDU is stuck
	  mid-transfer and never resumes.

	  Note that this should seldom happen, this is just to work around a few
	  edge cases.

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
