--- /dev/null
+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-15 21:39:55.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);
+
++ 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)) {
++ *total_flags &= (FIF_PROMISC_IN_BSS | FIF_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 **/
+