rem: }
add: } while(!__bba_getlink_state_async());
context: err_t bba_init(struct netif *dev){	err_t ret;	struct timespec tb;	struct bba_priv *priv;	LWIP_DEBUGF(NETIF_DEBUG, ("bba_init()\n"));	priv = mem_malloc(sizeof(struct bba_priv));	if(!priv) {		LWIP_DEBUGF(NETIF_DEBUG, ("bba_init: out of memory for bba_priv\n"));		return ERR_MEM;	}	dev->name[0] = IFNAME0;	dev->name[1] = IFNAME1;	dev->output = bba_start_tx;	dev->linkoutput = __bba_link_tx;	dev->state = priv;	dev->mtu = 1536;	dev->flags = NETIF_FLAG_BROADCAST;	dev->hwaddr_len = 6;	priv->ethaddr = (struct eth_addr*)&(dev->hwaddr[0]);	priv->state = ERR_OK;		gc_netif = dev;	LWP_InitQueue(&wait_exi_queue);	LWP_InitQueue(&wait_tx_queue);		_siReg[15] = (_siReg[15]&~0x0001);		__bba_exi_wait();	ret = bba_probe(dev);	if(ret!=ERR_OK) {		EXI_Unlock(EXI_CHANNEL_0);		return ret;	}	LWIP_DEBUGF(NETIF_DEBUG, ("bba_init(call EXI_RegisterEXICallback())\n"));	EXI_RegisterEXICallback(EXI_CHANNEL_2,bba_event_handler);	EXI_Unlock(EXI_CHANNEL_0);	while(!__bba_getlink_state_async()) {		udelay(1000000);		LWIP_DEBUGF(NETIF_DEBUG, ("bba_init(wait link state)\n"));	}	etharp_init();	tb.tv_sec = ARP_TMR_INTERVAL/1000;	tb.tv_nsec = 0;	net_arp_ticks = timespec_to_interval(&tb);	__lwp_wd_initialize(&arp_time_cntrl,__arp_timer,NULL);	__lwp_wd_insert_ticks(&arp_time_cntrl,net_arp_ticks);	return ERR_OK;}