Index: acx-mac80211-20071003/common.c
===================================================================
--- acx-mac80211-20071003.orig/common.c	2007-10-15 21:33:40.000000000 +0800
+++ acx-mac80211-20071003/common.c	2007-10-16 10:01:58.000000000 +0800
@@ -1683,7 +1683,9 @@
 */
 void
 acx_i_set_multicast_list(struct ieee80211_hw *hw,
-                            unsigned short netflags, int mc_count)
+                         unsigned int changed_flags,
+                         unsigned int *total_flags,
+                         int mc_count, struct dev_addr_list *mc_list)
 {
         acx_device_t *adev = ieee2adev(hw);
         unsigned long flags;
@@ -1692,9 +1694,12 @@
 
         acx_lock(adev, flags);
 
+        *total_flags &= (FIF_PROMISC_IN_BSS | FIF_ALLMULTI);
+        if ((changed_flags & (FIF_PROMISC_IN_BSS | FIF_ALLMULTI)) == 0)
+                return;
         /* firmwares don't have allmulti capability,
          * so just use promiscuous mode instead in this case. */
-        if (netflags & (IFF_PROMISC | IFF_ALLMULTI)) {
+        if (*total_flags) {
                 SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
                 CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
                 SET_BIT(adev->set_mask, SET_RXCONFIG);
@@ -4523,8 +4528,8 @@
 */
 
 int acx_net_set_key(struct ieee80211_hw *ieee,
-		    set_key_cmd cmd,
-		    u8 * addr, struct ieee80211_key_conf *key, int aid)
+		    enum set_key_cmd cmd, const u8 *local_addr,
+		    const u8 * addr, struct ieee80211_key_conf *key)
 {
 //      return 0;
 	struct acx_device *adev = ieee2adev(ieee);
@@ -4536,11 +4541,11 @@
 //	TODO();
 	switch (key->alg) {
 	default:
-	case ALG_NONE:
+/*	case ALG_NONE:
 	case ALG_NULL:
 		algorithm = ACX_SEC_ALGO_NONE;
 		break;
-	case ALG_WEP:
+*/	case ALG_WEP:
 		if (key->keylen == 5)
 			algorithm = ACX_SEC_ALGO_WEP;
 		else
@@ -4565,20 +4570,21 @@
 		if (err)
 			goto out_unlock;
 		key->hw_key_idx = index;
-		CLEAR_BIT(key->flags, IEEE80211_KEY_FORCE_SW_ENCRYPT);
-		if (CHECK_BIT(key->flags, IEEE80211_KEY_DEFAULT_TX_KEY))
-			adev->default_key_idx = index;
+/*		CLEAR_BIT(key->flags, IEEE80211_KEY_FORCE_SW_ENCRYPT);*/
+/*		if (CHECK_BIT(key->flags, IEEE80211_KEY_DEFAULT_TX_KEY))
+			adev->default_key_idx = index;*/
+                SET_BIT(key->flags, IEEE80211_KEY_FLAG_GENERATE_IV);
 		adev->key[index].enabled = 1;
 		break;
 	case DISABLE_KEY:
 		adev->key[index].enabled = 0;
 		err = 0;
 		break;
-	case REMOVE_ALL_KEYS:
+/*	case REMOVE_ALL_KEYS:
 		acx_clear_keys(adev);
 		err = 0;
 		break;
-     /* case ENABLE_COMPRESSION:
+*/    /* case ENABLE_COMPRESSION:
 	case DISABLE_COMPRESSION:
 		err = 0;
 		break; */
Index: acx-mac80211-20071003/pci.c
===================================================================
--- acx-mac80211-20071003.orig/pci.c	2007-10-15 21:33:40.000000000 +0800
+++ acx-mac80211-20071003/pci.c	2007-10-15 21:34:29.000000000 +0800
@@ -87,7 +87,7 @@
 static void disable_acx_irq(acx_device_t * adev);
 
 static int acxpci_e_open(struct ieee80211_hw *hw);
-static int acxpci_e_close(struct ieee80211_hw *hw);
+static void acxpci_e_close(struct ieee80211_hw *hw);
 static void acxpci_s_up(struct ieee80211_hw *hw);
 static void acxpci_s_down(struct ieee80211_hw *hw);
 
@@ -1414,12 +1414,12 @@
         .conf_tx = acx_net_conf_tx,
         .add_interface = acx_add_interface,
         .remove_interface = acx_remove_interface,
-	.open = acxpci_e_open,
+	.start = acxpci_e_open,
 	.stop = acxpci_e_close,
-        .reset = acx_net_reset,
+/*        .reset = acx_net_reset,*/
         .config = acx_net_config,
         .config_interface = acx_config_interface,
-        .set_multicast_list = acx_i_set_multicast_list,
+        .configure_filter = acx_i_set_multicast_list,
         .set_key = acx_net_set_key,
         .get_stats = acx_e_get_stats,
         .get_tx_stats = acx_net_get_tx_stats,
@@ -1454,9 +1454,7 @@
 		       pci_name(pdev));
 		goto fail_alloc_netdev;
 	}
-	ieee->flags &=	 ~IEEE80211_HW_RX_INCLUDES_FCS &
-			 ~IEEE80211_HW_MONITOR_DURING_OPER |
-			 IEEE80211_HW_WEP_INCLUDE_IV;
+	ieee->flags &=	 ~IEEE80211_HW_RX_INCLUDES_FCS;
 	ieee->queues = 1;
 
 	/* (NB: memsets to 0 entire area) */
@@ -2113,7 +2111,7 @@
 **	>0	f/w reported error
 **	<0	driver reported error
 */
-static int acxpci_e_close(struct ieee80211_hw *hw)
+static void acxpci_e_close(struct ieee80211_hw *hw)
 {
 	acx_device_t *adev = ieee2adev(hw);
 	unsigned long flags;
@@ -2142,7 +2140,6 @@
 
 	log(L_INIT, "closed device\n");
 	FN_EXIT0;
-	return OK;
 }
 
 
@@ -4145,9 +4142,7 @@
 		       vdev->dev.bus_id);
 		goto fail_alloc_netdev;
 	}
-	ieee->flags &=	 (~IEEE80211_HW_RX_INCLUDES_FCS &
-			  ~IEEE80211_HW_MONITOR_DURING_OPER) |
-			 IEEE80211_HW_WEP_INCLUDE_IV;
+	ieee->flags &=	 ~IEEE80211_HW_RX_INCLUDES_FCS;
 	ieee->queues = 1;
 
 	adev = ieee2adev(ieee);
Index: acx-mac80211-20071003/acx_func.h
===================================================================
--- acx-mac80211-20071003.orig/acx_func.h	2007-10-15 21:33:40.000000000 +0800
+++ acx-mac80211-20071003/acx_func.h	2007-10-15 21:36:01.000000000 +0800
@@ -610,10 +610,9 @@
 		struct ieee80211_if_init_conf *conf);
 int acx_net_reset(struct ieee80211_hw* ieee);
 int acx_net_set_key(struct ieee80211_hw *hw, 
-		set_key_cmd cmd,
-		u8 *addr,
-		struct ieee80211_key_conf *key,
-		int aid);
+		enum set_key_cmd cmd,
+		const u8 *local_addr, const u8 *addr,
+		struct ieee80211_key_conf *key);
 int acx_config_interface(struct ieee80211_hw* ieee, int if_id, 
 		struct ieee80211_if_conf *conf);
 int acx_net_config(struct ieee80211_hw* ieee, struct ieee80211_conf *conf);
@@ -625,7 +624,9 @@
 int acxpci_s_reset_dev(acx_device_t *adev);
 void acx_e_after_interrupt_task(struct work_struct* work);
 void acx_i_set_multicast_list(struct ieee80211_hw *hw,
-                            unsigned short netflags, int mc_count);
+                            unsigned int changed_flags,
+                            unsigned int *total_flags,
+                            int mc_count, struct dev_addr_list *mc_list);
 
 /*** End DeviceScape Functions **/
 
