# Sierra Wireless HL7800 modem driver options

# Copyright (c) 2020 Laird Connectivity
# SPDX-License-Identifier: Apache-2.0

menuconfig MODEM_HL7800
	bool "Enable Sierra Wireless HL7800 modem driver"
	select MODEM_RECEIVER
	select NET_OFFLOAD
	imply GPIO
	help
	  Choose this setting to enable
	  Sierra Wireless HL7800 LTE-M/NB-IoT modem driver.

if MODEM_HL7800

config MODEM_HL7800_FW_UPDATE
	bool "Enable firmware update"
	select FILE_SYSTEM
	help
	  Enable the ability to update the HL7800 via XMODEM
	  by providing an update file to the update API.

config MODEM_HL7800_RECV_BUF_CNT
	int "The number of allocated network buffers"
	default 30

config MODEM_HL7800_RECV_BUF_SIZE
	int "The size of the network buffers in bytes"
	default 128

config MODEM_HL7800_SET_APN_NAME_ON_STARTUP
	bool "Set APN name during driver init"
	help
	  If APN doesn't match MODEM_HL7800_APN_NAME on startup,
	  then it will be set.

if MODEM_HL7800_SET_APN_NAME_ON_STARTUP

config MODEM_HL7800_APN_NAME
	string "APN name for establishing network connection"
	help
	  This setting is used in the AT+CGDCONT command to set the APN name
	  for the PDP context.

endif # MODEM_HL7800_SET_APN_NAME_ON_STARTUP

choice MODEM_HL7800_RAT
	bool "Radio Access Technology Mode"
	default MODEM_HL7800_RAT_NO_CHANGE

config MODEM_HL7800_RAT_NO_CHANGE
	bool "Don't change the RAT"
	help
	  Leave the HL7800 RAT unchanged during modem init.

config MODEM_HL7800_RAT_M1
	bool "LTE-M1"
	help
	  Enable LTE Cat-M1 mode during modem init.

config MODEM_HL7800_RAT_NB1
	bool "NB-IoT"
	help
	  Enable LTE Cat-NB1 mode during modem init.

endchoice

menuconfig MODEM_HL7800_CONFIGURE_BANDS
	bool "Configure modem bands"
	default "y"
	help
	  Choose this setting to configure which LTE bands the
	  HL7800 modem should use.

if MODEM_HL7800_CONFIGURE_BANDS

config MODEM_HL7800_BAND_1
	bool "Enable Band 1  (2000MHz)"
	default "y"
	help
	  Enable Band 1 (2000MHz)

config MODEM_HL7800_BAND_2
	bool "Enable Band 2  (1900MHz)"
	default "y"
	help
	  Enable Band 2 (1900MHz)

config MODEM_HL7800_BAND_3
	bool "Enable Band 3  (1800MHz)"
	default "y"
	help
	  Enable Band 3 (1800MHz)

config MODEM_HL7800_BAND_4
	bool "Enable Band 4  (1700MHz)"
	default "y"
	help
	  Enable Band 4 (1700MHz)

config MODEM_HL7800_BAND_5
	bool "Enable Band 5  (850MHz)"
	default "y"
	help
	  Enable Band 5 (850MHz)

config MODEM_HL7800_BAND_8
	bool "Enable Band 8  (900MHz)"
	default "y"
	help
	  Enable Band 8 (900MHz)

config MODEM_HL7800_BAND_9
	bool "Enable Band 9  (1900MHz)"
	help
	  Enable Band 9 (1900MHz)

config MODEM_HL7800_BAND_10
	bool "Enable Band 10 (2100MHz)"
	help
	  Enable Band 10 (2100MHz)

config MODEM_HL7800_BAND_12
	bool "Enable Band 12 (700MHz)"
	default "y"
	help
	  Enable Band 12 (700MHz)

config MODEM_HL7800_BAND_13
	bool "Enable Band 13 (700MHz)"
	default "y"
	help
	  Enable Band 13 (700MHz)

config MODEM_HL7800_BAND_14
	bool "Enable Band 14 (700MHz)"
	help
	  Enable Band 14 (700MHz)

config MODEM_HL7800_BAND_17
	bool "Enable Band 17 (700MHz)"
	help
	  Enable Band 17 (700MHz)

config MODEM_HL7800_BAND_18
	bool "Enable Band 18 (800MHz)"
	help
	  Enable Band 18 (800MHz)

config MODEM_HL7800_BAND_19
	bool "Enable Band 19 (800MHz)"
	help
	  Enable Band 19 (800MHz)

config MODEM_HL7800_BAND_20
	bool "Enable Band 20 (800MHz)"
	default "y"
	help
	  Enable Band 20 (800MHz)

config MODEM_HL7800_BAND_25
	bool "Enable Band 25 (1900MHz)"
	help
	  Enable Band 25 (1900MHz)

config MODEM_HL7800_BAND_26
	bool "Enable Band 26 (800MHz)"
	help
	  Enable Band 26 (800MHz)

config MODEM_HL7800_BAND_27
	bool "Enable Band 27 (800MHz)"
	help
	  Enable Band 27 (800MHz)

config MODEM_HL7800_BAND_28
	bool "Enable Band 28 (700MHz)"
	default "y"
	help
	  Enable Band 28 (700MHz)

config MODEM_HL7800_BAND_66
	bool "Enable Band 66 (1800MHz)"
	help
	  Enable Band 66 (1800MHz)

endif # MODEM_HL7800_CONFIGURE_BAND

menuconfig MODEM_HL7800_LOW_POWER_MODE
	bool "Enable low power modes"
	help
	  Choose this setting to enable a low power mode for the HL7800 modem

if MODEM_HL7800_LOW_POWER_MODE

choice
	prompt "Low Power Mode"
	default MODEM_HL7800_EDRX

config MODEM_HL7800_EDRX
	bool "eDRX"
	help
	  Enable LTE eDRX

config MODEM_HL7800_PSM
	bool "PSM"
	help
	  Enable Power Save Mode (PSM)
endchoice

if MODEM_HL7800_EDRX

config MODEM_HL7800_EDRX_VALUE
	string "Requested eDRX timer"
	default "0101"
	help
	  Half a byte in a 4-bit format. The eDRX value refers to bit 4 to 1
	  of octet 3 of the Extended DRX parameters information element.
	  Default value is 81.92 seconds.

endif # MODEM_HL7800_EDRX

if MODEM_HL7800_PSM

config MODEM_HL7800_PSM_PERIODIC_TAU
	string "Requested extended periodic TAU timer"
	default "10000010"
	help
	  Requested extended periodic TAU (tracking area update) value (T3412)
	  to be allocated to the UE in E-UTRAN. One byte in an 8-bit format.
	  Default value is 1 minute.

config MODEM_HL7800_PSM_ACTIVE_TIME
	string "Requested active time"
	default "00001111"
	help
	  Requested Active Time value (T3324) to be allocated to the UE.
	  One byte in an 8-bit format. Default value is 30 seconds.

endif # MODEM_HL7800_PSM

endif # MODEM_HL7800_LOW_POWER_MODE

config MODEM_HL7800_RX_STACK_SIZE
	int "Size of the stack for the HL7800 modem driver RX thread"
	default 1536 if MODEM_HL7800_POLTE
	default 1280
	help
	  This stack is used by the HL7800 RX thread.

config MODEM_HL7800_RX_WORKQ_STACK_SIZE
	int "Size of the stack for the HL7800 modem driver work queue"
	default 2048
	help
	  This stack is used by the work queue to pass off net_pkt data
	  to the rest of the network stack, letting the rx thread continue
	  processing data.

config MODEM_HL7800_INIT_PRIORITY
	int "HL7800 driver init priority"
	default 80
	help
	  HL7800 device driver initialization priority.
	  Do not mess with it unless you know what you are doing.
	  Note that the priority needs to be lower than the net stack
	  so that it can start before the networking sub-system.

config MODEM_HL7800_GET_IP_ADDR_INFO_ATTEMPTS
	int "Number of attempts to get IP address info during init"
	default 4

choice
	prompt "Modem Boot Type"
	default MODEM_HL7800_BOOT_NORMAL

config MODEM_HL7800_BOOT_NORMAL
	bool "No Delay"

config MODEM_HL7800_BOOT_DELAY
	bool "Delay secondary initialization of driver and network attach"
	help
	  When true the application must call mdm_hl7800_reset.
	  This mode delays the validity of modem info.

config MODEM_HL7800_BOOT_IN_AIRPLANE_MODE
	bool "Enter airplane mode during init"
	help
	  mdm_hl7800_set_functionality must be used by app to exit
	  airplane mode.
	  If bands are reconfigured, then this setting is overridden
	  because modem is rebooted into full functionality mode.

endchoice

config MODEM_HL7800_GPS
	bool "Enable GPS command and handlers"

config MODEM_HL7800_USE_GLONASS
	bool "Use GLONASS in addition to GPS"
	depends on MODEM_HL7800_GPS

config MODEM_HL7800_POLTE
	bool "Enable PoLTE commands and handlers"

choice
	prompt "IP Address family"
	default MODEM_HL7800_ADDRESS_FAMILY_IPV4V6
	help
	  The address family for IP connections.

config MODEM_HL7800_ADDRESS_FAMILY_IPV4
	bool "IPv4"

config MODEM_HL7800_ADDRESS_FAMILY_IPV6
	bool "IPv6"

config MODEM_HL7800_ADDRESS_FAMILY_IPV4V6
	bool "IPv4v6"

endchoice

endif # MODEM_HL7800
