From fb24f6d26e302407add640ef09370c20367d0244 Mon Sep 17 00:00:00 2001
From: Hauke Petersen <hauke.petersen@fu-berlin.de>
Date: Fri, 5 Aug 2016 14:44:38 +0200
Subject: [PATCH] sys: added auto-init code for W5100 devices

---
 sys/auto_init/auto_init.c             |  5 ++
 sys/auto_init/netif/auto_init_w5100.c | 74 +++++++++++++++++++++++++++
 2 files changed, 79 insertions(+)
 create mode 100644 sys/auto_init/netif/auto_init_w5100.c

diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c
index 2597f45aa3..9b37ffd48c 100644
--- a/sys/auto_init/auto_init.c
+++ b/sys/auto_init/auto_init.c
@@ -229,6 +229,11 @@ void auto_init(void)
     gnrc_nordic_ble_6lowpan_init();
 #endif
 
+#ifdef MODULE_W5100
+    extern void auto_init_w5100(void);
+    auto_init_w5100();
+#endif
+
 #endif /* MODULE_AUTO_INIT_GNRC_NETIF */
 
 #ifdef MODULE_GNRC_IPV6_NETIF
diff --git a/sys/auto_init/netif/auto_init_w5100.c b/sys/auto_init/netif/auto_init_w5100.c
new file mode 100644
index 0000000000..bff96f78b5
--- /dev/null
+++ b/sys/auto_init/netif/auto_init_w5100.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2016 Freie Universität Berlin
+ *
+ * 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     auto_init_gnrc_netif
+ * @{
+ *
+ * @file
+ * @brief       Auto initialization for W5100 Ethernet devices
+ *
+ * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
+ */
+
+#ifdef MODULE_W5100
+
+#include "w5100.h"
+#include "w5100_params.h"
+#include "net/gnrc/netdev2.h"
+#include "net/gnrc/netdev2/eth.h"
+
+#define ENABLE_DEBUG    (0)
+#include "debug.h"
+
+/**
+ * @brief   Define stack parameters for the MAC layer thread
+ * @{
+ */
+#define MAC_STACKSIZE   (THREAD_STACKSIZE_DEFAULT)
+#define MAC_PRIO        (THREAD_PRIORITY_MAIN - 4)
+/*** @} */
+
+/**
+ * @brief   Find out how many of these devices we need to care for
+ */
+#define W5100_NUM    (sizeof(w5100_params) / sizeof(w5100_params[0]))
+
+/**
+ * @brief   Allocate memory for the device descriptors
+ * @{
+ */
+static w5100_t dev[W5100_NUM];
+static gnrc_netdev2_t gnrc_adpt[W5100_NUM];
+/** @} */
+
+/**
+ * @brief   Stacks for the MAC layer threads
+ */
+static char stack[MAC_STACKSIZE][W5100_NUM];
+
+
+void auto_init_w5100(void)
+{
+    for (int i = 0; i < W5100_NUM; i++) {
+        DEBUG("auto_init_w5100(): initializing device [%i]...\n", i);
+        /* setup netdev2 device */
+        w5100_setup(&dev[i], &w5100_params[i]);
+        /* initialize netdev2 <-> gnrc adapter state */
+        gnrc_netdev2_eth_init(&gnrc_adpt[i], (netdev2_t *)&dev[i]);
+        /* start gnrc netdev2 thread */
+        gnrc_netdev2_init(stack[i], MAC_STACKSIZE, MAC_PRIO,
+                          "gnrc_w5100", &gnrc_adpt[i]);
+    }
+}
+
+#else
+typedef int dont_be_pedantic;
+#endif /* MODULE_W5100 */
+/** @} */
-- 
GitLab