From 1afe72a5e556f6bb0598e37f8eab80a72c59d718 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Thu, 24 Sep 2020 18:02:47 +0200 Subject: [PATCH] drivers/enc28j60: register with netdev --- drivers/enc28j60/Makefile.dep | 3 ++- drivers/enc28j60/enc28j60.c | 16 ++++++++-------- drivers/include/enc28j60.h | 4 +++- drivers/include/net/netdev.h | 1 + pkg/lwip/contrib/lwip.c | 2 +- .../gnrc/netif/init_devs/auto_init_enc28j60.c | 2 +- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/enc28j60/Makefile.dep b/drivers/enc28j60/Makefile.dep index 320d45f87a..8f58cfca72 100644 --- a/drivers/enc28j60/Makefile.dep +++ b/drivers/enc28j60/Makefile.dep @@ -1,6 +1,7 @@ FEATURES_REQUIRED += periph_gpio FEATURES_REQUIRED += periph_gpio_irq FEATURES_REQUIRED += periph_spi + +USEMODULE += eui_provider USEMODULE += netdev_eth USEMODULE += xtimer -USEMODULE += luid diff --git a/drivers/enc28j60/enc28j60.c b/drivers/enc28j60/enc28j60.c index fe88171e5c..b66229dd77 100644 --- a/drivers/enc28j60/enc28j60.c +++ b/drivers/enc28j60/enc28j60.c @@ -21,12 +21,11 @@ #include #include -#include "luid.h" #include "mutex.h" #include "xtimer.h" #include "assert.h" #include "net/ethernet.h" -#include "net/eui48.h" +#include "net/eui_provider.h" #include "net/netdev/eth.h" #include "enc28j60.h" @@ -424,12 +423,11 @@ static int nd_init(netdev_t *netdev) cmd_wcr(dev, REG_B2_MABBIPG, 2, MABBIPG_FD); /* set non-back-to-back inter packet gap -> 0x12 is default */ cmd_wcr(dev, REG_B2_MAIPGL, 2, MAIPGL_FD); + /* set default MAC address */ - uint8_t macbuf[ETHERNET_ADDR_LEN]; - luid_get(macbuf, ETHERNET_ADDR_LEN); - eui48_set_local((eui48_t*)macbuf); /* locally administered address */ - eui48_clear_group((eui48_t*)macbuf); /* unicast address */ - mac_set(dev, macbuf); + eui48_t addr; + netdev_eui48_get(netdev, &addr); + mac_set(dev, addr.uint8); /* PHY configuration */ cmd_w_phy(dev, REG_PHY_PHCON1, PHCON1_PDPXMD); @@ -541,10 +539,12 @@ static const netdev_driver_t netdev_driver_enc28j60 = { .set = nd_set, }; -void enc28j60_setup(enc28j60_t *dev, const enc28j60_params_t *params) +void enc28j60_setup(enc28j60_t *dev, const enc28j60_params_t *params, uint8_t index) { dev->netdev.driver = &netdev_driver_enc28j60; dev->p = *params; mutex_init(&dev->lock); dev->tx_time = 0; + + netdev_register(&dev->netdev, NETDEV_ENC28J60, index); } diff --git a/drivers/include/enc28j60.h b/drivers/include/enc28j60.h index 4d3263ec1b..e0a5f1ab5f 100644 --- a/drivers/include/enc28j60.h +++ b/drivers/include/enc28j60.h @@ -57,8 +57,10 @@ typedef struct { * * @param[in] dev device descriptor * @param[in] params peripheral configuration to use + * @param[in] index Index of @p params in a global parameter struct array. + * If initialized manually, pass a unique identifier instead. */ -void enc28j60_setup(enc28j60_t *dev, const enc28j60_params_t *params); +void enc28j60_setup(enc28j60_t *dev, const enc28j60_params_t *params, uint8_t index); #ifdef __cplusplus } diff --git a/drivers/include/net/netdev.h b/drivers/include/net/netdev.h index 8c46750564..32cb68faa4 100644 --- a/drivers/include/net/netdev.h +++ b/drivers/include/net/netdev.h @@ -282,6 +282,7 @@ typedef enum { NETDEV_AT86RF2XX, NETDEV_CC2538, NETDEV_DOSE, + NETDEV_ENC28J60, NETDEV_MRF24J40, NETDEV_NRF802154, /* add more if needed */ diff --git a/pkg/lwip/contrib/lwip.c b/pkg/lwip/contrib/lwip.c index cdd17705be..b53080e1ce 100644 --- a/pkg/lwip/contrib/lwip.c +++ b/pkg/lwip/contrib/lwip.c @@ -218,7 +218,7 @@ void lwip_bootstrap(void) } #elif defined(MODULE_ENC28J60) for (unsigned i = 0; i < LWIP_NETIF_NUMOF; i++) { - enc28j60_setup(&enc28j60_devs[i], &enc28j60_params[i]); + enc28j60_setup(&enc28j60_devs[i], &enc28j60_params[i], i); if (_netif_add(&netif[0], &enc28j60_devs[i], lwip_netdev_init, tcpip_input) == NULL) { DEBUG("Could not add enc28j60 device\n"); diff --git a/sys/net/gnrc/netif/init_devs/auto_init_enc28j60.c b/sys/net/gnrc/netif/init_devs/auto_init_enc28j60.c index 27b9b14b6c..f2b66905d5 100644 --- a/sys/net/gnrc/netif/init_devs/auto_init_enc28j60.c +++ b/sys/net/gnrc/netif/init_devs/auto_init_enc28j60.c @@ -60,7 +60,7 @@ void auto_init_enc28j60(void) LOG_DEBUG("[auto_init_netif] initializing enc28j60 #%u\n", i); /* setup netdev device */ - enc28j60_setup(&dev[i], &enc28j60_params[i]); + enc28j60_setup(&dev[i], &enc28j60_params[i], i); gnrc_netif_ethernet_create(&_netif[i], stack[i], ENC28J60_MAC_STACKSIZE, ENC28J60_MAC_PRIO, "enc28j60", (netdev_t *)&dev[i]);