]> err.no Git - linux-2.6/blobdiff - drivers/net/wireless/ipw2200.c
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6] / drivers / net / wireless / ipw2200.c
index 750e43e9310aa0405eebfea1c278884d8129045b..b0d195d1721a6b490107c864043596d0a0768d10 100644 (file)
@@ -31,8 +31,9 @@
 ******************************************************************************/
 
 #include "ipw2200.h"
+#include <linux/version.h>
 
-#define IPW2200_VERSION "1.0.7"
+#define IPW2200_VERSION "git-1.0.8"
 #define DRV_DESCRIPTION        "Intel(R) PRO/Wireless 2200/2915 Network Driver"
 #define DRV_COPYRIGHT  "Copyright(c) 2003-2005 Intel Corporation"
 #define DRV_VERSION     IPW2200_VERSION
@@ -526,7 +527,7 @@ static void ipw_dump_error_log(struct ipw_priv *priv,
        for (i = 0; i < error->log_len; i++)
                IPW_ERROR("%i\t0x%08x\t%i\n",
                          error->log[i].time,
-                         error->log[i].event, error->log[i].data);
+                         error->log[i].data, error->log[i].event);
 }
 #endif
 
@@ -2834,7 +2835,7 @@ struct fw_chunk {
 };
 
 #define IPW_FW_MAJOR_VERSION 2
-#define IPW_FW_MINOR_VERSION 3
+#define IPW_FW_MINOR_VERSION 4
 
 #define IPW_FW_MINOR(x) ((x & 0xff) >> 8)
 #define IPW_FW_MAJOR(x) (x & 0xff)
@@ -7456,7 +7457,8 @@ static void ipw_handle_data_packet(struct ipw_priv *priv,
        /* HW decrypt will not clear the WEP bit, MIC, PN, etc. */
        hdr = (struct ieee80211_hdr_4addr *)rxb->skb->data;
        if (priv->ieee->iw_mode != IW_MODE_MONITOR &&
-           (is_multicast_ether_addr(hdr->addr1) ?
+           ((is_multicast_ether_addr(hdr->addr1) ||
+             is_broadcast_ether_addr(hdr->addr1)) ?
             !priv->ieee->host_mc_decrypt : !priv->ieee->host_decrypt))
                ipw_rebuild_decrypted_skb(priv, rxb->skb);
 
@@ -9652,7 +9654,8 @@ static inline int ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb,
        switch (priv->ieee->iw_mode) {
        case IW_MODE_ADHOC:
                hdr_len = IEEE80211_3ADDR_LEN;
-               unicast = !is_multicast_ether_addr(hdr->addr1);
+               unicast = !(is_multicast_ether_addr(hdr->addr1) ||
+                           is_broadcast_ether_addr(hdr->addr1));
                id = ipw_find_station(priv, hdr->addr1);
                if (id == IPW_INVALID_STATION) {
                        id = ipw_add_station(priv, hdr->addr1);
@@ -9667,7 +9670,8 @@ static inline int ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb,
 
        case IW_MODE_INFRA:
        default:
-               unicast = !is_multicast_ether_addr(hdr->addr3);
+               unicast = !(is_multicast_ether_addr(hdr->addr3) ||
+                           is_broadcast_ether_addr(hdr->addr3));
                hdr_len = IEEE80211_3ADDR_LEN;
                id = 0;
                break;
@@ -10495,6 +10499,17 @@ static const struct ieee80211_geo ipw_geos[] = {
               {5210, 42}, {5230, 46}},
         },
 
+       {                       /* Rest of World */
+        "ZZR",
+        .bg_channels = 14,
+        .bg = {{2412, 1}, {2417, 2}, {2422, 3},
+               {2427, 4}, {2432, 5}, {2437, 6},
+               {2442, 7}, {2447, 8}, {2452, 9},
+               {2457, 10}, {2462, 11}, {2467, 12},
+               {2472, 13}, {2484, 14, IEEE80211_CH_B_ONLY |
+                            IEEE80211_CH_PASSIVE_ONLY}},
+        },
+
        {                       /* High Band */
         "ZZH",
         .bg_channels = 13,
@@ -10711,8 +10726,13 @@ static int ipw_up(struct ipw_priv *priv)
                                    ipw_geos[j].name, 3))
                                break;
                }
-               if (j == ARRAY_SIZE(ipw_geos))
+               if (j == ARRAY_SIZE(ipw_geos)) {
+                       IPW_WARNING("SKU [%c%c%c] not recognized.\n",
+                                   priv->eeprom[EEPROM_COUNTRY_CODE + 0],
+                                   priv->eeprom[EEPROM_COUNTRY_CODE + 1],
+                                   priv->eeprom[EEPROM_COUNTRY_CODE + 2]);
                        j = 0;
+               }
                if (ipw_set_geo(priv->ieee, &ipw_geos[j])) {
                        IPW_WARNING("Could not set geography.");
                        return 0;