All twelve one-bit bitfields have been subsumed into the new 'flags'
structure member and the new IEEE80211_HW_* definitions. 

Signed-off-by: David Kimdon <[EMAIL PROTECTED]>

Index: wireless-dev/drivers/net/wireless/d80211/adm8211/adm8211.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/d80211/adm8211/adm8211.c
+++ wireless-dev/drivers/net/wireless/d80211/adm8211/adm8211.c
@@ -2014,17 +2014,9 @@ static int __devinit adm8211_probe(struc
 
        hw->version = 2;
        hw->name = "adm8211";
-       hw->host_gen_beacon = 0;
-       hw->device_hides_wep = 0;
-       hw->rx_includes_fcs = 0;        // however, FCS is kept in promisc mode
-       hw->host_broadcast_ps_buffering = 0;
-       hw->wep_include_iv = 1;
-       hw->data_nullfunc_ack = 0;
-       hw->no_tkip_wmm_hwaccel = 1;
-       hw->extra_hdr_room = 0;
-       hw->device_strips_mic = 0;
-       hw->monitor_during_oper = 0;
-       hw->fraglist = 0;
+       hw->flags = IEEE80211_HW_WEP_INCLUDE_IV | 
IEEE80211_HW_NO_TKIP_WMM_HWACCEL;
+       // however, IEEE80211_HW_RX_INCLUDES_FCS in promisc mode
+
        hw->channel_change_time = 1000;
 
        hw->num_modes = 1;
Index: wireless-dev/include/net/d80211.h
===================================================================
--- wireless-dev.orig/include/net/d80211.h
+++ wireless-dev/include/net/d80211.h
@@ -437,19 +437,19 @@ struct ieee80211_hw {
         * configure the upper layer IEEE 802.11 module to generate beacons.
         * The low-level driver can use ieee80211_beacon_get() to fetch the
         * next beacon frame. */
-       unsigned int host_gen_beacon:1;
+#define IEEE80211_HW_HOST_GEN_BEACON (1<<0)
 
        /* The device needs to be supplied with a beacon template only. */
-       unsigned int host_gen_beacon_template:1;
+#define IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE (1<<1)
 
        /* Some devices handle decryption internally and do not
         * indicate whether the frame was encrypted (unencrypted frames
         * will be dropped by the hardware, unless specifically allowed
         * through) */
-       unsigned int device_hides_wep:1;
+#define IEEE80211_HW_DEVICE_HIDES_WEP (1<<2)
 
        /* Whether RX frames passed to ieee80211_rx() include FCS in the end */
-       unsigned int rx_includes_fcs:1;
+#define IEEE80211_HW_RX_INCLUDES_FCS (1<<3)
 
        /* Some wireless LAN chipsets buffer broadcast/multicast frames for
         * power saving stations in the hardware/firmware and others rely on
@@ -457,18 +457,19 @@ struct ieee80211_hw {
         * configure the IEEE 802.11 upper layer to buffer broadcast/multicast
         * frames when there are power saving stations so that low-level driver
         * can fetch them with ieee80211_get_buffered_bc(). */
-       unsigned int host_broadcast_ps_buffering:1;
+#define IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING (1<<4)
 
-       unsigned int wep_include_iv:1;
-       unsigned int data_nullfunc_ack:1; /* will data nullfunc frames get 
proper
-                                          * TX status callback */
+#define IEEE80211_HW_WEP_INCLUDE_IV (1<<5)
+
+       /* will data nullfunc frames get proper TX status callback */
+#define IEEE80211_HW_DATA_NULLFUNC_ACK (1<<6)
 
        /* Force software encryption for TKIP packets if WMM is enabled. */
-       unsigned int no_tkip_wmm_hwaccel:1;
+#define IEEE80211_HW_NO_TKIP_WMM_HWACCEL (1<<7)
 
        /* set if the payload needs to be padded at even boundaries after the
         * header */
-       unsigned int extra_hdr_room:1;
+#define IEEE80211_HW_EXTRA_HDR_ROOM (1<<8)
 
        /* Some devices handle Michael MIC internally and do not include MIC in
         * the received packets passed up. device_strips_mic must be set
@@ -476,15 +477,17 @@ struct ieee80211_hw {
         * be still set in the IEEE 802.11 header with this option unlike with
         * the device_hides_wep configuration option.
         */
-       unsigned int device_strips_mic:1;
+#define IEEE80211_HW_DEVICE_STRIPS_MIC (1<<9)
 
        /* Device is capable of performing full monitor mode even during
         * normal operation. */
-       unsigned int monitor_during_oper:1;
+#define IEEE80211_HW_MONITOR_DURING_OPER (1<<10)
 
        /* Set if the low-level driver supports skb fraglist (NETIF_F_FRAGLIST),
         * i.e. more than one skb per frame */
-       unsigned int fraglist:1;
+#define IEEE80211_HW_FRAGLIST (1<<11)
+
+       u32 flags;                      /* hardware flags defined above */
 
         /* This is the time in us to change channels
          */
Index: wireless-dev/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
+++ wireless-dev/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
@@ -3910,9 +3910,10 @@ static int __devinit bcm43xx_init_one(st
                goto out;
        ieee->version = IEEE80211_VERSION;
        ieee->name = KBUILD_MODNAME;
-       ieee->host_gen_beacon_template = 1;
-       ieee->rx_includes_fcs = 1;
-       ieee->monitor_during_oper = 1;
+       ieee->flags = IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE |
+                     IEEE80211_HW_RX_INCLUDES_FCS |
+                     IEEE80211_HW_MONITOR_DURING_OPER |
+                     IEEE80211_HW_WEP_INCLUDE_IV;
        ieee->tx = bcm43xx_net_hard_start_xmit;
        ieee->open = bcm43xx_net_open;
        ieee->stop = bcm43xx_net_stop;
@@ -3927,7 +3928,6 @@ static int __devinit bcm43xx_init_one(st
        ieee->queues = 1;
        ieee->get_tx_stats = bcm43xx_net_get_tx_stats;
        ieee->conf_tx = bcm43xx_net_conf_tx;
-       ieee->wep_include_iv = 1;
 
        net_dev = ieee80211_alloc_hw(sizeof(*bcm), bcm43xx_netdev_setup);
        if (!net_dev) {
Index: wireless-dev/drivers/net/wireless/d80211/rt2x00/rt2400pci.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/d80211/rt2x00/rt2400pci.c
+++ wireless-dev/drivers/net/wireless/d80211/rt2x00/rt2400pci.c
@@ -2571,18 +2571,12 @@ static int rt2400pci_init_hw(struct rt2x
         */
        hw->version = IEEE80211_VERSION;
        hw->name = DRV_NAME;
-       hw->host_gen_beacon = 1;
-       hw->host_gen_beacon_template = 0;
-       hw->device_hides_wep = 0;
-       hw->rx_includes_fcs = 0;
-       hw->host_broadcast_ps_buffering = 1;
-       hw->wep_include_iv = 1;
-       hw->data_nullfunc_ack = 1;
-       hw->no_tkip_wmm_hwaccel = 1;
-       hw->extra_hdr_room = 0;
-       hw->device_strips_mic = 0;
-       hw->monitor_during_oper = 1;
-       hw->fraglist = 0;
+       hw->flags = IEEE80211_HW_HOST_GEN_BEACON |
+                   IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
+                   IEEE80211_HW_WEP_INCLUDE_IV |
+                   IEEE80211_HW_DATA_NULLFUNC_ACK |
+                   IEEE80211_HW_NO_TKIP_WMM_HWACCEL |
+                   IEEE80211_HW_MONITOR_DURING_OPER;
 
        /*
         * We have 2 TX queues: TX and PRIO.
Index: wireless-dev/drivers/net/wireless/d80211/rt2x00/rt2500pci.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/d80211/rt2x00/rt2500pci.c
+++ wireless-dev/drivers/net/wireless/d80211/rt2x00/rt2500pci.c
@@ -2725,18 +2725,12 @@ static int rt2500pci_init_hw(struct rt2x
         */
        hw->version = IEEE80211_VERSION;
        hw->name = DRV_NAME;
-       hw->host_gen_beacon = 1;
-       hw->host_gen_beacon_template = 0;
-       hw->device_hides_wep = 0;
-       hw->rx_includes_fcs = 0;
-       hw->host_broadcast_ps_buffering = 1;
-       hw->wep_include_iv = 1;
-       hw->data_nullfunc_ack = 1;
-       hw->no_tkip_wmm_hwaccel = 1;
-       hw->extra_hdr_room = 0;
-       hw->device_strips_mic = 0;
-       hw->monitor_during_oper = 1;
-       hw->fraglist = 0;
+       hw->flags = IEEE80211_HW_HOST_GEN_BEACON |
+                   IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
+                   IEEE80211_HW_WEP_INCLUDE_IV |
+                   IEEE80211_HW_DATA_NULLFUNC_ACK |
+                   IEEE80211_HW_NO_TKIP_WMM_HWACCEL |
+                   IEEE80211_HW_MONITOR_DURING_OPER;
 
        /*
         * We have 2 TX queues: TX and PRIO.
Index: wireless-dev/drivers/net/wireless/d80211/rt2x00/rt61pci.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/d80211/rt2x00/rt61pci.c
+++ wireless-dev/drivers/net/wireless/d80211/rt2x00/rt61pci.c
@@ -3245,18 +3245,12 @@ static int rt61pci_init_hw(struct rt2x00
         */
        hw->version = IEEE80211_VERSION;
        hw->name = DRV_NAME;
-       hw->host_gen_beacon = 1;
-       hw->host_gen_beacon_template = 0;
-       hw->device_hides_wep = 0;
-       hw->rx_includes_fcs = 0;
-       hw->host_broadcast_ps_buffering = 1;
-       hw->wep_include_iv = 1;
-       hw->data_nullfunc_ack = 1;
-       hw->no_tkip_wmm_hwaccel = 1;
-       hw->extra_hdr_room = 0;
-       hw->device_strips_mic = 0;
-       hw->monitor_during_oper = 1;
-       hw->fraglist = 0;
+       hw->flags = IEEE80211_HW_HOST_GEN_BEACON |
+                   IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
+                   IEEE80211_HW_WEP_INCLUDE_IV |
+                   IEEE80211_HW_DATA_NULLFUNC_ACK |
+                   IEEE80211_HW_NO_TKIP_WMM_HWACCEL |
+                   IEEE80211_HW_MONITOR_DURING_OPER;
 
        /*
         * We have full WMM capabilities.
Index: wireless-dev/net/d80211/ieee80211.c
===================================================================
--- wireless-dev.orig/net/d80211/ieee80211.c
+++ wireless-dev/net/d80211/ieee80211.c
@@ -524,7 +524,7 @@ static int wep_encrypt_skb(struct ieee80
                        return -1;
        } else {
                tx->u.tx.control->key_idx = tx->key->hw_key_idx;
-               if (tx->local->hw->wep_include_iv) {
+               if (tx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV) {
                        if (ieee80211_wep_add_iv(tx->local, skb, tx->key) ==
                            NULL)
                                return -1;
@@ -992,7 +992,7 @@ ieee80211_tx_h_multicast_ps_buf(struct i
        /* broadcast/multicast frame */
        /* If any of the associated stations is in power save mode,
         * the frame is buffered to be sent after DTIM beacon frame */
-       if (tx->local->hw->host_broadcast_ps_buffering &&
+       if ((tx->local->hw->flags & IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING) &&
            tx->sdata->type != IEEE80211_IF_TYPE_WDS &&
            tx->sdata->bss && atomic_read(&tx->sdata->bss->num_sta_ps) &&
            !(tx->fc & IEEE80211_FCTL_ORDER)) {
@@ -1566,7 +1566,8 @@ static int ieee80211_subif_start_xmit(st
         * build in headroom in __dev_alloc_skb() (linux/skbuff.h) and
         * alloc_skb() (net/core/skbuff.c)
         */
-       head_need = hdrlen + encaps_len + (local->hw->extra_hdr_room ? 2 : 0);
+       head_need = hdrlen + encaps_len +
+                   (local->hw->flags & IEEE80211_HW_EXTRA_HDR_ROOM ? 2 : 0);
        head_need -= skb_headroom(skb);
 
        /* We are going to modify skb data, so make a copy of it if happens to
@@ -1936,7 +1937,7 @@ int ieee80211_if_config_beacon(struct ne
        struct ieee80211_local *local = dev->ieee80211_ptr;
        struct sk_buff *skb;
 
-       if (!local->hw->host_gen_beacon_template)
+       if (!(local->hw->flags & IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE))
                return 0;
        skb = ieee80211_beacon_get(local->mdev, dev->ifindex, NULL);
        if (!skb)
@@ -2181,7 +2182,8 @@ static inline void ieee80211_start_soft_
        struct ieee80211_if_init_conf conf;
 
        if (local->open_count && local->open_count == local->monitors &&
-           !local->hw->monitor_during_oper && local->hw->remove_interface) {
+           !(local->hw->flags & IEEE80211_HW_MONITOR_DURING_OPER) &&
+           local->hw->remove_interface) {
                conf.if_id = -1;
                conf.type = IEEE80211_IF_TYPE_MNTR;
                conf.mac_addr = NULL;
@@ -2196,7 +2198,8 @@ static void ieee80211_start_hard_monitor
        struct ieee80211_if_init_conf conf;
 
        if (local->open_count && local->open_count == local->monitors &&
-           !local->hw->monitor_during_oper && local->hw->add_interface) {
+           !(local->hw->flags & IEEE80211_HW_MONITOR_DURING_OPER) &&
+           local->hw->add_interface) {
                conf.if_id = -1;
                conf.type = IEEE80211_IF_TYPE_MNTR;
                conf.mac_addr = NULL;
@@ -2227,7 +2230,7 @@ static int ieee80211_open(struct net_dev
                return -ENOLINK;
 
        if (sdata->type == IEEE80211_IF_TYPE_MNTR && local->open_count &&
-           !local->hw->monitor_during_oper) {
+           !(local->hw->flags & IEEE80211_HW_MONITOR_DURING_OPER)) {
                /* run the interface in a "soft monitor" mode */
                local->monitors++;
                local->open_count++;
@@ -2291,7 +2294,8 @@ static int ieee80211_stop(struct net_dev
        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
 
        if (sdata->type == IEEE80211_IF_TYPE_MNTR &&
-           local->open_count > 1 && !local->hw->monitor_during_oper) {
+           local->open_count > 1 &&
+           !(local->hw->flags & IEEE80211_HW_MONITOR_DURING_OPER)) {
                /* remove "soft monitor" interface */
                local->open_count--;
                local->monitors--;
@@ -3045,7 +3049,8 @@ ieee80211_rx_h_check(struct ieee80211_tx
                        rx->sta->last_seq_ctrl[rx->u.rx.queue] = hdr->seq_ctrl;
        }
 
-       if (rx->local->hw->rx_includes_fcs && rx->skb->len > FCS_LEN)
+       if ((rx->local->hw->flags & IEEE80211_HW_RX_INCLUDES_FCS) &&
+           rx->skb->len > FCS_LEN)
                skb_trim(rx->skb, rx->skb->len - FCS_LEN);
 
        if (unlikely(rx->skb->len < 16)) {
@@ -3105,7 +3110,7 @@ ieee80211_rx_h_check(struct ieee80211_tx
                else
                        rx->key = rx->sdata->default_key;
 
-               if (rx->local->hw->wep_include_iv &&
+               if ((rx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV) &&
                    rx->fc & IEEE80211_FCTL_PROTECTED) {
                        int keyidx = ieee80211_wep_get_keyidx(rx->skb);
 
@@ -3214,7 +3219,7 @@ ieee80211_rx_h_wep_weak_iv_detection(str
                return TXRX_CONTINUE;
 
        /* Check for weak IVs, if hwaccel did not remove IV from the frame */
-       if (rx->local->hw->wep_include_iv ||
+       if ((rx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV) ||
            rx->key->force_sw_encrypt || rx->local->conf.sw_decrypt) {
                u8 *iv = ieee80211_wep_is_weak_iv(rx->skb, rx->key);
                if (iv) {
@@ -3230,7 +3235,7 @@ static ieee80211_txrx_result
 ieee80211_rx_h_wep_decrypt(struct ieee80211_txrx_data *rx)
 {
        /* If the device handles decryption totally, skip this test */
-       if (rx->local->hw->device_hides_wep)
+       if (rx->local->hw->flags & IEEE80211_HW_DEVICE_HIDES_WEP)
                return TXRX_CONTINUE;
 
        if ((rx->key && rx->key->alg != ALG_WEP) ||
@@ -3253,7 +3258,7 @@ ieee80211_rx_h_wep_decrypt(struct ieee80
                               "failed\n", rx->dev->name);
                        return TXRX_DROP;
                }
-       } else if (rx->local->hw->wep_include_iv) {
+       } else if (rx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV) {
                ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key);
                /* remove ICV */
                skb_trim(rx->skb, rx->skb->len - 4);
@@ -3298,7 +3303,7 @@ static ieee80211_txrx_result
 ieee80211_rx_h_drop_unencrypted(struct ieee80211_txrx_data *rx)
 {
        /*  If the device handles decryption totally, skip this test */
-       if (rx->local->hw->device_hides_wep)
+       if (rx->local->hw->flags & IEEE80211_HW_DEVICE_HIDES_WEP)
                return TXRX_CONTINUE;
 
        /* Drop unencrypted frames if key is set. */
@@ -3367,7 +3372,7 @@ ieee80211_rx_h_passive_scan(struct ieee8
                        local->scan.rx_beacon++;
                        /* Need to trim FCS here because it is normally
                         * removed only after this passive scan handler. */
-                       if (rx->local->hw->rx_includes_fcs &&
+                       if ((rx->local->hw->flags & 
IEEE80211_HW_RX_INCLUDES_FCS) &&
                            rx->skb->len > FCS_LEN)
                                skb_trim(rx->skb, rx->skb->len - FCS_LEN);
 
@@ -3460,7 +3465,7 @@ static void ieee80211_rx_michael_mic_rep
                goto ignore;
        }
 
-       if (rx->local->hw->wep_include_iv &&
+       if ((rx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV) &&
            rx->sdata->type == IEEE80211_IF_TYPE_AP) {
                int keyidx = ieee80211_wep_get_keyidx(rx->skb);
                /* AP with Pairwise keys support should never receive Michael
@@ -4447,7 +4452,7 @@ int ieee80211_register_hw(struct net_dev
        if (result < 0)
                goto fail_sta_info;
 
-       if (hw->fraglist)
+       if (hw->flags & IEEE80211_HW_FRAGLIST)
                dev->features |= NETIF_F_FRAGLIST;
        rtnl_lock();
        result = dev_alloc_name(dev, dev->name);
Index: wireless-dev/net/d80211/ieee80211_ioctl.c
===================================================================
--- wireless-dev.orig/net/d80211/ieee80211_ioctl.c
+++ wireless-dev/net/d80211/ieee80211_ioctl.c
@@ -126,7 +126,7 @@ static int ieee80211_ioctl_get_hw_featur
        struct ieee80211_channel_data *chan;
 
        param->u.hw_features.flags = 0;
-       if (local->hw->data_nullfunc_ack)
+       if (local->hw->flags & IEEE80211_HW_DATA_NULLFUNC_ACK)
                param->u.hw_features.flags |= HOSTAP_HW_FLAG_NULLFUNC_OK;
 
        param->u.hw_features.num_modes = local->hw->num_modes;
@@ -589,14 +589,15 @@ static int ieee80211_set_encryption(stru
                try_hwaccel = 0;
        }
 
-       if (local->hw->device_hides_wep) {
+       if (local->hw->flags & IEEE80211_HW_DEVICE_HIDES_WEP) {
                /* Software encryption cannot be used with devices that hide
                 * encryption from the host system, so always try to use
                 * hardware acceleration with such devices. */
                try_hwaccel = 1;
        }
 
-       if (local->hw->no_tkip_wmm_hwaccel && alg == ALG_TKIP) {
+       if ((local->hw->flags & IEEE80211_HW_NO_TKIP_WMM_HWACCEL) &&
+           alg == ALG_TKIP) {
                if (sta && (sta->flags & WLAN_STA_WME)) {
                /* Hardware does not support hwaccel with TKIP when using WMM.
                 */
@@ -2282,7 +2283,7 @@ static void ieee80211_key_enable_hwaccel
        u8 addr[ETH_ALEN];
 
        if (!key || key->alg != ALG_WEP || !key->force_sw_encrypt ||
-           local->hw->device_hides_wep)
+           (local->hw->flags & IEEE80211_HW_DEVICE_HIDES_WEP))
                return;
 
        memset(addr, 0xff, ETH_ALEN);
@@ -2304,7 +2305,7 @@ static void ieee80211_key_disable_hwacce
        u8 addr[ETH_ALEN];
 
        if (!key || key->alg != ALG_WEP || key->force_sw_encrypt ||
-           local->hw->device_hides_wep)
+           (local->hw->flags & IEEE80211_HW_DEVICE_HIDES_WEP))
                return;
 
        memset(addr, 0xff, ETH_ALEN);
Index: wireless-dev/net/d80211/wpa.c
===================================================================
--- wireless-dev.orig/net/d80211/wpa.c
+++ wireless-dev/net/d80211/wpa.c
@@ -168,8 +168,8 @@ ieee80211_rx_h_michael_mic_verify(struct
        fc = rx->fc;
 
        /* If device handles decryption totally, skip this check */
-       if (rx->local->hw->device_hides_wep ||
-           rx->local->hw->device_strips_mic)
+       if ((rx->local->hw->flags & IEEE80211_HW_DEVICE_HIDES_WEP) ||
+           (rx->local->hw->flags & IEEE80211_HW_DEVICE_STRIPS_MIC))
                return TXRX_CONTINUE;
 
        if (!rx->key || rx->key->alg != ALG_TKIP ||
@@ -184,7 +184,7 @@ ieee80211_rx_h_michael_mic_verify(struct
 
        if ((rx->u.rx.status->flag & RX_FLAG_DECRYPTED) &&
            !rx->key->force_sw_encrypt && !rx->local->conf.sw_decrypt) {
-               if (rx->local->hw->wep_include_iv) {
+               if (rx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV) {
                        if (skb->len < MICHAEL_MIC_LEN)
                                return TXRX_DROP;
                }
@@ -399,7 +399,8 @@ ieee80211_tx_h_tkip_encrypt(struct ieee8
 #endif /* CONFIG_HOSTAPD_WPA_TESTING */
 
        if (!tx->key->force_sw_encrypt && !tx->local->conf.sw_decrypt &&
-           !tx->local->hw->wep_include_iv && !wpa_test) {
+           !(tx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV) &&
+           !wpa_test) {
                /* hwaccel - with no need for preallocated room for IV/ICV */
                tx->u.tx.control->key_idx = tx->key->hw_key_idx;
                return TXRX_CONTINUE;
@@ -477,7 +478,7 @@ ieee80211_rx_h_tkip_decrypt(struct ieee8
 
        if ((rx->u.rx.status->flag & RX_FLAG_DECRYPTED) &&
            !rx->key->force_sw_encrypt && !rx->local->conf.sw_decrypt) {
-               if (!rx->local->hw->wep_include_iv) {
+               if (!(rx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV)) {
                        /* Hardware takes care of all processing, including
                         * replay protection, so no need to continue here. */
                        return TXRX_CONTINUE;
@@ -715,7 +716,7 @@ ieee80211_tx_h_ccmp_encrypt(struct ieee8
        ieee80211_tx_set_iswep(tx);
 
        if (!tx->key->force_sw_encrypt && !tx->local->conf.sw_decrypt &&
-           !tx->local->hw->wep_include_iv) {
+           !(tx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV)) {
                /* hwaccel - with no need for preallocated room for CCMP "
                 * header or MIC fields */
                tx->u.tx.control->key_idx = tx->key->hw_key_idx;
@@ -767,7 +768,7 @@ ieee80211_rx_h_ccmp_decrypt(struct ieee8
 
        if ((rx->u.rx.status->flag & RX_FLAG_DECRYPTED) &&
            !key->force_sw_encrypt && !rx->local->conf.sw_decrypt &&
-           !rx->local->hw->wep_include_iv)
+           !(rx->local->hw->flags & IEEE80211_HW_WEP_INCLUDE_IV))
                return TXRX_CONTINUE;
 
        (void) ccmp_hdr2pn(pn, skb->data + hdrlen);
Index: wireless-dev/net/d80211/ieee80211_sysfs.c
===================================================================
--- wireless-dev.orig/net/d80211/ieee80211_sysfs.c
+++ wireless-dev/net/d80211/ieee80211_sysfs.c
@@ -515,9 +515,10 @@ static ssize_t ieee80211_if_fmt_mode(con
 {
        struct ieee80211_local *local = sdata->local;
 
-       return sprintf(buf, "%s\n", (local->hw->monitor_during_oper ||
-                                    local->open_count == local->monitors) ?
-                                   "hard" : "soft");
+       return sprintf(buf, "%s\n",
+                      ((local->hw->flags & IEEE80211_HW_MONITOR_DURING_OPER) ||
+                       local->open_count == local->monitors) ?
+                      "hard" : "soft");
 }
 __IEEE80211_IF_SHOW(mode);
 
Index: wireless-dev/drivers/net/wireless/d80211/rt2x00/rt2500usb.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/d80211/rt2x00/rt2500usb.c
+++ wireless-dev/drivers/net/wireless/d80211/rt2x00/rt2500usb.c
@@ -2412,18 +2412,12 @@ static int rt2500usb_init_hw(struct rt2x
         */
        hw->version = IEEE80211_VERSION;
        hw->name = DRV_NAME;
-       hw->host_gen_beacon = 1;
-       hw->host_gen_beacon_template = 0;
-       hw->device_hides_wep = 0;
-       hw->rx_includes_fcs = 0;
-       hw->host_broadcast_ps_buffering = 1;
-       hw->wep_include_iv = 1;
-       hw->data_nullfunc_ack = 1;
-       hw->no_tkip_wmm_hwaccel = 1;
-       hw->extra_hdr_room = 0;
-       hw->device_strips_mic = 0;
-       hw->monitor_during_oper = 1;
-       hw->fraglist = 0;
+       hw->flags = IEEE80211_HW_HOST_GEN_BEACON |
+                   IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
+                   IEEE80211_HW_WEP_INCLUDE_IV |
+                   IEEE80211_HW_DATA_NULLFUNC_ACK |
+                   IEEE80211_HW_NO_TKIP_WMM_HWACCEL |
+                   IEEE80211_HW_MONITOR_DURING_OPER;
 
        /*
         * We have 2 TX queues: TX and PRIO.
Index: wireless-dev/drivers/net/wireless/d80211/rt2x00/rt73usb.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/d80211/rt2x00/rt73usb.c
+++ wireless-dev/drivers/net/wireless/d80211/rt2x00/rt73usb.c
@@ -2785,18 +2785,12 @@ static int rt73usb_init_hw(struct rt2x00
         */
        hw->version = IEEE80211_VERSION;
        hw->name = DRV_NAME;
-       hw->host_gen_beacon = 1;
-       hw->host_gen_beacon_template = 0;
-       hw->device_hides_wep = 0;
-       hw->rx_includes_fcs = 0;
-       hw->host_broadcast_ps_buffering = 1;
-       hw->wep_include_iv = 1;
-       hw->data_nullfunc_ack = 1;
-       hw->no_tkip_wmm_hwaccel = 1;
-       hw->extra_hdr_room = 0;
-       hw->device_strips_mic = 0;
-       hw->monitor_during_oper = 1;
-       hw->fraglist = 0;
+       hw->flags = IEEE80211_HW_HOST_GEN_BEACON |
+                   IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
+                   IEEE80211_HW_WEP_INCLUDE_IV |
+                   IEEE80211_HW_DATA_NULLFUNC_ACK |
+                   IEEE80211_HW_NO_TKIP_WMM_HWACCEL |
+                   IEEE80211_HW_MONITOR_DURING_OPER;
 
        /*
         * We have full WMM capabilities.

--
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to