staging: vt6655: implement ieee80211_low_level_stats
authorMalcolm Priestley <tvboxspy@gmail.com>
Sun, 31 May 2015 09:35:20 +0000 (10:35 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 31 May 2015 21:24:56 +0000 (06:24 +0900)
Collect low level stats from mib counter for mac80211 call.

Replacing the unused function STAvUpdate802_11Counter.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vt6655/device.h
drivers/staging/vt6655/device_main.c

index 440537e47121b926a076f42aef0f09e9807f37c2..a49c6c624c5ea5be54d634b5b8fde1516dd78a6e 100644 (file)
@@ -410,6 +410,8 @@ struct vnt_private {
        unsigned char abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /* unsigned long alignment */
 
        unsigned short wBeaconInterval;
+
+       struct ieee80211_low_level_stats low_stats;
 };
 
 static inline PDEVICE_RD_INFO alloc_rd_info(void)
index 8f96cc93820ab01c80f78e1021812bebba979a7c..c27f5ef7f0a21b53ceb0c8d0c6261708b6571761 100644 (file)
@@ -1056,8 +1056,9 @@ static void vnt_check_bb_vga(struct vnt_private *priv)
 static  irqreturn_t  device_intr(int irq,  void *dev_instance)
 {
        struct vnt_private *pDevice = dev_instance;
+       struct ieee80211_low_level_stats *low_stats = &pDevice->low_stats;
        int             max_count = 0;
-       unsigned long dwMIBCounter = 0;
+       u32 mib_counter;
        unsigned char byOrgPageSel = 0;
        int             handled = 0;
        unsigned long flags;
@@ -1084,14 +1085,20 @@ static  irqreturn_t  device_intr(int irq,  void *dev_instance)
        else
                byOrgPageSel = 0;
 
-       MACvReadMIBCounter(pDevice->PortOffset, &dwMIBCounter);
+       /* Read low level stats */
+       MACvReadMIBCounter(pDevice->PortOffset, &mib_counter);
+
+       low_stats->dot11RTSSuccessCount += mib_counter & 0xff;
+       low_stats->dot11RTSFailureCount += (mib_counter >> 8) & 0xff;
+       low_stats->dot11ACKFailureCount += (mib_counter >> 16) & 0xff;
+       low_stats->dot11FCSErrorCount += (mib_counter >> 24) & 0xff;
+
        /*
         * TBD....
         * Must do this after doing rx/tx, cause ISR bit is slow
         * than RD/TD write back
         * update ISR counter
         */
-       STAvUpdate802_11Counter(&pDevice->s802_11Counter, &pDevice->scStatistic, dwMIBCounter);
        while (pDevice->dwIsr && pDevice->vif) {
                STAvUpdateIsrStatCounter(&pDevice->scStatistic, pDevice->dwIsr);
                MACvWriteISR(pDevice->PortOffset, pDevice->dwIsr);
@@ -1604,6 +1611,16 @@ static int vnt_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
        return 0;
 }
 
+static int vnt_get_stats(struct ieee80211_hw *hw,
+                        struct ieee80211_low_level_stats *stats)
+{
+       struct vnt_private *priv = hw->priv;
+
+       memcpy(stats, &priv->low_stats, sizeof(*stats));
+
+       return 0;
+}
+
 static u64 vnt_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 {
        struct vnt_private *priv = hw->priv;
@@ -1641,6 +1658,7 @@ static const struct ieee80211_ops vnt_mac_ops = {
        .prepare_multicast      = vnt_prepare_multicast,
        .configure_filter       = vnt_configure,
        .set_key                = vnt_set_key,
+       .get_stats              = vnt_get_stats,
        .get_tsf                = vnt_get_tsf,
        .set_tsf                = vnt_set_tsf,
        .reset_tsf              = vnt_reset_tsf,