#define UKNETDEV_NETIF_NAME0 'e'
#define UKNETDEV_NETIF_NAME1 'n'
+struct lwip_netdev_data {
+ uint32_t features;
+};
+
/*
* Global headroom settings for buffer allocations used on receive
* and transmit. We are taking the maximum of all uknetdev devices as
}
#endif /* CONFIG_LWIP_NOTHREADS */
+#if CONFIG_UK_NETDEV_SCRATCH_SIZE < CONFIG_LWIP_UKNETDEV_SCRATCH
+/**
+ * CONFIG_UK_NETDEV_SCRATCH_SIZE is configured as the max of all scratch pad
+ * requirements by the Makefile.uk macro uknetdev_scratch_mem. This value
+ * should atleast be greater CONFIG_LWIP_UKNETDEV_SCRATCH
+ */
+#error "Insufficient Scratch memory"
+#endif
+
+/**
+ * Make sure the CONFIG_LWIP_UKNETDEV_SCRATCH is still sufficient to
+ * store lwip_data.
+ */
+UK_CTASSERT(sizeof(struct lwip_netdev_data) <= CONFIG_LWIP_UKNETDEV_SCRATCH);
+
err_t uknetdev_init(struct netif *nf)
{
struct uk_alloc *a = NULL;
struct uk_netdev_rxqueue_conf rxq_conf;
struct uk_netdev_txqueue_conf txq_conf;
struct uk_netdev_info info;
+ struct lwip_netdev_data *lwip_data;
const struct uk_hwaddr *hwaddr;
unsigned int i;
int ret;
dev = netif_to_uknetdev(nf);
UK_ASSERT(dev);
+ lwip_data = (struct lwip_netdev_data *)dev->scratch_pad;
+
LWIP_ASSERT("uknetdev needs an input callback (netif_input or tcpip_input)",
nf->input != NULL);
uk_netdev_info_get(dev, &info);
if (!info.max_rx_queues || !info.max_tx_queues)
return ERR_IF;
+ lwip_data->features = info.features;
/*
* Update our global (rx|tx)_headroom setting that we use for