summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2015-10-15 23:10:59 +0800
committerBernard Xiong <[email protected]>2015-10-15 23:10:59 +0800
commit68095474915c95f9271151e2e8eece48bee05200 (patch)
treedcb04c569dc38b73cbc6d0e9dfcf28866628963e
parent066ec6dc917e83102ea6d5f8ac07bc4209ba536d (diff)
[lwIP] Add ETHIF_LINK_AUTOUP/PHYUP flag to ethernet interface
-rw-r--r--components/net/lwip-1.4.1/src/arch/sys_arch.c7
-rw-r--r--components/net/lwip-1.4.1/src/include/netif/ethernetif.h10
-rw-r--r--components/net/lwip-1.4.1/src/netif/ethernetif.c14
3 files changed, 19 insertions, 12 deletions
diff --git a/components/net/lwip-1.4.1/src/arch/sys_arch.c b/components/net/lwip-1.4.1/src/arch/sys_arch.c
index d3a69f9ac3..c0aed9d4f0 100644
--- a/components/net/lwip-1.4.1/src/arch/sys_arch.c
+++ b/components/net/lwip-1.4.1/src/arch/sys_arch.c
@@ -115,9 +115,10 @@ static void tcpip_init_done_callback(void *arg)
netif_set_up(ethif->netif);
}
-#if LWIP_NETIF_LINK_CALLBACK
- netif_set_link_up(ethif->netif);
-#endif
+ if (!(ethif->flags & ETHIF_LINK_PHYUP))
+ {
+ netif_set_link_up(ethif->netif);
+ }
/* enter critical */
rt_enter_critical();
diff --git a/components/net/lwip-1.4.1/src/include/netif/ethernetif.h b/components/net/lwip-1.4.1/src/include/netif/ethernetif.h
index 2019df7017..bdad32ec20 100644
--- a/components/net/lwip-1.4.1/src/include/netif/ethernetif.h
+++ b/components/net/lwip-1.4.1/src/include/netif/ethernetif.h
@@ -11,6 +11,10 @@
#define ETHERNET_MTU RT_LWIP_ETH_MTU
#endif
+/* eth flag with auto_linkup or phy_linkup */
+#define ETHIF_LINK_AUTOUP 0x0000
+#define ETHIF_LINK_PHYUP 0x0100
+
struct eth_device
{
/* inherit from rt_device */
@@ -20,9 +24,9 @@ struct eth_device
struct netif *netif;
struct rt_semaphore tx_ack;
- rt_uint8_t flags;
+ rt_uint16_t flags;
rt_uint8_t link_changed;
- rt_uint16_t link_status;
+ rt_uint8_t link_status;
/* eth device interface */
struct pbuf* (*eth_rx)(rt_device_t dev);
@@ -31,7 +35,7 @@ struct eth_device
rt_err_t eth_device_ready(struct eth_device* dev);
rt_err_t eth_device_init(struct eth_device * dev, char *name);
-rt_err_t eth_device_init_with_flag(struct eth_device *dev, char *name, rt_uint8_t flag);
+rt_err_t eth_device_init_with_flag(struct eth_device *dev, char *name, rt_uint16_t flag);
rt_err_t eth_device_linkchange(struct eth_device* dev, rt_bool_t up);
int eth_system_device_init(void);
diff --git a/components/net/lwip-1.4.1/src/netif/ethernetif.c b/components/net/lwip-1.4.1/src/netif/ethernetif.c
index 2e0ef2f8bd..f0b2f814dc 100644
--- a/components/net/lwip-1.4.1/src/netif/ethernetif.c
+++ b/components/net/lwip-1.4.1/src/netif/ethernetif.c
@@ -154,7 +154,7 @@ static err_t eth_netif_device_init(struct netif *netif)
}
/* copy device flags to netif flags */
- netif->flags = ethif->flags;
+ netif->flags = (ethif->flags & 0xff);
/* set default netif */
if (netif_default == RT_NULL)
@@ -173,9 +173,11 @@ static err_t eth_netif_device_init(struct netif *netif)
netif_set_up(ethif->netif);
}
-#ifdef LWIP_NETIF_LINK_CALLBACK
- netif_set_link_up(ethif->netif);
-#endif
+ if (!(ethif->flags & ETHIF_LINK_PHYUP))
+ {
+ /* set link_up for this netif */
+ netif_set_link_up(ethif->netif);
+ }
return ERR_OK;
}
@@ -184,7 +186,7 @@ static err_t eth_netif_device_init(struct netif *netif)
}
/* Keep old drivers compatible in RT-Thread */
-rt_err_t eth_device_init_with_flag(struct eth_device *dev, char *name, rt_uint8_t flags)
+rt_err_t eth_device_init_with_flag(struct eth_device *dev, char *name, rt_uint16_t flags)
{
struct netif* netif;
@@ -246,7 +248,7 @@ rt_err_t eth_device_init_with_flag(struct eth_device *dev, char *name, rt_uint8_
rt_err_t eth_device_init(struct eth_device * dev, char *name)
{
- rt_uint8_t flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
+ rt_uint16_t flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
#if LWIP_DHCP
/* DHCP support */