1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

sys/auto_init: allow delayed initialisation of gnrc_netif

Co-authored-by: Martine S. Lenders <m.lenders@fu-berlin.de>
This commit is contained in:
Benjamin Valentin 2020-03-04 15:50:25 +01:00
parent 698f313f6f
commit d765098d72
27 changed files with 172 additions and 132 deletions

View File

@ -30,6 +30,10 @@ ifneq (,$(filter mpu_stack_guard,$(USEMODULE)))
FEATURES_REQUIRED += cortexm_mpu FEATURES_REQUIRED += cortexm_mpu
endif endif
ifneq (,$(filter auto_init_gnrc_netif,$(USEMODULE)))
USEMODULE += gnrc_netif_init_devs
endif
ifneq (,$(filter csma_sender,$(USEMODULE))) ifneq (,$(filter csma_sender,$(USEMODULE)))
USEMODULE += random USEMODULE += random
USEMODULE += xtimer USEMODULE += xtimer

View File

@ -210,7 +210,6 @@ PSEUDOMODULES += crypto_aes_unroll
PSEUDOMODULES += auto_init_% PSEUDOMODULES += auto_init_%
NO_PSEUDOMODULES += auto_init_can NO_PSEUDOMODULES += auto_init_can
NO_PSEUDOMODULES += auto_init_loramac NO_PSEUDOMODULES += auto_init_loramac
NO_PSEUDOMODULES += auto_init_gnrc_netif
NO_PSEUDOMODULES += auto_init_saul NO_PSEUDOMODULES += auto_init_saul
NO_PSEUDOMODULES += auto_init_security NO_PSEUDOMODULES += auto_init_security
NO_PSEUDOMODULES += auto_init_storage NO_PSEUDOMODULES += auto_init_storage

View File

@ -1,4 +1,4 @@
ifneq (,$(filter auto_init_gnrc_netif,$(USEMODULE))) ifneq (,$(filter gnrc_netif_init,$(USEMODULE)))
DIRS += netif DIRS += netif
endif endif

View File

@ -26,134 +26,6 @@
#include "kernel_defines.h" #include "kernel_defines.h"
#include "log.h" #include "log.h"
/**
* @brief Initializes network devices
*/
static void _auto_init_gnrc_netif(void)
{
if (IS_USED(MODULE_STM32_ETH)) {
extern void auto_init_stm32_eth(void);
auto_init_stm32_eth();
}
if (IS_USED(MODULE_AUTO_INIT_AT86RF2XX)) {
extern void auto_init_at86rf2xx(void);
auto_init_at86rf2xx();
}
if (IS_USED(MODULE_MRF24J40)) {
extern void auto_init_mrf24j40(void);
auto_init_mrf24j40();
}
if (IS_USED(MODULE_CC110X)) {
extern void auto_init_cc110x(void);
auto_init_cc110x();
}
if (IS_USED(MODULE_CC2420)) {
extern void auto_init_cc2420(void);
auto_init_cc2420();
}
if (IS_USED(MODULE_ENCX24J600)) {
extern void auto_init_encx24j600(void);
auto_init_encx24j600();
}
if (IS_USED(MODULE_ENC28J60)) {
extern void auto_init_enc28j60(void);
auto_init_enc28j60();
}
if (IS_USED(MODULE_ESP_ETH)) {
extern void auto_init_esp_eth(void);
auto_init_esp_eth();
}
/* don't change the order of auto_init_esp_now and auto_init_esp_wifi */
if (IS_USED(MODULE_ESP_NOW)) {
extern void auto_init_esp_now(void);
auto_init_esp_now();
}
/* don't change the order of auto_init_esp_now and auto_init_esp_wifi */
if (IS_USED(MODULE_ESP_WIFI)) {
extern void auto_init_esp_wifi(void);
auto_init_esp_wifi();
}
if (IS_USED(MODULE_ETHOS)) {
extern void auto_init_ethos(void);
auto_init_ethos();
}
if (IS_USED(MODULE_DOSE)) {
extern void auto_init_dose(void);
auto_init_dose();
}
if (IS_USED(MODULE_SLIPDEV)) {
extern void auto_init_slipdev(void);
auto_init_slipdev();
}
if (IS_USED(MODULE_CC2538_RF)) {
extern void auto_init_cc2538_rf(void);
auto_init_cc2538_rf();
}
if (IS_USED(MODULE_XBEE)) {
extern void auto_init_xbee(void);
auto_init_xbee();
}
if (IS_USED(MODULE_KW2XRF)) {
extern void auto_init_kw2xrf(void);
auto_init_kw2xrf();
}
if (IS_USED(MODULE_USBUS_CDC_ECM)) {
extern void auto_init_netdev_cdcecm(void);
auto_init_netdev_cdcecm();
}
if (IS_USED(MODULE_NETDEV_TAP)) {
extern void auto_init_netdev_tap(void);
auto_init_netdev_tap();
}
if (IS_USED(MODULE_SOCKET_ZEP)) {
extern void auto_init_socket_zep(void);
auto_init_socket_zep();
}
if (IS_USED(MODULE_NORDIC_SOFTDEVICE_BLE)) {
extern void gnrc_nordic_ble_6lowpan_init(void);
gnrc_nordic_ble_6lowpan_init();
}
if (IS_USED(MODULE_NRFMIN)) {
extern void gnrc_nrfmin_init(void);
gnrc_nrfmin_init();
}
if (IS_USED(MODULE_W5100)) {
extern void auto_init_w5100(void);
auto_init_w5100();
}
if (IS_USED(MODULE_SX127X) && !IS_USED(MODULE_SEMTECH_LORAMAC)) {
extern void auto_init_sx127x(void);
auto_init_sx127x();
}
if (IS_USED(MODULE_NRF802154)) {
extern void auto_init_nrf802154(void);
auto_init_nrf802154();
}
}
/** /**
* @brief Initializes sensors and actuators for SAUL * @brief Initializes sensors and actuators for SAUL
*/ */
@ -519,7 +391,8 @@ void auto_init(void)
/* initialize network devices */ /* initialize network devices */
if (IS_USED(MODULE_AUTO_INIT_GNRC_NETIF)) { if (IS_USED(MODULE_AUTO_INIT_GNRC_NETIF)) {
LOG_DEBUG("Auto init gnrc_netif.\n"); LOG_DEBUG("Auto init gnrc_netif.\n");
_auto_init_gnrc_netif(); extern void gnrc_netif_init_devs(void);
gnrc_netif_init_devs();
} }
if (IS_USED(MODULE_AUTO_INIT_GNRC_UHCPC)) { if (IS_USED(MODULE_AUTO_INIT_GNRC_UHCPC)) {

View File

@ -233,6 +233,16 @@ struct gnrc_netif_ops {
void (*msg_handler)(gnrc_netif_t *netif, msg_t *msg); void (*msg_handler)(gnrc_netif_t *netif, msg_t *msg);
}; };
/**
* @brief Initialize all available network interfaces.
* This function is called automatically if the auto_init_gnrc_netif
* module is used.
* If only the gnrc_netif_init module is used instead, you can call
* this function to manually set up the network interfaces at a later
* time.
*/
void gnrc_netif_init_devs(void);
/** /**
* @brief Creates a network interface * @brief Creates a network interface
* *

View File

@ -6,6 +6,9 @@ endif
ifneq (,$(filter gnrc_netif_ieee802154,$(USEMODULE))) ifneq (,$(filter gnrc_netif_ieee802154,$(USEMODULE)))
DIRS += ieee802154 DIRS += ieee802154
endif endif
ifneq (,$(filter gnrc_netif_init_devs,$(USEMODULE)))
DIRS += init_devs
endif
ifneq (,$(filter gnrc_netif_hdr,$(USEMODULE))) ifneq (,$(filter gnrc_netif_hdr,$(USEMODULE)))
DIRS += hdr DIRS += hdr
endif endif

View File

@ -1,3 +1,3 @@
MODULE = auto_init_gnrc_netif MODULE = gnrc_netif_init_devs
include $(RIOTBASE)/Makefile.base include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,151 @@
/**
* Auto initialization for network devices
*
* Copyright (C) 2020 Freie Universität Berlin
* 2020 Kaspar Schleiser <kaspar@schleiser.de>
* 2013 INRIA.
*
* 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.
*
* @ingroup sys_auto_init
* @{
* @file
* @brief initializes any used network interface that has a trivial init function
* @author Oliver Hahm <oliver.hahm@inria.fr>
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
* @author Kaspar Schleiser <kaspar@schleiser.de>
* @author Martine S. Lenders <m.lenders@fu-berlin.de>
* @}
*/
#include "kernel_defines.h"
/**
* @brief Initializes network devices
*/
void gnrc_netif_init_devs(void)
{
if (IS_USED(MODULE_STM32_ETH)) {
extern void auto_init_stm32_eth(void);
auto_init_stm32_eth();
}
if (IS_USED(MODULE_AUTO_INIT_AT86RF2XX)) {
extern void auto_init_at86rf2xx(void);
auto_init_at86rf2xx();
}
if (IS_USED(MODULE_MRF24J40)) {
extern void auto_init_mrf24j40(void);
auto_init_mrf24j40();
}
if (IS_USED(MODULE_CC110X)) {
extern void auto_init_cc110x(void);
auto_init_cc110x();
}
if (IS_USED(MODULE_CC2420)) {
extern void auto_init_cc2420(void);
auto_init_cc2420();
}
if (IS_USED(MODULE_ENCX24J600)) {
extern void auto_init_encx24j600(void);
auto_init_encx24j600();
}
if (IS_USED(MODULE_ENC28J60)) {
extern void auto_init_enc28j60(void);
auto_init_enc28j60();
}
if (IS_USED(MODULE_ESP_ETH)) {
extern void auto_init_esp_eth(void);
auto_init_esp_eth();
}
/* don't change the order of auto_init_esp_now and auto_init_esp_wifi */
if (IS_USED(MODULE_ESP_NOW)) {
extern void auto_init_esp_now(void);
auto_init_esp_now();
}
/* don't change the order of auto_init_esp_now and auto_init_esp_wifi */
if (IS_USED(MODULE_ESP_WIFI)) {
extern void auto_init_esp_wifi(void);
auto_init_esp_wifi();
}
if (IS_USED(MODULE_ETHOS)) {
extern void auto_init_ethos(void);
auto_init_ethos();
}
if (IS_USED(MODULE_DOSE)) {
extern void auto_init_dose(void);
auto_init_dose();
}
if (IS_USED(MODULE_SLIPDEV)) {
extern void auto_init_slipdev(void);
auto_init_slipdev();
}
if (IS_USED(MODULE_CC2538_RF)) {
extern void auto_init_cc2538_rf(void);
auto_init_cc2538_rf();
}
if (IS_USED(MODULE_XBEE)) {
extern void auto_init_xbee(void);
auto_init_xbee();
}
if (IS_USED(MODULE_KW2XRF)) {
extern void auto_init_kw2xrf(void);
auto_init_kw2xrf();
}
if (IS_USED(MODULE_USBUS_CDC_ECM)) {
extern void auto_init_netdev_cdcecm(void);
auto_init_netdev_cdcecm();
}
if (IS_USED(MODULE_NETDEV_TAP)) {
extern void auto_init_netdev_tap(void);
auto_init_netdev_tap();
}
if (IS_USED(MODULE_SOCKET_ZEP)) {
extern void auto_init_socket_zep(void);
auto_init_socket_zep();
}
if (IS_USED(MODULE_NORDIC_SOFTDEVICE_BLE)) {
extern void gnrc_nordic_ble_6lowpan_init(void);
gnrc_nordic_ble_6lowpan_init();
}
if (IS_USED(MODULE_NRFMIN)) {
extern void gnrc_nrfmin_init(void);
gnrc_nrfmin_init();
}
if (IS_USED(MODULE_W5100)) {
extern void auto_init_w5100(void);
auto_init_w5100();
}
if (IS_USED(MODULE_SX127X) && !IS_USED(MODULE_SEMTECH_LORAMAC)) {
extern void auto_init_sx127x(void);
auto_init_sx127x();
}
if (IS_USED(MODULE_NRF802154)) {
extern void auto_init_nrf802154(void);
auto_init_nrf802154();
}
}