1 
2 /*
3  * File Name: hostmibs.c
4  *
5  * Author: Beceem Communications Pvt. Ltd
6  *
7  * Abstract: This file contains the routines to copy the statistics used by
8  * the driver to the Host MIBS structure and giving the same to Application.
9  *
10  */
11 #include "headers.h"
12 
ProcessGetHostMibs(PMINI_ADAPTER Adapter,S_MIBS_HOST_STATS_MIBS * pstHostMibs)13 INT  ProcessGetHostMibs(PMINI_ADAPTER Adapter, S_MIBS_HOST_STATS_MIBS *pstHostMibs)
14 {
15 	S_SERVICEFLOW_ENTRY    *pstServiceFlowEntry = NULL;
16 	S_PHS_RULE             *pstPhsRule          = NULL;
17 	S_CLASSIFIER_TABLE     *pstClassifierTable  = NULL;
18 	S_CLASSIFIER_ENTRY     *pstClassifierRule   = NULL;
19 	PPHS_DEVICE_EXTENSION  pDeviceExtension     = (PPHS_DEVICE_EXTENSION)&Adapter->stBCMPhsContext;
20 
21 	UINT nClassifierIndex = 0, nPhsTableIndex = 0,nSfIndex = 0, uiIndex = 0;
22 
23 	if(pDeviceExtension == NULL)
24 	{
25 		BCM_DEBUG_PRINT(Adapter,DBG_TYPE_OTHERS, HOST_MIBS, DBG_LVL_ALL, "Invalid Device Extension\n");
26 		return STATUS_FAILURE;
27 	}
28 
29 	//Copy the classifier Table
30 	for(nClassifierIndex=0; nClassifierIndex < MAX_CLASSIFIERS;
31 			nClassifierIndex++)
32 	{
33 		if(Adapter->astClassifierTable[nClassifierIndex].bUsed == TRUE)
34 			memcpy((PVOID)&pstHostMibs->astClassifierTable[nClassifierIndex],
35 				(PVOID)&Adapter->astClassifierTable[nClassifierIndex],
36 				sizeof(S_MIBS_CLASSIFIER_RULE));
37 	}
38 
39   //Copy the SF Table
40 	for(nSfIndex=0; nSfIndex < NO_OF_QUEUES ; nSfIndex++)
41 	{
42 	if(Adapter->PackInfo[nSfIndex].bValid)
43 	{
44 			memcpy((PVOID)&pstHostMibs->astSFtable[nSfIndex],(PVOID)&Adapter->PackInfo[nSfIndex],sizeof(S_MIBS_SERVICEFLOW_TABLE));
45 	}
46 	else
47 	{
48 		//if index in not valid, don't process this for the PHS table. Go For the next entry.
49 		continue ;
50 	}
51 
52 		//Retrieve the SFID Entry Index for requested Service Flow
53 		if(PHS_INVALID_TABLE_INDEX == GetServiceFlowEntry(pDeviceExtension->pstServiceFlowPhsRulesTable,
54 						  Adapter->PackInfo[nSfIndex].usVCID_Value ,&pstServiceFlowEntry))
55 		{
56 
57 		continue;
58 		}
59 
60 		pstClassifierTable = pstServiceFlowEntry->pstClassifierTable;
61 
62 
63 		for(uiIndex = 0; uiIndex < MAX_PHSRULE_PER_SF; uiIndex++)
64 		{
65 			pstClassifierRule = &pstClassifierTable->stActivePhsRulesList[uiIndex];
66 
67 		if(pstClassifierRule->bUsed)
68 		{
69 			pstPhsRule = pstClassifierRule->pstPhsRule;
70 
71 			pstHostMibs->astPhsRulesTable[nPhsTableIndex].ulSFID = Adapter->PackInfo[nSfIndex].ulSFID;
72 
73 			memcpy(&pstHostMibs->astPhsRulesTable[nPhsTableIndex].u8PHSI,
74 						&pstPhsRule->u8PHSI,
75 						sizeof(S_PHS_RULE));
76 				nPhsTableIndex++;
77 
78 			}
79 
80 		}
81 
82 	}
83 
84 
85 	//copy other Host Statistics parameters
86 	pstHostMibs->stHostInfo.GoodTransmits = Adapter->dev->stats.tx_packets;
87 	pstHostMibs->stHostInfo.GoodReceives = Adapter->dev->stats.rx_packets;
88 	pstHostMibs->stHostInfo.CurrNumFreeDesc =
89 			atomic_read(&Adapter->CurrNumFreeTxDesc);
90 	pstHostMibs->stHostInfo.BEBucketSize = Adapter->BEBucketSize;
91 	pstHostMibs->stHostInfo.rtPSBucketSize = Adapter->rtPSBucketSize;
92 	pstHostMibs->stHostInfo.TimerActive = Adapter->TimerActive;
93 	pstHostMibs->stHostInfo.u32TotalDSD = Adapter->u32TotalDSD;
94 
95 	memcpy(pstHostMibs->stHostInfo.aTxPktSizeHist,Adapter->aTxPktSizeHist,sizeof(UINT32)*MIBS_MAX_HIST_ENTRIES);
96 	memcpy(pstHostMibs->stHostInfo.aRxPktSizeHist,Adapter->aRxPktSizeHist,sizeof(UINT32)*MIBS_MAX_HIST_ENTRIES);
97 
98 	return STATUS_SUCCESS;
99 }
100 
101 
GetDroppedAppCntrlPktMibs(S_MIBS_HOST_STATS_MIBS * pstHostMibs,const PPER_TARANG_DATA pTarang)102 VOID GetDroppedAppCntrlPktMibs(S_MIBS_HOST_STATS_MIBS *pstHostMibs, const PPER_TARANG_DATA pTarang)
103 {
104 	memcpy(&(pstHostMibs->stDroppedAppCntrlMsgs),
105 	       &(pTarang->stDroppedAppCntrlMsgs),sizeof(S_MIBS_DROPPED_APP_CNTRL_MESSAGES));
106 }
107 
108 
CopyMIBSExtendedSFParameters(PMINI_ADAPTER Adapter,CServiceFlowParamSI * psfLocalSet,UINT uiSearchRuleIndex)109 VOID CopyMIBSExtendedSFParameters(PMINI_ADAPTER Adapter,
110 		CServiceFlowParamSI *psfLocalSet, UINT uiSearchRuleIndex)
111 {
112 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfSfid = psfLocalSet->u32SFID;
113 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsMaxSustainedRate = psfLocalSet->u32MaxSustainedTrafficRate;
114 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsMaxTrafficBurst = psfLocalSet->u32MaxTrafficBurst;
115 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsMinReservedRate = psfLocalSet->u32MinReservedTrafficRate;
116 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsToleratedJitter = psfLocalSet->u32ToleratedJitter;
117 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsMaxLatency = psfLocalSet->u32MaximumLatency;
118 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsFixedVsVariableSduInd = psfLocalSet->u8FixedLengthVSVariableLengthSDUIndicator;
119 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsFixedVsVariableSduInd = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsFixedVsVariableSduInd);
120 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSduSize = psfLocalSet->u8SDUSize;
121 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSduSize = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSduSize);
122 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSfSchedulingType = psfLocalSet->u8ServiceFlowSchedulingType;
123 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSfSchedulingType = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsSfSchedulingType);
124 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqEnable = psfLocalSet->u8ARQEnable;
125 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqEnable = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqEnable);
126 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqWindowSize = ntohs(psfLocalSet->u16ARQWindowSize);
127 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqWindowSize = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqWindowSize);
128 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockLifetime = ntohs(psfLocalSet->u16ARQBlockLifeTime);
129 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockLifetime = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockLifetime);
130 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqSyncLossTimeout = ntohs(psfLocalSet->u16ARQSyncLossTimeOut);
131 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqSyncLossTimeout = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqSyncLossTimeout);
132 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqDeliverInOrder = psfLocalSet->u8ARQDeliverInOrder;
133 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqDeliverInOrder = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqDeliverInOrder);
134 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqRxPurgeTimeout = ntohs(psfLocalSet->u16ARQRxPurgeTimeOut);
135 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqRxPurgeTimeout = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqRxPurgeTimeout);
136 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockSize = ntohs(psfLocalSet->u16ARQBlockSize);
137 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockSize = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsArqBlockSize);
138 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsReqTxPolicy = psfLocalSet->u8RequesttransmissionPolicy;
139 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsReqTxPolicy = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsReqTxPolicy);
140 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnSfCsSpecification = psfLocalSet->u8CSSpecification;
141 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnSfCsSpecification = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnSfCsSpecification);
142 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsTargetSaid = ntohs(psfLocalSet->u16TargetSAID);
143 	Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsTargetSaid = ntohl(Adapter->PackInfo[uiSearchRuleIndex].stMibsExtServiceFlowTable.wmanIfCmnCpsTargetSaid);
144 
145 }
146