1 /************************************************************
3 * This file contains the routines for handling Connection
5 ************************************************************/
9 enum E_CLASSIFIER_ACTION
{
10 eInvalidClassifierAction
,
16 static ULONG
GetNextTargetBufferLocation(struct bcm_mini_adapter
*Adapter
, B_UINT16 tid
);
18 /************************************************************
19 * Function - SearchSfid
21 * Description - This routinue would search QOS queues having
22 * specified SFID as input parameter.
24 * Parameters - Adapter: Pointer to the Adapter structure
25 * uiSfid : Given SFID for matching
27 * Returns - Queue index for this SFID(If matched)
28 * Else Invalid Queue Index(If Not matched)
29 ************************************************************/
30 int SearchSfid(struct bcm_mini_adapter
*Adapter
, UINT uiSfid
)
34 for (i
= (NO_OF_QUEUES
-1); i
>= 0; i
--)
35 if (Adapter
->PackInfo
[i
].ulSFID
== uiSfid
)
38 return NO_OF_QUEUES
+1;
41 /***************************************************************
42 * Function -SearchFreeSfid
44 * Description - This routinue would search Free available SFID.
46 * Parameter - Adapter: Pointer to the Adapter structure
48 * Returns - Queue index for the free SFID
49 * Else returns Invalid Index.
50 ****************************************************************/
51 static int SearchFreeSfid(struct bcm_mini_adapter
*Adapter
)
55 for (i
= 0; i
< (NO_OF_QUEUES
-1); i
++)
56 if (Adapter
->PackInfo
[i
].ulSFID
== 0)
59 return NO_OF_QUEUES
+1;
63 * Function: SearchClsid
64 * Description: This routinue would search Classifier having specified ClassifierID as input parameter
65 * Input parameters: struct bcm_mini_adapter *Adapter - Adapter Context
66 * unsigned int uiSfid - The SF in which the classifier is to searched
67 * B_UINT16 uiClassifierID - The classifier ID to be searched
68 * Return: int :Classifier table index of matching entry
70 static int SearchClsid(struct bcm_mini_adapter
*Adapter
, ULONG ulSFID
, B_UINT16 uiClassifierID
)
74 for (i
= 0; i
< MAX_CLASSIFIERS
; i
++) {
75 if ((Adapter
->astClassifierTable
[i
].bUsed
) &&
76 (Adapter
->astClassifierTable
[i
].uiClassifierRuleIndex
== uiClassifierID
) &&
77 (Adapter
->astClassifierTable
[i
].ulSFID
== ulSFID
))
81 return MAX_CLASSIFIERS
+1;
85 * @ingroup ctrl_pkt_functions
86 * This routinue would search Free available Classifier entry in classifier table.
87 * @return free Classifier Entry index in classifier table for specified SF
89 static int SearchFreeClsid(struct bcm_mini_adapter
*Adapter
/**Adapter Context*/)
93 for (i
= 0; i
< MAX_CLASSIFIERS
; i
++) {
94 if (!Adapter
->astClassifierTable
[i
].bUsed
)
98 return MAX_CLASSIFIERS
+1;
101 static VOID
deleteSFBySfid(struct bcm_mini_adapter
*Adapter
, UINT uiSearchRuleIndex
)
103 /* deleting all the packet held in the SF */
104 flush_queue(Adapter
, uiSearchRuleIndex
);
106 /* Deleting the all classifiers for this SF */
107 DeleteAllClassifiersForSF(Adapter
, uiSearchRuleIndex
);
109 /* Resetting only MIBS related entries in the SF */
110 memset((PVOID
)&Adapter
->PackInfo
[uiSearchRuleIndex
], 0, sizeof(struct bcm_mibs_table
));
114 CopyIpAddrToClassifier(struct bcm_classifier_rule
*pstClassifierEntry
,
115 B_UINT8 u8IpAddressLen
, B_UINT8
*pu8IpAddressMaskSrc
,
116 bool bIpVersion6
, enum bcm_ipaddr_context eIpAddrContext
)
119 UINT nSizeOfIPAddressInBytes
= IP_LENGTH_OF_ADDRESS
;
120 UCHAR
*ptrClassifierIpAddress
= NULL
;
121 UCHAR
*ptrClassifierIpMask
= NULL
;
122 struct bcm_mini_adapter
*Adapter
= GET_BCM_ADAPTER(gblpnetdev
);
125 nSizeOfIPAddressInBytes
= IPV6_ADDRESS_SIZEINBYTES
;
127 /* Destination Ip Address */
128 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Ip Address Range Length:0x%X ", u8IpAddressLen
);
129 if ((bIpVersion6
? (IPV6_ADDRESS_SIZEINBYTES
* MAX_IP_RANGE_LENGTH
* 2) :
130 (TOTAL_MASKED_ADDRESS_IN_BYTES
)) >= u8IpAddressLen
) {
132 * checking both the mask and address togethor in Classification.
133 * So length will be : TotalLengthInBytes/nSizeOfIPAddressInBytes * 2
134 * (nSizeOfIPAddressInBytes for address and nSizeOfIPAddressInBytes for mask)
136 if (eIpAddrContext
== eDestIpAddress
) {
137 pstClassifierEntry
->ucIPDestinationAddressLength
= u8IpAddressLen
/(nSizeOfIPAddressInBytes
* 2);
139 ptrClassifierIpAddress
= pstClassifierEntry
->stDestIpAddress
.ucIpv6Address
;
140 ptrClassifierIpMask
= pstClassifierEntry
->stDestIpAddress
.ucIpv6Mask
;
142 ptrClassifierIpAddress
= pstClassifierEntry
->stDestIpAddress
.ucIpv4Address
;
143 ptrClassifierIpMask
= pstClassifierEntry
->stDestIpAddress
.ucIpv4Mask
;
145 } else if (eIpAddrContext
== eSrcIpAddress
) {
146 pstClassifierEntry
->ucIPSourceAddressLength
= u8IpAddressLen
/(nSizeOfIPAddressInBytes
* 2);
148 ptrClassifierIpAddress
= pstClassifierEntry
->stSrcIpAddress
.ucIpv6Address
;
149 ptrClassifierIpMask
= pstClassifierEntry
->stSrcIpAddress
.ucIpv6Mask
;
151 ptrClassifierIpAddress
= pstClassifierEntry
->stSrcIpAddress
.ucIpv4Address
;
152 ptrClassifierIpMask
= pstClassifierEntry
->stSrcIpAddress
.ucIpv4Mask
;
155 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Address Length:0x%X\n", pstClassifierEntry
->ucIPDestinationAddressLength
);
156 while ((u8IpAddressLen
>= nSizeOfIPAddressInBytes
) && (i
< MAX_IP_RANGE_LENGTH
)) {
157 memcpy(ptrClassifierIpAddress
+
158 (i
* nSizeOfIPAddressInBytes
),
159 (pu8IpAddressMaskSrc
+(i
*nSizeOfIPAddressInBytes
*2)),
160 nSizeOfIPAddressInBytes
);
163 if (eIpAddrContext
== eSrcIpAddress
) {
164 pstClassifierEntry
->stSrcIpAddress
.ulIpv4Addr
[i
] = ntohl(pstClassifierEntry
->stSrcIpAddress
.ulIpv4Addr
[i
]);
165 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Src Ip Address:0x%luX ",
166 pstClassifierEntry
->stSrcIpAddress
.ulIpv4Addr
[i
]);
167 } else if (eIpAddrContext
== eDestIpAddress
) {
168 pstClassifierEntry
->stDestIpAddress
.ulIpv4Addr
[i
] = ntohl(pstClassifierEntry
->stDestIpAddress
.ulIpv4Addr
[i
]);
169 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Dest Ip Address:0x%luX ",
170 pstClassifierEntry
->stDestIpAddress
.ulIpv4Addr
[i
]);
173 u8IpAddressLen
-= nSizeOfIPAddressInBytes
;
174 if (u8IpAddressLen
>= nSizeOfIPAddressInBytes
) {
175 memcpy(ptrClassifierIpMask
+
176 (i
* nSizeOfIPAddressInBytes
),
177 (pu8IpAddressMaskSrc
+nSizeOfIPAddressInBytes
+
178 (i
*nSizeOfIPAddressInBytes
*2)),
179 nSizeOfIPAddressInBytes
);
182 if (eIpAddrContext
== eSrcIpAddress
) {
183 pstClassifierEntry
->stSrcIpAddress
.ulIpv4Mask
[i
] =
184 ntohl(pstClassifierEntry
->stSrcIpAddress
.ulIpv4Mask
[i
]);
185 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Src Ip Mask Address:0x%luX ",
186 pstClassifierEntry
->stSrcIpAddress
.ulIpv4Mask
[i
]);
187 } else if (eIpAddrContext
== eDestIpAddress
) {
188 pstClassifierEntry
->stDestIpAddress
.ulIpv4Mask
[i
] =
189 ntohl(pstClassifierEntry
->stDestIpAddress
.ulIpv4Mask
[i
]);
190 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Dest Ip Mask Address:0x%luX ",
191 pstClassifierEntry
->stDestIpAddress
.ulIpv4Mask
[i
]);
194 u8IpAddressLen
-= nSizeOfIPAddressInBytes
;
196 if (u8IpAddressLen
== 0)
197 pstClassifierEntry
->bDestIpValid
= TRUE
;
202 /* Restore EndianNess of Struct */
203 for (i
= 0; i
< MAX_IP_RANGE_LENGTH
* 4; i
++) {
204 if (eIpAddrContext
== eSrcIpAddress
) {
205 pstClassifierEntry
->stSrcIpAddress
.ulIpv6Addr
[i
] = ntohl(pstClassifierEntry
->stSrcIpAddress
.ulIpv6Addr
[i
]);
206 pstClassifierEntry
->stSrcIpAddress
.ulIpv6Mask
[i
] = ntohl(pstClassifierEntry
->stSrcIpAddress
.ulIpv6Mask
[i
]);
207 } else if (eIpAddrContext
== eDestIpAddress
) {
208 pstClassifierEntry
->stDestIpAddress
.ulIpv6Addr
[i
] = ntohl(pstClassifierEntry
->stDestIpAddress
.ulIpv6Addr
[i
]);
209 pstClassifierEntry
->stDestIpAddress
.ulIpv6Mask
[i
] = ntohl(pstClassifierEntry
->stDestIpAddress
.ulIpv6Mask
[i
]);
216 void ClearTargetDSXBuffer(struct bcm_mini_adapter
*Adapter
, B_UINT16 TID
, bool bFreeAll
)
220 for (i
= 0; i
< Adapter
->ulTotalTargetBuffersAvailable
; i
++) {
221 if (Adapter
->astTargetDsxBuffer
[i
].valid
)
224 if ((bFreeAll
) || (Adapter
->astTargetDsxBuffer
[i
].tid
== TID
)) {
225 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "ClearTargetDSXBuffer: found tid %d buffer cleared %lx\n",
226 TID
, Adapter
->astTargetDsxBuffer
[i
].ulTargetDsxBuffer
);
227 Adapter
->astTargetDsxBuffer
[i
].valid
= 1;
228 Adapter
->astTargetDsxBuffer
[i
].tid
= 0;
229 Adapter
->ulFreeTargetBufferCnt
++;
235 * @ingroup ctrl_pkt_functions
236 * copy classifier rule into the specified SF index
238 static inline VOID
CopyClassifierRuleToSF(struct bcm_mini_adapter
*Adapter
, struct bcm_convergence_types
*psfCSType
, UINT uiSearchRuleIndex
, UINT nClassifierIndex
)
240 struct bcm_classifier_rule
*pstClassifierEntry
= NULL
;
241 /* VOID *pvPhsContext = NULL; */
243 /* UCHAR ucProtocolLength=0; */
244 /* ULONG ulPhsStatus; */
246 if (Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
== 0 ||
247 nClassifierIndex
> (MAX_CLASSIFIERS
-1))
250 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Storing Classifier Rule Index : %X",
251 ntohs(psfCSType
->cCPacketClassificationRule
.u16PacketClassificationRuleIndex
));
253 if (nClassifierIndex
> MAX_CLASSIFIERS
-1)
256 pstClassifierEntry
= &Adapter
->astClassifierTable
[nClassifierIndex
];
257 if (pstClassifierEntry
) {
259 pstClassifierEntry
->bIpv6Protocol
= (Adapter
->PackInfo
[uiSearchRuleIndex
].ucIpVersion
== IPV6
) ? TRUE
: false;
261 /* Destinaiton Port */
262 pstClassifierEntry
->ucDestPortRangeLength
= psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRangeLength
/ 4;
263 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Destination Port Range Length:0x%X ", pstClassifierEntry
->ucDestPortRangeLength
);
265 if (psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRangeLength
<= MAX_PORT_RANGE
) {
266 for (i
= 0; i
< (pstClassifierEntry
->ucDestPortRangeLength
); i
++) {
267 pstClassifierEntry
->usDestPortRangeLo
[i
] = *((PUSHORT
)(psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
+i
));
268 pstClassifierEntry
->usDestPortRangeHi
[i
] =
269 *((PUSHORT
)(psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
+2+i
));
270 pstClassifierEntry
->usDestPortRangeLo
[i
] = ntohs(pstClassifierEntry
->usDestPortRangeLo
[i
]);
271 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Destination Port Range Lo:0x%X ",
272 pstClassifierEntry
->usDestPortRangeLo
[i
]);
273 pstClassifierEntry
->usDestPortRangeHi
[i
] = ntohs(pstClassifierEntry
->usDestPortRangeHi
[i
]);
276 pstClassifierEntry
->ucDestPortRangeLength
= 0;
280 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Source Port Range Length:0x%X ",
281 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRangeLength
);
282 if (psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRangeLength
<= MAX_PORT_RANGE
) {
283 pstClassifierEntry
->ucSrcPortRangeLength
= psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRangeLength
/4;
284 for (i
= 0; i
< (pstClassifierEntry
->ucSrcPortRangeLength
); i
++) {
285 pstClassifierEntry
->usSrcPortRangeLo
[i
] =
286 *((PUSHORT
)(psfCSType
->cCPacketClassificationRule
.
287 u8ProtocolSourcePortRange
+i
));
288 pstClassifierEntry
->usSrcPortRangeHi
[i
] =
289 *((PUSHORT
)(psfCSType
->cCPacketClassificationRule
.
290 u8ProtocolSourcePortRange
+2+i
));
291 pstClassifierEntry
->usSrcPortRangeLo
[i
] =
292 ntohs(pstClassifierEntry
->usSrcPortRangeLo
[i
]);
293 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Source Port Range Lo:0x%X ",
294 pstClassifierEntry
->usSrcPortRangeLo
[i
]);
295 pstClassifierEntry
->usSrcPortRangeHi
[i
] = ntohs(pstClassifierEntry
->usSrcPortRangeHi
[i
]);
298 /* Destination Ip Address and Mask */
299 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Ip Destination Parameters : ");
300 CopyIpAddrToClassifier(pstClassifierEntry
,
301 psfCSType
->cCPacketClassificationRule
.u8IPDestinationAddressLength
,
302 psfCSType
->cCPacketClassificationRule
.u8IPDestinationAddress
,
303 (Adapter
->PackInfo
[uiSearchRuleIndex
].ucIpVersion
== IPV6
) ?
304 TRUE
: false, eDestIpAddress
);
306 /* Source Ip Address and Mask */
307 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Ip Source Parameters : ");
309 CopyIpAddrToClassifier(pstClassifierEntry
,
310 psfCSType
->cCPacketClassificationRule
.u8IPMaskedSourceAddressLength
,
311 psfCSType
->cCPacketClassificationRule
.u8IPMaskedSourceAddress
,
312 (Adapter
->PackInfo
[uiSearchRuleIndex
].ucIpVersion
== IPV6
) ? TRUE
: false,
316 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "TOS Length:0x%X ", psfCSType
->cCPacketClassificationRule
.u8IPTypeOfServiceLength
);
317 if (psfCSType
->cCPacketClassificationRule
.u8IPTypeOfServiceLength
== 3) {
318 pstClassifierEntry
->ucIPTypeOfServiceLength
= psfCSType
->cCPacketClassificationRule
.u8IPTypeOfServiceLength
;
319 pstClassifierEntry
->ucTosLow
= psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[0];
320 pstClassifierEntry
->ucTosHigh
= psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[1];
321 pstClassifierEntry
->ucTosMask
= psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[2];
322 pstClassifierEntry
->bTOSValid
= TRUE
;
324 if (psfCSType
->cCPacketClassificationRule
.u8Protocol
== 0) {
325 /* we didn't get protocol field filled in by the BS */
326 pstClassifierEntry
->ucProtocolLength
= 0;
328 pstClassifierEntry
->ucProtocolLength
= 1; /* 1 valid protocol */
331 pstClassifierEntry
->ucProtocol
[0] = psfCSType
->cCPacketClassificationRule
.u8Protocol
;
332 pstClassifierEntry
->u8ClassifierRulePriority
= psfCSType
->cCPacketClassificationRule
.u8ClassifierRulePriority
;
334 /* store the classifier rule ID and set this classifier entry as valid */
335 pstClassifierEntry
->ucDirection
= Adapter
->PackInfo
[uiSearchRuleIndex
].ucDirection
;
336 pstClassifierEntry
->uiClassifierRuleIndex
= ntohs(psfCSType
->cCPacketClassificationRule
.u16PacketClassificationRuleIndex
);
337 pstClassifierEntry
->usVCID_Value
= Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
;
338 pstClassifierEntry
->ulSFID
= Adapter
->PackInfo
[uiSearchRuleIndex
].ulSFID
;
339 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Search Index %d Dir: %d, Index: %d, Vcid: %d\n",
340 uiSearchRuleIndex
, pstClassifierEntry
->ucDirection
,
341 pstClassifierEntry
->uiClassifierRuleIndex
,
342 pstClassifierEntry
->usVCID_Value
);
344 if (psfCSType
->cCPacketClassificationRule
.u8AssociatedPHSI
)
345 pstClassifierEntry
->u8AssociatedPHSI
= psfCSType
->cCPacketClassificationRule
.u8AssociatedPHSI
;
347 /* Copy ETH CS Parameters */
348 pstClassifierEntry
->ucEthCSSrcMACLen
= (psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddressLength
);
349 memcpy(pstClassifierEntry
->au8EThCSSrcMAC
, psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddress
, MAC_ADDRESS_SIZE
);
350 memcpy(pstClassifierEntry
->au8EThCSSrcMACMask
, psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddress
+ MAC_ADDRESS_SIZE
, MAC_ADDRESS_SIZE
);
351 pstClassifierEntry
->ucEthCSDestMACLen
= (psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddressLength
);
352 memcpy(pstClassifierEntry
->au8EThCSDestMAC
, psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddress
, MAC_ADDRESS_SIZE
);
353 memcpy(pstClassifierEntry
->au8EThCSDestMACMask
, psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddress
+ MAC_ADDRESS_SIZE
, MAC_ADDRESS_SIZE
);
354 pstClassifierEntry
->ucEtherTypeLen
= (psfCSType
->cCPacketClassificationRule
.u8EthertypeLength
);
355 memcpy(pstClassifierEntry
->au8EthCSEtherType
, psfCSType
->cCPacketClassificationRule
.u8Ethertype
, NUM_ETHERTYPE_BYTES
);
356 memcpy(pstClassifierEntry
->usUserPriority
, &psfCSType
->cCPacketClassificationRule
.u16UserPriority
, 2);
357 pstClassifierEntry
->usVLANID
= ntohs(psfCSType
->cCPacketClassificationRule
.u16VLANID
);
358 pstClassifierEntry
->usValidityBitMap
= ntohs(psfCSType
->cCPacketClassificationRule
.u16ValidityBitMap
);
360 pstClassifierEntry
->bUsed
= TRUE
;
365 * @ingroup ctrl_pkt_functions
367 static inline VOID
DeleteClassifierRuleFromSF(struct bcm_mini_adapter
*Adapter
, UINT uiSearchRuleIndex
, UINT nClassifierIndex
)
369 struct bcm_classifier_rule
*pstClassifierEntry
= NULL
;
370 B_UINT16 u16PacketClassificationRuleIndex
;
372 /* VOID *pvPhsContext = NULL; */
373 /*ULONG ulPhsStatus; */
375 usVCID
= Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
;
377 if (nClassifierIndex
> MAX_CLASSIFIERS
-1)
383 u16PacketClassificationRuleIndex
= Adapter
->astClassifierTable
[nClassifierIndex
].uiClassifierRuleIndex
;
384 pstClassifierEntry
= &Adapter
->astClassifierTable
[nClassifierIndex
];
385 if (pstClassifierEntry
) {
386 pstClassifierEntry
->bUsed
= false;
387 pstClassifierEntry
->uiClassifierRuleIndex
= 0;
388 memset(pstClassifierEntry
, 0, sizeof(struct bcm_classifier_rule
));
390 /* Delete the PHS Rule for this classifier */
391 PhsDeleteClassifierRule(&Adapter
->stBCMPhsContext
, usVCID
, u16PacketClassificationRuleIndex
);
396 * @ingroup ctrl_pkt_functions
398 VOID
DeleteAllClassifiersForSF(struct bcm_mini_adapter
*Adapter
, UINT uiSearchRuleIndex
)
400 struct bcm_classifier_rule
*pstClassifierEntry
= NULL
;
402 /* B_UINT16 u16PacketClassificationRuleIndex; */
404 /* VOID *pvPhsContext = NULL; */
405 /* ULONG ulPhsStatus; */
407 ulVCID
= Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
;
412 for (i
= 0; i
< MAX_CLASSIFIERS
; i
++) {
413 if (Adapter
->astClassifierTable
[i
].usVCID_Value
== ulVCID
) {
414 pstClassifierEntry
= &Adapter
->astClassifierTable
[i
];
416 if (pstClassifierEntry
->bUsed
)
417 DeleteClassifierRuleFromSF(Adapter
, uiSearchRuleIndex
, i
);
421 /* Delete All Phs Rules Associated with this SF */
422 PhsDeleteSFRules(&Adapter
->stBCMPhsContext
, ulVCID
);
426 * This routinue copies the Connection Management
427 * related data into the Adapter structure.
428 * @ingroup ctrl_pkt_functions
430 static VOID
CopyToAdapter(register struct bcm_mini_adapter
*Adapter
, /* <Pointer to the Adapter structure */
431 register struct bcm_connect_mgr_params
*psfLocalSet
, /* Pointer to the connection manager parameters structure */
432 register UINT uiSearchRuleIndex
, /* <Index of Queue, to which this data belongs */
433 register UCHAR ucDsxType
,
434 struct bcm_add_indication_alt
*pstAddIndication
) {
436 /* UCHAR ucProtocolLength = 0; */
438 UINT nClassifierIndex
= 0;
439 enum E_CLASSIFIER_ACTION eClassifierAction
= eInvalidClassifierAction
;
440 B_UINT16 u16PacketClassificationRuleIndex
= 0;
442 struct bcm_convergence_types
*psfCSType
= NULL
;
443 struct bcm_phs_rule sPhsRule
;
444 USHORT uVCID
= Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
;
447 Adapter
->PackInfo
[uiSearchRuleIndex
].bValid
= TRUE
;
448 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Search Rule Index = %d\n", uiSearchRuleIndex
);
449 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "%s: SFID= %x ", __func__
, ntohl(psfLocalSet
->u32SFID
));
450 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Updating Queue %d", uiSearchRuleIndex
);
452 ulSFID
= ntohl(psfLocalSet
->u32SFID
);
453 /* Store IP Version used */
454 /* Get The Version Of IP used (IPv6 or IPv4) from CSSpecification field of SF */
456 Adapter
->PackInfo
[uiSearchRuleIndex
].bIPCSSupport
= 0;
457 Adapter
->PackInfo
[uiSearchRuleIndex
].bEthCSSupport
= 0;
459 /* Enable IP/ETh CS Support As Required */
460 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "CopyToAdapter : u8CSSpecification : %X\n", psfLocalSet
->u8CSSpecification
);
461 switch (psfLocalSet
->u8CSSpecification
) {
464 Adapter
->PackInfo
[uiSearchRuleIndex
].bIPCSSupport
= IPV4_CS
;
469 Adapter
->PackInfo
[uiSearchRuleIndex
].bIPCSSupport
= IPV6_CS
;
472 case eCS802_3PacketEthernet
:
473 case eCS802_1QPacketVLAN
:
475 Adapter
->PackInfo
[uiSearchRuleIndex
].bEthCSSupport
= ETH_CS_802_3
;
478 case eCSPacketIPV4Over802_1QVLAN
:
479 case eCSPacketIPV4Over802_3Ethernet
:
481 Adapter
->PackInfo
[uiSearchRuleIndex
].bIPCSSupport
= IPV4_CS
;
482 Adapter
->PackInfo
[uiSearchRuleIndex
].bEthCSSupport
= ETH_CS_802_3
;
485 case eCSPacketIPV6Over802_1QVLAN
:
486 case eCSPacketIPV6Over802_3Ethernet
:
488 Adapter
->PackInfo
[uiSearchRuleIndex
].bIPCSSupport
= IPV6_CS
;
489 Adapter
->PackInfo
[uiSearchRuleIndex
].bEthCSSupport
= ETH_CS_802_3
;
494 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Error in value of CS Classification.. setting default to IP CS\n");
495 Adapter
->PackInfo
[uiSearchRuleIndex
].bIPCSSupport
= IPV4_CS
;
500 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "CopyToAdapter : Queue No : %X ETH CS Support : %X , IP CS Support : %X\n",
502 Adapter
->PackInfo
[uiSearchRuleIndex
].bEthCSSupport
,
503 Adapter
->PackInfo
[uiSearchRuleIndex
].bIPCSSupport
);
505 /* Store IP Version used */
506 /* Get The Version Of IP used (IPv6 or IPv4) from CSSpecification field of SF */
507 if (Adapter
->PackInfo
[uiSearchRuleIndex
].bIPCSSupport
== IPV6_CS
)
508 Adapter
->PackInfo
[uiSearchRuleIndex
].ucIpVersion
= IPV6
;
510 Adapter
->PackInfo
[uiSearchRuleIndex
].ucIpVersion
= IPV4
;
512 /* To ensure that the ETH CS code doesn't gets executed if the BS doesn't supports ETH CS */
513 if (!Adapter
->bETHCSEnabled
)
514 Adapter
->PackInfo
[uiSearchRuleIndex
].bEthCSSupport
= 0;
516 if (psfLocalSet
->u8ServiceClassNameLength
> 0 && psfLocalSet
->u8ServiceClassNameLength
< 32)
517 memcpy(Adapter
->PackInfo
[uiSearchRuleIndex
].ucServiceClassName
, psfLocalSet
->u8ServiceClassName
, psfLocalSet
->u8ServiceClassNameLength
);
519 Adapter
->PackInfo
[uiSearchRuleIndex
].u8QueueType
= psfLocalSet
->u8ServiceFlowSchedulingType
;
521 if (Adapter
->PackInfo
[uiSearchRuleIndex
].u8QueueType
== BE
&& Adapter
->PackInfo
[uiSearchRuleIndex
].ucDirection
)
522 Adapter
->usBestEffortQueueIndex
= uiSearchRuleIndex
;
524 Adapter
->PackInfo
[uiSearchRuleIndex
].ulSFID
= ntohl(psfLocalSet
->u32SFID
);
526 Adapter
->PackInfo
[uiSearchRuleIndex
].u8TrafficPriority
= psfLocalSet
->u8TrafficPriority
;
528 /* copy all the classifier in the Service Flow param structure */
529 for (i
= 0; i
< psfLocalSet
->u8TotalClassifiers
; i
++) {
530 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Classifier index =%d", i
);
531 psfCSType
= &psfLocalSet
->cConvergenceSLTypes
[i
];
532 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Classifier index =%d", i
);
534 if (psfCSType
->cCPacketClassificationRule
.u8ClassifierRulePriority
)
535 Adapter
->PackInfo
[uiSearchRuleIndex
].bClassifierPriority
= TRUE
;
537 if (psfCSType
->cCPacketClassificationRule
.u8ClassifierRulePriority
)
538 Adapter
->PackInfo
[uiSearchRuleIndex
].bClassifierPriority
= TRUE
;
540 if (ucDsxType
== DSA_ACK
) {
541 eClassifierAction
= eAddClassifier
;
542 } else if (ucDsxType
== DSC_ACK
) {
543 switch (psfCSType
->u8ClassfierDSCAction
) {
544 case 0: /* DSC Add Classifier */
546 eClassifierAction
= eAddClassifier
;
549 case 1: /* DSC Replace Classifier */
551 eClassifierAction
= eReplaceClassifier
;
554 case 2: /* DSC Delete Classifier */
556 eClassifierAction
= eDeleteClassifier
;
561 eClassifierAction
= eInvalidClassifierAction
;
566 u16PacketClassificationRuleIndex
= ntohs(psfCSType
->cCPacketClassificationRule
.u16PacketClassificationRuleIndex
);
568 switch (eClassifierAction
) {
571 /* Get a Free Classifier Index From Classifier table for this SF to add the Classifier */
572 /* Contained in this message */
573 nClassifierIndex
= SearchClsid(Adapter
, ulSFID
, u16PacketClassificationRuleIndex
);
575 if (nClassifierIndex
> MAX_CLASSIFIERS
) {
576 nClassifierIndex
= SearchFreeClsid(Adapter
);
577 if (nClassifierIndex
> MAX_CLASSIFIERS
) {
578 /* Failed To get a free Entry */
579 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Error Failed To get a free Classifier Entry");
582 /* Copy the Classifier Rule for this service flow into our Classifier table maintained per SF. */
583 CopyClassifierRuleToSF(Adapter
, psfCSType
, uiSearchRuleIndex
, nClassifierIndex
);
585 /* This Classifier Already Exists and it is invalid to Add Classifier with existing PCRI */
586 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
,
587 "CopyToAdapter: Error The Specified Classifier Already Exists and attempted To Add Classifier with Same PCRI : 0x%x\n",
588 u16PacketClassificationRuleIndex
);
592 case eReplaceClassifier
:
594 /* Get the Classifier Index From Classifier table for this SF and replace existing Classifier */
595 /* with the new classifier Contained in this message */
596 nClassifierIndex
= SearchClsid(Adapter
, ulSFID
, u16PacketClassificationRuleIndex
);
597 if (nClassifierIndex
> MAX_CLASSIFIERS
) {
598 /* Failed To search the classifier */
599 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Error Search for Classifier To be replaced failed");
602 /* Copy the Classifier Rule for this service flow into our Classifier table maintained per SF. */
603 CopyClassifierRuleToSF(Adapter
, psfCSType
, uiSearchRuleIndex
, nClassifierIndex
);
606 case eDeleteClassifier
:
608 /* Get the Classifier Index From Classifier table for this SF and replace existing Classifier */
609 /* with the new classifier Contained in this message */
610 nClassifierIndex
= SearchClsid(Adapter
, ulSFID
, u16PacketClassificationRuleIndex
);
611 if (nClassifierIndex
> MAX_CLASSIFIERS
) {
612 /* Failed To search the classifier */
613 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Error Search for Classifier To be deleted failed");
617 /* Delete This classifier */
618 DeleteClassifierRuleFromSF(Adapter
, uiSearchRuleIndex
, nClassifierIndex
);
623 /* Invalid Action for classifier */
629 /* Repeat parsing Classification Entries to process PHS Rules */
630 for (i
= 0; i
< psfLocalSet
->u8TotalClassifiers
; i
++) {
631 psfCSType
= &psfLocalSet
->cConvergenceSLTypes
[i
];
632 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "psfCSType->u8PhsDSCAction : 0x%x\n", psfCSType
->u8PhsDSCAction
);
634 switch (psfCSType
->u8PhsDSCAction
) {
635 case eDeleteAllPHSRules
:
637 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Deleting All PHS Rules For VCID: 0x%X\n", uVCID
);
639 /* Delete All the PHS rules for this Service flow */
640 PhsDeleteSFRules(&Adapter
->stBCMPhsContext
, uVCID
);
645 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "PHS DSC Action = Delete PHS Rule\n");
647 if (psfCSType
->cPhsRule
.u8PHSI
)
648 PhsDeletePHSRule(&Adapter
->stBCMPhsContext
, uVCID
, psfCSType
->cCPacketClassificationRule
.u8AssociatedPHSI
);
654 if (ucDsxType
== DSC_ACK
) {
655 /* BCM_DEBUG_PRINT(CONN_MSG,("Invalid PHS DSC Action For DSC\n",psfCSType->cPhsRule.u8PHSI)); */
656 break; /* FOr DSC ACK Case PHS DSC Action must be in valid set */
659 /* Proceed To Add PHS rule for DSA_ACK case even if PHS DSC action is unspecified */
660 /* No Break Here . Intentionally! */
665 if (psfCSType
->cPhsRule
.u8PHSI
) {
666 /* Apply This PHS Rule to all classifiers whose Associated PHSI Match */
667 unsigned int uiClassifierIndex
= 0;
668 if (pstAddIndication
->u8Direction
== UPLINK_DIR
) {
669 for (uiClassifierIndex
= 0; uiClassifierIndex
< MAX_CLASSIFIERS
; uiClassifierIndex
++) {
670 if ((Adapter
->astClassifierTable
[uiClassifierIndex
].bUsed
) &&
671 (Adapter
->astClassifierTable
[uiClassifierIndex
].ulSFID
== Adapter
->PackInfo
[uiSearchRuleIndex
].ulSFID
) &&
672 (Adapter
->astClassifierTable
[uiClassifierIndex
].u8AssociatedPHSI
== psfCSType
->cPhsRule
.u8PHSI
)) {
673 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
,
674 "Adding PHS Rule For Classifier: 0x%x cPhsRule.u8PHSI: 0x%x\n",
675 Adapter
->astClassifierTable
[uiClassifierIndex
].uiClassifierRuleIndex
,
676 psfCSType
->cPhsRule
.u8PHSI
);
677 /* Update The PHS Rule for this classifier as Associated PHSI id defined */
679 /* Copy the PHS Rule */
680 sPhsRule
.u8PHSI
= psfCSType
->cPhsRule
.u8PHSI
;
681 sPhsRule
.u8PHSFLength
= psfCSType
->cPhsRule
.u8PHSFLength
;
682 sPhsRule
.u8PHSMLength
= psfCSType
->cPhsRule
.u8PHSMLength
;
683 sPhsRule
.u8PHSS
= psfCSType
->cPhsRule
.u8PHSS
;
684 sPhsRule
.u8PHSV
= psfCSType
->cPhsRule
.u8PHSV
;
685 memcpy(sPhsRule
.u8PHSF
, psfCSType
->cPhsRule
.u8PHSF
, MAX_PHS_LENGTHS
);
686 memcpy(sPhsRule
.u8PHSM
, psfCSType
->cPhsRule
.u8PHSM
, MAX_PHS_LENGTHS
);
687 sPhsRule
.u8RefCnt
= 0;
688 sPhsRule
.bUnclassifiedPHSRule
= false;
689 sPhsRule
.PHSModifiedBytes
= 0;
690 sPhsRule
.PHSModifiedNumPackets
= 0;
691 sPhsRule
.PHSErrorNumPackets
= 0;
693 /* bPHSRuleAssociated = TRUE; */
694 /* Store The PHS Rule for this classifier */
696 PhsUpdateClassifierRule(
697 &Adapter
->stBCMPhsContext
,
699 Adapter
->astClassifierTable
[uiClassifierIndex
].uiClassifierRuleIndex
,
701 Adapter
->astClassifierTable
[uiClassifierIndex
].u8AssociatedPHSI
);
703 /* Update PHS Rule For the Classifier */
704 if (sPhsRule
.u8PHSI
) {
705 Adapter
->astClassifierTable
[uiClassifierIndex
].u32PHSRuleID
= sPhsRule
.u8PHSI
;
706 memcpy(&Adapter
->astClassifierTable
[uiClassifierIndex
].sPhsRule
, &sPhsRule
, sizeof(struct bcm_phs_rule
));
711 /* Error PHS Rule specified in signaling could not be applied to any classifier */
713 /* Copy the PHS Rule */
714 sPhsRule
.u8PHSI
= psfCSType
->cPhsRule
.u8PHSI
;
715 sPhsRule
.u8PHSFLength
= psfCSType
->cPhsRule
.u8PHSFLength
;
716 sPhsRule
.u8PHSMLength
= psfCSType
->cPhsRule
.u8PHSMLength
;
717 sPhsRule
.u8PHSS
= psfCSType
->cPhsRule
.u8PHSS
;
718 sPhsRule
.u8PHSV
= psfCSType
->cPhsRule
.u8PHSV
;
719 memcpy(sPhsRule
.u8PHSF
, psfCSType
->cPhsRule
.u8PHSF
, MAX_PHS_LENGTHS
);
720 memcpy(sPhsRule
.u8PHSM
, psfCSType
->cPhsRule
.u8PHSM
, MAX_PHS_LENGTHS
);
721 sPhsRule
.u8RefCnt
= 0;
722 sPhsRule
.bUnclassifiedPHSRule
= TRUE
;
723 sPhsRule
.PHSModifiedBytes
= 0;
724 sPhsRule
.PHSModifiedNumPackets
= 0;
725 sPhsRule
.PHSErrorNumPackets
= 0;
726 /* Store The PHS Rule for this classifier */
729 * Passing the argument u8PHSI instead of clsid. Because for DL with no classifier rule,
730 * clsid will be zero hence we can't have multiple PHS rules for the same SF.
731 * To support multiple PHS rule, passing u8PHSI.
733 PhsUpdateClassifierRule(
734 &Adapter
->stBCMPhsContext
,
746 if (psfLocalSet
->u32MaxSustainedTrafficRate
== 0) {
747 /* No Rate Limit . Set Max Sustained Traffic Rate to Maximum */
748 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxAllowedRate
= WIMAX_MAX_ALLOWED_RATE
;
749 } else if (ntohl(psfLocalSet
->u32MaxSustainedTrafficRate
) > WIMAX_MAX_ALLOWED_RATE
) {
750 /* Too large Allowed Rate specified. Limiting to Wi Max Allowed rate */
751 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxAllowedRate
= WIMAX_MAX_ALLOWED_RATE
;
753 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxAllowedRate
= ntohl(psfLocalSet
->u32MaxSustainedTrafficRate
);
756 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxLatency
= ntohl(psfLocalSet
->u32MaximumLatency
);
757 if (Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxLatency
== 0) /* 0 should be treated as infinite */
758 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxLatency
= MAX_LATENCY_ALLOWED
;
760 if ((Adapter
->PackInfo
[uiSearchRuleIndex
].u8QueueType
== ERTPS
||
761 Adapter
->PackInfo
[uiSearchRuleIndex
].u8QueueType
== UGS
))
762 UGIValue
= ntohs(psfLocalSet
->u16UnsolicitedGrantInterval
);
765 UGIValue
= DEFAULT_UG_INTERVAL
;
768 * For UGI based connections...
769 * DEFAULT_UGI_FACTOR*UGIInterval worth of data is the max token count at host...
770 * The extra amount of token is to ensure that a large amount of jitter won't have loss in throughput...
771 * In case of non-UGI based connection, 200 frames worth of data is the max token count at host...
773 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxBucketSize
=
774 (DEFAULT_UGI_FACTOR
*Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxAllowedRate
*UGIValue
)/1000;
776 if (Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxBucketSize
< WIMAX_MAX_MTU
*8) {
778 /* Special Handling to ensure the biggest size of packet can go out from host to FW as follows:
779 * 1. Any packet from Host to FW can go out in different packet size.
780 * 2. So in case the Bucket count is smaller than MTU, the packets of size (Size > TokenCount), will get dropped.
781 * 3. We can allow packets of MaxSize from Host->FW that can go out from FW in multiple SDUs by fragmentation at Wimax Layer
783 UGIFactor
= (Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxLatency
/UGIValue
+ 1);
785 if (UGIFactor
> DEFAULT_UGI_FACTOR
)
786 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxBucketSize
=
787 (UGIFactor
*Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxAllowedRate
*UGIValue
)/1000;
789 if (Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxBucketSize
> WIMAX_MAX_MTU
*8)
790 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxBucketSize
= WIMAX_MAX_MTU
*8;
793 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "LAT: %d, UGI: %d\n", Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxLatency
, UGIValue
);
794 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "uiMaxAllowedRate: 0x%x, u32MaxSustainedTrafficRate: 0x%x ,uiMaxBucketSize: 0x%x",
795 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxAllowedRate
,
796 ntohl(psfLocalSet
->u32MaxSustainedTrafficRate
),
797 Adapter
->PackInfo
[uiSearchRuleIndex
].uiMaxBucketSize
);
799 /* copy the extended SF Parameters to Support MIBS */
800 CopyMIBSExtendedSFParameters(Adapter
, psfLocalSet
, uiSearchRuleIndex
);
802 /* store header suppression enabled flag per SF */
803 Adapter
->PackInfo
[uiSearchRuleIndex
].bHeaderSuppressionEnabled
=
804 !(psfLocalSet
->u8RequesttransmissionPolicy
&
805 MASK_DISABLE_HEADER_SUPPRESSION
);
807 kfree(Adapter
->PackInfo
[uiSearchRuleIndex
].pstSFIndication
);
808 Adapter
->PackInfo
[uiSearchRuleIndex
].pstSFIndication
= pstAddIndication
;
810 /* Re Sort the SF list in PackInfo according to Traffic Priority */
811 SortPackInfo(Adapter
);
813 /* Re Sort the Classifier Rules table and re - arrange
814 * according to Classifier Rule Priority
816 SortClassifiers(Adapter
);
817 DumpPhsRules(&Adapter
->stBCMPhsContext
);
818 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "%s <=====", __func__
);
821 /***********************************************************************
822 * Function - DumpCmControlPacket
824 * Description - This routinue Dumps the Contents of the AddIndication
825 * Structure in the Connection Management Control Packet
827 * Parameter - pvBuffer: Pointer to the buffer containing the
828 * AddIndication data.
831 *************************************************************************/
832 static VOID
DumpCmControlPacket(PVOID pvBuffer
)
836 struct bcm_add_indication_alt
*pstAddIndication
;
837 UINT nCurClassifierCnt
;
838 struct bcm_mini_adapter
*Adapter
= GET_BCM_ADAPTER(gblpnetdev
);
840 pstAddIndication
= pvBuffer
;
841 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "======>");
842 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8Type: 0x%X", pstAddIndication
->u8Type
);
843 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8Direction: 0x%X", pstAddIndication
->u8Direction
);
844 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16TID: 0x%X", ntohs(pstAddIndication
->u16TID
));
845 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16CID: 0x%X", ntohs(pstAddIndication
->u16CID
));
846 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16VCID: 0x%X", ntohs(pstAddIndication
->u16VCID
));
847 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " AuthorizedSet--->");
848 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32SFID: 0x%X", htonl(pstAddIndication
->sfAuthorizedSet
.u32SFID
));
849 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16CID: 0x%X", htons(pstAddIndication
->sfAuthorizedSet
.u16CID
));
850 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ServiceClassNameLength: 0x%X",
851 pstAddIndication
->sfAuthorizedSet
.u8ServiceClassNameLength
);
853 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ServiceClassName: 0x%X ,0x%X , 0x%X, 0x%X, 0x%X, 0x%X",
854 pstAddIndication
->sfAuthorizedSet
.u8ServiceClassName
[0],
855 pstAddIndication
->sfAuthorizedSet
.u8ServiceClassName
[1],
856 pstAddIndication
->sfAuthorizedSet
.u8ServiceClassName
[2],
857 pstAddIndication
->sfAuthorizedSet
.u8ServiceClassName
[3],
858 pstAddIndication
->sfAuthorizedSet
.u8ServiceClassName
[4],
859 pstAddIndication
->sfAuthorizedSet
.u8ServiceClassName
[5]);
861 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8MBSService: 0x%X", pstAddIndication
->sfAuthorizedSet
.u8MBSService
);
862 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8QosParamSet: 0x%X", pstAddIndication
->sfAuthorizedSet
.u8QosParamSet
);
863 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8TrafficPriority: 0x%X, %p",
864 pstAddIndication
->sfAuthorizedSet
.u8TrafficPriority
, &pstAddIndication
->sfAuthorizedSet
.u8TrafficPriority
);
865 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MaxSustainedTrafficRate: 0x%X 0x%p",
866 pstAddIndication
->sfAuthorizedSet
.u32MaxSustainedTrafficRate
,
867 &pstAddIndication
->sfAuthorizedSet
.u32MaxSustainedTrafficRate
);
868 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MaxTrafficBurst: 0x%X", pstAddIndication
->sfAuthorizedSet
.u32MaxTrafficBurst
);
869 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MinReservedTrafficRate : 0x%X",
870 pstAddIndication
->sfAuthorizedSet
.u32MinReservedTrafficRate
);
871 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificQoSParamLength: 0x%X",
872 pstAddIndication
->sfAuthorizedSet
.u8VendorSpecificQoSParamLength
);
873 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificQoSParam: 0x%X",
874 pstAddIndication
->sfAuthorizedSet
.u8VendorSpecificQoSParam
[0]);
875 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ServiceFlowSchedulingType: 0x%X",
876 pstAddIndication
->sfAuthorizedSet
.u8ServiceFlowSchedulingType
);
877 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32ToleratedJitter: 0x%X", pstAddIndication
->sfAuthorizedSet
.u32ToleratedJitter
);
878 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MaximumLatency: 0x%X", pstAddIndication
->sfAuthorizedSet
.u32MaximumLatency
);
879 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8FixedLengthVSVariableLengthSDUIndicator: 0x%X",
880 pstAddIndication
->sfAuthorizedSet
.u8FixedLengthVSVariableLengthSDUIndicator
);
881 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8SDUSize: 0x%X", pstAddIndication
->sfAuthorizedSet
.u8SDUSize
);
882 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16TargetSAID: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16TargetSAID
);
883 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ARQEnable: 0x%X", pstAddIndication
->sfAuthorizedSet
.u8ARQEnable
);
884 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQWindowSize: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16ARQWindowSize
);
885 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQRetryTxTimeOut: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16ARQRetryTxTimeOut
);
886 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQRetryRxTimeOut: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16ARQRetryRxTimeOut
);
887 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQBlockLifeTime: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16ARQBlockLifeTime
);
888 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQSyncLossTimeOut: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16ARQSyncLossTimeOut
);
889 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ARQDeliverInOrder: 0x%X", pstAddIndication
->sfAuthorizedSet
.u8ARQDeliverInOrder
);
890 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQRxPurgeTimeOut: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16ARQRxPurgeTimeOut
);
891 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQBlockSize: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16ARQBlockSize
);
892 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8CSSpecification: 0x%X", pstAddIndication
->sfAuthorizedSet
.u8CSSpecification
);
893 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8TypeOfDataDeliveryService: 0x%X",
894 pstAddIndication
->sfAuthorizedSet
.u8TypeOfDataDeliveryService
);
895 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16SDUInterArrivalTime: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16SDUInterArrivalTime
);
896 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16TimeBase: 0x%X", pstAddIndication
->sfAuthorizedSet
.u16TimeBase
);
897 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8PagingPreference: 0x%X", pstAddIndication
->sfAuthorizedSet
.u8PagingPreference
);
898 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16UnsolicitedPollingInterval: 0x%X",
899 pstAddIndication
->sfAuthorizedSet
.u16UnsolicitedPollingInterval
);
901 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "sfAuthorizedSet.u8HARQChannelMapping %x %x %x ",
902 *(unsigned int *)pstAddIndication
->sfAuthorizedSet
.u8HARQChannelMapping
,
903 *(unsigned int *)&pstAddIndication
->sfAuthorizedSet
.u8HARQChannelMapping
[4],
904 *(USHORT
*)&pstAddIndication
->sfAuthorizedSet
.u8HARQChannelMapping
[8]);
905 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8TrafficIndicationPreference: 0x%X",
906 pstAddIndication
->sfAuthorizedSet
.u8TrafficIndicationPreference
);
907 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " Total Classifiers Received: 0x%X", pstAddIndication
->sfAuthorizedSet
.u8TotalClassifiers
);
909 nCurClassifierCnt
= pstAddIndication
->sfAuthorizedSet
.u8TotalClassifiers
;
910 if (nCurClassifierCnt
> MAX_CLASSIFIERS_IN_SF
)
911 nCurClassifierCnt
= MAX_CLASSIFIERS_IN_SF
;
913 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "pstAddIndication->sfAuthorizedSet.bValid %d", pstAddIndication
->sfAuthorizedSet
.bValid
);
914 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "pstAddIndication->sfAuthorizedSet.u16MacOverhead %x", pstAddIndication
->sfAuthorizedSet
.u16MacOverhead
);
915 if (!pstAddIndication
->sfAuthorizedSet
.bValid
)
916 pstAddIndication
->sfAuthorizedSet
.bValid
= 1;
917 for (nIndex
= 0; nIndex
< nCurClassifierCnt
; nIndex
++) {
918 struct bcm_convergence_types
*psfCSType
= NULL
;
919 psfCSType
= &pstAddIndication
->sfAuthorizedSet
.cConvergenceSLTypes
[nIndex
];
921 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "psfCSType = %p", psfCSType
);
922 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "CCPacketClassificationRuleSI====>");
923 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ClassifierRulePriority: 0x%X ",
924 psfCSType
->cCPacketClassificationRule
.u8ClassifierRulePriority
);
925 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPTypeOfServiceLength: 0x%X ",
926 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfServiceLength
);
927 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPTypeOfService[3]: 0x%X ,0x%X ,0x%X ",
928 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[0],
929 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[1],
930 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[2]);
932 for (uiLoopIndex
= 0; uiLoopIndex
< 1; uiLoopIndex
++)
933 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8Protocol: 0x%02X ",
934 psfCSType
->cCPacketClassificationRule
.u8Protocol
);
936 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPMaskedSourceAddressLength: 0x%X ",
937 psfCSType
->cCPacketClassificationRule
.u8IPMaskedSourceAddressLength
);
939 for (uiLoopIndex
= 0; uiLoopIndex
< 32; uiLoopIndex
++)
940 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPMaskedSourceAddress[32]: 0x%02X ",
941 psfCSType
->cCPacketClassificationRule
.u8IPMaskedSourceAddress
[uiLoopIndex
]);
943 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPDestinationAddressLength: 0x%X ",
944 psfCSType
->cCPacketClassificationRule
.u8IPDestinationAddressLength
);
946 for (uiLoopIndex
= 0; uiLoopIndex
< 32; uiLoopIndex
++)
947 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPDestinationAddress[32]: 0x%02X ",
948 psfCSType
->cCPacketClassificationRule
.u8IPDestinationAddress
[uiLoopIndex
]);
950 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ProtocolSourcePortRangeLength:0x%X ",
951 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRangeLength
);
952 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ProtocolSourcePortRange[4]: 0x%02X ,0x%02X ,0x%02X ,0x%02X ",
953 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRange
[0],
954 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRange
[1],
955 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRange
[2],
956 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRange
[3]);
958 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ProtocolDestPortRangeLength: 0x%02X ",
959 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRangeLength
);
960 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ProtocolDestPortRange[4]: 0x%02X ,0x%02X ,0x%02X ,0x%02X ",
961 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
[0],
962 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
[1],
963 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
[2],
964 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
[3]);
966 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8EthernetDestMacAddressLength: 0x%02X ",
967 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddressLength
);
969 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
970 DBG_LVL_ALL
, "u8EthernetDestMacAddress[6]: %pM",
971 psfCSType
->cCPacketClassificationRule
.
972 u8EthernetDestMacAddress
);
974 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8EthernetSourceMACAddressLength: 0x%02X ",
975 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddressLength
);
977 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
978 DBG_LVL_ALL
, "u8EthernetSourceMACAddress[6]: "
979 "%pM", psfCSType
->cCPacketClassificationRule
.
980 u8EthernetSourceMACAddress
);
982 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8EthertypeLength: 0x%02X ",
983 psfCSType
->cCPacketClassificationRule
.u8EthertypeLength
);
984 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8Ethertype[3]: 0x%02X ,0x%02X ,0x%02X ",
985 psfCSType
->cCPacketClassificationRule
.u8Ethertype
[0],
986 psfCSType
->cCPacketClassificationRule
.u8Ethertype
[1],
987 psfCSType
->cCPacketClassificationRule
.u8Ethertype
[2]);
989 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16UserPriority: 0x%X ", psfCSType
->cCPacketClassificationRule
.u16UserPriority
);
990 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16VLANID: 0x%X ", psfCSType
->cCPacketClassificationRule
.u16VLANID
);
991 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8AssociatedPHSI: 0x%02X ", psfCSType
->cCPacketClassificationRule
.u8AssociatedPHSI
);
992 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16PacketClassificationRuleIndex: 0x%X ",
993 psfCSType
->cCPacketClassificationRule
.u16PacketClassificationRuleIndex
);
995 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificClassifierParamLength: 0x%X ",
996 psfCSType
->cCPacketClassificationRule
.u8VendorSpecificClassifierParamLength
);
997 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificClassifierParam[1]: 0x%X ",
998 psfCSType
->cCPacketClassificationRule
.u8VendorSpecificClassifierParam
[0]);
1000 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPv6FlowLableLength: 0x%X ",
1001 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLableLength
);
1002 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
1003 DBG_LVL_ALL
, "u8IPv6FlowLable[6]: 0x%*ph ",
1004 6, psfCSType
->cCPacketClassificationRule
.
1009 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "bValid: 0x%02X", pstAddIndication
->sfAuthorizedSet
.bValid
);
1010 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "AdmittedSet--->");
1011 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32SFID: 0x%X", pstAddIndication
->sfAdmittedSet
.u32SFID
);
1012 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16CID: 0x%X", pstAddIndication
->sfAdmittedSet
.u16CID
);
1013 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ServiceClassNameLength: 0x%X",
1014 pstAddIndication
->sfAdmittedSet
.u8ServiceClassNameLength
);
1015 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
,
1016 "u8ServiceClassName: 0x%*ph",
1017 6, pstAddIndication
->sfAdmittedSet
.u8ServiceClassName
);
1019 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8MBSService: 0x%02X", pstAddIndication
->sfAdmittedSet
.u8MBSService
);
1020 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8QosParamSet: 0x%02X", pstAddIndication
->sfAdmittedSet
.u8QosParamSet
);
1021 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8TrafficPriority: 0x%02X", pstAddIndication
->sfAdmittedSet
.u8TrafficPriority
);
1022 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MaxTrafficBurst: 0x%X", pstAddIndication
->sfAdmittedSet
.u32MaxTrafficBurst
);
1023 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MinReservedTrafficRate: 0x%X",
1024 pstAddIndication
->sfAdmittedSet
.u32MinReservedTrafficRate
);
1026 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificQoSParamLength: 0x%02X",
1027 pstAddIndication
->sfAdmittedSet
.u8VendorSpecificQoSParamLength
);
1028 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificQoSParam: 0x%02X",
1029 pstAddIndication
->sfAdmittedSet
.u8VendorSpecificQoSParam
[0]);
1030 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ServiceFlowSchedulingType: 0x%02X",
1031 pstAddIndication
->sfAdmittedSet
.u8ServiceFlowSchedulingType
);
1032 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32ToleratedJitter: 0x%X", pstAddIndication
->sfAdmittedSet
.u32ToleratedJitter
);
1033 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MaximumLatency: 0x%X", pstAddIndication
->sfAdmittedSet
.u32MaximumLatency
);
1034 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8FixedLengthVSVariableLengthSDUIndicator: 0x%02X",
1035 pstAddIndication
->sfAdmittedSet
.u8FixedLengthVSVariableLengthSDUIndicator
);
1036 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8SDUSize: 0x%02X", pstAddIndication
->sfAdmittedSet
.u8SDUSize
);
1037 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16TargetSAID: 0x%02X", pstAddIndication
->sfAdmittedSet
.u16TargetSAID
);
1038 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ARQEnable: 0x%02X", pstAddIndication
->sfAdmittedSet
.u8ARQEnable
);
1039 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQWindowSize: 0x%X", pstAddIndication
->sfAdmittedSet
.u16ARQWindowSize
);
1040 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQRetryTxTimeOut: 0x%X", pstAddIndication
->sfAdmittedSet
.u16ARQRetryTxTimeOut
);
1041 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQRetryRxTimeOut: 0x%X", pstAddIndication
->sfAdmittedSet
.u16ARQRetryRxTimeOut
);
1042 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQBlockLifeTime: 0x%X", pstAddIndication
->sfAdmittedSet
.u16ARQBlockLifeTime
);
1043 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQSyncLossTimeOut: 0x%X", pstAddIndication
->sfAdmittedSet
.u16ARQSyncLossTimeOut
);
1044 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ARQDeliverInOrder: 0x%02X", pstAddIndication
->sfAdmittedSet
.u8ARQDeliverInOrder
);
1045 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQRxPurgeTimeOut: 0x%X", pstAddIndication
->sfAdmittedSet
.u16ARQRxPurgeTimeOut
);
1046 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16ARQBlockSize: 0x%X", pstAddIndication
->sfAdmittedSet
.u16ARQBlockSize
);
1047 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8CSSpecification: 0x%02X", pstAddIndication
->sfAdmittedSet
.u8CSSpecification
);
1048 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8TypeOfDataDeliveryService: 0x%02X",
1049 pstAddIndication
->sfAdmittedSet
.u8TypeOfDataDeliveryService
);
1050 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16SDUInterArrivalTime: 0x%X", pstAddIndication
->sfAdmittedSet
.u16SDUInterArrivalTime
);
1051 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16TimeBase: 0x%X", pstAddIndication
->sfAdmittedSet
.u16TimeBase
);
1052 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8PagingPreference: 0x%X", pstAddIndication
->sfAdmittedSet
.u8PagingPreference
);
1053 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8TrafficIndicationPreference: 0x%02X",
1054 pstAddIndication
->sfAdmittedSet
.u8TrafficIndicationPreference
);
1055 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " Total Classifiers Received: 0x%X", pstAddIndication
->sfAdmittedSet
.u8TotalClassifiers
);
1057 nCurClassifierCnt
= pstAddIndication
->sfAdmittedSet
.u8TotalClassifiers
;
1058 if (nCurClassifierCnt
> MAX_CLASSIFIERS_IN_SF
)
1059 nCurClassifierCnt
= MAX_CLASSIFIERS_IN_SF
;
1061 for (nIndex
= 0; nIndex
< nCurClassifierCnt
; nIndex
++) {
1062 struct bcm_convergence_types
*psfCSType
= NULL
;
1064 psfCSType
= &pstAddIndication
->sfAdmittedSet
.cConvergenceSLTypes
[nIndex
];
1065 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " CCPacketClassificationRuleSI====>");
1066 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ClassifierRulePriority: 0x%02X ",
1067 psfCSType
->cCPacketClassificationRule
.u8ClassifierRulePriority
);
1068 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPTypeOfServiceLength: 0x%02X",
1069 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfServiceLength
);
1070 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
1071 DBG_LVL_ALL
, "u8IPTypeOfService[3]: 0x%*ph",
1072 3, psfCSType
->cCPacketClassificationRule
.
1074 for (uiLoopIndex
= 0; uiLoopIndex
< 1; uiLoopIndex
++)
1075 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8Protocol: 0x%02X ", psfCSType
->cCPacketClassificationRule
.u8Protocol
);
1077 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPMaskedSourceAddressLength: 0x%02X ",
1078 psfCSType
->cCPacketClassificationRule
.u8IPMaskedSourceAddressLength
);
1080 for (uiLoopIndex
= 0; uiLoopIndex
< 32; uiLoopIndex
++)
1081 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPMaskedSourceAddress[32]: 0x%02X ",
1082 psfCSType
->cCPacketClassificationRule
.u8IPMaskedSourceAddress
[uiLoopIndex
]);
1084 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPDestinationAddressLength: 0x%02X ",
1085 psfCSType
->cCPacketClassificationRule
.u8IPDestinationAddressLength
);
1087 for (uiLoopIndex
= 0; uiLoopIndex
< 32; uiLoopIndex
++)
1088 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPDestinationAddress[32]: 0x%02X ",
1089 psfCSType
->cCPacketClassificationRule
.u8IPDestinationAddress
[uiLoopIndex
]);
1091 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ProtocolSourcePortRangeLength: 0x%02X ",
1092 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRangeLength
);
1094 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
1095 DBG_LVL_ALL
, "u8ProtocolSourcePortRange[4]: "
1096 "0x%*ph ", 4, psfCSType
->
1097 cCPacketClassificationRule
.
1098 u8ProtocolSourcePortRange
);
1100 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ProtocolDestPortRangeLength: 0x%02X ",
1101 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRangeLength
);
1103 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
1104 DBG_LVL_ALL
, "u8ProtocolDestPortRange[4]: "
1105 "0x%*ph ", 4, psfCSType
->
1106 cCPacketClassificationRule
.
1107 u8ProtocolDestPortRange
);
1109 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8EthernetDestMacAddressLength: 0x%02X ",
1110 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddressLength
);
1112 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
1113 DBG_LVL_ALL
, "u8EthernetDestMacAddress[6]: %pM",
1114 psfCSType
->cCPacketClassificationRule
.
1115 u8EthernetDestMacAddress
);
1117 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8EthernetSourceMACAddressLength: 0x%02X ",
1118 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddressLength
);
1120 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
1121 DBG_LVL_ALL
, "u8EthernetSourceMACAddress[6]: "
1122 "%pM", psfCSType
->cCPacketClassificationRule
.
1123 u8EthernetSourceMACAddress
);
1125 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8EthertypeLength: 0x%02X ", psfCSType
->cCPacketClassificationRule
.u8EthertypeLength
);
1126 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
1127 DBG_LVL_ALL
, "u8Ethertype[3]: 0x%*ph",
1128 3, psfCSType
->cCPacketClassificationRule
.
1131 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16UserPriority: 0x%X ", psfCSType
->cCPacketClassificationRule
.u16UserPriority
);
1132 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16VLANID: 0x%X ", psfCSType
->cCPacketClassificationRule
.u16VLANID
);
1133 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8AssociatedPHSI: 0x%02X ", psfCSType
->cCPacketClassificationRule
.u8AssociatedPHSI
);
1134 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16PacketClassificationRuleIndex: 0x%X ",
1135 psfCSType
->cCPacketClassificationRule
.u16PacketClassificationRuleIndex
);
1136 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificClassifierParamLength: 0x%02X",
1137 psfCSType
->cCPacketClassificationRule
.u8VendorSpecificClassifierParamLength
);
1138 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificClassifierParam[1]: 0x%02X ",
1139 psfCSType
->cCPacketClassificationRule
.u8VendorSpecificClassifierParam
[0]);
1141 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPv6FlowLableLength: 0x%X ",
1142 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLableLength
);
1143 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
,
1144 DBG_LVL_ALL
, "u8IPv6FlowLable[6]: 0x%*ph ",
1145 6, psfCSType
->cCPacketClassificationRule
.
1150 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "bValid: 0x%X", pstAddIndication
->sfAdmittedSet
.bValid
);
1151 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " ActiveSet--->");
1152 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32SFID: 0x%X", pstAddIndication
->sfActiveSet
.u32SFID
);
1153 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u16CID: 0x%X", pstAddIndication
->sfActiveSet
.u16CID
);
1154 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ServiceClassNameLength: 0x%X", pstAddIndication
->sfActiveSet
.u8ServiceClassNameLength
);
1155 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
,
1156 "u8ServiceClassName: 0x%*ph",
1157 6, pstAddIndication
->sfActiveSet
.u8ServiceClassName
);
1159 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8MBSService: 0x%02X", pstAddIndication
->sfActiveSet
.u8MBSService
);
1160 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8QosParamSet: 0x%02X", pstAddIndication
->sfActiveSet
.u8QosParamSet
);
1161 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8TrafficPriority: 0x%02X", pstAddIndication
->sfActiveSet
.u8TrafficPriority
);
1162 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MaxTrafficBurst: 0x%X", pstAddIndication
->sfActiveSet
.u32MaxTrafficBurst
);
1163 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MinReservedTrafficRate: 0x%X",
1164 pstAddIndication
->sfActiveSet
.u32MinReservedTrafficRate
);
1165 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificQoSParamLength: 0x%02X",
1166 pstAddIndication
->sfActiveSet
.u8VendorSpecificQoSParamLength
);
1167 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8VendorSpecificQoSParam: 0x%02X",
1168 pstAddIndication
->sfActiveSet
.u8VendorSpecificQoSParam
[0]);
1169 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8ServiceFlowSchedulingType: 0x%02X",
1170 pstAddIndication
->sfActiveSet
.u8ServiceFlowSchedulingType
);
1171 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32ToleratedJitter: 0x%X", pstAddIndication
->sfActiveSet
.u32ToleratedJitter
);
1172 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u32MaximumLatency: 0x%X", pstAddIndication
->sfActiveSet
.u32MaximumLatency
);
1173 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8FixedLengthVSVariableLengthSDUIndicator: 0x%02X",
1174 pstAddIndication
->sfActiveSet
.u8FixedLengthVSVariableLengthSDUIndicator
);
1175 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8SDUSize: 0x%X", pstAddIndication
->sfActiveSet
.u8SDUSize
);
1176 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16TargetSAID: 0x%X", pstAddIndication
->sfActiveSet
.u16TargetSAID
);
1177 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8ARQEnable: 0x%X", pstAddIndication
->sfActiveSet
.u8ARQEnable
);
1178 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16ARQWindowSize: 0x%X", pstAddIndication
->sfActiveSet
.u16ARQWindowSize
);
1179 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16ARQRetryTxTimeOut: 0x%X", pstAddIndication
->sfActiveSet
.u16ARQRetryTxTimeOut
);
1180 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16ARQRetryRxTimeOut: 0x%X", pstAddIndication
->sfActiveSet
.u16ARQRetryRxTimeOut
);
1181 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16ARQBlockLifeTime: 0x%X", pstAddIndication
->sfActiveSet
.u16ARQBlockLifeTime
);
1182 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16ARQSyncLossTimeOut: 0x%X", pstAddIndication
->sfActiveSet
.u16ARQSyncLossTimeOut
);
1183 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8ARQDeliverInOrder: 0x%X", pstAddIndication
->sfActiveSet
.u8ARQDeliverInOrder
);
1184 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16ARQRxPurgeTimeOut: 0x%X", pstAddIndication
->sfActiveSet
.u16ARQRxPurgeTimeOut
);
1185 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16ARQBlockSize: 0x%X", pstAddIndication
->sfActiveSet
.u16ARQBlockSize
);
1186 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8CSSpecification: 0x%X", pstAddIndication
->sfActiveSet
.u8CSSpecification
);
1187 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8TypeOfDataDeliveryService: 0x%X",
1188 pstAddIndication
->sfActiveSet
.u8TypeOfDataDeliveryService
);
1189 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16SDUInterArrivalTime: 0x%X", pstAddIndication
->sfActiveSet
.u16SDUInterArrivalTime
);
1190 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16TimeBase: 0x%X", pstAddIndication
->sfActiveSet
.u16TimeBase
);
1191 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8PagingPreference: 0x%X", pstAddIndication
->sfActiveSet
.u8PagingPreference
);
1192 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8TrafficIndicationPreference: 0x%X",
1193 pstAddIndication
->sfActiveSet
.u8TrafficIndicationPreference
);
1194 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " Total Classifiers Received: 0x%X", pstAddIndication
->sfActiveSet
.u8TotalClassifiers
);
1196 nCurClassifierCnt
= pstAddIndication
->sfActiveSet
.u8TotalClassifiers
;
1197 if (nCurClassifierCnt
> MAX_CLASSIFIERS_IN_SF
)
1198 nCurClassifierCnt
= MAX_CLASSIFIERS_IN_SF
;
1200 for (nIndex
= 0; nIndex
< nCurClassifierCnt
; nIndex
++) {
1201 struct bcm_convergence_types
*psfCSType
= NULL
;
1203 psfCSType
= &pstAddIndication
->sfActiveSet
.cConvergenceSLTypes
[nIndex
];
1204 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " CCPacketClassificationRuleSI====>");
1205 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8ClassifierRulePriority: 0x%X ",
1206 psfCSType
->cCPacketClassificationRule
.u8ClassifierRulePriority
);
1207 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8IPTypeOfServiceLength: 0x%X ",
1208 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfServiceLength
);
1209 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8IPTypeOfService[3]: 0x%X ,0x%X ,0x%X ",
1210 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[0],
1211 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[1],
1212 psfCSType
->cCPacketClassificationRule
.u8IPTypeOfService
[2]);
1214 for (uiLoopIndex
= 0; uiLoopIndex
< 1; uiLoopIndex
++)
1215 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8Protocol: 0x%X ", psfCSType
->cCPacketClassificationRule
.u8Protocol
);
1217 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPMaskedSourceAddressLength: 0x%X ",
1218 psfCSType
->cCPacketClassificationRule
.u8IPMaskedSourceAddressLength
);
1220 for (uiLoopIndex
= 0; uiLoopIndex
< 32; uiLoopIndex
++)
1221 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPMaskedSourceAddress[32]: 0x%X ",
1222 psfCSType
->cCPacketClassificationRule
.u8IPMaskedSourceAddress
[uiLoopIndex
]);
1224 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8IPDestinationAddressLength: 0x%02X ",
1225 psfCSType
->cCPacketClassificationRule
.u8IPDestinationAddressLength
);
1227 for (uiLoopIndex
= 0; uiLoopIndex
< 32; uiLoopIndex
++)
1228 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8IPDestinationAddress[32]:0x%X ",
1229 psfCSType
->cCPacketClassificationRule
.u8IPDestinationAddress
[uiLoopIndex
]);
1231 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8ProtocolSourcePortRangeLength: 0x%X ",
1232 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRangeLength
);
1234 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8ProtocolSourcePortRange[4]: 0x%X ,0x%X ,0x%X ,0x%X ",
1235 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRange
[0],
1236 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRange
[1],
1237 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRange
[2],
1238 psfCSType
->cCPacketClassificationRule
.u8ProtocolSourcePortRange
[3]);
1240 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8ProtocolDestPortRangeLength: 0x%X ",
1241 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRangeLength
);
1242 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8ProtocolDestPortRange[4]: 0x%X ,0x%X ,0x%X ,0x%X ",
1243 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
[0],
1244 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
[1],
1245 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
[2],
1246 psfCSType
->cCPacketClassificationRule
.u8ProtocolDestPortRange
[3]);
1248 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8EthernetDestMacAddressLength: 0x%X ",
1249 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddressLength
);
1250 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8EthernetDestMacAddress[6]: 0x%X ,0x%X ,0x%X ,0x%X ,0x%X ,0x%X",
1251 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddress
[0],
1252 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddress
[1],
1253 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddress
[2],
1254 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddress
[3],
1255 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddress
[4],
1256 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddress
[5]);
1258 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8EthernetSourceMACAddressLength: 0x%X ",
1259 psfCSType
->cCPacketClassificationRule
.u8EthernetDestMacAddressLength
);
1260 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, "u8EthernetSourceMACAddress[6]: 0x%X ,0x%X ,0x%X ,0x%X ,0x%X ,0x%X",
1261 psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddress
[0],
1262 psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddress
[1],
1263 psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddress
[2],
1264 psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddress
[3],
1265 psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddress
[4],
1266 psfCSType
->cCPacketClassificationRule
.u8EthernetSourceMACAddress
[5]);
1268 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8EthertypeLength: 0x%X ",
1269 psfCSType
->cCPacketClassificationRule
.u8EthertypeLength
);
1270 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8Ethertype[3]: 0x%X ,0x%X ,0x%X ",
1271 psfCSType
->cCPacketClassificationRule
.u8Ethertype
[0],
1272 psfCSType
->cCPacketClassificationRule
.u8Ethertype
[1],
1273 psfCSType
->cCPacketClassificationRule
.u8Ethertype
[2]);
1274 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16UserPriority: 0x%X ",
1275 psfCSType
->cCPacketClassificationRule
.u16UserPriority
);
1276 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16VLANID: 0x%X ", psfCSType
->cCPacketClassificationRule
.u16VLANID
);
1277 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8AssociatedPHSI: 0x%X ", psfCSType
->cCPacketClassificationRule
.u8AssociatedPHSI
);
1278 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u16PacketClassificationRuleIndex:0x%X ",
1279 psfCSType
->cCPacketClassificationRule
.u16PacketClassificationRuleIndex
);
1281 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8VendorSpecificClassifierParamLength:0x%X ",
1282 psfCSType
->cCPacketClassificationRule
.u8VendorSpecificClassifierParamLength
);
1283 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8VendorSpecificClassifierParam[1]:0x%X ",
1284 psfCSType
->cCPacketClassificationRule
.u8VendorSpecificClassifierParam
[0]);
1286 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8IPv6FlowLableLength: 0x%X ",
1287 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLableLength
);
1288 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " u8IPv6FlowLable[6]: 0x%X ,0x%X ,0x%X ,0x%X ,0x%X ,0x%X ",
1289 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLable
[0],
1290 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLable
[1],
1291 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLable
[2],
1292 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLable
[3],
1293 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLable
[4],
1294 psfCSType
->cCPacketClassificationRule
.u8IPv6FlowLable
[5]);
1298 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, DUMP_CONTROL
, DBG_LVL_ALL
, " bValid: 0x%X", pstAddIndication
->sfActiveSet
.bValid
);
1301 static inline ULONG
RestoreSFParam(struct bcm_mini_adapter
*Adapter
, ULONG ulAddrSFParamSet
, PUCHAR pucDestBuffer
)
1303 UINT nBytesToRead
= sizeof(struct bcm_connect_mgr_params
);
1305 if (ulAddrSFParamSet
== 0 || NULL
== pucDestBuffer
) {
1306 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Got Param address as 0!!");
1309 ulAddrSFParamSet
= ntohl(ulAddrSFParamSet
);
1311 /* Read out the SF Param Set At the indicated Location */
1312 if (rdm(Adapter
, ulAddrSFParamSet
, (PUCHAR
)pucDestBuffer
, nBytesToRead
) < 0)
1313 return STATUS_FAILURE
;
1318 static ULONG
StoreSFParam(struct bcm_mini_adapter
*Adapter
, PUCHAR pucSrcBuffer
, ULONG ulAddrSFParamSet
)
1320 UINT nBytesToWrite
= sizeof(struct bcm_connect_mgr_params
);
1323 if (ulAddrSFParamSet
== 0 || NULL
== pucSrcBuffer
)
1326 ret
= wrm(Adapter
, ulAddrSFParamSet
, (u8
*)pucSrcBuffer
, nBytesToWrite
);
1328 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "%s:%d WRM failed", __func__
, __LINE__
);
1334 ULONG
StoreCmControlResponseMessage(struct bcm_mini_adapter
*Adapter
, PVOID pvBuffer
, UINT
*puBufferLength
)
1336 struct bcm_add_indication_alt
*pstAddIndicationAlt
= NULL
;
1337 struct bcm_add_indication
*pstAddIndication
= NULL
;
1338 struct bcm_del_request
*pstDeletionRequest
;
1339 UINT uiSearchRuleIndex
;
1342 pstAddIndicationAlt
= pvBuffer
;
1345 * In case of DSD Req By MS, we should immediately delete this SF so that
1346 * we can stop the further classifying the pkt for this SF.
1348 if (pstAddIndicationAlt
->u8Type
== DSD_REQ
) {
1349 pstDeletionRequest
= pvBuffer
;
1351 ulSFID
= ntohl(pstDeletionRequest
->u32SFID
);
1352 uiSearchRuleIndex
= SearchSfid(Adapter
, ulSFID
);
1354 if (uiSearchRuleIndex
< NO_OF_QUEUES
) {
1355 deleteSFBySfid(Adapter
, uiSearchRuleIndex
);
1356 Adapter
->u32TotalDSD
++;
1361 if ((pstAddIndicationAlt
->u8Type
== DSD_RSP
) ||
1362 (pstAddIndicationAlt
->u8Type
== DSD_ACK
)) {
1363 /* No Special handling send the message as it is */
1366 /* For DSA_REQ, only up to "psfAuthorizedSet" parameter should be accessed by driver! */
1368 pstAddIndication
= kmalloc(sizeof(struct bcm_add_indication
), GFP_KERNEL
);
1369 if (pstAddIndication
== NULL
)
1372 /* AUTHORIZED SET */
1373 pstAddIndication
->psfAuthorizedSet
= (struct bcm_connect_mgr_params
*)
1374 GetNextTargetBufferLocation(Adapter
, pstAddIndicationAlt
->u16TID
);
1375 if (!pstAddIndication
->psfAuthorizedSet
) {
1376 kfree(pstAddIndication
);
1380 if (StoreSFParam(Adapter
, (PUCHAR
)&pstAddIndicationAlt
->sfAuthorizedSet
,
1381 (ULONG
)pstAddIndication
->psfAuthorizedSet
) != 1) {
1382 kfree(pstAddIndication
);
1386 /* this can't possibly be right */
1387 pstAddIndication
->psfAuthorizedSet
= (struct bcm_connect_mgr_params
*)ntohl((ULONG
)pstAddIndication
->psfAuthorizedSet
);
1389 if (pstAddIndicationAlt
->u8Type
== DSA_REQ
) {
1390 struct bcm_add_request AddRequest
;
1392 AddRequest
.u8Type
= pstAddIndicationAlt
->u8Type
;
1393 AddRequest
.eConnectionDir
= pstAddIndicationAlt
->u8Direction
;
1394 AddRequest
.u16TID
= pstAddIndicationAlt
->u16TID
;
1395 AddRequest
.u16CID
= pstAddIndicationAlt
->u16CID
;
1396 AddRequest
.u16VCID
= pstAddIndicationAlt
->u16VCID
;
1397 AddRequest
.psfParameterSet
= pstAddIndication
->psfAuthorizedSet
;
1398 (*puBufferLength
) = sizeof(struct bcm_add_request
);
1399 memcpy(pvBuffer
, &AddRequest
, sizeof(struct bcm_add_request
));
1400 kfree(pstAddIndication
);
1404 /* Since it's not DSA_REQ, we can access all field in pstAddIndicationAlt */
1405 /* We need to extract the structure from the buffer and pack it differently */
1407 pstAddIndication
->u8Type
= pstAddIndicationAlt
->u8Type
;
1408 pstAddIndication
->eConnectionDir
= pstAddIndicationAlt
->u8Direction
;
1409 pstAddIndication
->u16TID
= pstAddIndicationAlt
->u16TID
;
1410 pstAddIndication
->u16CID
= pstAddIndicationAlt
->u16CID
;
1411 pstAddIndication
->u16VCID
= pstAddIndicationAlt
->u16VCID
;
1412 pstAddIndication
->u8CC
= pstAddIndicationAlt
->u8CC
;
1415 pstAddIndication
->psfAdmittedSet
= (struct bcm_connect_mgr_params
*)
1416 GetNextTargetBufferLocation(Adapter
, pstAddIndicationAlt
->u16TID
);
1417 if (!pstAddIndication
->psfAdmittedSet
) {
1418 kfree(pstAddIndication
);
1421 if (StoreSFParam(Adapter
, (PUCHAR
)&pstAddIndicationAlt
->sfAdmittedSet
, (ULONG
)pstAddIndication
->psfAdmittedSet
) != 1) {
1422 kfree(pstAddIndication
);
1426 pstAddIndication
->psfAdmittedSet
= (struct bcm_connect_mgr_params
*)ntohl((ULONG
)pstAddIndication
->psfAdmittedSet
);
1429 pstAddIndication
->psfActiveSet
= (struct bcm_connect_mgr_params
*)
1430 GetNextTargetBufferLocation(Adapter
, pstAddIndicationAlt
->u16TID
);
1431 if (!pstAddIndication
->psfActiveSet
) {
1432 kfree(pstAddIndication
);
1435 if (StoreSFParam(Adapter
, (PUCHAR
)&pstAddIndicationAlt
->sfActiveSet
, (ULONG
)pstAddIndication
->psfActiveSet
) != 1) {
1436 kfree(pstAddIndication
);
1440 pstAddIndication
->psfActiveSet
= (struct bcm_connect_mgr_params
*)ntohl((ULONG
)pstAddIndication
->psfActiveSet
);
1442 (*puBufferLength
) = sizeof(struct bcm_add_indication
);
1443 *(struct bcm_add_indication
*)pvBuffer
= *pstAddIndication
;
1444 kfree(pstAddIndication
);
1448 static inline struct bcm_add_indication_alt
1449 *RestoreCmControlResponseMessage(register struct bcm_mini_adapter
*Adapter
, register PVOID pvBuffer
)
1452 struct bcm_add_indication
*pstAddIndication
= NULL
;
1453 struct bcm_add_indication_alt
*pstAddIndicationDest
= NULL
;
1455 pstAddIndication
= pvBuffer
;
1456 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "=====>");
1457 if ((pstAddIndication
->u8Type
== DSD_REQ
) ||
1458 (pstAddIndication
->u8Type
== DSD_RSP
) ||
1459 (pstAddIndication
->u8Type
== DSD_ACK
))
1462 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Inside RestoreCmControlResponseMessage ");
1464 * Need to Allocate memory to contain the SUPER Large structures
1465 * Our driver can't create these structures on Stack :(
1467 pstAddIndicationDest
= kmalloc(sizeof(struct bcm_add_indication_alt
), GFP_KERNEL
);
1469 if (pstAddIndicationDest
) {
1470 memset(pstAddIndicationDest
, 0, sizeof(struct bcm_add_indication_alt
));
1472 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Failed to allocate memory for SF Add Indication Structure ");
1475 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "AddIndication-u8Type : 0x%X", pstAddIndication
->u8Type
);
1476 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "AddIndication-u8Direction : 0x%X", pstAddIndication
->eConnectionDir
);
1477 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "AddIndication-u8TID : 0x%X", ntohs(pstAddIndication
->u16TID
));
1478 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "AddIndication-u8CID : 0x%X", ntohs(pstAddIndication
->u16CID
));
1479 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "AddIndication-u16VCID : 0x%X", ntohs(pstAddIndication
->u16VCID
));
1480 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "AddIndication-autorized set loc : %p", pstAddIndication
->psfAuthorizedSet
);
1481 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "AddIndication-admitted set loc : %p", pstAddIndication
->psfAdmittedSet
);
1482 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "AddIndication-Active set loc : %p", pstAddIndication
->psfActiveSet
);
1484 pstAddIndicationDest
->u8Type
= pstAddIndication
->u8Type
;
1485 pstAddIndicationDest
->u8Direction
= pstAddIndication
->eConnectionDir
;
1486 pstAddIndicationDest
->u16TID
= pstAddIndication
->u16TID
;
1487 pstAddIndicationDest
->u16CID
= pstAddIndication
->u16CID
;
1488 pstAddIndicationDest
->u16VCID
= pstAddIndication
->u16VCID
;
1489 pstAddIndicationDest
->u8CC
= pstAddIndication
->u8CC
;
1491 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Restoring Active Set ");
1492 ulStatus
= RestoreSFParam(Adapter
, (ULONG
)pstAddIndication
->psfActiveSet
, (PUCHAR
)&pstAddIndicationDest
->sfActiveSet
);
1494 goto failed_restore_sf_param
;
1496 if (pstAddIndicationDest
->sfActiveSet
.u8TotalClassifiers
> MAX_CLASSIFIERS_IN_SF
)
1497 pstAddIndicationDest
->sfActiveSet
.u8TotalClassifiers
= MAX_CLASSIFIERS_IN_SF
;
1499 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Restoring Admitted Set ");
1500 ulStatus
= RestoreSFParam(Adapter
, (ULONG
)pstAddIndication
->psfAdmittedSet
, (PUCHAR
)&pstAddIndicationDest
->sfAdmittedSet
);
1502 goto failed_restore_sf_param
;
1504 if (pstAddIndicationDest
->sfAdmittedSet
.u8TotalClassifiers
> MAX_CLASSIFIERS_IN_SF
)
1505 pstAddIndicationDest
->sfAdmittedSet
.u8TotalClassifiers
= MAX_CLASSIFIERS_IN_SF
;
1507 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Restoring Authorized Set ");
1508 ulStatus
= RestoreSFParam(Adapter
, (ULONG
)pstAddIndication
->psfAuthorizedSet
, (PUCHAR
)&pstAddIndicationDest
->sfAuthorizedSet
);
1510 goto failed_restore_sf_param
;
1512 if (pstAddIndicationDest
->sfAuthorizedSet
.u8TotalClassifiers
> MAX_CLASSIFIERS_IN_SF
)
1513 pstAddIndicationDest
->sfAuthorizedSet
.u8TotalClassifiers
= MAX_CLASSIFIERS_IN_SF
;
1515 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Dumping the whole raw packet");
1516 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "============================================================");
1517 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, " pstAddIndicationDest->sfActiveSet size %zx %p", sizeof(*pstAddIndicationDest
), pstAddIndicationDest
);
1518 /* BCM_DEBUG_PRINT_BUFFER(Adapter,DBG_TYPE_OTHERS, CONN_MSG, DBG_LVL_ALL, (unsigned char *)pstAddIndicationDest, sizeof(*pstAddIndicationDest)); */
1519 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "============================================================");
1520 return pstAddIndicationDest
;
1521 failed_restore_sf_param
:
1522 kfree(pstAddIndicationDest
);
1523 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "<=====");
1527 ULONG
SetUpTargetDsxBuffers(struct bcm_mini_adapter
*Adapter
)
1529 ULONG ulTargetDsxBuffersBase
= 0;
1530 ULONG ulCntTargetBuffers
;
1535 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Adapter was NULL!!!");
1539 if (Adapter
->astTargetDsxBuffer
[0].ulTargetDsxBuffer
)
1542 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Size of Each DSX Buffer(Also size of connection manager parameters): %zx ", sizeof(struct bcm_connect_mgr_params
));
1543 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Reading DSX buffer From Target location %x ", DSX_MESSAGE_EXCHANGE_BUFFER
);
1545 Status
= rdmalt(Adapter
, DSX_MESSAGE_EXCHANGE_BUFFER
, (PUINT
)&ulTargetDsxBuffersBase
, sizeof(UINT
));
1547 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "RDM failed!!");
1551 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Base Address Of DSX Target Buffer : 0x%lx", ulTargetDsxBuffersBase
);
1552 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Tgt Buffer is Now %lx :", ulTargetDsxBuffersBase
);
1553 ulCntTargetBuffers
= DSX_MESSAGE_EXCHANGE_BUFFER_SIZE
/ sizeof(struct bcm_connect_mgr_params
);
1555 Adapter
->ulTotalTargetBuffersAvailable
=
1556 ulCntTargetBuffers
> MAX_TARGET_DSX_BUFFERS
?
1557 MAX_TARGET_DSX_BUFFERS
: ulCntTargetBuffers
;
1559 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, " Total Target DSX Buffer setup %lx ", Adapter
->ulTotalTargetBuffersAvailable
);
1561 for (i
= 0; i
< Adapter
->ulTotalTargetBuffersAvailable
; i
++) {
1562 Adapter
->astTargetDsxBuffer
[i
].ulTargetDsxBuffer
= ulTargetDsxBuffersBase
;
1563 Adapter
->astTargetDsxBuffer
[i
].valid
= 1;
1564 Adapter
->astTargetDsxBuffer
[i
].tid
= 0;
1565 ulTargetDsxBuffersBase
+= sizeof(struct bcm_connect_mgr_params
);
1566 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, " Target DSX Buffer %lx setup at 0x%lx",
1567 i
, Adapter
->astTargetDsxBuffer
[i
].ulTargetDsxBuffer
);
1569 Adapter
->ulCurrentTargetBuffer
= 0;
1570 Adapter
->ulFreeTargetBufferCnt
= Adapter
->ulTotalTargetBuffersAvailable
;
1574 static ULONG
GetNextTargetBufferLocation(struct bcm_mini_adapter
*Adapter
, B_UINT16 tid
)
1579 if ((Adapter
->ulTotalTargetBuffersAvailable
== 0) || (Adapter
->ulFreeTargetBufferCnt
== 0)) {
1580 ClearTargetDSXBuffer(Adapter
, tid
, false);
1584 idx
= Adapter
->ulCurrentTargetBuffer
;
1585 max_try
= Adapter
->ulTotalTargetBuffersAvailable
;
1586 while ((max_try
) && (Adapter
->astTargetDsxBuffer
[idx
].valid
!= 1)) {
1587 idx
= (idx
+1) % Adapter
->ulTotalTargetBuffersAvailable
;
1592 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "\n GetNextTargetBufferLocation : Error No Free Target DSX Buffers FreeCnt : %lx ", Adapter
->ulFreeTargetBufferCnt
);
1593 ClearTargetDSXBuffer(Adapter
, tid
, false);
1597 dsx_buf
= Adapter
->astTargetDsxBuffer
[idx
].ulTargetDsxBuffer
;
1598 Adapter
->astTargetDsxBuffer
[idx
].valid
= 0;
1599 Adapter
->astTargetDsxBuffer
[idx
].tid
= tid
;
1600 Adapter
->ulFreeTargetBufferCnt
--;
1601 idx
= (idx
+1)%Adapter
->ulTotalTargetBuffersAvailable
;
1602 Adapter
->ulCurrentTargetBuffer
= idx
;
1603 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "GetNextTargetBufferLocation :Returning address %lx tid %d\n", dsx_buf
, tid
);
1608 int AllocAdapterDsxBuffer(struct bcm_mini_adapter
*Adapter
)
1611 * Need to Allocate memory to contain the SUPER Large structures
1612 * Our driver can't create these structures on Stack
1614 Adapter
->caDsxReqResp
= kmalloc(sizeof(struct bcm_add_indication_alt
)+LEADER_SIZE
, GFP_KERNEL
);
1615 if (!Adapter
->caDsxReqResp
)
1621 int FreeAdapterDsxBuffer(struct bcm_mini_adapter
*Adapter
)
1623 kfree(Adapter
->caDsxReqResp
);
1628 * @ingroup ctrl_pkt_functions
1629 * This routinue would process the Control responses
1630 * for the Connection Management.
1631 * @return - Queue index for the free SFID else returns Invalid Index.
1633 bool CmControlResponseMessage(struct bcm_mini_adapter
*Adapter
, /* <Pointer to the Adapter structure */
1634 PVOID pvBuffer
/* Starting Address of the Buffer, that contains the AddIndication Data */)
1636 struct bcm_connect_mgr_params
*psfLocalSet
= NULL
;
1637 struct bcm_add_indication_alt
*pstAddIndication
= NULL
;
1638 struct bcm_change_indication
*pstChangeIndication
= NULL
;
1639 struct bcm_leader
*pLeader
= NULL
;
1642 * Otherwise the message contains a target address from where we need to
1643 * read out the rest of the service flow param structure
1645 pstAddIndication
= RestoreCmControlResponseMessage(Adapter
, pvBuffer
);
1646 if (pstAddIndication
== NULL
) {
1647 ClearTargetDSXBuffer(Adapter
, ((struct bcm_add_indication
*)pvBuffer
)->u16TID
, false);
1648 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "Error in restoring Service Flow param structure from DSx message");
1652 DumpCmControlPacket(pstAddIndication
);
1653 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "====>");
1654 pLeader
= (struct bcm_leader
*)Adapter
->caDsxReqResp
;
1656 pLeader
->Status
= CM_CONTROL_NEWDSX_MULTICLASSIFIER_REQ
;
1659 ClearTargetDSXBuffer(Adapter
, pstAddIndication
->u16TID
, false);
1660 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "### TID RECEIVED %d\n", pstAddIndication
->u16TID
);
1661 switch (pstAddIndication
->u8Type
) {
1664 pLeader
->PLength
= sizeof(struct bcm_add_indication_alt
);
1665 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Sending DSA Response....\n");
1666 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "SENDING DSA RESPONSE TO MAC %d", pLeader
->PLength
);
1667 *((struct bcm_add_indication_alt
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
]))
1668 = *pstAddIndication
;
1669 ((struct bcm_add_indication_alt
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
]))->u8Type
= DSA_RSP
;
1671 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, " VCID = %x", ntohs(pstAddIndication
->u16VCID
));
1672 CopyBufferToControlPacket(Adapter
, (PVOID
)Adapter
->caDsxReqResp
);
1673 kfree(pstAddIndication
);
1678 pLeader
->PLength
= sizeof(struct bcm_add_indication_alt
);
1679 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "SENDING DSA ACK TO MAC %d",
1681 *((struct bcm_add_indication_alt
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
]))
1682 = *pstAddIndication
;
1683 ((struct bcm_add_indication_alt
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
]))->u8Type
= DSA_ACK
;
1685 } /* no break here..we should go down. */
1688 UINT uiSearchRuleIndex
= 0;
1690 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "VCID:0x%X",
1691 ntohs(pstAddIndication
->u16VCID
));
1692 uiSearchRuleIndex
= SearchFreeSfid(Adapter
);
1693 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "uiSearchRuleIndex:0x%X ",
1695 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Direction:0x%X ",
1696 pstAddIndication
->u8Direction
);
1697 if ((uiSearchRuleIndex
< NO_OF_QUEUES
)) {
1698 Adapter
->PackInfo
[uiSearchRuleIndex
].ucDirection
=
1699 pstAddIndication
->u8Direction
;
1700 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "bValid:0x%X ",
1701 pstAddIndication
->sfActiveSet
.bValid
);
1702 if (pstAddIndication
->sfActiveSet
.bValid
== TRUE
)
1703 Adapter
->PackInfo
[uiSearchRuleIndex
].bActiveSet
= TRUE
;
1705 if (pstAddIndication
->sfAuthorizedSet
.bValid
== TRUE
)
1706 Adapter
->PackInfo
[uiSearchRuleIndex
].bAuthorizedSet
= TRUE
;
1708 if (pstAddIndication
->sfAdmittedSet
.bValid
== TRUE
)
1709 Adapter
->PackInfo
[uiSearchRuleIndex
].bAdmittedSet
= TRUE
;
1711 if (pstAddIndication
->sfActiveSet
.bValid
== false) {
1712 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= false;
1713 Adapter
->PackInfo
[uiSearchRuleIndex
].bActivateRequestSent
= false;
1714 if (pstAddIndication
->sfAdmittedSet
.bValid
)
1715 psfLocalSet
= &pstAddIndication
->sfAdmittedSet
;
1716 else if (pstAddIndication
->sfAuthorizedSet
.bValid
)
1717 psfLocalSet
= &pstAddIndication
->sfAuthorizedSet
;
1719 psfLocalSet
= &pstAddIndication
->sfActiveSet
;
1720 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= TRUE
;
1724 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "No set is valid\n");
1725 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= false;
1726 Adapter
->PackInfo
[uiSearchRuleIndex
].bValid
= false;
1727 Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
= 0;
1728 kfree(pstAddIndication
);
1729 } else if (psfLocalSet
->bValid
&& (pstAddIndication
->u8CC
== 0)) {
1730 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "DSA ACK");
1731 Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
= ntohs(pstAddIndication
->u16VCID
);
1732 Adapter
->PackInfo
[uiSearchRuleIndex
].usCID
= ntohs(pstAddIndication
->u16CID
);
1734 if (UPLINK_DIR
== pstAddIndication
->u8Direction
)
1735 atomic_set(&Adapter
->PackInfo
[uiSearchRuleIndex
].uiPerSFTxResourceCount
, DEFAULT_PERSFCOUNT
);
1737 CopyToAdapter(Adapter
, psfLocalSet
, uiSearchRuleIndex
, DSA_ACK
, pstAddIndication
);
1738 /* don't free pstAddIndication */
1740 /* Inside CopyToAdapter, Sorting of all the SFs take place.
1741 * Hence any access to the newly added SF through uiSearchRuleIndex is invalid.
1742 * SHOULD BE STRICTLY AVOIDED.
1744 /* *(PULONG)(((PUCHAR)pvBuffer)+1)=psfLocalSet->u32SFID; */
1745 memcpy((((PUCHAR
)pvBuffer
)+1), &psfLocalSet
->u32SFID
, 4);
1747 if (pstAddIndication
->sfActiveSet
.bValid
== TRUE
) {
1748 if (UPLINK_DIR
== pstAddIndication
->u8Direction
) {
1749 if (!Adapter
->LinkUpStatus
) {
1750 netif_carrier_on(Adapter
->dev
);
1751 netif_start_queue(Adapter
->dev
);
1752 Adapter
->LinkUpStatus
= 1;
1753 if (netif_msg_link(Adapter
))
1754 pr_info(PFX
"%s: link up\n", Adapter
->dev
->name
);
1755 atomic_set(&Adapter
->TxPktAvail
, 1);
1756 wake_up(&Adapter
->tx_packet_wait_queue
);
1757 Adapter
->liTimeSinceLastNetEntry
= get_seconds();
1762 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= false;
1763 Adapter
->PackInfo
[uiSearchRuleIndex
].bValid
= false;
1764 Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
= 0;
1765 kfree(pstAddIndication
);
1768 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "DSA ACK did not get valid SFID");
1769 kfree(pstAddIndication
);
1776 pLeader
->PLength
= sizeof(struct bcm_change_indication
);
1777 pstChangeIndication
= (struct bcm_change_indication
*)pstAddIndication
;
1778 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "SENDING DSC RESPONSE TO MAC %d", pLeader
->PLength
);
1780 *((struct bcm_change_indication
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
])) = *pstChangeIndication
;
1781 ((struct bcm_change_indication
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
]))->u8Type
= DSC_RSP
;
1783 CopyBufferToControlPacket(Adapter
, (PVOID
)Adapter
->caDsxReqResp
);
1784 kfree(pstAddIndication
);
1789 pLeader
->PLength
= sizeof(struct bcm_change_indication
);
1790 pstChangeIndication
= (struct bcm_change_indication
*)pstAddIndication
;
1791 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "SENDING DSC ACK TO MAC %d", pLeader
->PLength
);
1792 *((struct bcm_change_indication
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
])) = *pstChangeIndication
;
1793 ((struct bcm_change_indication
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
]))->u8Type
= DSC_ACK
;
1797 UINT uiSearchRuleIndex
= 0;
1799 pstChangeIndication
= (struct bcm_change_indication
*)pstAddIndication
;
1800 uiSearchRuleIndex
= SearchSfid(Adapter
, ntohl(pstChangeIndication
->sfActiveSet
.u32SFID
));
1801 if (uiSearchRuleIndex
> NO_OF_QUEUES
-1)
1802 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "SF doesn't exist for which DSC_ACK is received");
1804 if ((uiSearchRuleIndex
< NO_OF_QUEUES
)) {
1805 Adapter
->PackInfo
[uiSearchRuleIndex
].ucDirection
= pstChangeIndication
->u8Direction
;
1806 if (pstChangeIndication
->sfActiveSet
.bValid
== TRUE
)
1807 Adapter
->PackInfo
[uiSearchRuleIndex
].bActiveSet
= TRUE
;
1809 if (pstChangeIndication
->sfAuthorizedSet
.bValid
== TRUE
)
1810 Adapter
->PackInfo
[uiSearchRuleIndex
].bAuthorizedSet
= TRUE
;
1812 if (pstChangeIndication
->sfAdmittedSet
.bValid
== TRUE
)
1813 Adapter
->PackInfo
[uiSearchRuleIndex
].bAdmittedSet
= TRUE
;
1815 if (pstChangeIndication
->sfActiveSet
.bValid
== false) {
1816 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= false;
1817 Adapter
->PackInfo
[uiSearchRuleIndex
].bActivateRequestSent
= false;
1819 if (pstChangeIndication
->sfAdmittedSet
.bValid
)
1820 psfLocalSet
= &pstChangeIndication
->sfAdmittedSet
;
1821 else if (pstChangeIndication
->sfAuthorizedSet
.bValid
)
1822 psfLocalSet
= &pstChangeIndication
->sfAuthorizedSet
;
1824 psfLocalSet
= &pstChangeIndication
->sfActiveSet
;
1825 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= TRUE
;
1829 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "No set is valid\n");
1830 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= false;
1831 Adapter
->PackInfo
[uiSearchRuleIndex
].bValid
= false;
1832 Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
= 0;
1833 kfree(pstAddIndication
);
1834 } else if (psfLocalSet
->bValid
&& (pstChangeIndication
->u8CC
== 0)) {
1835 Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
= ntohs(pstChangeIndication
->u16VCID
);
1836 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "CC field is %d bvalid = %d\n",
1837 pstChangeIndication
->u8CC
, psfLocalSet
->bValid
);
1838 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "VCID= %d\n", ntohs(pstChangeIndication
->u16VCID
));
1839 Adapter
->PackInfo
[uiSearchRuleIndex
].usCID
= ntohs(pstChangeIndication
->u16CID
);
1840 CopyToAdapter(Adapter
, psfLocalSet
, uiSearchRuleIndex
, DSC_ACK
, pstAddIndication
);
1842 *(PULONG
)(((PUCHAR
)pvBuffer
)+1) = psfLocalSet
->u32SFID
;
1843 } else if (pstChangeIndication
->u8CC
== 6) {
1844 deleteSFBySfid(Adapter
, uiSearchRuleIndex
);
1845 kfree(pstAddIndication
);
1848 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "DSC ACK did not get valid SFID");
1849 kfree(pstAddIndication
);
1856 UINT uiSearchRuleIndex
;
1859 pLeader
->PLength
= sizeof(struct bcm_del_indication
);
1860 *((struct bcm_del_indication
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
])) = *((struct bcm_del_indication
*)pstAddIndication
);
1862 ulSFID
= ntohl(((struct bcm_del_indication
*)pstAddIndication
)->u32SFID
);
1863 uiSearchRuleIndex
= SearchSfid(Adapter
, ulSFID
);
1864 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "DSD - Removing connection %x", uiSearchRuleIndex
);
1866 if (uiSearchRuleIndex
< NO_OF_QUEUES
) {
1867 /* Delete All Classifiers Associated with this SFID */
1868 deleteSFBySfid(Adapter
, uiSearchRuleIndex
);
1869 Adapter
->u32TotalDSD
++;
1872 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "SENDING DSD RESPONSE TO MAC");
1873 ((struct bcm_del_indication
*)&(Adapter
->caDsxReqResp
[LEADER_SIZE
]))->u8Type
= DSD_RSP
;
1874 CopyBufferToControlPacket(Adapter
, (PVOID
)Adapter
->caDsxReqResp
);
1878 /* Do nothing as SF has already got Deleted */
1882 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "DSD ACK Rcd, let App handle it\n");
1885 kfree(pstAddIndication
);
1891 int get_dsx_sf_data_to_application(struct bcm_mini_adapter
*Adapter
, UINT uiSFId
, void __user
*user_buffer
)
1894 struct bcm_packet_info
*psSfInfo
= NULL
;
1896 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "status =%d", status
);
1897 status
= SearchSfid(Adapter
, uiSFId
);
1898 if (status
>= NO_OF_QUEUES
) {
1899 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "SFID %d not present in queue !!!", uiSFId
);
1902 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "status =%d", status
);
1903 psSfInfo
= &Adapter
->PackInfo
[status
];
1904 if (psSfInfo
->pstSFIndication
&& copy_to_user(user_buffer
,
1905 psSfInfo
->pstSFIndication
, sizeof(struct bcm_add_indication_alt
))) {
1906 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_PRINTK
, 0, 0, "copy to user failed SFID %d, present in queue !!!", uiSFId
);
1910 return STATUS_SUCCESS
;
1913 VOID
OverrideServiceFlowParams(struct bcm_mini_adapter
*Adapter
, PUINT puiBuffer
)
1915 B_UINT32 u32NumofSFsinMsg
= ntohl(*(puiBuffer
+ 1));
1916 struct bcm_stim_sfhostnotify
*pHostInfo
= NULL
;
1917 UINT uiSearchRuleIndex
= 0;
1921 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "u32NumofSFsinMsg: 0x%x\n", u32NumofSFsinMsg
);
1923 while (u32NumofSFsinMsg
!= 0 && u32NumofSFsinMsg
< NO_OF_QUEUES
) {
1925 pHostInfo
= (struct bcm_stim_sfhostnotify
*)puiBuffer
;
1926 puiBuffer
= (PUINT
)(pHostInfo
+ 1);
1928 ulSFID
= ntohl(pHostInfo
->SFID
);
1929 uiSearchRuleIndex
= SearchSfid(Adapter
, ulSFID
);
1930 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "SFID: 0x%lx\n", ulSFID
);
1932 if (uiSearchRuleIndex
>= NO_OF_QUEUES
|| uiSearchRuleIndex
== HiPriority
) {
1933 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "The SFID <%lx> doesn't exist in host entry or is Invalid\n", ulSFID
);
1937 if (pHostInfo
->RetainSF
== false) {
1938 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "Going to Delete SF");
1939 deleteSFBySfid(Adapter
, uiSearchRuleIndex
);
1941 Adapter
->PackInfo
[uiSearchRuleIndex
].usVCID_Value
= ntohs(pHostInfo
->VCID
);
1942 Adapter
->PackInfo
[uiSearchRuleIndex
].usCID
= ntohs(pHostInfo
->newCID
);
1943 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= false;
1945 BCM_DEBUG_PRINT(Adapter
, DBG_TYPE_OTHERS
, CONN_MSG
, DBG_LVL_ALL
, "pHostInfo->QoSParamSet: 0x%x\n", pHostInfo
->QoSParamSet
);
1947 if (pHostInfo
->QoSParamSet
& 0x1)
1948 Adapter
->PackInfo
[uiSearchRuleIndex
].bAuthorizedSet
= TRUE
;
1949 if (pHostInfo
->QoSParamSet
& 0x2)
1950 Adapter
->PackInfo
[uiSearchRuleIndex
].bAdmittedSet
= TRUE
;
1951 if (pHostInfo
->QoSParamSet
& 0x4) {
1952 Adapter
->PackInfo
[uiSearchRuleIndex
].bActiveSet
= TRUE
;
1953 Adapter
->PackInfo
[uiSearchRuleIndex
].bActive
= TRUE
;