Separate LWIP core and Ethernet interface initialisation

Will allow LWIP to be initialised for PPP use.
pull/4119/head
Kevin Bracey 2017-02-16 12:40:02 +02:00 committed by Hasnain Virk
parent ae7fd61d65
commit be00c1720b
2 changed files with 22 additions and 17 deletions

View File

@ -57,12 +57,8 @@ static struct lwip_socket {
void *data;
} lwip_arena[MEMP_NUM_NETCONN];
static bool lwip_connected = false;
static void mbed_lwip_arena_init(void)
{
memset(lwip_arena, 0, sizeof lwip_arena);
}
static bool lwip_inited = false;
static bool lwip_connected = true;
static struct lwip_socket *mbed_lwip_arena_alloc(void)
{
@ -404,15 +400,14 @@ char *mbed_lwip_get_gateway(char *buf, nsapi_size_t buflen)
#endif
}
nsapi_error_t mbed_lwip_init(emac_interface_t *emac)
void mbed_lwip_init()
{
// Check if we've already brought up lwip
if (!mbed_lwip_get_mac_address()) {
// Seed lwip random
if (!lwip_inited) {
// Seed lwip random
lwip_seed_random();
// Set up network
// Initialise TCP sequence number
uint32_t tcp_isn_secret[4];
for (int i = 0; i < 4; i++) {
@ -421,12 +416,22 @@ nsapi_error_t mbed_lwip_init(emac_interface_t *emac)
lwip_init_tcp_isn(0, (u8_t *) &tcp_isn_secret);
sys_sem_new(&lwip_tcpip_inited, 0);
sys_sem_new(&lwip_netif_linked, 0);
sys_sem_new(&lwip_netif_has_addr, 0);
tcpip_init(mbed_lwip_tcpip_init_irq, NULL);
sys_arch_sem_wait(&lwip_tcpip_inited, 0);
lwip_inited = true;
}
}
nsapi_error_t mbed_lwip_emac_init(emac_interface_t *emac)
{
// Check if we've already set up netif
if (!mbed_lwip_get_mac_address()) {
// Set up network
sys_sem_new(&lwip_netif_linked, 0);
sys_sem_new(&lwip_netif_has_addr, 0);
memset(&lwip_netif, 0, sizeof lwip_netif);
if (!netif_add(&lwip_netif,
#if LWIP_IPV4
@ -457,13 +462,12 @@ nsapi_error_t mbed_lwip_bringup(bool dhcp, const char *ip, const char *netmask,
return NSAPI_ERROR_PARAMETER;
}
if(mbed_lwip_init(NULL) != NSAPI_ERROR_OK) {
mbed_lwip_init();
if (mbed_lwip_emac_init(NULL) != NSAPI_ERROR_OK) {
return NSAPI_ERROR_DEVICE_ERROR;
}
// Zero out socket set
mbed_lwip_arena_init();
#if LWIP_IPV6
netif_create_ip6_linklocal_address(&lwip_netif, 1/*from MAC*/);
#if LWIP_IPV6_MLD

View File

@ -25,7 +25,8 @@ extern "C" {
#endif
// Access to lwip through the nsapi
nsapi_error_t mbed_lwip_init(emac_interface_t *emac);
void mbed_lwip_init();
nsapi_error_t mbed_lwip_emac_init(emac_interface_t *emac);
nsapi_error_t mbed_lwip_bringup(bool dhcp, const char *ip, const char *netmask, const char *gw);
nsapi_error_t mbed_lwip_bringdown(void);