diff options
Diffstat (limited to 'drivers/staging/otus/80211core/performance.c')
-rw-r--r-- | drivers/staging/otus/80211core/performance.c | 431 |
1 files changed, 0 insertions, 431 deletions
diff --git a/drivers/staging/otus/80211core/performance.c b/drivers/staging/otus/80211core/performance.c deleted file mode 100644 index 4c10e1d..0000000 --- a/drivers/staging/otus/80211core/performance.c +++ /dev/null @@ -1,431 +0,0 @@ -/* - * Copyright (c) 2007-2008 Atheros Communications Inc. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -/* */ -/* Module Name : performance.c */ -/* */ -/* Abstract */ -/* This module performance evaluation functions. */ -/* */ -/* NOTES */ -/* None */ -/* */ -/************************************************************************/ -#include "cprecomp.h" -#ifdef ZM_ENABLE_PERFORMANCE_EVALUATION - -#define ZM_TP_SIZE 50 -static struct zsSummary zm_summary; -static struct zsVariation zm_var; -static struct zsThroughput zm_tp; - -void zfiPerformanceInit(zdev_t* dev) -{ - u16_t i; - - zmw_get_wlan_dev(dev); - - zm_summary.tick_base = wd->tick; - zm_summary.tx_msdu_count = 0; - zm_summary.tx_mpdu_count = 0; - zm_summary.rx_msdu_count = 0; - zm_summary.rx_mpdu_count = 0; - zm_summary.rx_broken_seq = 0; - zm_summary.rx_broken_sum = 0; - zm_summary.rx_seq_base = 0; - zm_summary.rx_broken_seq_dis = 0; - zm_summary.rx_duplicate_seq = 0; - zm_summary.rx_old_seq = 0; - zm_summary.reset_count = 0; - zm_summary.reset_sum = 0; - zm_summary.rx_lost_sum = 0; - zm_summary.rx_duplicate_error = 0; - zm_summary.rx_free = 0; - zm_summary.rx_amsdu_len = 0; - zm_summary.rx_flush = 0; - zm_summary.rx_clear = 0; - zm_summary.rx_reorder = 0; - - for (i=0; i<100; i++) - { - zm_var.tx_msdu_tick[i] = zm_var.tx_mpdu_tick[i] = 0; - zm_var.rx_msdu_tick[i] = zm_var.rx_mpdu_tick[i] = 0; - } - - zfTimerSchedule(dev, ZM_EVENT_TIMEOUT_PERFORMANCE, 100); - - zm_tp.size = ZM_TP_SIZE; - zm_tp.head = zm_tp.size - 1; - zm_tp.tail = 0; - for (i=0; i<zm_tp.size; i++) - { - zm_tp.tx[i]=0; - zm_tp.rx[i]=0; - } -} - -void zfiPerformanceGraph(zdev_t* dev) -{ - s16_t i,j; - u8_t s[ZM_TP_SIZE+5]; - zmw_get_wlan_dev(dev); - - for (i=0; i<(zm_tp.size-1); i++) - { - zm_tp.tx[i] = zm_tp.tx[i+1]; - zm_tp.rx[i] = zm_tp.rx[i+1]; - } - zm_tp.tx[zm_tp.size-1] = zm_summary.tx_mpdu_count*1500*8/1000000; - zm_tp.rx[zm_tp.size-1] = zm_summary.rx_msdu_count*1500*8/1000000; - - for (i=15; i>0; i--) - { - s[0] = (i/10) + '0'; - s[1] = (i%10) + '0'; - s[2] = '0'; - s[3] = '|'; - for (j=0; j<zm_tp.size; j++) - { - if ((zm_tp.tx[j]/10 == i) && (zm_tp.rx[j]/10 == i)) - { - s[4+j] = 'X'; - } - else if (zm_tp.tx[j]/10 == i) - { - s[4+j] = 'T'; - } - else if (zm_tp.rx[j]/10 == i) - { - s[4+j] = 'R'; - } - else - { - s[4+j] = ' '; - } - } - s[zm_tp.size+4] = '\0'; - DbgPrint("%s",s); - } - DbgPrint("000|__________________________________________________"); - -} - - -void zfiPerformanceRefresh(zdev_t* dev) -{ - u16_t i; - - zmw_get_wlan_dev(dev); - - zfiDbgReadReg(dev, 0x11772c); - - zm_var.tx_msdu_mean = zm_summary.tx_msdu_count / 100; - zm_var.tx_mpdu_mean = zm_summary.tx_mpdu_count / 100; - zm_var.rx_msdu_mean = zm_summary.rx_msdu_count / 100; - zm_var.rx_mpdu_mean = zm_summary.rx_mpdu_count / 100; - - zm_var.tx_msdu_sum = zm_var.tx_mpdu_sum = 0; - zm_var.rx_msdu_sum = zm_var.rx_mpdu_sum = 0; - zm_summary.tx_idle_count = zm_summary.rx_idle_count = 0; - for (i=0; i<100; i++) - { - zm_var.tx_msdu_sum += (zm_var.tx_msdu_tick[i] * zm_var.tx_msdu_tick[i]); - zm_var.tx_mpdu_sum += (zm_var.tx_mpdu_tick[i] * zm_var.tx_mpdu_tick[i]); - zm_var.rx_msdu_sum += (zm_var.rx_msdu_tick[i] * zm_var.rx_msdu_tick[i]); - zm_var.rx_mpdu_sum += (zm_var.rx_mpdu_tick[i] * zm_var.rx_mpdu_tick[i]); - - if (!zm_var.tx_mpdu_tick[i]) zm_summary.tx_idle_count++; - if (!zm_var.rx_mpdu_tick[i]) zm_summary.rx_idle_count++; - } - zm_var.tx_msdu_var = (zm_var.tx_msdu_sum / 100) - (zm_var.tx_msdu_mean * zm_var.tx_msdu_mean); - zm_var.tx_mpdu_var = (zm_var.tx_mpdu_sum / 100) - (zm_var.tx_mpdu_mean * zm_var.tx_mpdu_mean); - zm_var.rx_msdu_var = (zm_var.rx_msdu_sum / 100) - (zm_var.rx_msdu_mean * zm_var.rx_msdu_mean); - zm_var.rx_mpdu_var = (zm_var.rx_mpdu_sum / 100) - (zm_var.rx_mpdu_mean * zm_var.rx_mpdu_mean); - - zm_summary.tick_base = wd->tick; - zm_summary.rx_broken_sum += zm_summary.rx_broken_seq; - zm_summary.rx_lost_sum += (zm_summary.rx_broken_seq - zm_summary.rx_duplicate_seq - zm_summary.rx_old_seq); - - zfiPerformanceGraph(dev); - - DbgPrint("******************************************************\n"); - DbgPrint("* TX: MSDU=%5d, VAR=%5d; MPDU=%5d, VAR=%5d\n", zm_summary.tx_msdu_count, - zm_var.tx_msdu_var, zm_summary.tx_mpdu_count, zm_var.tx_mpdu_var); - DbgPrint("* TX: idle=%5d,TxRate=%3d, PER=%5d\n", zm_summary.tx_idle_count, - wd->CurrentTxRateKbps/1000, - (u16_t)wd->PER[wd->sta.oppositeInfo[0].rcCell.currentRate]); - DbgPrint("* RX: MSDU=%5d, VAR=%5d; MPDU=%5d, VAR=%5d\n", zm_summary.rx_msdu_count, - zm_var.rx_msdu_var, zm_summary.rx_mpdu_count, zm_var.rx_mpdu_var); - DbgPrint("* RX: idle=%5d,RxRate=%3d,AMSDU=%5d\n", zm_summary.rx_idle_count, - wd->CurrentRxRateKbps/1000, zm_summary.rx_amsdu_len); - DbgPrint("* RX broken seq=%4d, distances=%4d, duplicates=%4d\n", zm_summary.rx_broken_seq, - zm_summary.rx_broken_seq_dis, zm_summary.rx_duplicate_seq); - DbgPrint("* RX old seq=%4d, lost=%4d, broken sum=%4d\n", zm_summary.rx_old_seq, - (zm_summary.rx_broken_seq - zm_summary.rx_duplicate_seq - zm_summary.rx_old_seq), - zm_summary.rx_broken_sum); - DbgPrint("* Rx lost sum=%4d,dup. error=%4d, free count=%4d\n", zm_summary.rx_lost_sum, - zm_summary.rx_duplicate_error, zm_summary.rx_free); - DbgPrint("* Rx flush sum=%4d, clear sum=%4d, reorder=%7d\n", zm_summary.rx_flush, - zm_summary.rx_clear, zm_summary.rx_reorder); - DbgPrint("* Firmware reset=%3d, reset sum=%4d\n", zm_summary.reset_count, - zm_summary.reset_sum); - DbgPrint("******************************************************\n\n"); - //reset count 11772c - zm_summary.tx_msdu_count = 0; - zm_summary.tx_mpdu_count = 0; - zm_summary.rx_msdu_count = 0; - zm_summary.rx_mpdu_count = 0; - zm_summary.rx_broken_seq = 0; - zm_summary.rx_broken_seq_dis = 0; - zm_summary.rx_duplicate_seq = 0; - zm_summary.rx_old_seq = 0; - zm_summary.reset_count = 0; - zm_summary.rx_amsdu_len = 0; - - for (i=0; i<100; i++) - { - zm_var.tx_msdu_tick[i] = zm_var.tx_mpdu_tick[i] = 0; - zm_var.rx_msdu_tick[i] = zm_var.rx_mpdu_tick[i] = 0; - } - - zfTimerSchedule(dev, ZM_EVENT_TIMEOUT_PERFORMANCE, 100); -} - -void zfiTxPerformanceMSDU(zdev_t* dev, u32_t tick) -{ - u32_t index; - zm_summary.tx_msdu_count++; - - index = tick - zm_summary.tick_base; - - if (index < 100) - { - zm_var.tx_msdu_tick[index]++; - } - else - { - //DbgPrint("wd->tick exceeded tick_base+100!\n"); - } -} - -void zfiRxPerformanceMSDU(zdev_t* dev, u32_t tick) -{ - u32_t index; - zm_summary.rx_msdu_count++; - - index = tick - zm_summary.tick_base; - - if (index < 100) - { - zm_var.rx_msdu_tick[index]++; - } - else - { - //DbgPrint("wd->tick exceeded tick_base+100!\n"); - } -} - -void zfiTxPerformanceMPDU(zdev_t* dev, u32_t tick) -{ - u32_t index; - zm_summary.tx_mpdu_count++; - - index = tick - zm_summary.tick_base; - - if (index < 100) - { - zm_var.tx_mpdu_tick[index]++; - } - else - { - //DbgPrint("wd->tick exceeded tick_base+100!\n"); - } -} - -#ifndef ZM_INT_USE_EP2_HEADER_SIZE -#define ZM_INT_USE_EP2_HEADER_SIZE 12 -#endif -void zfiRxPerformanceMPDU(zdev_t* dev, zbuf_t* buf) -{ - u32_t index; - u16_t frameType; - u16_t frameCtrl; - u8_t mpduInd; - u16_t plcpHdrLen; - u16_t len; - - zmw_get_wlan_dev(dev); - - len = zfwBufGetSize(dev, buf); - mpduInd = zmw_rx_buf_readb(dev, buf, len-1); - /* First MPDU or Single MPDU */ - if(((mpduInd & 0x30) == 0x00) || ((mpduInd & 0x30) == 0x20)) - //if ((mpduInd & 0x10) == 0x00) - { - plcpHdrLen = 12; // PLCP header length - } - else - { - if (zmw_rx_buf_readh(dev, buf, 4) == wd->macAddr[0] && - zmw_rx_buf_readh(dev, buf, 6) == wd->macAddr[1] && - zmw_rx_buf_readh(dev, buf, 8) == wd->macAddr[2]) { - plcpHdrLen = 0; - } - else if (zmw_rx_buf_readh(dev, buf, 16) == wd->macAddr[0] && - zmw_rx_buf_readh(dev, buf, 18) == wd->macAddr[1] && - zmw_rx_buf_readh(dev, buf, 20) == wd->macAddr[2]){ - plcpHdrLen = 12; - } - else { - plcpHdrLen = 0; - } - } - - frameCtrl = zmw_rx_buf_readb(dev, buf, plcpHdrLen + 0); - frameType = frameCtrl & 0xf; - - if (frameType != ZM_WLAN_DATA_FRAME) - { - return; - } - - zm_summary.rx_mpdu_count++; - - index = wd->tick - zm_summary.tick_base; - - if (index < 100) - { - zm_var.rx_mpdu_tick[index]++; - } - else - { - //DbgPrint("wd->tick exceeded tick_base+100!\n"); - } -} - -void zfiRxPerformanceSeq(zdev_t* dev, zbuf_t* buf) -{ - u16_t seq_no; - u16_t offset = 0; - u16_t old_dis = zm_summary.rx_broken_seq_dis; - //sys_time = KeQueryPerformanceCounter(&freq); - - seq_no = zmw_rx_buf_readh(dev, buf, offset+22) >> 4; - - ZM_SEQ_DEBUG("Out %5d\n", seq_no); - - if (seq_no < zm_summary.rx_seq_base) - { - if (seq_no == 0) - { - if (zm_summary.rx_seq_base != 4095) - { - zm_summary.rx_broken_seq++; - ZM_SEQ_DEBUG("Broken seq"); - zm_summary.rx_broken_seq_dis+=(4096 - zm_summary.rx_seq_base); - } - } - else if ((seq_no < 300) && (zm_summary.rx_seq_base > 3800)) - { - zm_summary.rx_broken_seq++; - ZM_SEQ_DEBUG("Broken seq"); - zm_summary.rx_broken_seq_dis+=(4096 - zm_summary.rx_seq_base + seq_no); - } - else - { - zm_summary.rx_broken_seq++; - ZM_SEQ_DEBUG("Broken seq"); - zm_summary.rx_broken_seq_dis+=(zm_summary.rx_seq_base - seq_no); - zm_summary.rx_old_seq++; - } - } - else - { - if (seq_no != (zm_summary.rx_seq_base + 1)) - { - if ((seq_no > 3800) && (zm_summary.rx_seq_base < 300)) - { - zm_summary.rx_broken_seq++; - ZM_SEQ_DEBUG("Broken seq"); - zm_summary.rx_broken_seq_dis+=(4096 - seq_no + zm_summary.rx_seq_base); - zm_summary.rx_old_seq++; - } - else - { - zm_summary.rx_broken_seq++; - ZM_SEQ_DEBUG("Broken seq"); - zm_summary.rx_broken_seq_dis+=(seq_no - zm_summary.rx_seq_base); - } - } - } - if (seq_no == zm_summary.rx_seq_base) - { - zm_summary.rx_duplicate_seq++; - } - - if ((zm_summary.rx_broken_seq_dis - old_dis) > 100) - { - DbgPrint("* seq_no=%4d, base_seq=%4d, dis_diff=%4d", seq_no, - zm_summary.rx_seq_base, zm_summary.rx_broken_seq_dis - old_dis); - } - zm_summary.rx_seq_base = seq_no; -} - -void zfiRxPerformanceReg(zdev_t* dev, u32_t reg, u32_t rsp) -{ - zm_summary.reset_count = (u16_t)rsp - zm_summary.reset_sum; - zm_summary.reset_sum = (u16_t)rsp; -} - -void zfiRxPerformanceDup(zdev_t* dev, zbuf_t* buf1, zbuf_t* buf2) -{ - u16_t seq_no1, seq_no2; - - seq_no1 = zmw_rx_buf_readh(dev, buf1, 22) >> 4; - seq_no2 = zmw_rx_buf_readh(dev, buf2, 22) >> 4; - if (seq_no1 != seq_no2) - { - zm_summary.rx_duplicate_error++; - } -} - -void zfiRxPerformanceFree(zdev_t* dev, zbuf_t* buf) -{ - zm_summary.rx_free++; -} - -void zfiRxPerformanceAMSDU(zdev_t* dev, zbuf_t* buf, u16_t len) -{ - if (zm_summary.rx_amsdu_len < len) - { - zm_summary.rx_amsdu_len = len; - } -} -void zfiRxPerformanceFlush(zdev_t* dev) -{ - zm_summary.rx_flush++; -} - -void zfiRxPerformanceClear(zdev_t* dev) -{ - zm_summary.rx_clear++; - ZM_SEQ_DEBUG("RxClear"); -} - -void zfiRxPerformanceReorder(zdev_t* dev) -{ - zm_summary.rx_reorder++; -} -#endif /* end of ZM_ENABLE_PERFORMANCE_EVALUATION */ |