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