diff --git a/package/acx-mac80211/Makefile b/package/acx-mac80211/Makefile index 65ef0e1e7..8b09b43a4 100644 --- a/package/acx-mac80211/Makefile +++ b/package/acx-mac80211/Makefile @@ -50,7 +50,6 @@ $(DL_DIR)/$(PKG_FW_NAME): CONFIG_ACX_MAC80211_PCI=m \ PKG_EXTRA_CFLAGS:= \ - -I$(STAGING_DIR)/usr/include/mac80211 \ $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(PKG_EXTRA_KCONFIG)))) \ $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(PKG_EXTRA_KCONFIG)))) \ @@ -61,6 +60,8 @@ $(DL_DIR)/$(PKG_FW_NAME): SUBDIRS="$(PKG_BUILD_DIR)" \ $(PKG_EXTRA_KCONFIG) \ EXTRA_CFLAGS="$(PKG_EXTRA_CFLAGS)" \ + LINUXINCLUDE="-I$(STAGING_DIR)/usr/include/mac80211 -I$(LINUX_DIR)/include \ + -include linux/autoconf.h" \ V="$(V)" \ modules endef diff --git a/package/acx-mac80211/patches/003-mac80211_fixes.diff b/package/acx-mac80211/patches/003-mac80211_fixes.diff new file mode 100644 index 000000000..2a81a96ac --- /dev/null +++ b/package/acx-mac80211/patches/003-mac80211_fixes.diff @@ -0,0 +1,178 @@ +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 **/ +