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

config GSM_MUX
	bool "[DEPRECATED] GSM 07.10 muxing protocol"
	select CRC
	select DEPRECATED
	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
