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

config GSM_MUX
	bool "GSM 07.10 muxing protocol"
	help
	  Enable GSM 07.10 muxing protocol defined in
	  https://www.etsi.org/deliver/etsi_ts/101300_101399/101369/07.01.00_60/ts_101369v070100p.pdf
	  The muxing protocol allows GSM modem to share the same UART for both
	  the PPP data and AT commands.

config GSM_MUX_MAX
	int "Max number of GSM mux instances"
	default 1
	depends on GSM_MUX
	help
	  Usually we only need one GSM mux instance. You need to increase
	  this if you have more than one GSM modems.

config GSM_MUX_DLCI_MAX
	int "Max number of GSM data link connection (DLC) instances"
	default 3
	range 1 64
	depends on GSM_MUX
	help
	  For our purposes we will manage with 3 DLCI (control, ppp, and AT
	  commands) so making it the default value. If GSM modem also provides
	  GNSS (location) services and you want to create a DLCI for it, then
	  you need to increase this to 4.

config GSM_MUX_DLCI_AT
	int "DLCI id of the AT commands channel"
	default 2 if MODEM_GSM_SIMCOM
	default 1
	range 1 63
	depends on GSM_MUX
	help
	  Channel number for the AT commands to the modem.

config GSM_MUX_DLCI_PPP
	int "DLCI id of the PPP connection channel"
	default 1 if MODEM_GSM_SIMCOM
	default 2
	range 1 63
	depends on GSM_MUX
	help
	  Channel number for the PPP connection to the modem.
	  SIMCOM modem has 16kb buffer for DLCI 1 so the manual recommends
	  it for PPP traffic. For other DLCIs in that modem, the buffer size
	  is only 1kb.

config GSM_MUX_PENDING_CMD_MAX
	int "Max number of pending GSM mux commands"
	default 2
	range 1 8
	depends on GSM_MUX
	help
	  How many pending GSM mux commands can exists.

config GSM_MUX_MRU_DEFAULT_LEN
	int "Default size of received user data (MRU)"
	default 127 if MODEM_GSM_SIMCOM
	default 127 if MODEM_GSM_QUECTEL
	default 31
	range 1 1509
	depends on GSM_MUX
	help
	  Default MRU (Maximum Receive Unit) data size. The default
	  value for Basic mode is 31 bytes. The 1509 limit comes from
	  ublox-sara modem and it means we can transfer full Ethernet sized
	  frame and muxing headers.

config GSM_MUX_MRU_MAX_LEN
	int "Max size of received user data (MRU)"
	default 255 if MODEM_GSM_SIMCOM
	default 128
	range 1 1509
	depends on GSM_MUX
	help
	  Max MRU (Maximum Receive Unit) data size. The default max
	  value for Basic mode is 128 bytes.

config GSM_MUX_INITIATOR
	bool "Are we the initiator of the connection"
	default y
	depends on GSM_MUX
	help
	  Default value when deciding whether we are the initiator of the
	  connection attempt. Normally this should be enabled.

config GSM_MUX_T1_TIMEOUT
	int "T1 timeout in ms"
	default 0
	range 0 5000
	depends on GSM_MUX
	help
	  T1 timeout is initial command timeout when establishing
	  the connection. The value is in milliseconds. Zero value
	  means that default (100 ms) specified in the code is used.

if GSM_MUX

module = GSM_MUX
module-dep = LOG
module-str = Log level for GSM 07.10 Mux driver
module-help = Sets log level for GSM 07.10 Mux Device Driver.
source "subsys/net/Kconfig.template.log_config.net"

config GSM_MUX_VERBOSE_DEBUG
	bool "Print hexdump of sent and received packets"
	depends on GSM_MUX_LOG_LEVEL_DBG
	help
	  As there might be lot of debug output printed, only enable
	  this if really needed.

endif
