/* common attributes */
 IEEE80211_IF_FILE(channel_use, channel_use, DEC);
 IEEE80211_IF_FILE(drop_unencrypted, drop_unencrypted, DEC);
-IEEE80211_IF_FILE(ieee802_1x_pac, ieee802_1x_pac, DEC);
 
 /* STA/IBSS attributes */
 IEEE80211_IF_FILE(state, u.sta.state, DEC);
 {
        DEBUGFS_ADD(channel_use, sta);
        DEBUGFS_ADD(drop_unencrypted, sta);
-       DEBUGFS_ADD(ieee802_1x_pac, sta);
        DEBUGFS_ADD(state, sta);
        DEBUGFS_ADD(bssid, sta);
        DEBUGFS_ADD(prev_bssid, sta);
 {
        DEBUGFS_ADD(channel_use, ap);
        DEBUGFS_ADD(drop_unencrypted, ap);
-       DEBUGFS_ADD(ieee802_1x_pac, ap);
        DEBUGFS_ADD(num_sta_ps, ap);
        DEBUGFS_ADD(dtim_count, ap);
        DEBUGFS_ADD(num_beacons, ap);
 {
        DEBUGFS_ADD(channel_use, wds);
        DEBUGFS_ADD(drop_unencrypted, wds);
-       DEBUGFS_ADD(ieee802_1x_pac, wds);
        DEBUGFS_ADD(peer, wds);
 }
 
 {
        DEBUGFS_ADD(channel_use, vlan);
        DEBUGFS_ADD(drop_unencrypted, vlan);
-       DEBUGFS_ADD(ieee802_1x_pac, vlan);
 }
 
 static void add_monitor_files(struct ieee80211_sub_if_data *sdata)
 {
        DEBUGFS_DEL(channel_use, sta);
        DEBUGFS_DEL(drop_unencrypted, sta);
-       DEBUGFS_DEL(ieee802_1x_pac, sta);
        DEBUGFS_DEL(state, sta);
        DEBUGFS_DEL(bssid, sta);
        DEBUGFS_DEL(prev_bssid, sta);
 {
        DEBUGFS_DEL(channel_use, ap);
        DEBUGFS_DEL(drop_unencrypted, ap);
-       DEBUGFS_DEL(ieee802_1x_pac, ap);
        DEBUGFS_DEL(num_sta_ps, ap);
        DEBUGFS_DEL(dtim_count, ap);
        DEBUGFS_DEL(num_beacons, ap);
 {
        DEBUGFS_DEL(channel_use, wds);
        DEBUGFS_DEL(drop_unencrypted, wds);
-       DEBUGFS_DEL(ieee802_1x_pac, wds);
        DEBUGFS_DEL(peer, wds);
 }
 
 {
        DEBUGFS_DEL(channel_use, vlan);
        DEBUGFS_DEL(drop_unencrypted, vlan);
-       DEBUGFS_DEL(ieee802_1x_pac, vlan);
 }
 
 static void del_monitor_files(struct ieee80211_sub_if_data *sdata)
 
 {
        char buf[100];
        struct sta_info *sta = file->private_data;
-       int res = scnprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s%s",
+       int res = scnprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s",
                sta->flags & WLAN_STA_AUTH ? "AUTH\n" : "",
                sta->flags & WLAN_STA_ASSOC ? "ASSOC\n" : "",
                sta->flags & WLAN_STA_PS ? "PS\n" : "",
                sta->flags & WLAN_STA_TIM ? "TIM\n" : "",
-               sta->flags & WLAN_STA_PERM ? "PERM\n" : "",
                sta->flags & WLAN_STA_AUTHORIZED ? "AUTHORIZED\n" : "",
                sta->flags & WLAN_STA_SHORT_PREAMBLE ? "SHORT PREAMBLE\n" : "",
                sta->flags & WLAN_STA_WME ? "WME\n" : "",
 
        sta = sta_info_add(local, dev, remote_addr, GFP_KERNEL);
        if (!sta)
                return -ENOMEM;
+
+       sta->flags |= WLAN_STA_AUTHORIZED;
+
        sta_info_put(sta);
 
        /* Remove STA entry for the old peer */
 
        unsigned int flags;
 
        int drop_unencrypted;
-       /*
-        * IEEE 802.1X Port access control in effect,
-        * drop packets to/from unauthorized port
-        */
-       int ieee802_1x_pac;
 
        /*
         * basic rates of this AP or the AP we're associated to
                struct {
                        struct dentry *channel_use;
                        struct dentry *drop_unencrypted;
-                       struct dentry *ieee802_1x_pac;
                        struct dentry *state;
                        struct dentry *bssid;
                        struct dentry *prev_bssid;
                struct {
                        struct dentry *channel_use;
                        struct dentry *drop_unencrypted;
-                       struct dentry *ieee802_1x_pac;
                        struct dentry *num_sta_ps;
                        struct dentry *dtim_count;
                        struct dentry *num_beacons;
                struct {
                        struct dentry *channel_use;
                        struct dentry *drop_unencrypted;
-                       struct dentry *ieee802_1x_pac;
                        struct dentry *peer;
                } wds;
                struct {
                        struct dentry *channel_use;
                        struct dentry *drop_unencrypted;
-                       struct dentry *ieee802_1x_pac;
                } vlan;
                struct {
                        struct dentry *mode;
 
        }
 
        sta->dev = dev;
-       sta->flags |= WLAN_STA_AUTH | WLAN_STA_ASSOC | WLAN_STA_ASSOC_AP;
+       sta->flags |= WLAN_STA_AUTH | WLAN_STA_ASSOC | WLAN_STA_ASSOC_AP |
+                     WLAN_STA_AUTHORIZED;
 
        rates = 0;
        basic_rates = 0;
        if (!sta)
                return NULL;
 
+       sta->flags |= WLAN_STA_AUTHORIZED;
+
        sta->supp_rates[local->hw.conf.channel->band] =
                sdata->u.sta.supp_rates_bits[local->hw.conf.channel->band];
 
 
 static int
 ieee80211_802_1x_port_control(struct ieee80211_txrx_data *rx)
 {
-       if (unlikely(rx->sdata->ieee802_1x_pac &&
-                    (!rx->sta || !(rx->sta->flags & WLAN_STA_AUTHORIZED)))) {
+       if (unlikely(!rx->sta || !(rx->sta->flags & WLAN_STA_AUTHORIZED))) {
 #ifdef CONFIG_MAC80211_DEBUG
-               printk(KERN_DEBUG "%s: dropped frame "
-                      "(unauthorized port)\n", rx->dev->name);
+               if (net_ratelimit())
+                       printk(KERN_DEBUG "%s: dropped frame "
+                              "(unauthorized port)\n", rx->dev->name);
 #endif /* CONFIG_MAC80211_DEBUG */
                return -EACCES;
        }
 
 #include <linux/kref.h>
 #include "ieee80211_key.h"
 
-/* Stations flags (struct sta_info::flags) */
-#define WLAN_STA_AUTH BIT(0)
-#define WLAN_STA_ASSOC BIT(1)
-#define WLAN_STA_PS BIT(2)
-#define WLAN_STA_TIM BIT(3) /* TIM bit is on for PS stations */
-#define WLAN_STA_PERM BIT(4) /* permanent; do not remove entry on expiration */
-#define WLAN_STA_AUTHORIZED BIT(5) /* If 802.1X is used, this flag is
-                                   * controlling whether STA is authorized to
-                                   * send and receive non-IEEE 802.1X frames
-                                   */
-#define WLAN_STA_SHORT_PREAMBLE BIT(7)
-/* whether this is an AP that we are associated with as a client */
-#define WLAN_STA_ASSOC_AP BIT(8)
-#define WLAN_STA_WME BIT(9)
-#define WLAN_STA_WDS BIT(27)
+/**
+ * enum ieee80211_sta_info_flags - Stations flags
+ *
+ * These flags are used with &struct sta_info's @flags member.
+ *
+ * @WLAN_STA_AUTH: Station is authenticated.
+ * @WLAN_STA_ASSOC: Station is associated.
+ * @WLAN_STA_PS: Station is in power-save mode
+ * @WLAN_STA_TIM: TIM bit is on for this PS station (traffic buffered)
+ * @WLAN_STA_AUTHORIZED: Station is authorized to send/receive traffic.
+ *     This bit is always checked so needs to be enabled for all stations
+ *     when virtual port control is not in use.
+ * @WLAN_STA_SHORT_PREAMBLE: Station is capable of receiving short-preamble
+ *     frames.
+ * @WLAN_STA_ASSOC_AP: We're associated to that station, it is an AP.
+ * @WLAN_STA_WME: Station is a QoS-STA.
+ * @WLAN_STA_WDS: Station is one of our WDS peers.
+ */
+enum ieee80211_sta_info_flags {
+       WLAN_STA_AUTH           = 1<<0,
+       WLAN_STA_ASSOC          = 1<<1,
+       WLAN_STA_PS             = 1<<2,
+       WLAN_STA_TIM            = 1<<3,
+       WLAN_STA_AUTHORIZED     = 1<<4,
+       WLAN_STA_SHORT_PREAMBLE = 1<<5,
+       WLAN_STA_ASSOC_AP       = 1<<6,
+       WLAN_STA_WME            = 1<<7,
+       WLAN_STA_WDS            = 1<<8,
+};
 
 #define STA_TID_NUM 16
 #define ADDBA_RESP_INTERVAL HZ
 
        }
 
        /*
-        * If port access control is enabled, drop unicast frames to
-        * unauthorised stations unless they are EAPOL frames from the
-        * local station.
+        * Drop unicast frames to unauthorised stations unless they are
+        * EAPOL frames from the local station.
         */
-       if (unlikely(sdata->ieee802_1x_pac &&
-                    !is_multicast_ether_addr(hdr.addr1) &&
+       if (unlikely(!is_multicast_ether_addr(hdr.addr1) &&
                     !(sta_flags & WLAN_STA_AUTHORIZED) &&
                     !(ethertype == ETH_P_PAE &&
                       compare_ether_addr(dev->dev_addr,