fix acx-mac80211
[librecmc/librecmc.git] / package / acx-mac80211 / patches / 003-mac80211_fixes.diff
1 Index: acx-mac80211-20071003/common.c
2 ===================================================================
3 --- acx-mac80211-20071003.orig/common.c 2007-10-15 21:33:40.000000000 +0800
4 +++ acx-mac80211-20071003/common.c      2007-10-15 21:39:55.000000000 +0800
5 @@ -1683,7 +1683,9 @@
6  */
7  void
8  acx_i_set_multicast_list(struct ieee80211_hw *hw,
9 -                            unsigned short netflags, int mc_count)
10 +                         unsigned int changed_flags,
11 +                         unsigned int *total_flags,
12 +                         int mc_count, struct dev_addr_list *mc_list)
13  {
14          acx_device_t *adev = ieee2adev(hw);
15          unsigned long flags;
16 @@ -1692,9 +1694,12 @@
17  
18          acx_lock(adev, flags);
19  
20 +        if ((changed_flags & (FIF_PROMISC_IN_BSS | FIF_ALLMULTI)) == 0)
21 +                return;
22          /* firmwares don't have allmulti capability,
23           * so just use promiscuous mode instead in this case. */
24 -        if (netflags & (IFF_PROMISC | IFF_ALLMULTI)) {
25 +        *total_flags &= (FIF_PROMISC_IN_BSS | FIF_ALLMULTI);
26 +        if (*total_flags) {
27                  SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
28                  CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
29                  SET_BIT(adev->set_mask, SET_RXCONFIG);
30 @@ -4523,8 +4528,8 @@
31  */
32  
33  int acx_net_set_key(struct ieee80211_hw *ieee,
34 -                   set_key_cmd cmd,
35 -                   u8 * addr, struct ieee80211_key_conf *key, int aid)
36 +                   enum set_key_cmd cmd, const u8 *local_addr,
37 +                   const u8 * addr, struct ieee80211_key_conf *key)
38  {
39  //      return 0;
40         struct acx_device *adev = ieee2adev(ieee);
41 @@ -4536,11 +4541,11 @@
42  //     TODO();
43         switch (key->alg) {
44         default:
45 -       case ALG_NONE:
46 +/*     case ALG_NONE:
47         case ALG_NULL:
48                 algorithm = ACX_SEC_ALGO_NONE;
49                 break;
50 -       case ALG_WEP:
51 +*/     case ALG_WEP:
52                 if (key->keylen == 5)
53                         algorithm = ACX_SEC_ALGO_WEP;
54                 else
55 @@ -4565,20 +4570,21 @@
56                 if (err)
57                         goto out_unlock;
58                 key->hw_key_idx = index;
59 -               CLEAR_BIT(key->flags, IEEE80211_KEY_FORCE_SW_ENCRYPT);
60 -               if (CHECK_BIT(key->flags, IEEE80211_KEY_DEFAULT_TX_KEY))
61 -                       adev->default_key_idx = index;
62 +/*             CLEAR_BIT(key->flags, IEEE80211_KEY_FORCE_SW_ENCRYPT);*/
63 +/*             if (CHECK_BIT(key->flags, IEEE80211_KEY_DEFAULT_TX_KEY))
64 +                       adev->default_key_idx = index;*/
65 +                SET_BIT(key->flags, IEEE80211_KEY_FLAG_GENERATE_IV);
66                 adev->key[index].enabled = 1;
67                 break;
68         case DISABLE_KEY:
69                 adev->key[index].enabled = 0;
70                 err = 0;
71                 break;
72 -       case REMOVE_ALL_KEYS:
73 +/*     case REMOVE_ALL_KEYS:
74                 acx_clear_keys(adev);
75                 err = 0;
76                 break;
77 -     /* case ENABLE_COMPRESSION:
78 +*/    /* case ENABLE_COMPRESSION:
79         case DISABLE_COMPRESSION:
80                 err = 0;
81                 break; */
82 Index: acx-mac80211-20071003/pci.c
83 ===================================================================
84 --- acx-mac80211-20071003.orig/pci.c    2007-10-15 21:33:40.000000000 +0800
85 +++ acx-mac80211-20071003/pci.c 2007-10-15 21:34:29.000000000 +0800
86 @@ -87,7 +87,7 @@
87  static void disable_acx_irq(acx_device_t * adev);
88  
89  static int acxpci_e_open(struct ieee80211_hw *hw);
90 -static int acxpci_e_close(struct ieee80211_hw *hw);
91 +static void acxpci_e_close(struct ieee80211_hw *hw);
92  static void acxpci_s_up(struct ieee80211_hw *hw);
93  static void acxpci_s_down(struct ieee80211_hw *hw);
94  
95 @@ -1414,12 +1414,12 @@
96          .conf_tx = acx_net_conf_tx,
97          .add_interface = acx_add_interface,
98          .remove_interface = acx_remove_interface,
99 -       .open = acxpci_e_open,
100 +       .start = acxpci_e_open,
101         .stop = acxpci_e_close,
102 -        .reset = acx_net_reset,
103 +/*        .reset = acx_net_reset,*/
104          .config = acx_net_config,
105          .config_interface = acx_config_interface,
106 -        .set_multicast_list = acx_i_set_multicast_list,
107 +        .configure_filter = acx_i_set_multicast_list,
108          .set_key = acx_net_set_key,
109          .get_stats = acx_e_get_stats,
110          .get_tx_stats = acx_net_get_tx_stats,
111 @@ -1454,9 +1454,7 @@
112                        pci_name(pdev));
113                 goto fail_alloc_netdev;
114         }
115 -       ieee->flags &=   ~IEEE80211_HW_RX_INCLUDES_FCS &
116 -                        ~IEEE80211_HW_MONITOR_DURING_OPER |
117 -                        IEEE80211_HW_WEP_INCLUDE_IV;
118 +       ieee->flags &=   ~IEEE80211_HW_RX_INCLUDES_FCS;
119         ieee->queues = 1;
120  
121         /* (NB: memsets to 0 entire area) */
122 @@ -2113,7 +2111,7 @@
123  **     >0      f/w reported error
124  **     <0      driver reported error
125  */
126 -static int acxpci_e_close(struct ieee80211_hw *hw)
127 +static void acxpci_e_close(struct ieee80211_hw *hw)
128  {
129         acx_device_t *adev = ieee2adev(hw);
130         unsigned long flags;
131 @@ -2142,7 +2140,6 @@
132  
133         log(L_INIT, "closed device\n");
134         FN_EXIT0;
135 -       return OK;
136  }
137  
138  
139 @@ -4145,9 +4142,7 @@
140                        vdev->dev.bus_id);
141                 goto fail_alloc_netdev;
142         }
143 -       ieee->flags &=   (~IEEE80211_HW_RX_INCLUDES_FCS &
144 -                         ~IEEE80211_HW_MONITOR_DURING_OPER) |
145 -                        IEEE80211_HW_WEP_INCLUDE_IV;
146 +       ieee->flags &=   ~IEEE80211_HW_RX_INCLUDES_FCS;
147         ieee->queues = 1;
148  
149         adev = ieee2adev(ieee);
150 Index: acx-mac80211-20071003/acx_func.h
151 ===================================================================
152 --- acx-mac80211-20071003.orig/acx_func.h       2007-10-15 21:33:40.000000000 +0800
153 +++ acx-mac80211-20071003/acx_func.h    2007-10-15 21:36:01.000000000 +0800
154 @@ -610,10 +610,9 @@
155                 struct ieee80211_if_init_conf *conf);
156  int acx_net_reset(struct ieee80211_hw* ieee);
157  int acx_net_set_key(struct ieee80211_hw *hw, 
158 -               set_key_cmd cmd,
159 -               u8 *addr,
160 -               struct ieee80211_key_conf *key,
161 -               int aid);
162 +               enum set_key_cmd cmd,
163 +               const u8 *local_addr, const u8 *addr,
164 +               struct ieee80211_key_conf *key);
165  int acx_config_interface(struct ieee80211_hw* ieee, int if_id, 
166                 struct ieee80211_if_conf *conf);
167  int acx_net_config(struct ieee80211_hw* ieee, struct ieee80211_conf *conf);
168 @@ -625,7 +624,9 @@
169  int acxpci_s_reset_dev(acx_device_t *adev);
170  void acx_e_after_interrupt_task(struct work_struct* work);
171  void acx_i_set_multicast_list(struct ieee80211_hw *hw,
172 -                            unsigned short netflags, int mc_count);
173 +                            unsigned int changed_flags,
174 +                            unsigned int *total_flags,
175 +                            int mc_count, struct dev_addr_list *mc_list);
176  
177  /*** End DeviceScape Functions **/
178