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 **/