lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1350321868-2613-1-git-send-email-antiroot@gmail.com>
Date:	Tue, 16 Oct 2012 02:24:20 +0900
From:	Sangho Yi <antiroot@...il.com>
To:	devel@...verdev.osuosl.org
Cc:	gregkh@...uxfoundation.org, linux-kernel@...r.kernel.org,
	Sangho Yi <antiroot@...il.com>
Subject: [PATCH 01/14] staging: csr: fixed indentation from spaces to tabs on io.c

Originally, '4 spaces' were used as an indentation method, so I
converted all 4 spaces chunks to tabs.

Signed-off-by: Sangho Yi <antiroot@...il.com>
---
 drivers/staging/csr/io.c | 1366 +++++++++++++++++++++++-----------------------
 1 file changed, 683 insertions(+), 683 deletions(-)

diff --git a/drivers/staging/csr/io.c b/drivers/staging/csr/io.c
index caf48e3..14adc38 100644
--- a/drivers/staging/csr/io.c
+++ b/drivers/staging/csr/io.c
@@ -1,27 +1,27 @@
 /*
  * ---------------------------------------------------------------------------
- *  FILE:     io.c
+ *  FILE:	 io.c
  *
  *  PURPOSE:
- *      This file contains routines that the SDIO driver can call when a
- *      UniFi card is first inserted (or detected) and removed.
+ *	  This file contains routines that the SDIO driver can call when a
+ *	  UniFi card is first inserted (or detected) and removed.
  *
- *      When used with sdioemb, the udev scripts (at least on Ubuntu) don't
- *      recognise a UniFi being added to the system. This is because sdioemb
- *      does not register itself as a device_driver, it uses it's own code
- *      to handle insert and remove.
- *      To have Ubuntu recognise UniFi, edit /etc/udev/rules.d/85-ifupdown.rules
- *      to change this line:
- *          SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
- *      to these:
- *          #SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
- *          SUBSYSTEM=="net", GOTO="net_start"
+ *	  When used with sdioemb, the udev scripts (at least on Ubuntu) don't
+ *	  recognise a UniFi being added to the system. This is because sdioemb
+ *	  does not register itself as a device_driver, it uses it's own code
+ *	  to handle insert and remove.
+ *	  To have Ubuntu recognise UniFi, edit /etc/udev/rules.d/85-ifupdown.rules
+ *	  to change this line:
+ *		  SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
+ *	  to these:
+ *		  #SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
+ *		  SUBSYSTEM=="net", GOTO="net_start"
  *
- *      Then you can add a stanza to /etc/network/interfaces like this:
- *          auto eth1
- *          iface eth1 inet dhcp
- *          wpa-conf /etc/wpa_supplicant.conf
- *      This will then automatically associate when a car dis inserted.
+ *	  Then you can add a stanza to /etc/network/interfaces like this:
+ *		  auto eth1
+ *		  iface eth1 inet dhcp
+ *		  wpa-conf /etc/wpa_supplicant.conf
+ *	  This will then automatically associate when a car dis inserted.
  *
  * Copyright (C) 2006-2009 by Cambridge Silicon Radio Ltd.
  *
@@ -62,9 +62,9 @@ static netInterface_priv_t *Unifi_netdev_instances[MAX_UNIFI_DEVS * CSR_WIFI_NUM
  * UNIFI_DEV_NOT_IN_USE. Otherwise, it means that the slot is in use or
  * we are in the middle of a cleanup (the action on unplug).
  */
-#define UNIFI_DEV_NOT_IN_USE    0
-#define UNIFI_DEV_IN_USE        1
-#define UNIFI_DEV_CLEANUP       2
+#define UNIFI_DEV_NOT_IN_USE	0
+#define UNIFI_DEV_IN_USE		1
+#define UNIFI_DEV_CLEANUP	   2
 static int In_use[MAX_UNIFI_DEVS];
 /*
  * Mutex to prevent UDI clients to open the character device before the priv
@@ -79,111 +79,111 @@ DECLARE_WAIT_QUEUE_HEAD(Unifi_cleanup_wq);
 
 
 static int uf_read_proc(char *page, char **start, off_t offset, int count,
-                        int *eof, void *data);
+						int *eof, void *data);
 
 #ifdef CSR_WIFI_RX_PATH_SPLIT
 
 static CsrResult signal_buffer_init(unifi_priv_t * priv, int size)
 {
-    int i;
-    func_enter();
-
-    priv->rxSignalBuffer.writePointer =
-    priv->rxSignalBuffer.readPointer = 0;
-    priv->rxSignalBuffer.size = size;
-    /* Allocating Memory for Signal primitive pointer */
-    for(i=0; i<size; i++)
-    {
-         priv->rxSignalBuffer.rx_buff[i].sig_len=0;
-         priv->rxSignalBuffer.rx_buff[i].bufptr = kmalloc(UNIFI_PACKED_SIGBUF_SIZE, GFP_KERNEL);
-         if (priv->rxSignalBuffer.rx_buff[i].bufptr == NULL)
-         {
-             int j;
-             unifi_error(priv,"signal_buffer_init:Failed to Allocate shared memory for T-H signals \n");
-             for(j=0;j<i;j++)
-             {
-                 priv->rxSignalBuffer.rx_buff[j].sig_len=0;
-                 kfree(priv->rxSignalBuffer.rx_buff[j].bufptr);
-                 priv->rxSignalBuffer.rx_buff[j].bufptr = NULL;
-             }
-             func_exit();
-             return -1;
-         }
-    }
-    func_exit();
-    return 0;
+	int i;
+	func_enter();
+
+	priv->rxSignalBuffer.writePointer =
+	priv->rxSignalBuffer.readPointer = 0;
+	priv->rxSignalBuffer.size = size;
+	/* Allocating Memory for Signal primitive pointer */
+	for(i=0; i<size; i++)
+	{
+		 priv->rxSignalBuffer.rx_buff[i].sig_len=0;
+		 priv->rxSignalBuffer.rx_buff[i].bufptr = kmalloc(UNIFI_PACKED_SIGBUF_SIZE, GFP_KERNEL);
+		 if (priv->rxSignalBuffer.rx_buff[i].bufptr == NULL)
+		 {
+			 int j;
+			 unifi_error(priv,"signal_buffer_init:Failed to Allocate shared memory for T-H signals \n");
+			 for(j=0;j<i;j++)
+			 {
+				 priv->rxSignalBuffer.rx_buff[j].sig_len=0;
+				 kfree(priv->rxSignalBuffer.rx_buff[j].bufptr);
+				 priv->rxSignalBuffer.rx_buff[j].bufptr = NULL;
+			 }
+			 func_exit();
+			 return -1;
+		 }
+	}
+	func_exit();
+	return 0;
 }
 
 
 static void signal_buffer_free(unifi_priv_t * priv, int size)
 {
-    int i;
-
-    for(i=0; i<size; i++)
-    {
-         priv->rxSignalBuffer.rx_buff[i].sig_len=0;
-         kfree(priv->rxSignalBuffer.rx_buff[i].bufptr);
-         priv->rxSignalBuffer.rx_buff[i].bufptr = NULL;
-    }
+	int i;
+
+	for(i=0; i<size; i++)
+	{
+		 priv->rxSignalBuffer.rx_buff[i].sig_len=0;
+		 kfree(priv->rxSignalBuffer.rx_buff[i].bufptr);
+		 priv->rxSignalBuffer.rx_buff[i].bufptr = NULL;
+	}
 }
 #endif
 /*
  * ---------------------------------------------------------------------------
  *  uf_register_netdev
  *
- *      Registers the network interface, installes the qdisc,
- *      and registers the inet handler.
- *      In the porting exercise, register the driver to the network
- *      stack if necessary.
+ *	  Registers the network interface, installes the qdisc,
+ *	  and registers the inet handler.
+ *	  In the porting exercise, register the driver to the network
+ *	  stack if necessary.
  *
  *  Arguments:
- *      priv          Pointer to driver context.
+ *	  priv		  Pointer to driver context.
  *
  *  Returns:
- *      O on success, non-zero otherwise.
+ *	  O on success, non-zero otherwise.
  *
  *  Notes:
- *      We will only unregister when the card is ejected, so we must
- *      only do it once.
+ *	  We will only unregister when the card is ejected, so we must
+ *	  only do it once.
  * ---------------------------------------------------------------------------
  */
 int
 uf_register_netdev(unifi_priv_t *priv, int interfaceTag)
 {
-    int r;
-    netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-
-    if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
-        unifi_error(priv, "uf_register_netdev bad interfaceTag\n");
-        return -EINVAL;
-    }
-
-    /*
-     * Allocates a device number and registers device with the network
-     * stack.
-     */
-    unifi_trace(priv, UDBG5, "uf_register_netdev: netdev %d - 0x%p\n",
-            interfaceTag, priv->netdev[interfaceTag]);
-    r = register_netdev(priv->netdev[interfaceTag]);
-    if (r) {
-        unifi_error(priv, "Failed to register net device\n");
-        return -EINVAL;
-    }
-
-    /* The device is registed */
-    interfacePriv->netdev_registered = 1;
+	int r;
+	netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
+
+	if (interfaceTag >= CSR_WIFI_NUM_INTERFACES) {
+		unifi_error(priv, "uf_register_netdev bad interfaceTag\n");
+		return -EINVAL;
+	}
+
+	/*
+	 * Allocates a device number and registers device with the network
+	 * stack.
+	 */
+	unifi_trace(priv, UDBG5, "uf_register_netdev: netdev %d - 0x%p\n",
+			interfaceTag, priv->netdev[interfaceTag]);
+	r = register_netdev(priv->netdev[interfaceTag]);
+	if (r) {
+		unifi_error(priv, "Failed to register net device\n");
+		return -EINVAL;
+	}
+
+	/* The device is registed */
+	interfacePriv->netdev_registered = 1;
 
 #ifdef CSR_SUPPORT_SME
-    /*
-     * Register the inet handler; it notifies us for changes in the IP address.
-     */
-    uf_register_inet_notifier();
+	/*
+	 * Register the inet handler; it notifies us for changes in the IP address.
+	 */
+	uf_register_inet_notifier();
 #endif /* CSR_SUPPORT_SME */
 
-    unifi_notice(priv, "unifi%d is %s\n",
-            priv->instance, priv->netdev[interfaceTag]->name);
+	unifi_notice(priv, "unifi%d is %s\n",
+			priv->instance, priv->netdev[interfaceTag]->name);
 
-    return 0;
+	return 0;
 } /* uf_register_netdev */
 
 
@@ -191,48 +191,48 @@ uf_register_netdev(unifi_priv_t *priv, int interfaceTag)
  * ---------------------------------------------------------------------------
  *  uf_unregister_netdev
  *
- *      Unregisters the network interface and the inet handler.
+ *	  Unregisters the network interface and the inet handler.
  *
  *  Arguments:
- *      priv          Pointer to driver context.
+ *	  priv		  Pointer to driver context.
  *
  *  Returns:
- *      None.
+ *	  None.
  *
  * ---------------------------------------------------------------------------
  */
 void
 uf_unregister_netdev(unifi_priv_t *priv)
 {
-    int i=0;
+	int i=0;
 
 #ifdef CSR_SUPPORT_SME
-    /* Unregister the inet handler... */
-    uf_unregister_inet_notifier();
+	/* Unregister the inet handler... */
+	uf_unregister_inet_notifier();
 #endif /* CSR_SUPPORT_SME */
 
-    for (i=0; i<CSR_WIFI_NUM_INTERFACES; i++) {
-        netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
-        if (interfacePriv->netdev_registered) {
-            unifi_trace(priv, UDBG5,
-                    "uf_unregister_netdev: netdev %d - 0x%p\n",
-                    i, priv->netdev[i]);
+	for (i=0; i<CSR_WIFI_NUM_INTERFACES; i++) {
+		netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
+		if (interfacePriv->netdev_registered) {
+			unifi_trace(priv, UDBG5,
+					"uf_unregister_netdev: netdev %d - 0x%p\n",
+					i, priv->netdev[i]);
 
-            /* ... and the netdev */
-            unregister_netdev(priv->netdev[i]);
-            interfacePriv->netdev_registered = 0;
-        }
+			/* ... and the netdev */
+			unregister_netdev(priv->netdev[i]);
+			interfacePriv->netdev_registered = 0;
+		}
 
-        interfacePriv->interfaceMode = 0;
+		interfacePriv->interfaceMode = 0;
 
-        /* Enable all queues by default */
-        interfacePriv->queueEnabled[0] = 1;
-        interfacePriv->queueEnabled[1] = 1;
-        interfacePriv->queueEnabled[2] = 1;
-        interfacePriv->queueEnabled[3] = 1;
-    }
+		/* Enable all queues by default */
+		interfacePriv->queueEnabled[0] = 1;
+		interfacePriv->queueEnabled[1] = 1;
+		interfacePriv->queueEnabled[2] = 1;
+		interfacePriv->queueEnabled[3] = 1;
+	}
 
-    priv->totalInterfaceCount = 0;
+	priv->totalInterfaceCount = 0;
 } /* uf_unregister_netdev() */
 
 
@@ -240,217 +240,217 @@ uf_unregister_netdev(unifi_priv_t *priv)
  * ---------------------------------------------------------------------------
  *  register_unifi_sdio
  *
- *      This function is called from the Probe (or equivalent) method of
- *      the SDIO driver when a UniFi card is detected.
- *      We allocate the Linux net_device struct, initialise the HIP core
- *      lib, create the char device nodes and start the userspace helper
- *      to initialise the device.
+ *	  This function is called from the Probe (or equivalent) method of
+ *	  the SDIO driver when a UniFi card is detected.
+ *	  We allocate the Linux net_device struct, initialise the HIP core
+ *	  lib, create the char device nodes and start the userspace helper
+ *	  to initialise the device.
  *
  *  Arguments:
- *      sdio_dev        Pointer to SDIO context handle to use for all
- *                      SDIO ops.
- *      bus_id          A small number indicating the SDIO card position on the
- *                      bus. Typically this is the slot number, e.g. 0, 1 etc.
- *                      Valid values are 0 to MAX_UNIFI_DEVS-1.
- *      dev             Pointer to kernel device manager struct.
+ *	  sdio_dev		Pointer to SDIO context handle to use for all
+ *					  SDIO ops.
+ *	  bus_id		  A small number indicating the SDIO card position on the
+ *					  bus. Typically this is the slot number, e.g. 0, 1 etc.
+ *					  Valid values are 0 to MAX_UNIFI_DEVS-1.
+ *	  dev			 Pointer to kernel device manager struct.
  *
  *  Returns:
- *      Pointer to the unifi instance, or NULL on error.
+ *	  Pointer to the unifi instance, or NULL on error.
  * ---------------------------------------------------------------------------
  */
 static unifi_priv_t *
 register_unifi_sdio(CsrSdioFunction *sdio_dev, int bus_id, struct device *dev)
 {
-    unifi_priv_t *priv = NULL;
-    int r = -1;
-    CsrResult csrResult;
-
-    func_enter();
-
-    if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
-        unifi_error(priv, "register_unifi_sdio: invalid device %d\n",
-                bus_id);
-        return NULL;
-    }
-
-    down(&Unifi_instance_mutex);
-
-    if (In_use[bus_id] != UNIFI_DEV_NOT_IN_USE) {
-        unifi_error(priv, "register_unifi_sdio: device %d is already in use\n",
-                bus_id);
-        goto failed0;
-    }
-
-
-    /* Allocate device private and net_device structs */
-    priv = uf_alloc_netdevice(sdio_dev, bus_id);
-    if (priv == NULL) {
-        unifi_error(priv, "Failed to allocate driver private\n");
-        goto failed0;
-    }
-
-    priv->unifi_device = dev;
-
-    SET_NETDEV_DEV(priv->netdev[0], dev);
-
-    /* We are not ready to send data yet. */
-    netif_carrier_off(priv->netdev[0]);
-
-    /* Allocate driver context. */
-    priv->card = unifi_alloc_card(priv->sdio, priv);
-    if (priv->card == NULL) {
-        unifi_error(priv, "Failed to allocate UniFi driver card struct.\n");
-        goto failed1;
-    }
-
-    if (Unifi_instances[bus_id]) {
-        unifi_error(priv, "Internal error: instance for slot %d is already taken\n",
-                bus_id);
-    }
-    Unifi_instances[bus_id] = priv;
-    In_use[bus_id] = UNIFI_DEV_IN_USE;
-
-    /* Save the netdev_priv for use by the netdev event callback mechanism */
-    Unifi_netdev_instances[bus_id * CSR_WIFI_NUM_INTERFACES] = netdev_priv(priv->netdev[0]);
-
-    /* Initialise the mini-coredump capture buffers */
-    csrResult = unifi_coredump_init(priv->card, (u16)coredump_max);
-    if (csrResult != CSR_RESULT_SUCCESS) {
-        unifi_error(priv, "Couldn't allocate mini-coredump buffers\n");
-    }
-
-    /* Create the character device nodes */
-    r = uf_create_device_nodes(priv, bus_id);
-    if (r) {
-        goto failed1;
-    }
-
-    /*
-     * We use the slot number as unifi device index.
-     */
-    scnprintf(priv->proc_entry_name, 64, "driver/unifi%d", priv->instance);
-    /*
-     * The following complex casting is in place in order to eliminate 64-bit compilation warning
-     * "cast to/from pointer from/to integer of different size"
-     */
-    if (!create_proc_read_entry(priv->proc_entry_name, 0, 0,
-                uf_read_proc, (void *)(long)priv->instance))
-    {
-        unifi_error(priv, "unifi: can't create /proc/driver/unifi\n");
-    }
-
-    /* Allocate the net_device for interfaces other than 0. */
-    {
-        int i;
-        priv->totalInterfaceCount =0;
-
-        for(i=1;i<CSR_WIFI_NUM_INTERFACES;i++)
-        {
-            if( !uf_alloc_netdevice_for_other_interfaces(priv,i) )
-            {
-                /* error occured while allocating the net_device for interface[i]. The net_device are
-                 * allocated for the interfaces with id<i. Dont worry, all the allocated net_device will
-                 * be releasing chen the control goes to the label failed0.
-                 */
-                unifi_error(priv, "Failed to allocate driver private for interface[%d]\n",i);
-                goto failed0;
-            }
-            else
-            {
-                SET_NETDEV_DEV(priv->netdev[i], dev);
-
-                /* We are not ready to send data yet. */
-                netif_carrier_off(priv->netdev[i]);
-
-                /* Save the netdev_priv for use by the netdev event callback mechanism */
-                Unifi_netdev_instances[bus_id * CSR_WIFI_NUM_INTERFACES + i] = netdev_priv(priv->netdev[i]);
-            }
-        }
-
-        for(i=0;i<CSR_WIFI_NUM_INTERFACES;i++)
-        {
-            netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
-            interfacePriv->netdev_registered=0;
-        }
-    }
+	unifi_priv_t *priv = NULL;
+	int r = -1;
+	CsrResult csrResult;
+
+	func_enter();
+
+	if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
+		unifi_error(priv, "register_unifi_sdio: invalid device %d\n",
+				bus_id);
+		return NULL;
+	}
+
+	down(&Unifi_instance_mutex);
+
+	if (In_use[bus_id] != UNIFI_DEV_NOT_IN_USE) {
+		unifi_error(priv, "register_unifi_sdio: device %d is already in use\n",
+				bus_id);
+		goto failed0;
+	}
+
+
+	/* Allocate device private and net_device structs */
+	priv = uf_alloc_netdevice(sdio_dev, bus_id);
+	if (priv == NULL) {
+		unifi_error(priv, "Failed to allocate driver private\n");
+		goto failed0;
+	}
+
+	priv->unifi_device = dev;
+
+	SET_NETDEV_DEV(priv->netdev[0], dev);
+
+	/* We are not ready to send data yet. */
+	netif_carrier_off(priv->netdev[0]);
+
+	/* Allocate driver context. */
+	priv->card = unifi_alloc_card(priv->sdio, priv);
+	if (priv->card == NULL) {
+		unifi_error(priv, "Failed to allocate UniFi driver card struct.\n");
+		goto failed1;
+	}
+
+	if (Unifi_instances[bus_id]) {
+		unifi_error(priv, "Internal error: instance for slot %d is already taken\n",
+				bus_id);
+	}
+	Unifi_instances[bus_id] = priv;
+	In_use[bus_id] = UNIFI_DEV_IN_USE;
+
+	/* Save the netdev_priv for use by the netdev event callback mechanism */
+	Unifi_netdev_instances[bus_id * CSR_WIFI_NUM_INTERFACES] = netdev_priv(priv->netdev[0]);
+
+	/* Initialise the mini-coredump capture buffers */
+	csrResult = unifi_coredump_init(priv->card, (u16)coredump_max);
+	if (csrResult != CSR_RESULT_SUCCESS) {
+		unifi_error(priv, "Couldn't allocate mini-coredump buffers\n");
+	}
+
+	/* Create the character device nodes */
+	r = uf_create_device_nodes(priv, bus_id);
+	if (r) {
+		goto failed1;
+	}
+
+	/*
+	 * We use the slot number as unifi device index.
+	 */
+	scnprintf(priv->proc_entry_name, 64, "driver/unifi%d", priv->instance);
+	/*
+	 * The following complex casting is in place in order to eliminate 64-bit compilation warning
+	 * "cast to/from pointer from/to integer of different size"
+	 */
+	if (!create_proc_read_entry(priv->proc_entry_name, 0, 0,
+				uf_read_proc, (void *)(long)priv->instance))
+	{
+		unifi_error(priv, "unifi: can't create /proc/driver/unifi\n");
+	}
+
+	/* Allocate the net_device for interfaces other than 0. */
+	{
+		int i;
+		priv->totalInterfaceCount =0;
+
+		for(i=1;i<CSR_WIFI_NUM_INTERFACES;i++)
+		{
+			if( !uf_alloc_netdevice_for_other_interfaces(priv,i) )
+			{
+				/* error occured while allocating the net_device for interface[i]. The net_device are
+				 * allocated for the interfaces with id<i. Dont worry, all the allocated net_device will
+				 * be releasing chen the control goes to the label failed0.
+				 */
+				unifi_error(priv, "Failed to allocate driver private for interface[%d]\n",i);
+				goto failed0;
+			}
+			else
+			{
+				SET_NETDEV_DEV(priv->netdev[i], dev);
+
+				/* We are not ready to send data yet. */
+				netif_carrier_off(priv->netdev[i]);
+
+				/* Save the netdev_priv for use by the netdev event callback mechanism */
+				Unifi_netdev_instances[bus_id * CSR_WIFI_NUM_INTERFACES + i] = netdev_priv(priv->netdev[i]);
+			}
+		}
+
+		for(i=0;i<CSR_WIFI_NUM_INTERFACES;i++)
+		{
+			netInterface_priv_t *interfacePriv = priv->interfacePriv[i];
+			interfacePriv->netdev_registered=0;
+		}
+	}
 
 #ifdef CSR_WIFI_RX_PATH_SPLIT
-    if (signal_buffer_init(priv, CSR_WIFI_RX_SIGNAL_BUFFER_SIZE))
-    {
-        unifi_error(priv,"Failed to allocate shared memory for T-H signals\n");
-        goto failed2;
-    }
-    priv->rx_workqueue = create_singlethread_workqueue("rx_workq");
-    if (priv->rx_workqueue == NULL) {
-        unifi_error(priv,"create_singlethread_workqueue failed \n");
-        goto failed3;
-    }
-    INIT_WORK(&priv->rx_work_struct, rx_wq_handler);
+	if (signal_buffer_init(priv, CSR_WIFI_RX_SIGNAL_BUFFER_SIZE))
+	{
+		unifi_error(priv,"Failed to allocate shared memory for T-H signals\n");
+		goto failed2;
+	}
+	priv->rx_workqueue = create_singlethread_workqueue("rx_workq");
+	if (priv->rx_workqueue == NULL) {
+		unifi_error(priv,"create_singlethread_workqueue failed \n");
+		goto failed3;
+	}
+	INIT_WORK(&priv->rx_work_struct, rx_wq_handler);
 #endif
 
 #ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-    if (log_hip_signals)
-    {
-        uf_register_hip_offline_debug(priv);
-    }
+	if (log_hip_signals)
+	{
+		uf_register_hip_offline_debug(priv);
+	}
 #endif
 
-    /* Initialise the SME related threads and parameters */
-    r = uf_sme_init(priv);
-    if (r) {
-        unifi_error(priv, "SME initialisation failed.\n");
-        goto failed4;
-    }
-
-    /*
-     * Run the userspace helper program (unififw) to perform
-     * the device initialisation.
-     */
-    unifi_trace(priv, UDBG1, "run UniFi helper app...\n");
-    r = uf_run_unifihelper(priv);
-    if (r) {
-        unifi_notice(priv, "unable to run UniFi helper app\n");
-        /* Not a fatal error. */
-    }
-
-    up(&Unifi_instance_mutex);
-
-    func_exit();
-    return priv;
+	/* Initialise the SME related threads and parameters */
+	r = uf_sme_init(priv);
+	if (r) {
+		unifi_error(priv, "SME initialisation failed.\n");
+		goto failed4;
+	}
+
+	/*
+	 * Run the userspace helper program (unififw) to perform
+	 * the device initialisation.
+	 */
+	unifi_trace(priv, UDBG1, "run UniFi helper app...\n");
+	r = uf_run_unifihelper(priv);
+	if (r) {
+		unifi_notice(priv, "unable to run UniFi helper app\n");
+		/* Not a fatal error. */
+	}
+
+	up(&Unifi_instance_mutex);
+
+	func_exit();
+	return priv;
 
 failed4:
 #ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
 if (log_hip_signals)
 {
-    uf_unregister_hip_offline_debug(priv);
+	uf_unregister_hip_offline_debug(priv);
 }
 #endif
 #ifdef CSR_WIFI_RX_PATH_SPLIT
-    flush_workqueue(priv->rx_workqueue);
-    destroy_workqueue(priv->rx_workqueue);
+	flush_workqueue(priv->rx_workqueue);
+	destroy_workqueue(priv->rx_workqueue);
 failed3:
-    signal_buffer_free(priv,CSR_WIFI_RX_SIGNAL_BUFFER_SIZE);
+	signal_buffer_free(priv,CSR_WIFI_RX_SIGNAL_BUFFER_SIZE);
 failed2:
 #endif
-    /* Remove the device nodes */
-    uf_destroy_device_nodes(priv);
+	/* Remove the device nodes */
+	uf_destroy_device_nodes(priv);
 failed1:
-    /* Deregister priv->netdev_client */
-    ul_deregister_client(priv->netdev_client);
+	/* Deregister priv->netdev_client */
+	ul_deregister_client(priv->netdev_client);
 
 failed0:
-    if (priv && priv->card) {
-        unifi_coredump_free(priv->card);
-        unifi_free_card(priv->card);
-    }
-    if (priv) {
-        uf_free_netdevice(priv);
-    }
-
-    up(&Unifi_instance_mutex);
-
-    func_exit();
-    return NULL;
+	if (priv && priv->card) {
+		unifi_coredump_free(priv->card);
+		unifi_free_card(priv->card);
+	}
+	if (priv) {
+		uf_free_netdevice(priv);
+	}
+
+	up(&Unifi_instance_mutex);
+
+	func_exit();
+	return NULL;
 } /* register_unifi_sdio() */
 
 
@@ -458,35 +458,35 @@ failed0:
  * ---------------------------------------------------------------------------
  *  ask_unifi_sdio_cleanup
  *
- *      We can not free our private context, until all the char device
- *      clients have closed the file handles. unregister_unifi_sdio() which
- *      is called when a card is removed, waits on Unifi_cleanup_wq until
- *      the reference count becomes zero. It is time to wake it up now.
+ *	  We can not free our private context, until all the char device
+ *	  clients have closed the file handles. unregister_unifi_sdio() which
+ *	  is called when a card is removed, waits on Unifi_cleanup_wq until
+ *	  the reference count becomes zero. It is time to wake it up now.
  *
  *  Arguments:
- *      priv          Pointer to driver context.
+ *	  priv		  Pointer to driver context.
  *
  *  Returns:
- *      None.
+ *	  None.
  * ---------------------------------------------------------------------------
  */
 static void
 ask_unifi_sdio_cleanup(unifi_priv_t *priv)
 {
-    func_enter();
+	func_enter();
 
-    /*
-     * Now clear the flag that says the old instance is in use.
-     * This is used to prevent a new instance being started before old
-     * one has finshed closing down, for example if bounce makes the card
-     * appear to be ejected and re-inserted quickly.
-     */
-    In_use[priv->instance] = UNIFI_DEV_CLEANUP;
+	/*
+	 * Now clear the flag that says the old instance is in use.
+	 * This is used to prevent a new instance being started before old
+	 * one has finshed closing down, for example if bounce makes the card
+	 * appear to be ejected and re-inserted quickly.
+	 */
+	In_use[priv->instance] = UNIFI_DEV_CLEANUP;
 
-    unifi_trace(NULL, UDBG5, "ask_unifi_sdio_cleanup: wake up cleanup workqueue.\n");
-    wake_up(&Unifi_cleanup_wq);
+	unifi_trace(NULL, UDBG5, "ask_unifi_sdio_cleanup: wake up cleanup workqueue.\n");
+	wake_up(&Unifi_cleanup_wq);
 
-    func_exit();
+	func_exit();
 
 } /* ask_unifi_sdio_cleanup() */
 
@@ -495,116 +495,116 @@ ask_unifi_sdio_cleanup(unifi_priv_t *priv)
  * ---------------------------------------------------------------------------
  *  cleanup_unifi_sdio
  *
- *      Release any resources owned by a unifi instance.
+ *	  Release any resources owned by a unifi instance.
  *
  *  Arguments:
- *      priv          Pointer to the instance to free.
+ *	  priv		  Pointer to the instance to free.
  *
  *  Returns:
- *      None.
+ *	  None.
  * ---------------------------------------------------------------------------
  */
 static void
 cleanup_unifi_sdio(unifi_priv_t *priv)
 {
-    int priv_instance;
-    int i;
-    static const CsrWifiMacAddress broadcast_address = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
+	int priv_instance;
+	int i;
+	static const CsrWifiMacAddress broadcast_address = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
 
-    func_enter();
+	func_enter();
 
-    /* Remove the device nodes */
-    uf_destroy_device_nodes(priv);
+	/* Remove the device nodes */
+	uf_destroy_device_nodes(priv);
 
-    /* Mark this device as gone away by NULLing the entry in Unifi_instances */
-    Unifi_instances[priv->instance] = NULL;
+	/* Mark this device as gone away by NULLing the entry in Unifi_instances */
+	Unifi_instances[priv->instance] = NULL;
 
-    unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: remove_proc_entry\n");
-    /*
-     * Free the children of priv before unifi_free_netdevice() frees
-     * the priv struct
-     */
-    remove_proc_entry(priv->proc_entry_name, 0);
+	unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: remove_proc_entry\n");
+	/*
+	 * Free the children of priv before unifi_free_netdevice() frees
+	 * the priv struct
+	 */
+	remove_proc_entry(priv->proc_entry_name, 0);
 
 
-    /* Unregister netdev as a client. */
-    if (priv->netdev_client) {
-        unifi_trace(priv, UDBG2, "Netdev client (id:%d s:0x%X) is unregistered\n",
-                priv->netdev_client->client_id, priv->netdev_client->sender_id);
-        ul_deregister_client(priv->netdev_client);
-    }
+	/* Unregister netdev as a client. */
+	if (priv->netdev_client) {
+		unifi_trace(priv, UDBG2, "Netdev client (id:%d s:0x%X) is unregistered\n",
+				priv->netdev_client->client_id, priv->netdev_client->sender_id);
+		ul_deregister_client(priv->netdev_client);
+	}
 
-    /* Destroy the SME related threads and parameters */
-    uf_sme_deinit(priv);
+	/* Destroy the SME related threads and parameters */
+	uf_sme_deinit(priv);
 
 #ifdef CSR_SME_USERSPACE
-    priv->smepriv = NULL;
+	priv->smepriv = NULL;
 #endif
 
 #ifdef CSR_WIFI_HIP_DEBUG_OFFLINE
-    if (log_hip_signals)
-    {
-        uf_unregister_hip_offline_debug(priv);
-    }
+	if (log_hip_signals)
+	{
+		uf_unregister_hip_offline_debug(priv);
+	}
 #endif
 
-    /* Free any packets left in the Rx queues */
-    for(i=0;i<CSR_WIFI_NUM_INTERFACES;i++)
-    {
-        uf_free_pending_rx_packets(priv, UF_UNCONTROLLED_PORT_Q, broadcast_address,i);
-        uf_free_pending_rx_packets(priv, UF_CONTROLLED_PORT_Q, broadcast_address,i);
-    }
-    /*
-     * We need to free the resources held by the core, which include tx skbs,
-     * otherwise we can not call unregister_netdev().
-     */
-    if (priv->card) {
-        unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: free card\n");
-        unifi_coredump_free(priv->card);
-        unifi_free_card(priv->card);
-        priv->card = NULL;
-    }
-
-    /*
-     * Unregister the network device.
-     * We can not unregister the netdev before we release
-     * all pending packets in the core.
-     */
-    uf_unregister_netdev(priv);
-    priv->totalInterfaceCount = 0;
-
-    /* Clear the table of registered netdev_priv's */
-    for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
-        Unifi_netdev_instances[priv->instance * CSR_WIFI_NUM_INTERFACES + i] = NULL;
-    }
-
-    unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: uf_free_netdevice\n");
-    /*
-     * When uf_free_netdevice() returns, the priv is invalid
-     * so we need to remember the instance to clear the global flag later.
-     */
-    priv_instance = priv->instance;
+	/* Free any packets left in the Rx queues */
+	for(i=0;i<CSR_WIFI_NUM_INTERFACES;i++)
+	{
+		uf_free_pending_rx_packets(priv, UF_UNCONTROLLED_PORT_Q, broadcast_address,i);
+		uf_free_pending_rx_packets(priv, UF_CONTROLLED_PORT_Q, broadcast_address,i);
+	}
+	/*
+	 * We need to free the resources held by the core, which include tx skbs,
+	 * otherwise we can not call unregister_netdev().
+	 */
+	if (priv->card) {
+		unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: free card\n");
+		unifi_coredump_free(priv->card);
+		unifi_free_card(priv->card);
+		priv->card = NULL;
+	}
+
+	/*
+	 * Unregister the network device.
+	 * We can not unregister the netdev before we release
+	 * all pending packets in the core.
+	 */
+	uf_unregister_netdev(priv);
+	priv->totalInterfaceCount = 0;
+
+	/* Clear the table of registered netdev_priv's */
+	for (i = 0; i < CSR_WIFI_NUM_INTERFACES; i++) {
+		Unifi_netdev_instances[priv->instance * CSR_WIFI_NUM_INTERFACES + i] = NULL;
+	}
+
+	unifi_trace(priv, UDBG5, "cleanup_unifi_sdio: uf_free_netdevice\n");
+	/*
+	 * When uf_free_netdevice() returns, the priv is invalid
+	 * so we need to remember the instance to clear the global flag later.
+	 */
+	priv_instance = priv->instance;
 
 #ifdef CSR_WIFI_RX_PATH_SPLIT
-    flush_workqueue(priv->rx_workqueue);
-    destroy_workqueue(priv->rx_workqueue);
-    signal_buffer_free(priv,CSR_WIFI_RX_SIGNAL_BUFFER_SIZE);
+	flush_workqueue(priv->rx_workqueue);
+	destroy_workqueue(priv->rx_workqueue);
+	signal_buffer_free(priv,CSR_WIFI_RX_SIGNAL_BUFFER_SIZE);
 #endif
 
-    /* Priv is freed as part of the net_device */
-    uf_free_netdevice(priv);
+	/* Priv is freed as part of the net_device */
+	uf_free_netdevice(priv);
 
-    /*
-     * Now clear the flag that says the old instance is in use.
-     * This is used to prevent a new instance being started before old
-     * one has finshed closing down, for example if bounce makes the card
-     * appear to be ejected and re-inserted quickly.
-     */
-    In_use[priv_instance] = UNIFI_DEV_NOT_IN_USE;
+	/*
+	 * Now clear the flag that says the old instance is in use.
+	 * This is used to prevent a new instance being started before old
+	 * one has finshed closing down, for example if bounce makes the card
+	 * appear to be ejected and re-inserted quickly.
+	 */
+	In_use[priv_instance] = UNIFI_DEV_NOT_IN_USE;
 
-    unifi_trace(NULL, UDBG5, "cleanup_unifi_sdio: DONE.\n");
+	unifi_trace(NULL, UDBG5, "cleanup_unifi_sdio: DONE.\n");
 
-    func_exit();
+	func_exit();
 
 } /* cleanup_unifi_sdio() */
 
@@ -613,81 +613,81 @@ cleanup_unifi_sdio(unifi_priv_t *priv)
  * ---------------------------------------------------------------------------
  *  unregister_unifi_sdio
  *
- *      Call from SDIO driver when it detects that UniFi has been removed.
+ *	  Call from SDIO driver when it detects that UniFi has been removed.
  *
  *  Arguments:
- *      bus_id          Number of the card that was ejected.
+ *	  bus_id		  Number of the card that was ejected.
  *
  *  Returns:
- *      None.
+ *	  None.
  * ---------------------------------------------------------------------------
  */
 static void
 unregister_unifi_sdio(int bus_id)
 {
-    unifi_priv_t *priv;
-    int interfaceTag=0;
-    u8 reason = CONFIG_IND_EXIT;
-
-    if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
-        unifi_error(NULL, "unregister_unifi_sdio: invalid device %d\n",
-                bus_id);
-        return;
-    }
-
-    priv = Unifi_instances[bus_id];
-    if (priv == NULL) {
-        unifi_error(priv, "unregister_unifi_sdio: device %d is not registered\n",
-                bus_id);
-        func_exit();
-        return;
-    }
-
-    /* Stop the network traffic before freeing the core. */
-    for(interfaceTag=0;interfaceTag<priv->totalInterfaceCount;interfaceTag++)
-    {
-        netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
-        if(interfacePriv->netdev_registered)
-        {
-            netif_carrier_off(priv->netdev[interfaceTag]);
-            netif_tx_stop_all_queues(priv->netdev[interfaceTag]);
-        }
-    }
+	unifi_priv_t *priv;
+	int interfaceTag=0;
+	u8 reason = CONFIG_IND_EXIT;
+
+	if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
+		unifi_error(NULL, "unregister_unifi_sdio: invalid device %d\n",
+				bus_id);
+		return;
+	}
+
+	priv = Unifi_instances[bus_id];
+	if (priv == NULL) {
+		unifi_error(priv, "unregister_unifi_sdio: device %d is not registered\n",
+				bus_id);
+		func_exit();
+		return;
+	}
+
+	/* Stop the network traffic before freeing the core. */
+	for(interfaceTag=0;interfaceTag<priv->totalInterfaceCount;interfaceTag++)
+	{
+		netInterface_priv_t *interfacePriv = priv->interfacePriv[interfaceTag];
+		if(interfacePriv->netdev_registered)
+		{
+			netif_carrier_off(priv->netdev[interfaceTag]);
+			netif_tx_stop_all_queues(priv->netdev[interfaceTag]);
+		}
+	}
 
 #ifdef CSR_NATIVE_LINUX
-    /*
-     * If the unifi thread was started, signal it to stop.  This
-     * should cause any userspace processes with open unifi device to
-     * close them.
-     */
-    uf_stop_thread(priv, &priv->bh_thread);
-
-    /* Unregister the interrupt handler */
-    if (csr_sdio_linux_remove_irq(priv->sdio)) {
-        unifi_notice(priv,
-                "csr_sdio_linux_remove_irq failed to talk to card.\n");
-    }
-
-    /* Ensure no MLME functions are waiting on a the mlme_event semaphore. */
-    uf_abort_mlme(priv);
+	/*
+	 * If the unifi thread was started, signal it to stop.  This
+	 * should cause any userspace processes with open unifi device to
+	 * close them.
+	 */
+	uf_stop_thread(priv, &priv->bh_thread);
+
+	/* Unregister the interrupt handler */
+	if (csr_sdio_linux_remove_irq(priv->sdio)) {
+		unifi_notice(priv,
+				"csr_sdio_linux_remove_irq failed to talk to card.\n");
+	}
+
+	/* Ensure no MLME functions are waiting on a the mlme_event semaphore. */
+	uf_abort_mlme(priv);
 #endif /* CSR_NATIVE_LINUX */
 
-    ul_log_config_ind(priv, &reason, sizeof(u8));
+	ul_log_config_ind(priv, &reason, sizeof(u8));
 
-    /* Deregister the UDI hook from the core. */
-    unifi_remove_udi_hook(priv->card, logging_handler);
+	/* Deregister the UDI hook from the core. */
+	unifi_remove_udi_hook(priv->card, logging_handler);
 
-    uf_put_instance(bus_id);
+	uf_put_instance(bus_id);
 
-    /*
-     * Wait until the device is cleaned up. i.e., when all userspace
-     * processes have closed any open unifi devices.
-     */
-    wait_event(Unifi_cleanup_wq, In_use[bus_id] == UNIFI_DEV_CLEANUP);
-    unifi_trace(NULL, UDBG5, "Received clean up event\n");
+	/*
+	 * Wait until the device is cleaned up. i.e., when all userspace
+	 * processes have closed any open unifi devices.
+	 */
+	wait_event(Unifi_cleanup_wq, In_use[bus_id] == UNIFI_DEV_CLEANUP);
+	unifi_trace(NULL, UDBG5, "Received clean up event\n");
 
-    /* Now we can free the private context and the char device nodes */
-    cleanup_unifi_sdio(priv);
+	/* Now we can free the private context and the char device nodes */
+	cleanup_unifi_sdio(priv);
 
 } /* unregister_unifi_sdio() */
 
@@ -696,22 +696,22 @@ unregister_unifi_sdio(int bus_id)
  * ---------------------------------------------------------------------------
  *  uf_find_instance
  *
- *      Find the context structure for a given UniFi device instance.
+ *	  Find the context structure for a given UniFi device instance.
  *
  *  Arguments:
- *      inst            The instance number to look for.
+ *	  inst			The instance number to look for.
  *
  *  Returns:
- *      None.
+ *	  None.
  * ---------------------------------------------------------------------------
  */
 unifi_priv_t *
 uf_find_instance(int inst)
 {
-    if ((inst < 0) || (inst >= MAX_UNIFI_DEVS)) {
-        return NULL;
-    }
-    return Unifi_instances[inst];
+	if ((inst < 0) || (inst >= MAX_UNIFI_DEVS)) {
+		return NULL;
+	}
+	return Unifi_instances[inst];
 } /* uf_find_instance() */
 
 
@@ -719,125 +719,125 @@ uf_find_instance(int inst)
  * ---------------------------------------------------------------------------
  *  uf_find_priv
  *
- *      Find the device instance for a given context structure.
+ *	  Find the device instance for a given context structure.
  *
  *  Arguments:
- *      priv            The context structure pointer to look for.
+ *	  priv			The context structure pointer to look for.
  *
  *  Returns:
- *      index of instance, -1 otherwise.
+ *	  index of instance, -1 otherwise.
  * ---------------------------------------------------------------------------
  */
 int
 uf_find_priv(unifi_priv_t *priv)
 {
-    int inst;
+	int inst;
 
-    if (!priv) {
-        return -1;
-    }
+	if (!priv) {
+		return -1;
+	}
 
-    for (inst = 0; inst < MAX_UNIFI_DEVS; inst++) {
-        if (Unifi_instances[inst] == priv) {
-            return inst;
-        }
-    }
+	for (inst = 0; inst < MAX_UNIFI_DEVS; inst++) {
+		if (Unifi_instances[inst] == priv) {
+			return inst;
+		}
+	}
 
-    return -1;
+	return -1;
 } /* uf_find_priv() */
 
 /*
  * ---------------------------------------------------------------------------
  *  uf_find_netdev_priv
  *
- *      Find the device instance for a given netdev context structure.
+ *	  Find the device instance for a given netdev context structure.
  *
  *  Arguments:
- *      priv            The context structure pointer to look for.
+ *	  priv			The context structure pointer to look for.
  *
  *  Returns:
- *      index of instance, -1 otherwise.
+ *	  index of instance, -1 otherwise.
  * ---------------------------------------------------------------------------
  */
 int
 uf_find_netdev_priv(netInterface_priv_t *priv)
 {
-    int inst;
+	int inst;
 
-    if (!priv) {
-        return -1;
-    }
+	if (!priv) {
+		return -1;
+	}
 
-    for (inst = 0; inst < MAX_UNIFI_DEVS * CSR_WIFI_NUM_INTERFACES; inst++) {
-        if (Unifi_netdev_instances[inst] == priv) {
-            return inst;
-        }
-    }
+	for (inst = 0; inst < MAX_UNIFI_DEVS * CSR_WIFI_NUM_INTERFACES; inst++) {
+		if (Unifi_netdev_instances[inst] == priv) {
+			return inst;
+		}
+	}
 
-    return -1;
+	return -1;
 } /* uf_find_netdev_priv() */
 
 /*
  * ---------------------------------------------------------------------------
  *  uf_get_instance
  *
- *      Find the context structure for a given UniFi device instance
- *      and increment the reference count.
+ *	  Find the context structure for a given UniFi device instance
+ *	  and increment the reference count.
  *
  *  Arguments:
- *      inst            The instance number to look for.
+ *	  inst			The instance number to look for.
  *
  *  Returns:
- *      Pointer to the instance or NULL if no instance exists.
+ *	  Pointer to the instance or NULL if no instance exists.
  * ---------------------------------------------------------------------------
  */
 unifi_priv_t *
 uf_get_instance(int inst)
 {
-    unifi_priv_t *priv;
+	unifi_priv_t *priv;
 
-    down(&Unifi_instance_mutex);
+	down(&Unifi_instance_mutex);
 
-    priv = uf_find_instance(inst);
-    if (priv) {
-        priv->ref_count++;
-    }
+	priv = uf_find_instance(inst);
+	if (priv) {
+		priv->ref_count++;
+	}
 
-    up(&Unifi_instance_mutex);
+	up(&Unifi_instance_mutex);
 
-    return priv;
+	return priv;
 }
 
 /*
  * ---------------------------------------------------------------------------
  *  uf_put_instance
  *
- *      Decrement the context reference count, freeing resources and
- *      shutting down the driver when the count reaches zero.
+ *	  Decrement the context reference count, freeing resources and
+ *	  shutting down the driver when the count reaches zero.
  *
  *  Arguments:
- *      inst            The instance number to look for.
+ *	  inst			The instance number to look for.
  *
  *  Returns:
- *      Pointer to the instance or NULL if no instance exists.
+ *	  Pointer to the instance or NULL if no instance exists.
  * ---------------------------------------------------------------------------
  */
 void
 uf_put_instance(int inst)
 {
-    unifi_priv_t *priv;
+	unifi_priv_t *priv;
 
-    down(&Unifi_instance_mutex);
+	down(&Unifi_instance_mutex);
 
-    priv = uf_find_instance(inst);
-    if (priv) {
-        priv->ref_count--;
-        if (priv->ref_count == 0) {
-            ask_unifi_sdio_cleanup(priv);
-        }
-    }
+	priv = uf_find_instance(inst);
+	if (priv) {
+		priv->ref_count--;
+		if (priv->ref_count == 0) {
+			ask_unifi_sdio_cleanup(priv);
+		}
+	}
 
-    up(&Unifi_instance_mutex);
+	up(&Unifi_instance_mutex);
 }
 
 
@@ -845,121 +845,121 @@ uf_put_instance(int inst)
  * ---------------------------------------------------------------------------
  *  uf_read_proc
  *
- *      Read method for driver node in /proc/driver/unifi0
+ *	  Read method for driver node in /proc/driver/unifi0
  *
  *  Arguments:
- *      page
- *      start
- *      offset
- *      count
- *      eof
- *      data
+ *	  page
+ *	  start
+ *	  offset
+ *	  count
+ *	  eof
+ *	  data
  *
  *  Returns:
- *      None.
+ *	  None.
  * ---------------------------------------------------------------------------
  */
 #ifdef CONFIG_PROC_FS
 static int
 uf_read_proc(char *page, char **start, off_t offset, int count,
-        int *eof, void *data)
+		int *eof, void *data)
 {
 #define UNIFI_DEBUG_TXT_BUFFER 8*1024
-    unifi_priv_t *priv;
-    int actual_amount_to_copy;
-    char *p, *orig_p;
-    s32 remain = UNIFI_DEBUG_TXT_BUFFER;
-    s32 written;
-    int i;
-
-    /*
-    * The following complex casting is in place in order to eliminate 64-bit compilation warning
-    * "cast to/from pointer from/to integer of different size"
-    */
-    priv = uf_find_instance((int)(long)data);
-    if (!priv) {
-        return 0;
-    }
-
-    p = kmalloc( UNIFI_DEBUG_TXT_BUFFER, GFP_KERNEL );
-
-    orig_p = p;
-
-    written = scnprintf(p, remain, "UniFi SDIO Driver: %s %s %s\n",
-            CSR_WIFI_VERSION, __DATE__, __TIME__);
-    UNIFI_SNPRINTF_RET(p, remain, written);
+	unifi_priv_t *priv;
+	int actual_amount_to_copy;
+	char *p, *orig_p;
+	s32 remain = UNIFI_DEBUG_TXT_BUFFER;
+	s32 written;
+	int i;
+
+	/*
+	* The following complex casting is in place in order to eliminate 64-bit compilation warning
+	* "cast to/from pointer from/to integer of different size"
+	*/
+	priv = uf_find_instance((int)(long)data);
+	if (!priv) {
+		return 0;
+	}
+
+	p = kmalloc( UNIFI_DEBUG_TXT_BUFFER, GFP_KERNEL );
+
+	orig_p = p;
+
+	written = scnprintf(p, remain, "UniFi SDIO Driver: %s %s %s\n",
+			CSR_WIFI_VERSION, __DATE__, __TIME__);
+	UNIFI_SNPRINTF_RET(p, remain, written);
 #ifdef CSR_SME_USERSPACE
-    written = scnprintf(p, remain, "SME: CSR userspace ");
-    UNIFI_SNPRINTF_RET(p, remain, written);
+	written = scnprintf(p, remain, "SME: CSR userspace ");
+	UNIFI_SNPRINTF_RET(p, remain, written);
 #ifdef CSR_SUPPORT_WEXT
-    written = scnprintf(p, remain, "with WEXT support\n");
+	written = scnprintf(p, remain, "with WEXT support\n");
 #else
-    written = scnprintf(p, remain, "\n");
+	written = scnprintf(p, remain, "\n");
 #endif /* CSR_SUPPORT_WEXT */
-    UNIFI_SNPRINTF_RET(p, remain, written);
+	UNIFI_SNPRINTF_RET(p, remain, written);
 #endif /* CSR_SME_USERSPACE */
 #ifdef CSR_NATIVE_LINUX
-    written = scnprintf(p, remain, "SME: native\n");
-    UNIFI_SNPRINTF_RET(p, remain, written);
+	written = scnprintf(p, remain, "SME: native\n");
+	UNIFI_SNPRINTF_RET(p, remain, written);
 #endif
 
 #ifdef CSR_SUPPORT_SME
-    written = scnprintf(p, remain,
-            "Firmware (ROM) build:%u, Patch:%u\n",
-            priv->card_info.fw_build,
-            priv->sme_versions.firmwarePatch);
-    UNIFI_SNPRINTF_RET(p, remain, written);
+	written = scnprintf(p, remain,
+			"Firmware (ROM) build:%u, Patch:%u\n",
+			priv->card_info.fw_build,
+			priv->sme_versions.firmwarePatch);
+	UNIFI_SNPRINTF_RET(p, remain, written);
 #endif
-    p += unifi_print_status(priv->card, p, &remain);
-
-    written = scnprintf(p, remain, "Last dbg str: %s\n",
-            priv->last_debug_string);
-    UNIFI_SNPRINTF_RET(p, remain, written);
-
-    written = scnprintf(p, remain, "Last dbg16:");
-    UNIFI_SNPRINTF_RET(p, remain, written);
-    for (i = 0; i < 8; i++) {
-        written = scnprintf(p, remain, " %04X",
-                priv->last_debug_word16[i]);
-        UNIFI_SNPRINTF_RET(p, remain, written);
-    }
-    written = scnprintf(p, remain, "\n");
-    UNIFI_SNPRINTF_RET(p, remain, written);
-    written = scnprintf(p, remain, "           ");
-    UNIFI_SNPRINTF_RET(p, remain, written);
-    for (; i < 16; i++) {
-        written = scnprintf(p, remain, " %04X",
-                priv->last_debug_word16[i]);
-        UNIFI_SNPRINTF_RET(p, remain, written);
-    }
-    written = scnprintf(p, remain, "\n");
-    UNIFI_SNPRINTF_RET(p, remain, written);
-    *start = page;
-
-    written = UNIFI_DEBUG_TXT_BUFFER - remain;
-
-    if( offset >= written )
-    {
-        *eof = 1;
-        kfree( orig_p );
-        return(0);
-    }
-
-    if( offset + count > written )
-    {
-        actual_amount_to_copy = written - offset;
-        *eof = 1;
-    }
-    else
-    {
-        actual_amount_to_copy = count;
-    }
-
-    memcpy( page, &(orig_p[offset]), actual_amount_to_copy );
-
-    kfree( orig_p );
-
-    return( actual_amount_to_copy );
+	p += unifi_print_status(priv->card, p, &remain);
+
+	written = scnprintf(p, remain, "Last dbg str: %s\n",
+			priv->last_debug_string);
+	UNIFI_SNPRINTF_RET(p, remain, written);
+
+	written = scnprintf(p, remain, "Last dbg16:");
+	UNIFI_SNPRINTF_RET(p, remain, written);
+	for (i = 0; i < 8; i++) {
+		written = scnprintf(p, remain, " %04X",
+				priv->last_debug_word16[i]);
+		UNIFI_SNPRINTF_RET(p, remain, written);
+	}
+	written = scnprintf(p, remain, "\n");
+	UNIFI_SNPRINTF_RET(p, remain, written);
+	written = scnprintf(p, remain, "		   ");
+	UNIFI_SNPRINTF_RET(p, remain, written);
+	for (; i < 16; i++) {
+		written = scnprintf(p, remain, " %04X",
+				priv->last_debug_word16[i]);
+		UNIFI_SNPRINTF_RET(p, remain, written);
+	}
+	written = scnprintf(p, remain, "\n");
+	UNIFI_SNPRINTF_RET(p, remain, written);
+	*start = page;
+
+	written = UNIFI_DEBUG_TXT_BUFFER - remain;
+
+	if( offset >= written )
+	{
+		*eof = 1;
+		kfree( orig_p );
+		return(0);
+	}
+
+	if( offset + count > written )
+	{
+		actual_amount_to_copy = written - offset;
+		*eof = 1;
+	}
+	else
+	{
+		actual_amount_to_copy = count;
+	}
+
+	memcpy( page, &(orig_p[offset]), actual_amount_to_copy );
+
+	kfree( orig_p );
+
+	return( actual_amount_to_copy );
 } /* uf_read_proc() */
 #endif
 
@@ -969,19 +969,19 @@ uf_read_proc(char *page, char **start, off_t offset, int count,
 static void
 uf_lx_suspend(CsrSdioFunction *sdio_ctx)
 {
-    unifi_priv_t *priv = sdio_ctx->driverData;
-    unifi_suspend(priv);
+	unifi_priv_t *priv = sdio_ctx->driverData;
+	unifi_suspend(priv);
 
-    CsrSdioSuspendAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
+	CsrSdioSuspendAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
 }
 
 static void
 uf_lx_resume(CsrSdioFunction *sdio_ctx)
 {
-    unifi_priv_t *priv = sdio_ctx->driverData;
-    unifi_resume(priv);
+	unifi_priv_t *priv = sdio_ctx->driverData;
+	unifi_resume(priv);
 
-    CsrSdioResumeAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
+	CsrSdioResumeAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
 }
 
 static int active_slot = MAX_UNIFI_DEVS;
@@ -990,85 +990,85 @@ static struct device *os_devices[MAX_UNIFI_DEVS];
 void
 uf_add_os_device(int bus_id, struct device *os_device)
 {
-    if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
-        unifi_error(NULL, "uf_add_os_device: invalid device %d\n",
-                bus_id);
-        return;
-    }
-
-    active_slot = bus_id;
-    os_devices[bus_id] = os_device;
+	if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
+		unifi_error(NULL, "uf_add_os_device: invalid device %d\n",
+				bus_id);
+		return;
+	}
+
+	active_slot = bus_id;
+	os_devices[bus_id] = os_device;
 } /* uf_add_os_device() */
 
 void
 uf_remove_os_device(int bus_id)
 {
-    if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
-        unifi_error(NULL, "uf_remove_os_device: invalid device %d\n",
-                bus_id);
-        return;
-    }
-
-    active_slot = bus_id;
-    os_devices[bus_id] = NULL;
+	if ((bus_id < 0) || (bus_id >= MAX_UNIFI_DEVS)) {
+		unifi_error(NULL, "uf_remove_os_device: invalid device %d\n",
+				bus_id);
+		return;
+	}
+
+	active_slot = bus_id;
+	os_devices[bus_id] = NULL;
 } /* uf_remove_os_device() */
 
 static void
 uf_sdio_inserted(CsrSdioFunction *sdio_ctx)
 {
-    unifi_priv_t *priv;
+	unifi_priv_t *priv;
 
-    unifi_trace(NULL, UDBG5, "uf_sdio_inserted(0x%p), slot_id=%d, dev=%p\n",
-            sdio_ctx, active_slot, os_devices[active_slot]);
+	unifi_trace(NULL, UDBG5, "uf_sdio_inserted(0x%p), slot_id=%d, dev=%p\n",
+			sdio_ctx, active_slot, os_devices[active_slot]);
 
-    priv = register_unifi_sdio(sdio_ctx, active_slot, os_devices[active_slot]);
-    if (priv == NULL) {
-        CsrSdioInsertedAcknowledge(sdio_ctx, CSR_RESULT_FAILURE);
-        return;
-    }
+	priv = register_unifi_sdio(sdio_ctx, active_slot, os_devices[active_slot]);
+	if (priv == NULL) {
+		CsrSdioInsertedAcknowledge(sdio_ctx, CSR_RESULT_FAILURE);
+		return;
+	}
 
-    sdio_ctx->driverData = priv;
+	sdio_ctx->driverData = priv;
 
-    CsrSdioInsertedAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
+	CsrSdioInsertedAcknowledge(sdio_ctx, CSR_RESULT_SUCCESS);
 } /* uf_sdio_inserted() */
 
 
 static void
 uf_sdio_removed(CsrSdioFunction *sdio_ctx)
 {
-    unregister_unifi_sdio(active_slot);
-    CsrSdioRemovedAcknowledge(sdio_ctx);
+	unregister_unifi_sdio(active_slot);
+	CsrSdioRemovedAcknowledge(sdio_ctx);
 } /* uf_sdio_removed() */
 
 
 static void
 uf_sdio_dsr_handler(CsrSdioFunction *sdio_ctx)
 {
-    unifi_priv_t *priv = sdio_ctx->driverData;
+	unifi_priv_t *priv = sdio_ctx->driverData;
 
-    unifi_sdio_interrupt_handler(priv->card);
+	unifi_sdio_interrupt_handler(priv->card);
 } /* uf_sdio_dsr_handler() */
 
 /*
  * ---------------------------------------------------------------------------
  *  uf_sdio_int_handler
  *
- *      Interrupt callback function for SDIO interrupts.
- *      This is called in kernel context (i.e. not interrupt context).
- *      We retrieve the unifi context pointer and call the main UniFi
- *      interrupt handler.
+ *	  Interrupt callback function for SDIO interrupts.
+ *	  This is called in kernel context (i.e. not interrupt context).
+ *	  We retrieve the unifi context pointer and call the main UniFi
+ *	  interrupt handler.
  *
  *  Arguments:
- *      fdev      SDIO context pointer
+ *	  fdev	  SDIO context pointer
  *
  *  Returns:
- *      None.
+ *	  None.
  * ---------------------------------------------------------------------------
  */
 static CsrSdioInterruptDsrCallback
 uf_sdio_int_handler(CsrSdioFunction *sdio_ctx)
 {
-    return uf_sdio_dsr_handler;
+	return uf_sdio_dsr_handler;
 } /* uf_sdio_int_handler() */
 
 
@@ -1076,18 +1076,18 @@ uf_sdio_int_handler(CsrSdioFunction *sdio_ctx)
 
 static CsrSdioFunctionId unifi_ids[] =
 {
-    {
-        .manfId = SDIO_MANF_ID_CSR,
-        .cardId = SDIO_CARD_ID_UNIFI_3,
-        .sdioFunction = SDIO_WLAN_FUNC_ID_UNIFI_3,
-        .sdioInterface = CSR_SDIO_ANY_SDIO_INTERFACE,
-    },
-    {
-        .manfId = SDIO_MANF_ID_CSR,
-        .cardId = SDIO_CARD_ID_UNIFI_4,
-        .sdioFunction = SDIO_WLAN_FUNC_ID_UNIFI_4,
-        .sdioInterface = CSR_SDIO_ANY_SDIO_INTERFACE,
-    }
+	{
+		.manfId = SDIO_MANF_ID_CSR,
+		.cardId = SDIO_CARD_ID_UNIFI_3,
+		.sdioFunction = SDIO_WLAN_FUNC_ID_UNIFI_3,
+		.sdioInterface = CSR_SDIO_ANY_SDIO_INTERFACE,
+	},
+	{
+		.manfId = SDIO_MANF_ID_CSR,
+		.cardId = SDIO_CARD_ID_UNIFI_4,
+		.sdioFunction = SDIO_WLAN_FUNC_ID_UNIFI_4,
+		.sdioInterface = CSR_SDIO_ANY_SDIO_INTERFACE,
+	}
 };
 
 
@@ -1096,14 +1096,14 @@ static CsrSdioFunctionId unifi_ids[] =
  */
 static CsrSdioFunctionDriver unifi_sdioFunction_drv =
 {
-    .inserted = uf_sdio_inserted,
-    .removed = uf_sdio_removed,
-    .intr = uf_sdio_int_handler,
-    .suspend = uf_lx_suspend,
-    .resume = uf_lx_resume,
-
-    .ids = unifi_ids,
-    .idsCount = sizeof(unifi_ids) / sizeof(unifi_ids[0])
+	.inserted = uf_sdio_inserted,
+	.removed = uf_sdio_removed,
+	.intr = uf_sdio_int_handler,
+	.suspend = uf_lx_suspend,
+	.resume = uf_lx_resume,
+
+	.ids = unifi_ids,
+	.idsCount = sizeof(unifi_ids) / sizeof(unifi_ids[0])
 };
 
 
@@ -1112,29 +1112,29 @@ static CsrSdioFunctionDriver unifi_sdioFunction_drv =
  *  uf_sdio_load
  *  uf_sdio_unload
  *
- *      These functions are called from the main module load and unload
- *      functions. They perform the appropriate operations for the monolithic
- *      driver.
+ *	  These functions are called from the main module load and unload
+ *	  functions. They perform the appropriate operations for the monolithic
+ *	  driver.
  *
  *  Arguments:
- *      None.
+ *	  None.
  *
  *  Returns:
- *      None.
+ *	  None.
  * ---------------------------------------------------------------------------
  */
 int __init
 uf_sdio_load(void)
 {
-    CsrResult csrResult;
+	CsrResult csrResult;
 
-    csrResult = CsrSdioFunctionDriverRegister(&unifi_sdioFunction_drv);
-    if (csrResult != CSR_RESULT_SUCCESS) {
-        unifi_error(NULL, "Failed to register UniFi SDIO driver: csrResult=%d\n", csrResult);
-        return -EIO;
-    }
+	csrResult = CsrSdioFunctionDriverRegister(&unifi_sdioFunction_drv);
+	if (csrResult != CSR_RESULT_SUCCESS) {
+		unifi_error(NULL, "Failed to register UniFi SDIO driver: csrResult=%d\n", csrResult);
+		return -EIO;
+	}
 
-    return 0;
+	return 0;
 } /* uf_sdio_load() */
 
 
@@ -1142,6 +1142,6 @@ uf_sdio_load(void)
 void __exit
 uf_sdio_unload(void)
 {
-    CsrSdioFunctionDriverUnregister(&unifi_sdioFunction_drv);
+	CsrSdioFunctionDriverUnregister(&unifi_sdioFunction_drv);
 } /* uf_sdio_unload() */
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ