beceem: Add proper carrier and link management
authorStephen Hemminger <stephen.hemminger@vyatta.com>
Sat, 30 Oct 2010 04:39:54 +0000 (21:39 -0700)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Mon, 1 Nov 2010 13:50:29 +0000 (09:50 -0400)
Start with carrier off.
Don't track up/down status in driver private flag.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
drivers/staging/bcm/Adapter.h
drivers/staging/bcm/Bcmnet.c
drivers/staging/bcm/InterfaceRx.c

index 9c9dff3..c679b71 100644 (file)
@@ -498,7 +498,6 @@ struct _MINI_ADAPTER
        int                             irq;
        unsigned long           chip_id;
        unsigned int            bFlashBoot;
-       unsigned int            if_up;
 //     spinlock_t                      sleeper_lock;
        atomic_t                        rdm_wrm_access;
        atomic_t                        tx_rx_access;
index c77c1d1..9518e38 100644 (file)
@@ -17,7 +17,6 @@ static INT bcm_open(struct net_device *dev)
     BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "======>");
     if(Adapter->fw_download_done==FALSE)
         return -EINVAL;
-       Adapter->if_up=1;
        if(Adapter->LinkUpStatus == 1){
                if(netif_queue_stopped(Adapter->dev)){
                        netif_carrier_on(Adapter->dev);
@@ -34,7 +33,6 @@ static INT bcm_close(struct net_device *dev)
    PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
 
     BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "=====>");
-       Adapter->if_up=0;
        if(!netif_queue_stopped(dev)) {
                netif_carrier_off(dev);
            netif_stop_queue(dev);
@@ -145,6 +143,7 @@ int register_networkdev(PMINI_ADAPTER Adapter)
        net->ethtool_ops = &bcm_ethtool_ops;
        net->mtu          = MTU_SIZE; /* 1400 Bytes */
        net->tx_queue_len = TX_QLEN;
+       netif_carrier_off(net);
 
        SET_NETDEV_DEV(net, &uintf->dev);
        SET_NETDEV_DEVTYPE(net, &wimax_type);
index 128aa91..ab33895 100644 (file)
@@ -148,7 +148,7 @@ static void read_bulk_callback(struct urb *urb)
                atomic_add(pLeader->PLength, &Adapter->GoodRxByteCount);
         BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_RX, RX_DATA, DBG_LVL_ALL, "Recived Data pkt of len :0x%X", pLeader->PLength);
 
-               if(Adapter->if_up)
+               if(netif_running(Adapter->dev))
                {
                        /* Moving ahead by ETH_HLEN to the data ptr as received from FW */
                        skb_pull(skb, ETH_HLEN);