1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/drivers/netdev/Kconfig
Marian Buschsieweke 276ad5716a
sys/net/gnrc/netif: allow checking if a netdev is legacy or new API
A if `netdev_driver_t::confirm_send()` is provided, it provides the
new netdev API. However, detecting the API at runtime and handling
both API styles comes at a cost. This can be optimized in case only
new or only old style netdevs are in use.

To do so, this adds the pseudo modules `netdev_legacy_api` and
`netdev_new_api`. As right now no netdev actually implements the new
API, all netdevs pull in `netdev_legacy_api`. If `netdev_legacy_api` is
in used but `netdev_new_api` is not, we can safely assume at compile
time that only legacy netdevs are in use. Similar, if only
`netdev_new_api` is used, only support for the new API is needed. Only
when both are in use, run time checks are needed.

This provides two helper function to check for a netif if the
corresponding netdev implements the old or the new API. (With one
being the inverse of the other.) They are suitable for constant folding
when only new or only legacy devices are in use. Consequently, dead
branches should be eliminated by the optimizer.
2022-08-17 12:56:07 +02:00

114 lines
3.2 KiB
Plaintext

# Copyright (c) 2022 Otto-von-Guericke-Universität Magdeburg
# 2022 HAW Hamburg
#
# This file is subject to the terms and conditions of the GNU Lesser
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
if TEST_KCONFIG
config MODULE_NETDEV_DEFAULT
bool "Enable default network devices on the platform"
help
Say y to enable the drivers for the default network devices present on
your platform.
config MODULE_NETDEV
bool
prompt "Use netdev interface for networking devices" if HAVE_NON_NETDEV_INTERFACE
select MODULE_EUI_PROVIDER
help
Network device driver API. Netdev is a generic low-level network
interface that provides a uniform API for network stacks to interact
with network device drivers.
config MODULE_NETDEV_ETH
bool
select MODULE_NETDEV
select MODULE_NETDEV_REGISTER
help
Common code for netdev ethernet drivers.
if MODULE_NETDEV
config NETDEV_REGISTER_SIGNAL
bool "Signal when a network device is registered"
menu "IEEE 802.15.4 Device Drivers"
visible if MODULE_NETDEV_IEEE802154
config MODULE_NETDEV_IEEE802154_RX_TIMESTAMP
bool "Timestamp received frames"
endmenu # IEEE 802.15.4 Device Drivers
config MODULE_NETDEV_IEEE802154
bool
select MODULE_NETDEV_REGISTER
select MODULE_IEEE802154
select MODULE_RANDOM
help
Common code for netdev IEEE 802.15.4 drivers.
config MODULE_NETDEV_IEEE802154_OQPSK
bool
help
Support for OQPSK modulation in netdev IEEE 802.15.4.
config MODULE_NETDEV_IEEE802154_MR_FSK
bool
help
Support for MR-FSK modulation in netdev IEEE 802.15.4.
config MODULE_NETDEV_IEEE802154_MR_OFDM
bool
help
Support for MR-OFDM modulation in netdev IEEE 802.15.4.
config MODULE_NETDEV_IEEE802154_MR_OQPSK
bool
help
Support for MR-OQPSK modulation in netdev IEEE 802.15.4.
config MODULE_NETDEV_IEEE802154_MULTIMODE
bool
help
Allow for multiple physical layer modes.
config MODULE_NETDEV_REGISTER
bool
help
Network device registration.
endif # MODULE_NETDEV
# This does not depend on MODULE_NETDEV, as it is merely a flag to say if a
# given network driver is used via the netdev API, it provides the new netdev
# API. However, the driver may also provide a API other than netdev that might
# be used directly.
config MODULE_NETDEV_NEW_API
bool
help
Support for new API (non-blocking send). With this, netdev
drivers implementing `netdev_driver_t::confirm_send()` can be used.
# Comment above MODULE_NETDEV_NEW_API also applies here.
config MODULE_NETDEV_LEGACY_API
bool
help
Support for legacy netdev API (blocking send). With this, netdev drivers
**NOT** implementing `netdev_driver_t::confirm_send()` can be used.
endif # TEST_KCONFIG
config HAVE_NON_NETDEV_INTERFACE
bool
help
Indicates that a non-netdev interface is exposed by selected drivers.
config HAVE_IEEE802154_RADIO_HAL_INTERFACE
bool
select HAVE_NON_NETDEV_INTERFACE
help
Indicates that a device driver implements the IEEE 802.15.4 radio HAL interface.