entry->ring->rt2x00dev->rssi_offset;
        desc->ofdm = 0;
        desc->size = rt2x00_get_field32(word0, RXD_W0_DATABYTE_COUNT);
+       desc->my_bss = !!rt2x00_get_field32(word0, RXD_W0_MY_BSS);
 }
 
 /*
 
            entry->ring->rt2x00dev->rssi_offset;
        desc->ofdm = rt2x00_get_field32(word0, RXD_W0_OFDM);
        desc->size = rt2x00_get_field32(word0, RXD_W0_DATABYTE_COUNT);
+       desc->my_bss = !!rt2x00_get_field32(word0, RXD_W0_MY_BSS);
 }
 
 /*
 
            entry->ring->rt2x00dev->rssi_offset;
        desc->ofdm = rt2x00_get_field32(word0, RXD_W0_OFDM);
        desc->size = rt2x00_get_field32(word0, RXD_W0_DATABYTE_COUNT);
-
-       return;
+       desc->my_bss = !!rt2x00_get_field32(word0, RXD_W0_MY_BSS);
 }
 
 /*
 
                      struct rxdata_entry_desc *desc)
 {
        struct rt2x00_dev *rt2x00dev = entry->ring->rt2x00dev;
-       struct interface *intf = &rt2x00dev->interface;
        struct ieee80211_rx_status *rx_status = &rt2x00dev->rx_status;
        struct ieee80211_hw_mode *mode;
        struct ieee80211_rate *rate;
        }
 
        /*
-        * Only update link status if this is a beacon frame carrying our
-        * bssid.
+        * Only update link status if this is a beacon frame carrying our bssid.
         */
-       hdr = (struct ieee80211_hdr *) skb->data;
-       if (skb->len >= sizeof(struct ieee80211_hdr *)) {
-               fc = le16_to_cpu(hdr->frame_control);
-               if ((intf->type == IEEE80211_IF_TYPE_STA
-                    || intf->type == IEEE80211_IF_TYPE_IBSS)
-                   && is_beacon(fc)
-                   && compare_ether_addr(hdr->addr3, intf->bssid) == 0)
-                       rt2x00lib_update_link_stats(&rt2x00dev->link,
-                                                   desc->rssi);
-       }
+       hdr = (struct ieee80211_hdr*)skb->data;
+       fc = le16_to_cpu(hdr->frame_control);
+       if (is_beacon(fc) && desc->my_bss)
+               rt2x00lib_update_link_stats(&rt2x00dev->link, desc->rssi);
 
        rt2x00dev->link.qual.rx_success++;
 
 
        int ofdm;
        int size;
        int flags;
+       int my_bss;
 };
 
 /*
 
        desc->rssi = rt61pci_agc_to_rssi(entry->ring->rt2x00dev, word1);
        desc->ofdm = rt2x00_get_field32(word0, RXD_W0_OFDM);
        desc->size = rt2x00_get_field32(word0, RXD_W0_DATABYTE_COUNT);
-
-       return;
+       desc->my_bss = !!rt2x00_get_field32(word0, RXD_W0_MY_BSS);
 }
 
 /*
 
        desc->rssi = rt73usb_agc_to_rssi(entry->ring->rt2x00dev, word1);
        desc->ofdm = rt2x00_get_field32(word0, RXD_W0_OFDM);
        desc->size = rt2x00_get_field32(word0, RXD_W0_DATABYTE_COUNT);
+       desc->my_bss = !!rt2x00_get_field32(word0, RXD_W0_MY_BSS);
 
        /*
         * Pull the skb to clear the descriptor area.
         */
        skb_pull(entry->skb, entry->ring->desc_size);
-
-       return;
 }
 
 /*