beceem: remove indirection to Adapter structure
authorStephen Hemminger <stephen.hemminger@vyatta.com>
Mon, 1 Nov 2010 13:52:14 +0000 (09:52 -0400)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Mon, 1 Nov 2010 13:52:14 +0000 (09:52 -0400)
Allocate Adapter structure as part of network device.

Signed-off-by: Stephen Hemminber <shemminger@vyatta.com>
drivers/staging/bcm/Adapter.h
drivers/staging/bcm/Bcmnet.c
drivers/staging/bcm/InterfaceInit.c
drivers/staging/bcm/InterfaceMisc.c
drivers/staging/bcm/InterfaceMisc.h
drivers/staging/bcm/Macros.h
drivers/staging/bcm/Misc.c
drivers/staging/bcm/headers.h

index c679b71..a411c03 100644 (file)
@@ -623,6 +623,7 @@ struct _MINI_ADAPTER
 };
 typedef struct _MINI_ADAPTER MINI_ADAPTER, *PMINI_ADAPTER;
 
+#define GET_BCM_ADAPTER(net_dev)       netdev_priv(net_dev)
 
 typedef struct _DEVICE_EXTENSION
 {
index 9518e38..1f35cd3 100644 (file)
@@ -1,11 +1,5 @@
 #include "headers.h"
 
-#define DRV_NAME       "beceem"
-#define DRV_VERSION    "5.2.7.3P1"
-#define DRV_DESCRIPTION "Beceem Communications Inc. WiMAX driver"
-#define DRV_COPYRIGHT  "Copyright 2010. Beceem Communications Inc"
-
-
 struct net_device *gblpnetdev;
 /***************************************************************************************/
 /* proto-type of lower function */
@@ -123,29 +117,15 @@ static const struct ethtool_ops bcm_ethtool_ops = {
 
 int register_networkdev(PMINI_ADAPTER Adapter)
 {
-       struct net_device *net;
-       PMINI_ADAPTER *temp;
-       PS_INTERFACE_ADAPTER psIntfAdapter = Adapter->pvInterfaceAdapter;
-       struct usb_interface *uintf = psIntfAdapter->interface;
+       struct net_device *net = Adapter->dev;
        int result;
 
-       net = alloc_etherdev(sizeof(PMINI_ADAPTER));
-       if(!net) {
-               pr_notice("bcmnet: no memory for device\n");
-               return -ENOMEM;
-       }
-
-       Adapter->dev = net;     /* FIXME - only allows one adapter! */
-       temp = netdev_priv(net);
-       *temp = Adapter;
-
         net->netdev_ops = &bcmNetDevOps;
        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);
 
        /* Read the MAC Address from EEPROM */
index 014b06b..e700fc7 100644 (file)
@@ -182,30 +182,27 @@ static struct usb_class_driver usbbcm_class = {
 static int
 usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
 {
-       int retval =0 ;
-       PMINI_ADAPTER psAdapter = NULL;
-       PS_INTERFACE_ADAPTER psIntfAdapter = NULL;
-       struct usb_device      *udev = NULL;
-
-//     BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Usbbcm probe!!");
-       if((intf == NULL) || (id == NULL))
-       {
-       //      BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "intf or id is NULL");
-               return -EINVAL;
-       }
-
-       /* Allocate Adapter structure */
-       if((psAdapter = kzalloc(sizeof(MINI_ADAPTER), GFP_KERNEL)) == NULL)
-       {
-               BCM_DEBUG_PRINT(psAdapter,DBG_TYPE_PRINTK, 0, 0, "Out of memory");
+       struct usb_device *udev = interface_to_usbdev (intf);
+       int retval;
+       PMINI_ADAPTER psAdapter;
+       PS_INTERFACE_ADAPTER psIntfAdapter;
+       struct net_device *ndev;
+
+       ndev = alloc_etherdev(sizeof(MINI_ADAPTER));
+       if(ndev == NULL) {
+               dev_err(&udev->dev, DRV_NAME ": no memory for device\n");
                return -ENOMEM;
        }
 
+       SET_NETDEV_DEV(ndev, &intf->dev);
+
+       psAdapter = netdev_priv(ndev);
+       psAdapter->dev = ndev;
+
     /* Init default driver debug state */
 
        psAdapter->stDebugState.debug_level = debug_level;
        psAdapter->stDebugState.type = DBG_TYPE_INITEXIT;
-       memset (psAdapter->stDebugState.subtype, 0, sizeof (psAdapter->stDebugState.subtype));
 
     /* Technically, one can start using BCM_DEBUG_PRINT after this point.
         * However, realize that by default the Type/Subtype bitmaps are all zero now;
@@ -224,22 +221,21 @@ usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
        retval = InitAdapter(psAdapter);
        if(retval)
        {
-               BCM_DEBUG_PRINT (psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "InitAdapter Failed\n");
+               dev_err(&udev->dev, DRV_NAME ": InitAdapter Failed\n");
                AdapterFree(psAdapter);
                return retval;
        }
 
        /* Allocate interface adapter structure */
-       if((psAdapter->pvInterfaceAdapter =
-               kmalloc(sizeof(S_INTERFACE_ADAPTER), GFP_KERNEL)) == NULL)
+       psIntfAdapter = kzalloc(sizeof(S_INTERFACE_ADAPTER), GFP_KERNEL);
+       if (psIntfAdapter == NULL)
        {
-               BCM_DEBUG_PRINT(psAdapter,DBG_TYPE_PRINTK, 0, 0, "Out of memory");
+               dev_err(&udev->dev, DRV_NAME ": no memory for Interface adapter\n");
                AdapterFree (psAdapter);
                return -ENOMEM;
        }
-       memset(psAdapter->pvInterfaceAdapter, 0, sizeof(S_INTERFACE_ADAPTER));
 
-       psIntfAdapter = InterfaceAdapterGet(psAdapter);
+       psAdapter->pvInterfaceAdapter = psIntfAdapter;
        psIntfAdapter->psAdapter = psAdapter;
 
        /* Store usb interface in Interface Adapter */
@@ -276,7 +272,6 @@ usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
                }
        }
 
-       udev = interface_to_usbdev (intf);
        /* Check whether the USB-Device Supports remote Wake-Up */
        if(USB_CONFIG_ATT_WAKEUP & udev->actconfig->desc.bmAttributes)
        {
index 2d98b7e..6ee5dbb 100644 (file)
@@ -1,16 +1,5 @@
 #include "headers.h"
 
-
-PS_INTERFACE_ADAPTER
-InterfaceAdapterGet(PMINI_ADAPTER psAdapter)
-{
-       if(psAdapter == NULL)
-       {
-               return NULL;
-       }
-       return (PS_INTERFACE_ADAPTER)(psAdapter->pvInterfaceAdapter);
-}
-
 INT
 InterfaceRDM(PS_INTERFACE_ADAPTER psIntfAdapter,
             UINT addr,
index 74c81d4..6c9e39b 100644 (file)
@@ -1,9 +1,6 @@
 #ifndef __INTERFACE_MISC_H
 #define __INTERFACE_MISC_H
 
-PS_INTERFACE_ADAPTER
-InterfaceAdapterGet(PMINI_ADAPTER psAdapter);
-
 INT
 InterfaceRDM(PS_INTERFACE_ADAPTER psIntfAdapter,
                        UINT addr,
index 338b61d..14df2f8 100644 (file)
@@ -354,7 +354,6 @@ enum eAbortPattern {
        ABORT_IDLE_SYNCDOWN = 3
 };
 
-#define GET_BCM_ADAPTER(net_dev) (net_dev ? netdev_priv(net_dev) : NULL)
 
 /* Offsets used by driver in skb cb variable */
 #define SKB_CB_CLASSIFICATION_OFFSET    0
index eca75db..ae9e88c 100644 (file)
@@ -108,7 +108,7 @@ InitAdapter(PMINI_ADAPTER psAdapter)
 
 VOID AdapterFree(PMINI_ADAPTER Adapter)
 {
-       INT count = 0;
+       int count;
 
        beceem_protocol_reset(Adapter);
 
@@ -116,41 +116,40 @@ VOID AdapterFree(PMINI_ADAPTER Adapter)
 
        if(Adapter->control_packet_handler && !IS_ERR(Adapter->control_packet_handler))
                kthread_stop (Adapter->control_packet_handler);
+
        if(Adapter->transmit_packet_thread && !IS_ERR(Adapter->transmit_packet_thread))
-       kthread_stop (Adapter->transmit_packet_thread);
-    wake_up(&Adapter->process_read_wait_queue);
+               kthread_stop (Adapter->transmit_packet_thread);
+
+       wake_up(&Adapter->process_read_wait_queue);
+
        if(Adapter->LEDInfo.led_thread_running & (BCM_LED_THREAD_RUNNING_ACTIVELY | BCM_LED_THREAD_RUNNING_INACTIVELY))
                kthread_stop (Adapter->LEDInfo.led_cntrl_threadid);
+
        bcm_unregister_networkdev(Adapter);
+
+       /* FIXME: use proper wait_event and refcounting */
        while(atomic_read(&Adapter->ApplicationRunning))
        {
                BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, MP_INIT, DBG_LVL_ALL, "Waiting for Application to close.. %d\n",atomic_read(&Adapter->ApplicationRunning));
                msleep(100);
        }
        unregister_control_device_interface(Adapter);
-       if(Adapter->dev && !IS_ERR(Adapter->dev))
-               free_netdev(Adapter->dev);
-       if(Adapter->pstargetparams != NULL)
-       {
-               kfree(Adapter->pstargetparams);
-       }
+
+       kfree(Adapter->pstargetparams);
+
        for (count =0;count < MAX_CNTRL_PKTS;count++)
-       {
-               if(Adapter->txctlpacket[count])
-                       kfree(Adapter->txctlpacket[count]);
-       }
+               kfree(Adapter->txctlpacket[count]);
+
        FreeAdapterDsxBuffer(Adapter);
 
-       if(Adapter->pvInterfaceAdapter)
-               kfree(Adapter->pvInterfaceAdapter);
+       kfree(Adapter->pvInterfaceAdapter);
 
        //Free the PHS Interface
        PhsCleanup(&Adapter->stBCMPhsContext);
 
        BcmDeAllocFlashCSStructure(Adapter);
 
-       kfree(Adapter);
-       BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, MP_INIT, DBG_LVL_ALL, "<========\n");
+       free_netdev(Adapter->dev);
 }
 
 
index d4a2003..0fdee95 100644 (file)
 #include "InterfaceIdleMode.h"
 #include "InterfaceInit.h"
 
+#define DRV_NAME       "beceem"
+#define DEV_NAME       "tarang"
+#define DRV_DESCRIPTION "Beceem Communications Inc. WiMAX driver"
+#define DRV_COPYRIGHT  "Copyright 2010. Beceem Communications Inc"
+#define DRV_VERSION    VER_FILEVERSION_STR
+#define PFX            DRV_NAME " "
 
 #endif