beceem: remove useless debug function entry messages
[linux-2.6-microblaze.git] / drivers / staging / bcm / Bcmnet.c
index 4785d25..9e3b872 100644 (file)
@@ -1,22 +1,15 @@
 #include "headers.h"
 
-#define DRV_DESCRIPTION "Beceem Communications Inc. WiMAX driver"
-#define DRV_VERSION    "5.2.7.3P1"
-#define DRV_COPYRIGHT  "Copyright 2010. Beceem Communications Inc"
-
-
 struct net_device *gblpnetdev;
 /***************************************************************************************/
 /* proto-type of lower function */
 
 static INT bcm_open(struct net_device *dev)
 {
-    PMINI_ADAPTER Adapter = NULL ; //(PMINI_ADAPTER)dev->priv;
-       Adapter = GET_BCM_ADAPTER(dev);
-    BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "======>");
+    PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
+
     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);
@@ -24,51 +17,109 @@ static INT bcm_open(struct net_device *dev)
                }
        }
 
-       BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "<======");
     return 0;
 }
 
 static INT bcm_close(struct net_device *dev)
 {
-   PMINI_ADAPTER Adapter = NULL ;//gpadapter ;
-   Adapter = GET_BCM_ADAPTER(dev);
-    BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "=====>");
-       Adapter->if_up=0;
+   PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
+
        if(!netif_queue_stopped(dev)) {
                netif_carrier_off(dev);
            netif_stop_queue(dev);
        }
-    BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL,"<=====");
     return 0;
 }
 
 static struct net_device_stats *bcm_get_stats(struct net_device *dev)
 {
-    PLINUX_DEP_DATA pLinuxData=NULL;
-       PMINI_ADAPTER Adapter = NULL ;// gpadapter ;
-       Adapter = GET_BCM_ADAPTER(dev);
-    pLinuxData = (PLINUX_DEP_DATA)(Adapter->pvOsDepData);
-
-    //BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Dev = %p, pLinuxData = %p", dev, pLinuxData);
-       pLinuxData->netstats.rx_packets=atomic_read(&Adapter->RxRollOverCount)*64*1024+Adapter->PrevNumRecvDescs;
-       pLinuxData->netstats.rx_bytes=atomic_read(&Adapter->GoodRxByteCount)+atomic_read(&Adapter->BadRxByteCount);
-       pLinuxData->netstats.rx_dropped=atomic_read(&Adapter->RxPacketDroppedCount);
-       pLinuxData->netstats.rx_errors=atomic_read(&Adapter->RxPacketDroppedCount);
-       pLinuxData->netstats.rx_length_errors=0;
-       pLinuxData->netstats.rx_frame_errors=0;
-       pLinuxData->netstats.rx_crc_errors=0;
-       pLinuxData->netstats.tx_bytes=atomic_read(&Adapter->GoodTxByteCount);
-       pLinuxData->netstats.tx_packets=atomic_read(&Adapter->TxTotalPacketCount);
-       pLinuxData->netstats.tx_dropped=atomic_read(&Adapter->TxDroppedPacketCount);
-
-    return &(pLinuxData->netstats);
+       PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
+       struct net_device_stats*        netstats = &dev->stats;
+
+       netstats->rx_packets = atomic_read(&Adapter->RxRollOverCount)*64*1024
+               + Adapter->PrevNumRecvDescs;
+       netstats->rx_bytes = atomic_read(&Adapter->GoodRxByteCount)
+               + atomic_read(&Adapter->BadRxByteCount);
+
+       netstats->rx_dropped = atomic_read(&Adapter->RxPacketDroppedCount);
+       netstats->rx_errors  = atomic_read(&Adapter->RxPacketDroppedCount);
+       netstats->tx_bytes   = atomic_read(&Adapter->GoodTxByteCount);
+       netstats->tx_packets = atomic_read(&Adapter->TxTotalPacketCount);
+       netstats->tx_dropped = atomic_read(&Adapter->TxDroppedPacketCount);
+
+       return netstats;
+}
+
+static u16 bcm_select_queue(struct net_device *dev, struct sk_buff *skb)
+{
+       return ClassifyPacket(netdev_priv(dev), skb);
 }
+
+
+/*******************************************************************
+* Function    -        bcm_transmit()
+*
+* Description - This is the main transmit function for our virtual
+*                              interface(eth0). It handles the ARP packets. It
+*                              clones this packet and then Queue it to a suitable
+*                              Queue. Then calls the transmit_packet().
+*
+* Parameter   -         skb - Pointer to the socket buffer structure
+*                               dev - Pointer to the virtual net device structure
+*
+*********************************************************************/
+
+static netdev_tx_t bcm_transmit(struct sk_buff *skb, struct net_device *dev)
+{
+       PMINI_ADAPTER      Adapter = GET_BCM_ADAPTER(dev);
+       u16 qindex = skb_get_queue_mapping(skb);
+
+       if (Adapter->device_removed || !Adapter->LinkUpStatus)
+               goto drop;
+
+       if (Adapter->TransferMode != IP_PACKET_ONLY_MODE )
+               goto drop;
+
+       if (INVALID_QUEUE_INDEX==qindex)
+               goto drop;
+
+       if (Adapter->PackInfo[qindex].uiCurrentPacketsOnHost >= SF_MAX_ALLOWED_PACKETS_TO_BACKUP)
+               return NETDEV_TX_BUSY;
+
+       /* Now Enqueue the packet */
+       BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, NEXT_SEND, DBG_LVL_ALL,
+                       "bcm_transmit Enqueueing the Packet To Queue %d",qindex);
+       spin_lock(&Adapter->PackInfo[qindex].SFQueueLock);
+       Adapter->PackInfo[qindex].uiCurrentBytesOnHost += skb->len;
+       Adapter->PackInfo[qindex].uiCurrentPacketsOnHost++;
+
+       *((B_UINT32 *)skb->cb + SKB_CB_LATENCY_OFFSET ) = jiffies;
+       ENQUEUEPACKET(Adapter->PackInfo[qindex].FirstTxQueue,
+                     Adapter->PackInfo[qindex].LastTxQueue, skb);
+       atomic_inc(&Adapter->TotalPacketCount);
+       spin_unlock(&Adapter->PackInfo[qindex].SFQueueLock);
+
+       BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, TX_OSAL_DBG, DBG_LVL_ALL,"ENQ: \n");
+
+       /* FIXME - this is racy and incorrect, replace with work queue */
+       if (!atomic_read(&Adapter->TxPktAvail)) {
+               atomic_set(&Adapter->TxPktAvail, 1);
+               wake_up(&Adapter->tx_packet_wait_queue);
+       }
+       return NETDEV_TX_OK;
+
+ drop:
+       dev_kfree_skb(skb);
+       return NETDEV_TX_OK;
+}
+
+
+
 /**
 @ingroup init_functions
 Register other driver entry points with the kernel
 */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
-static struct net_device_ops bcmNetDevOps = {
+static const struct net_device_ops bcmNetDevOps = {
     .ndo_open          = bcm_open,
     .ndo_stop          = bcm_close,
     .ndo_get_stats     = bcm_get_stats,
@@ -76,62 +127,86 @@ static struct net_device_ops bcmNetDevOps = {
     .ndo_change_mtu    = eth_change_mtu,
     .ndo_set_mac_address = eth_mac_addr,
     .ndo_validate_addr = eth_validate_addr,
+    .ndo_select_queue  = bcm_select_queue,
+};
+
+static struct device_type wimax_type = {
+       .name   = "wimax",
+};
+
+static int bcm_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+       cmd->supported          = 0;
+       cmd->advertising        = 0;
+       cmd->speed              = SPEED_10000;
+       cmd->duplex             = DUPLEX_FULL;
+       cmd->port               = PORT_TP;
+       cmd->phy_address        = 0;
+       cmd->transceiver        = XCVR_INTERNAL;
+       cmd->autoneg            = AUTONEG_DISABLE;
+       cmd->maxtxpkt           = 0;
+       cmd->maxrxpkt           = 0;
+       return 0;
+}
+
+static void bcm_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
+{
+       PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
+       PS_INTERFACE_ADAPTER psIntfAdapter = Adapter->pvInterfaceAdapter;
+       struct usb_device *udev = interface_to_usbdev(psIntfAdapter->interface);
+
+       strcpy(info->driver, DRV_NAME);
+       strcpy(info->version, DRV_VERSION);
+       snprintf(info->fw_version, sizeof(info->fw_version), "%u.%u",
+                Adapter->uiFlashLayoutMajorVersion,
+                Adapter->uiFlashLayoutMinorVersion);
+
+       usb_make_path(udev, info->bus_info, sizeof(info->bus_info));
+}
+
+static u32 bcm_get_link(struct net_device *dev)
+{
+       PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
+
+       return Adapter->LinkUpStatus;
+}
+
+static const struct ethtool_ops bcm_ethtool_ops = {
+       .get_settings   = bcm_get_settings,
+       .get_drvinfo    = bcm_get_drvinfo,
+       .get_link       = bcm_get_link,
 };
-#endif
 
 int register_networkdev(PMINI_ADAPTER Adapter)
 {
-       int result=0;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
-       void **temp = NULL; /* actually we're *allocating* the device in alloc_etherdev */
-#endif
-       Adapter->dev = alloc_etherdev(sizeof(PMINI_ADAPTER));
-       if(!Adapter->dev)
-       {
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "ERR: No Dev");
-               return -ENOMEM;
-       }
-       gblpnetdev                                                      = Adapter->dev;
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
-       Adapter->dev->priv                              = Adapter;
-#else
-       temp = netdev_priv(Adapter->dev);
-       *temp = (void *)Adapter;
-#endif
-       //BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0, "init adapterptr: %x %x\n", (UINT)Adapter, temp);
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
-        Adapter->dev->netdev_ops                = &bcmNetDevOps;
-#else
-       Adapter->dev->open                              = bcm_open;
-       Adapter->dev->stop                      = bcm_close;
-       Adapter->dev->get_stats                 = bcm_get_stats;
-       Adapter->dev->hard_start_xmit           = bcm_transmit;
-       Adapter->dev->hard_header_len           = ETH_HLEN + LEADER_SIZE;
-#endif
-
-       Adapter->dev->mtu                                       = MTU_SIZE; /* 1400 Bytes */
+       struct net_device *net = Adapter->dev;
+       int result;
+
+        net->netdev_ops = &bcmNetDevOps;
+       net->ethtool_ops = &bcm_ethtool_ops;
+       net->mtu          = MTU_SIZE; /* 1400 Bytes */
+       net->tx_queue_len = TX_QLEN;
+       net->flags |= IFF_NOARP;
+       net->flags &= ~(IFF_BROADCAST|IFF_MULTICAST);
+
+       netif_carrier_off(net);
+
+       SET_NETDEV_DEVTYPE(net, &wimax_type);
+
        /* Read the MAC Address from EEPROM */
        ReadMacAddressFromNVM(Adapter);
 
-       result = register_netdev(Adapter->dev);
-       if (!result) {
-               free_netdev(Adapter->dev);
+       result = register_netdev(net);
+       if (result == 0)
+               gblpnetdev = Adapter->dev = net;
+       else {
                Adapter->dev = NULL;
+               free_netdev(net);
        }
 
        return result;
 }
 
-void bcm_unregister_networkdev(PMINI_ADAPTER Adapter)
-{
-       BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Unregistering the Net Dev...\n");
-       if(Adapter->dev) {
-               unregister_netdev(Adapter->dev);
-               Adapter->dev = NULL;
-       }
-}
-
 static int bcm_init(void)
 {
        printk(KERN_INFO "%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);