- inline functions can't cross C files.
- os_macros.h is an unnecessary abstraction
- libertas_driver_lock should not spread though more files.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Index: linus-2.6/drivers/net/wireless/libertas/if_usb.c
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/if_usb.c
+++ linus-2.6/drivers/net/wireless/libertas/if_usb.c
@@ -43,7 +43,6 @@ Change log:
 #include "wlan_decl.h"
 #include "wlan_defs.h"
 #include "wlan_dev.h"
-#include "os_macros.h"
 
 /* Context definition for Interrupt simulation */
 #define TX_SUCCESS	1
@@ -712,15 +711,13 @@ int libertas_sbi_reenable_host_interrupt
 	return WLAN_STATUS_SUCCESS;
 }
 
+/* called with libertas_driver_lock held */
 int libertas_sbi_get_int_status(wlan_private * priv, u8 * ireg)
 {
-	unsigned long flags;
 	ENTER();
 
-	spin_lock_irqsave(&libertas_driver_lock, flags);
 	*ireg = usb_int_cause;
 	usb_int_cause = 0;
-	spin_unlock_irqrestore(&libertas_driver_lock, flags);
 
 	PRINTM(INFO, "Int cause is 0x%X\n", *ireg);
 
@@ -1035,7 +1032,7 @@ int libertas_sbi_disable_host_int(wlan_p
  *  @param priv		pointer to wlan_private
  *  @return 	   	WLAN_STATUS_SUCCESS
  */
-inline int libertas_sbi_suspend(wlan_private * priv)
+int libertas_sbi_suspend(wlan_private * priv)
 {
 	return WLAN_STATUS_SUCCESS;
 }
@@ -1045,7 +1042,7 @@ inline int libertas_sbi_suspend(wlan_pri
  *  @param priv		pointer to wlan_private
  *  @return 	   	WLAN_STATUS_SUCCESS
  */
-inline int libertas_sbi_resume(wlan_private * priv)
+int libertas_sbi_resume(wlan_private * priv)
 {
 	return WLAN_STATUS_SUCCESS;
 }
Index: linus-2.6/drivers/net/wireless/libertas/os_macros.h
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/os_macros.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
-  * (c) Copyright © 2003-2006, Marvell International Ltd. 
-  * All Rights Reserved
-  *
-  * This software file (the "File") is distributed by Marvell International 
-  * Ltd. under the terms of the GNU General Public License Version 2, June 1991 
-  * (the "License").  You may use, redistribute and/or modify this File in 
-  * accordance with the terms and conditions of the License, a copy of which 
-  * is available along with the File in the license.txt file or by writing to 
-  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
-  * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-  *
-  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 
-  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 
-  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about 
-  * this warranty disclaimer.
-  *
-  */
-
-#ifndef	_OS_MACROS_H
-#define _OS_MACROS_H
-
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-
-extern spinlock_t libertas_driver_lock;
-
-static inline int CopyMulticastAddrs(wlan_adapter * Adapter,
-				     struct net_device *dev)
-{
-	int i = 0;
-	struct dev_mc_list *mcptr = dev->mc_list;
-
-	for (i = 0; i < dev->mc_count; i++) {
-		memcpy(&Adapter->MulticastList[i], mcptr->dmi_addr, ETH_ALEN);
-		mcptr = mcptr->next;
-	}
-
-	return i;
-
-}
-
-static inline int os_upload_rx_packet(wlan_private * priv, struct sk_buff *skb)
-{
-
-#define IPFIELD_ALIGN_OFFSET	2
-	PRINTM(INFO, "skb->data=%p\n", skb->data);
-
-	skb->dev = priv->wlan_dev.netdev;
-	skb->protocol = eth_type_trans(skb, priv->wlan_dev.netdev);
-	skb->ip_summed = CHECKSUM_UNNECESSARY;
-
-	netif_rx(skb);
-
-	return 0;
-}
-
-/* netif carrier_on/off and start(wake)/stop_queue handling
-		carrier_on	carrier_off	start_queue	stop_queue
- open		x(connect)	x(disconnect)	x
- close				x				x
- assoc		x				x
- adhoc-start	x				x
- adhoc-join	x				x
- scan-begin			x				x
- scan-end	x				x
- deauth				x				x
- ps-sleep			x				x
- ps-awake	x				x
- ds-enter			x				x
- ds-exit	x				x
- xmit								x
- xmit-done					x
- tx-timeout
- */
-
-#endif				/* _OS_MACROS_H */
Index: linus-2.6/drivers/net/wireless/libertas/sbi.h
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/sbi.h
+++ linus-2.6/drivers/net/wireless/libertas/sbi.h
@@ -106,8 +106,8 @@ int libertas_sbi_host_to_card(wlan_priva
 int libertas_sbi_enable_host_int(wlan_private *);
 
 #ifdef ENABLE_PM
-inline int libertas_sbi_suspend(wlan_private *);
-inline int libertas_sbi_resume(wlan_private *);
+int libertas_sbi_suspend(wlan_private *);
+int libertas_sbi_resume(wlan_private *);
 #endif
 
 int libertas_sbi_get_cis_info(wlan_private * priv);
Index: linus-2.6/drivers/net/wireless/libertas/wlan_decl.h
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/wlan_decl.h
+++ linus-2.6/drivers/net/wireless/libertas/wlan_decl.h
@@ -70,6 +70,8 @@ u32 libertas_index_to_data_rate(u8 index
 u8 libertas_data_rate_to_index(u32 rate);
 void libertas_get_version(wlan_adapter * adapter, char *version, int maxlen);
 
+int libertas_upload_rx_packet(wlan_private * priv, struct sk_buff *skb);
+
 /** The proc fs interface */
 void libertas_proc_entry(wlan_private * priv, struct net_device *dev);
 void libertas_proc_remove(wlan_private * priv);
Index: linus-2.6/drivers/net/wireless/libertas/wlan_defs.h
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/wlan_defs.h
+++ linus-2.6/drivers/net/wireless/libertas/wlan_defs.h
@@ -31,6 +31,8 @@ Change log:
 #ifndef _WLAN_DEFS_H_
 #define _WLAN_DEFS_H_
 
+#include <linux/spinlock.h>
+
 /** Double-Word(32Bit) Bit definition */
 #define DW_BIT_0	0x00000001
 #define DW_BIT_1	0x00000002
@@ -372,6 +374,7 @@ static inline void HEXDUMP(char *prompt,
 typedef struct _wlan_private wlan_private;
 typedef struct _wlan_adapter wlan_adapter;
 
+extern spinlock_t libertas_driver_lock;
 extern const char libertas_driver_version[];
 extern u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE];
 
Index: linus-2.6/drivers/net/wireless/libertas/wlan_main.c
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/wlan_main.c
+++ linus-2.6/drivers/net/wireless/libertas/wlan_main.c
@@ -58,13 +58,12 @@ Change log:
 #include "wlan_dev.h"
 #include "wlan_fw.h"
 #include "wlan_wext.h"
-#include "os_macros.h"
 
 #ifdef ENABLE_PM
 static struct pm_dev *wlan_pm_dev = NULL;
 #endif
 
-spinlock_t libertas_driver_lock = SPIN_LOCK_UNLOCKED;
+DEFINE_SPINLOCK(libertas_driver_lock);
 
 #define WLAN_TX_PWR_DEFAULT		20	/*100mW */
 #define WLAN_TX_PWR_US_DEFAULT		20	/*100mW */
@@ -509,6 +508,21 @@ static int wlan_set_mac_address(struct n
 	return ret;
 }
 
+static int wlan_copy_multicast_address(wlan_adapter * Adapter,
+				     struct net_device *dev)
+{
+	int i = 0;
+	struct dev_mc_list *mcptr = dev->mc_list;
+
+	for (i = 0; i < dev->mc_count; i++) {
+		memcpy(&Adapter->MulticastList[i], mcptr->dmi_addr, ETH_ALEN);
+		mcptr = mcptr->next;
+	}
+
+	return i;
+
+}
+
 /** 
  *  @brief This function sets multicast addresses to firmware
  *  
@@ -560,7 +574,7 @@ static void wlan_set_multicast_list(stru
 				    HostCmd_ACT_MAC_MULTICAST_ENABLE;
 
 				Adapter->NumOfMulticastMACAddr =
-				    CopyMulticastAddrs(Adapter, dev);
+				    wlan_copy_multicast_address(Adapter, dev);
 
 				PRINTM(INFO, "Multicast addresses: %d\n",
 				       dev->mc_count);
@@ -660,11 +674,14 @@ static int wlan_service_main_thread(void
 		}
 
 		if (Adapter->IntCounter) {
+			u8 int_status;
+
 			spin_lock_irqsave(&libertas_driver_lock, flags);
 			Adapter->IntCounter = 0;
+			int_status = libertas_sbi_get_int_status(priv, &ireg);
 			spin_unlock_irqrestore(&libertas_driver_lock, flags);
 
-			if (libertas_sbi_get_int_status(priv, &ireg)) {
+			if (int_status) {
 				PRINTM(INFO,
 				       "main-thread: reading HOST_INT_STATUS_REG failed\n");
 				continue;
Index: linus-2.6/drivers/net/wireless/libertas/wlan_rx.c
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/wlan_rx.c
+++ linus-2.6/drivers/net/wireless/libertas/wlan_rx.c
@@ -25,6 +25,7 @@ Change log:
 	
 ********************************************************/
 
+#include <linux/etherdevice.h>
 #include <linux/types.h>
 
 #include "hostcmd.h"
@@ -32,7 +33,6 @@ Change log:
 #include "wlan_decl.h"
 #include "wlan_dev.h"
 #include "wlan_wext.h"
-#include "os_macros.h"
 
 struct Eth803Hdr {
 	u8 dest_addr[6];
@@ -165,6 +165,19 @@ static void wlan_compute_rssi(wlan_priva
 		Global functions
 ********************************************************/
 
+int libertas_upload_rx_packet(wlan_private * priv, struct sk_buff *skb)
+{
+	PRINTM(INFO, "skb->data=%p\n", skb->data);
+
+	skb->dev = priv->wlan_dev.netdev;
+	skb->protocol = eth_type_trans(skb, priv->wlan_dev.netdev);
+	skb->ip_summed = CHECKSUM_UNNECESSARY;
+
+	netif_rx(skb);
+
+	return 0;
+}
+
 /**
  *  @brief This function processes received packet and forwards it
  *  to kernel/upper layer
@@ -279,8 +292,8 @@ int libertas_process_rxed_packet(wlan_pr
 	wlan_compute_rssi(priv, pRxPD);
 
 	PRINTM(INFO, "RX Data: Size of actual packet = %d\n", skb->len);
-	if (os_upload_rx_packet(priv, skb)) {
-		PRINTM(INFO, "RX Error: os_upload_rx_packet"
+	if (libertas_upload_rx_packet(priv, skb)) {
+		PRINTM(INFO, "RX Error: libertas_upload_rx_packet"
 		       " returns failure\n");
 		ret = WLAN_STATUS_FAILURE;
 		goto done;
@@ -449,8 +462,9 @@ static int ProcessRxed_802_11_Packet(wla
 
 	PRINTM(INFO, "RX Data: Size of actual packet = %d\n", skb->len);
 
-	if (os_upload_rx_packet(priv, skb)) {
-		PRINTM(INFO, "RX Error: os_upload_rx_packet returns failure\n");
+	if (libertas_upload_rx_packet(priv, skb)) {
+		PRINTM(INFO, "RX Error: libertas_upload_rx_packet "
+			"returns failure\n");
 		ret = WLAN_STATUS_FAILURE;
 		goto done;
 	}
Index: linus-2.6/drivers/net/wireless/libertas/wlan_tx.c
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/wlan_tx.c
+++ linus-2.6/drivers/net/wireless/libertas/wlan_tx.c
@@ -35,7 +35,6 @@ Change log:
 #include "wlan_defs.h"
 #include "wlan_dev.h"
 #include "wlan_wext.h"
-#include "os_macros.h"
 
 /**
  *  @brief This function converts Tx/Rx rates from IEEE80211_RADIOTAP_RATE 
@@ -367,7 +366,7 @@ void libertas_send_tx_feedback(wlan_priv
 	try_count = (status >> 16) & 0xff;
 	radiotap_hdr->data_retries = (try_count) ?
 	    (1 + Adapter->TxRetryCount - try_count) : 0;
-	os_upload_rx_packet(priv, Adapter->CurrentTxSkb);
+	libertas_upload_rx_packet(priv, Adapter->CurrentTxSkb);
 	Adapter->CurrentTxSkb = NULL;
 	priv->adapter->TxLockFlag = 0;
 	if (priv->adapter->MediaConnectStatus == WlanMediaStateConnected)
Index: linus-2.6/drivers/net/wireless/libertas/wlan_cmd.c
===================================================================
--- linus-2.6.orig/drivers/net/wireless/libertas/wlan_cmd.c
+++ linus-2.6/drivers/net/wireless/libertas/wlan_cmd.c
@@ -45,7 +45,6 @@ Change log:
 #include "wlan_dev.h"
 #include "wlan_join.h"
 #include "wlan_wext.h"
-#include "os_macros.h"
 
 static void CleanUpCmdCtrlNode(struct CmdCtrlNode *pTempNode);
 

--


