165 lines
8.6 KiB
C
165 lines
8.6 KiB
C
|
|
/*
|
|
* File Name: hostmibs.c
|
|
*
|
|
* Author: Beceem Communications Pvt. Ltd
|
|
*
|
|
* Abstract: This file contains the routines to copy the statistics used by
|
|
* the driver to the Host MIBS structure and giving the same to Application.
|
|
*
|
|
*/
|
|
#include "headers.h"
|
|
|
|
INT ProcessGetHostMibs(PMINI_ADAPTER Adapter,
|
|
PVOID ioBuffer,
|
|
ULONG inputBufferLength)
|
|
{
|
|
|
|
S_MIBS_HOST_STATS_MIBS *pstHostMibs = NULL;
|
|
S_SERVICEFLOW_ENTRY *pstServiceFlowEntry = NULL;
|
|
S_PHS_RULE *pstPhsRule = NULL;
|
|
S_CLASSIFIER_TABLE *pstClassifierTable = NULL;
|
|
S_CLASSIFIER_ENTRY *pstClassifierRule = NULL;
|
|
PPHS_DEVICE_EXTENSION pDeviceExtension = (PPHS_DEVICE_EXTENSION)&Adapter->stBCMPhsContext;
|
|
|
|
UINT nClassifierIndex = 0, nPhsTableIndex = 0,nSfIndex = 0, uiIndex = 0;
|
|
|
|
if(pDeviceExtension == NULL)
|
|
{
|
|
BCM_DEBUG_PRINT(Adapter,DBG_TYPE_OTHERS, HOST_MIBS, DBG_LVL_ALL, "Invalid Device Extension\n");
|
|
return STATUS_FAILURE;
|
|
}
|
|
|
|
if(ioBuffer == NULL)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
memset(ioBuffer,0,sizeof(S_MIBS_HOST_STATS_MIBS));
|
|
|
|
pstHostMibs = (S_MIBS_HOST_STATS_MIBS *)ioBuffer;
|
|
|
|
|
|
//Copy the classifier Table
|
|
for(nClassifierIndex=0; nClassifierIndex < MAX_CLASSIFIERS;
|
|
nClassifierIndex++)
|
|
{
|
|
if(Adapter->astClassifierTable[nClassifierIndex].bUsed == TRUE)
|
|
memcpy((PVOID)&pstHostMibs->astClassifierTable[nClassifierIndex],
|
|
(PVOID)&Adapter->astClassifierTable[nClassifierIndex],
|
|
sizeof(S_MIBS_CLASSIFIER_RULE));
|
|
}
|
|
|
|
//Copy the SF Table
|
|
for(nSfIndex=0; nSfIndex < NO_OF_QUEUES ; nSfIndex++)
|
|
{
|
|
if(Adapter->PackInfo[nSfIndex].bValid)
|
|
{
|
|
OsalMemMove((PVOID)&pstHostMibs->astSFtable[nSfIndex],(PVOID)&Adapter->PackInfo[nSfIndex],sizeof(S_MIBS_SERVICEFLOW_TABLE));
|
|
}
|
|
else
|
|
{
|
|
//if index in not valid, don't process this for the PHS table. Go For the next entry.
|
|
continue ;
|
|
}
|
|
|
|
//Retrieve the SFID Entry Index for requested Service Flow
|
|
if(PHS_INVALID_TABLE_INDEX == GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable,
|
|
Adapter->PackInfo[nSfIndex].usVCID_Value ,&pstServiceFlowEntry))
|
|
{
|
|
|
|
continue;
|
|
}
|
|
|
|
pstClassifierTable = pstServiceFlowEntry->pstClassifierTable;
|
|
|
|
|
|
for(uiIndex = 0; uiIndex < MAX_PHSRULE_PER_SF; uiIndex++)
|
|
{
|
|
pstClassifierRule = &pstClassifierTable->stActivePhsRulesList[uiIndex];
|
|
|
|
if(pstClassifierRule->bUsed)
|
|
{
|
|
pstPhsRule = pstClassifierRule->pstPhsRule;
|
|
|
|
pstHostMibs->astPhsRulesTable[nPhsTableIndex].ulSFID = Adapter->PackInfo[nSfIndex].ulSFID;
|
|
|
|
OsalMemMove(&pstHostMibs->astPhsRulesTable[nPhsTableIndex].u8PHSI,
|
|
&pstPhsRule->u8PHSI,
|
|
sizeof(S_PHS_RULE));
|
|
nPhsTableIndex++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//copy other Host Statistics parameters
|
|
pstHostMibs->stHostInfo.GoodTransmits =
|
|
atomic_read(&Adapter->TxTotalPacketCount);
|
|
pstHostMibs->stHostInfo.GoodReceives =
|
|
atomic_read(&Adapter->GoodRxPktCount);
|
|
pstHostMibs->stHostInfo.CurrNumFreeDesc =
|
|
atomic_read(&Adapter->CurrNumFreeTxDesc);
|
|
pstHostMibs->stHostInfo.BEBucketSize = Adapter->BEBucketSize;
|
|
pstHostMibs->stHostInfo.rtPSBucketSize = Adapter->rtPSBucketSize;
|
|
pstHostMibs->stHostInfo.TimerActive = Adapter->TimerActive;
|
|
pstHostMibs->stHostInfo.u32TotalDSD = Adapter->u32TotalDSD;
|
|
|
|
memcpy(pstHostMibs->stHostInfo.aTxPktSizeHist,Adapter->aTxPktSizeHist,sizeof(UINT32)*MIBS_MAX_HIST_ENTRIES);
|
|
memcpy(pstHostMibs->stHostInfo.aRxPktSizeHist,Adapter->aRxPktSizeHist,sizeof(UINT32)*MIBS_MAX_HIST_ENTRIES);
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
|
|
INT GetDroppedAppCntrlPktMibs(PVOID ioBuffer, PPER_TARANG_DATA pTarang)
|
|
{
|
|
S_MIBS_HOST_STATS_MIBS *pstHostMibs = (S_MIBS_HOST_STATS_MIBS *)ioBuffer;
|
|
|
|
memcpy((PVOID)&(pstHostMibs->stDroppedAppCntrlMsgs),(PVOID)&(pTarang->stDroppedAppCntrlMsgs),sizeof(S_MIBS_DROPPED_APP_CNTRL_MESSAGES));
|
|
|
|
return STATUS_SUCCESS ;
|
|
}
|
|
|
|
|
|
VOID CopyMIBSExtendedSFParameters(PMINI_ADAPTER Adapter,
|
|
CServiceFlowParamSI *psfLocalSet, UINT uiSearchRuleIndex)
|
|
{
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfSfid = psfLocalSet->u32SFID;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsMaxSustainedRate = psfLocalSet->u32MaxSustainedTrafficRate;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsMaxTrafficBurst = psfLocalSet->u32MaxTrafficBurst;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsMinReservedRate = psfLocalSet->u32MinReservedTrafficRate;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsToleratedJitter = psfLocalSet->u32ToleratedJitter;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsMaxLatency = psfLocalSet->u32MaximumLatency;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsFixedVsVariableSduInd = psfLocalSet->u8FixedLengthVSVariableLengthSDUIndicator;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsFixedVsVariableSduInd = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsFixedVsVariableSduInd);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSduSize = psfLocalSet->u8SDUSize;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSduSize = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSduSize);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSfSchedulingType = psfLocalSet->u8ServiceFlowSchedulingType;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSfSchedulingType = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSfSchedulingType);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqEnable = psfLocalSet->u8ARQEnable;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqEnable = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqEnable);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqWindowSize = ntohs(psfLocalSet->u16ARQWindowSize);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqWindowSize = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqWindowSize);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockLifetime = ntohs(psfLocalSet->u16ARQBlockLifeTime);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockLifetime = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockLifetime);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqSyncLossTimeout = ntohs(psfLocalSet->u16ARQSyncLossTimeOut);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqSyncLossTimeout = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqSyncLossTimeout);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqDeliverInOrder = psfLocalSet->u8ARQDeliverInOrder;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqDeliverInOrder = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqDeliverInOrder);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqRxPurgeTimeout = ntohs(psfLocalSet->u16ARQRxPurgeTimeOut);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqRxPurgeTimeout = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqRxPurgeTimeout);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockSize = ntohs(psfLocalSet->u16ARQBlockSize);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockSize = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockSize);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsReqTxPolicy = psfLocalSet->u8RequesttransmissionPolicy;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsReqTxPolicy = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsReqTxPolicy);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnSfCsSpecification = psfLocalSet->u8CSSpecification;
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnSfCsSpecification = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnSfCsSpecification);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsTargetSaid = ntohs(psfLocalSet->u16TargetSAID);
|
|
Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsTargetSaid = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsTargetSaid);
|
|
|
|
}
|