# Kconfig.cc2520 - TI CC2520 configuration options
#
#
# Copyright (c) 2017 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig IEEE802154_CC2520
	bool "TI CC2520 Driver support"
	depends on NETWORKING

if IEEE802154_CC2520

config IEEE802154_CC2520_DRV_NAME
	string "TI CC2520 Driver's name"
	default "cc2520"
	help
	  This option sets the driver name

config IEEE802154_CC2520_GPIO_SPI_CS
	bool "Manage SPI CS through a GPIO pin"
	help
	This option is useful if one needs to manage SPI CS through a GPIO
	pin to by-pass the SPI controller's CS logic.

config IEEE802154_CC2520_RX_STACK_SIZE
	int "Driver's internal RX thread stack size"
	default 800
	help
	  This option sets the driver's stack size for its internal RX thread.
	  The default value should be sufficient, but in case it proves to be
	  a too little one, this option makes it easy to play with the size.

config IEEE802154_CC2520_INIT_PRIO
	int "CC2520 initialization priority"
	default 80
	help
	  Set the initialization priority number. Do not mess with it unless
	  you know what you are doing. Beware cc2520 requires gpio and spi to
	  be ready first (and sometime gpio should be the very first as spi
	  might need it too). And of course it has to start before the net stack.

config IEEE802154_CC2520_RANDOM_MAC
	bool "Random MAC address"
	default y
	help
	  Generate a random MAC address dynamically.

if ! IEEE802154_CC2520_RANDOM_MAC

config IEEE802154_CC2520_MAC4
	hex "MAC Address Byte 4"
	default 0
	range 0 0xff
	help
	  This is the byte 4 of the MAC address.

config IEEE802154_CC2520_MAC5
	hex "MAC Address Byte 5"
	default 0
	range 0 0xff
	help
	  This is the byte 5 of the MAC address.

config IEEE802154_CC2520_MAC6
	hex "MAC Address Byte 6"
	default 0
	range 0 0xff
	help
	  This is the byte 6 of the MAC address.

config IEEE802154_CC2520_MAC7
	hex "MAC Address Byte 7"
	default 0
	range 0 0xff
	help
	  This is the byte 7 of the MAC address.

endif # IEEE802154_CC2520_RANDOM_MAC

config IEEE802154_CC2520_CRYPTO
	bool "Enable hardware crypto helper on cc2520"
	depends on NET_L2_IEEE802154_SECURITY
	help
	  This option will expose the hardware AES encryption from CC2520.
	  Such feature should not be used for anything but 802.15.4 security.
	  The crypto device exposed will only support synchronous CCM operation.

config IEEE802154_CC2520_CRYPTO_DRV_NAME
	string "TI CC2520 Crypto Driver's name"
	default "cc2520_crypto"
	depends on IEEE802154_CC2520_CRYPTO
	help
	  This option sets the driver name for the crypto part found on CC2520.

config IEEE802154_CC2520_CRYPTO_INIT_PRIO
	int "TI CC2520 crypto device initialization priority"
	default 81
	depends on IEEE802154_CC2520_CRYPTO
	help
	  Set the initialization priority number. Do not mess with it unless
	  you know what you are doing. It should be initialized after CC2520
	  as it shares the same runtime context.

endif # IEEE802154_CC2520
