2010-09-08 21:46:36 +00:00
/************************************************************
* CMHOST . C
* This file contains the routines for handling Connnection
* Management .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//#define CONN_MSG
# include "headers.h"
typedef enum _E_CLASSIFIER_ACTION
{
eInvalidClassifierAction ,
eAddClassifier ,
eReplaceClassifier ,
eDeleteClassifier
} E_CLASSIFIER_ACTION ;
/************************************************************
* Function - SearchSfid
*
* Description - This routinue would search QOS queues having
* specified SFID as input parameter .
*
* Parameters - Adapter : Pointer to the Adapter structure
* uiSfid : Given SFID for matching
*
* Returns - Queue index for this SFID ( If matched )
Else Invalid Queue Index ( If Not matched )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2010-11-01 03:52:36 +00:00
INT SearchSfid ( PMINI_ADAPTER Adapter , UINT uiSfid )
2010-09-08 21:46:36 +00:00
{
INT iIndex = 0 ;
for ( iIndex = ( NO_OF_QUEUES - 1 ) ; iIndex > = 0 ; iIndex - - )
if ( Adapter - > PackInfo [ iIndex ] . ulSFID = = uiSfid )
return iIndex ;
return NO_OF_QUEUES + 1 ;
}
/***************************************************************
* Function - SearchFreeSfid
*
* Description - This routinue would search Free available SFID .
*
* Parameter - Adapter : Pointer to the Adapter structure
*
* Returns - Queue index for the free SFID
* Else returns Invalid Index .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2010-11-01 03:52:36 +00:00
static INT SearchFreeSfid ( PMINI_ADAPTER Adapter )
2010-09-08 21:46:36 +00:00
{
UINT uiIndex = 0 ;
2010-11-01 03:52:36 +00:00
2010-09-08 21:46:36 +00:00
for ( uiIndex = 0 ; uiIndex < ( NO_OF_QUEUES - 1 ) ; uiIndex + + )
if ( Adapter - > PackInfo [ uiIndex ] . ulSFID = = 0 )
return uiIndex ;
return NO_OF_QUEUES + 1 ;
}
2010-11-01 03:52:36 +00:00
int SearchVcid ( PMINI_ADAPTER Adapter , unsigned short usVcid )
2010-09-08 21:46:36 +00:00
{
2010-11-01 03:52:36 +00:00
int iIndex = 0 ;
2010-09-08 21:46:36 +00:00
for ( iIndex = ( NO_OF_QUEUES - 1 ) ; iIndex > = 0 ; iIndex - - )
if ( Adapter - > PackInfo [ iIndex ] . usVCID_Value = = usVcid )
return iIndex ;
return NO_OF_QUEUES + 1 ;
}
/*
Function : SearchClsid
Description : This routinue would search Classifier having specified ClassifierID as input parameter
Input parameters : PMINI_ADAPTER Adapter - Adapter Context
unsigned int uiSfid - The SF in which the classifier is to searched
B_UINT16 uiClassifierID - The classifier ID to be searched
Return : int : Classifier table index of matching entry
*/
2010-11-01 03:52:36 +00:00
static int SearchClsid ( PMINI_ADAPTER Adapter , ULONG ulSFID , B_UINT16 uiClassifierID )
2010-09-08 21:46:36 +00:00
{
unsigned int uiClassifierIndex = 0 ;
for ( uiClassifierIndex = 0 ; uiClassifierIndex < MAX_CLASSIFIERS ; uiClassifierIndex + + )
{
if ( ( Adapter - > astClassifierTable [ uiClassifierIndex ] . bUsed ) & &
( Adapter - > astClassifierTable [ uiClassifierIndex ] . uiClassifierRuleIndex = = uiClassifierID ) & &
( Adapter - > astClassifierTable [ uiClassifierIndex ] . ulSFID = = ulSFID ) )
return uiClassifierIndex ;
}
return MAX_CLASSIFIERS + 1 ;
}
/**
@ ingroup ctrl_pkt_functions
This routinue would search Free available Classifier entry in classifier table .
@ return free Classifier Entry index in classifier table for specified SF
*/
2010-11-01 03:52:36 +00:00
static int SearchFreeClsid ( PMINI_ADAPTER Adapter /**Adapter Context*/
2010-09-08 21:46:36 +00:00
)
{
unsigned int uiClassifierIndex = 0 ;
for ( uiClassifierIndex = 0 ; uiClassifierIndex < MAX_CLASSIFIERS ; uiClassifierIndex + + )
{
if ( ! Adapter - > astClassifierTable [ uiClassifierIndex ] . bUsed )
return uiClassifierIndex ;
}
return MAX_CLASSIFIERS + 1 ;
}
VOID deleteSFBySfid ( PMINI_ADAPTER Adapter , UINT uiSearchRuleIndex )
{
//deleting all the packet held in the SF
flush_queue ( Adapter , uiSearchRuleIndex ) ;
//Deleting the all classifiers for this SF
DeleteAllClassifiersForSF ( Adapter , uiSearchRuleIndex ) ;
//Resetting only MIBS related entries in the SF
memset ( ( PVOID ) & Adapter - > PackInfo [ uiSearchRuleIndex ] , 0 , sizeof ( S_MIBS_SERVICEFLOW_TABLE ) ) ;
}
static inline VOID
CopyIpAddrToClassifier ( S_CLASSIFIER_RULE * pstClassifierEntry ,
B_UINT8 u8IpAddressLen , B_UINT8 * pu8IpAddressMaskSrc ,
BOOLEAN bIpVersion6 , E_IPADDR_CONTEXT eIpAddrContext )
{
UINT ucLoopIndex = 0 ;
UINT nSizeOfIPAddressInBytes = IP_LENGTH_OF_ADDRESS ;
UCHAR * ptrClassifierIpAddress = NULL ;
UCHAR * ptrClassifierIpMask = NULL ;
PMINI_ADAPTER Adapter = GET_BCM_ADAPTER ( gblpnetdev ) ;
if ( bIpVersion6 )
{
nSizeOfIPAddressInBytes = IPV6_ADDRESS_SIZEINBYTES ;
}
//Destination Ip Address
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Ip Address Range Length:0x%X " ,
u8IpAddressLen ) ;
if ( ( bIpVersion6 ? ( IPV6_ADDRESS_SIZEINBYTES * MAX_IP_RANGE_LENGTH * 2 ) :
( TOTAL_MASKED_ADDRESS_IN_BYTES ) ) > = u8IpAddressLen )
{
/*
//checking both the mask and address togethor in Classification.
//So length will be : TotalLengthInBytes/nSizeOfIPAddressInBytes * 2
//(nSizeOfIPAddressInBytes for address and nSizeOfIPAddressInBytes for mask)
*/
if ( eIpAddrContext = = eDestIpAddress )
{
pstClassifierEntry - > ucIPDestinationAddressLength =
u8IpAddressLen / ( nSizeOfIPAddressInBytes * 2 ) ;
if ( bIpVersion6 )
{
ptrClassifierIpAddress =
pstClassifierEntry - > stDestIpAddress . ucIpv6Address ;
ptrClassifierIpMask =
pstClassifierEntry - > stDestIpAddress . ucIpv6Mask ;
}
else
{
ptrClassifierIpAddress =
pstClassifierEntry - > stDestIpAddress . ucIpv4Address ;
ptrClassifierIpMask =
pstClassifierEntry - > stDestIpAddress . ucIpv4Mask ;
}
}
else if ( eIpAddrContext = = eSrcIpAddress )
{
pstClassifierEntry - > ucIPSourceAddressLength =
u8IpAddressLen / ( nSizeOfIPAddressInBytes * 2 ) ;
if ( bIpVersion6 )
{
ptrClassifierIpAddress =
pstClassifierEntry - > stSrcIpAddress . ucIpv6Address ;
ptrClassifierIpMask =
pstClassifierEntry - > stSrcIpAddress . ucIpv6Mask ;
}
else
{
ptrClassifierIpAddress =
pstClassifierEntry - > stSrcIpAddress . ucIpv4Address ;
ptrClassifierIpMask =
pstClassifierEntry - > stSrcIpAddress . ucIpv4Mask ;
}
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Address Length:0x%X \n " ,
pstClassifierEntry - > ucIPDestinationAddressLength ) ;
while ( ( u8IpAddressLen > = nSizeOfIPAddressInBytes ) & &
( ucLoopIndex < MAX_IP_RANGE_LENGTH ) )
{
memcpy ( ptrClassifierIpAddress +
( ucLoopIndex * nSizeOfIPAddressInBytes ) ,
( pu8IpAddressMaskSrc + ( ucLoopIndex * nSizeOfIPAddressInBytes * 2 ) ) ,
nSizeOfIPAddressInBytes ) ;
if ( ! bIpVersion6 )
{
if ( eIpAddrContext = = eSrcIpAddress )
{
pstClassifierEntry - > stSrcIpAddress . ulIpv4Addr [ ucLoopIndex ] =
ntohl ( pstClassifierEntry - > stSrcIpAddress .
ulIpv4Addr [ ucLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Src Ip Address:0x%luX " , pstClassifierEntry - > stSrcIpAddress . ulIpv4Addr [ ucLoopIndex ] ) ;
}
else if ( eIpAddrContext = = eDestIpAddress )
{
pstClassifierEntry - > stDestIpAddress . ulIpv4Addr [ ucLoopIndex ] = ntohl ( pstClassifierEntry - > stDestIpAddress .
ulIpv4Addr [ ucLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Dest Ip Address:0x%luX " , pstClassifierEntry - > stDestIpAddress . ulIpv4Addr [ ucLoopIndex ] ) ;
}
}
u8IpAddressLen - = nSizeOfIPAddressInBytes ;
if ( u8IpAddressLen > = nSizeOfIPAddressInBytes )
{
memcpy ( ptrClassifierIpMask +
( ucLoopIndex * nSizeOfIPAddressInBytes ) ,
( pu8IpAddressMaskSrc + nSizeOfIPAddressInBytes +
( ucLoopIndex * nSizeOfIPAddressInBytes * 2 ) ) ,
nSizeOfIPAddressInBytes ) ;
if ( ! bIpVersion6 )
{
if ( eIpAddrContext = = eSrcIpAddress )
{
pstClassifierEntry - > stSrcIpAddress .
ulIpv4Mask [ ucLoopIndex ] =
ntohl ( pstClassifierEntry - > stSrcIpAddress .
ulIpv4Mask [ ucLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Src Ip Mask Address:0x%luX " , pstClassifierEntry - > stSrcIpAddress . ulIpv4Mask [ ucLoopIndex ] ) ;
}
else if ( eIpAddrContext = = eDestIpAddress )
{
pstClassifierEntry - > stDestIpAddress .
ulIpv4Mask [ ucLoopIndex ] =
ntohl ( pstClassifierEntry - > stDestIpAddress .
ulIpv4Mask [ ucLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Dest Ip Mask Address:0x%luX " , pstClassifierEntry - > stDestIpAddress . ulIpv4Mask [ ucLoopIndex ] ) ;
}
}
u8IpAddressLen - = nSizeOfIPAddressInBytes ;
}
if ( 0 = = u8IpAddressLen )
{
pstClassifierEntry - > bDestIpValid = TRUE ;
}
ucLoopIndex + + ;
}
if ( bIpVersion6 )
{
//Restore EndianNess of Struct
for ( ucLoopIndex = 0 ; ucLoopIndex < MAX_IP_RANGE_LENGTH * 4 ;
ucLoopIndex + + )
{
if ( eIpAddrContext = = eSrcIpAddress )
{
pstClassifierEntry - > stSrcIpAddress . ulIpv6Addr [ ucLoopIndex ] =
ntohl ( pstClassifierEntry - > stSrcIpAddress .
ulIpv6Addr [ ucLoopIndex ] ) ;
pstClassifierEntry - > stSrcIpAddress . ulIpv6Mask [ ucLoopIndex ] = ntohl ( pstClassifierEntry - > stSrcIpAddress .
ulIpv6Mask [ ucLoopIndex ] ) ;
}
else if ( eIpAddrContext = = eDestIpAddress )
{
pstClassifierEntry - > stDestIpAddress . ulIpv6Addr [ ucLoopIndex ] = ntohl ( pstClassifierEntry - > stDestIpAddress .
ulIpv6Addr [ ucLoopIndex ] ) ;
pstClassifierEntry - > stDestIpAddress . ulIpv6Mask [ ucLoopIndex ] = ntohl ( pstClassifierEntry - > stDestIpAddress .
ulIpv6Mask [ ucLoopIndex ] ) ;
}
}
}
}
}
void ClearTargetDSXBuffer ( PMINI_ADAPTER Adapter , B_UINT16 TID , BOOLEAN bFreeAll )
{
ULONG ulIndex ;
for ( ulIndex = 0 ; ulIndex < Adapter - > ulTotalTargetBuffersAvailable ; ulIndex + + )
{
if ( Adapter - > astTargetDsxBuffer [ ulIndex ] . valid )
continue ;
if ( ( bFreeAll ) | | ( Adapter - > astTargetDsxBuffer [ ulIndex ] . tid = = TID ) ) {
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " ClearTargetDSXBuffer: found tid %d buffer cleared %lx \n " ,
TID , Adapter - > astTargetDsxBuffer [ ulIndex ] . ulTargetDsxBuffer ) ;
Adapter - > astTargetDsxBuffer [ ulIndex ] . valid = 1 ;
Adapter - > astTargetDsxBuffer [ ulIndex ] . tid = 0 ;
Adapter - > ulFreeTargetBufferCnt + + ;
}
}
}
/**
@ ingroup ctrl_pkt_functions
copy classifier rule into the specified SF index
*/
static inline VOID CopyClassifierRuleToSF ( PMINI_ADAPTER Adapter , stConvergenceSLTypes * psfCSType , UINT uiSearchRuleIndex , UINT nClassifierIndex )
{
S_CLASSIFIER_RULE * pstClassifierEntry = NULL ;
//VOID *pvPhsContext = NULL;
UINT ucLoopIndex = 0 ;
//UCHAR ucProtocolLength=0;
//ULONG ulPhsStatus;
if ( Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value = = 0 | |
nClassifierIndex > ( MAX_CLASSIFIERS - 1 ) )
return ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Storing Classifier Rule Index : %X " , ntohs ( psfCSType - > cCPacketClassificationRule . u16PacketClassificationRuleIndex ) ) ;
if ( nClassifierIndex > MAX_CLASSIFIERS - 1 )
return ;
pstClassifierEntry = & Adapter - > astClassifierTable [ nClassifierIndex ] ;
if ( pstClassifierEntry )
{
//Store if Ipv6
pstClassifierEntry - > bIpv6Protocol =
( Adapter - > PackInfo [ uiSearchRuleIndex ] . ucIpVersion = = IPV6 ) ? TRUE : FALSE ;
//Destinaiton Port
pstClassifierEntry - > ucDestPortRangeLength = psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRangeLength / 4 ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Destination Port Range Length:0x%X " , pstClassifierEntry - > ucDestPortRangeLength ) ;
if ( MAX_PORT_RANGE > = psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRangeLength )
{
for ( ucLoopIndex = 0 ; ucLoopIndex < ( pstClassifierEntry - > ucDestPortRangeLength ) ; ucLoopIndex + + )
{
pstClassifierEntry - > usDestPortRangeLo [ ucLoopIndex ] =
* ( ( PUSHORT ) ( psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange + ucLoopIndex ) ) ;
pstClassifierEntry - > usDestPortRangeHi [ ucLoopIndex ] =
* ( ( PUSHORT ) ( psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange + 2 + ucLoopIndex ) ) ;
pstClassifierEntry - > usDestPortRangeLo [ ucLoopIndex ] = ntohs ( pstClassifierEntry - > usDestPortRangeLo [ ucLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Destination Port Range Lo:0x%X " , pstClassifierEntry - > usDestPortRangeLo [ ucLoopIndex ] ) ;
pstClassifierEntry - > usDestPortRangeHi [ ucLoopIndex ] = ntohs ( pstClassifierEntry - > usDestPortRangeHi [ ucLoopIndex ] ) ;
}
}
else
{
pstClassifierEntry - > ucDestPortRangeLength = 0 ;
}
//Source Port
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Source Port Range Length:0x%X " , psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRangeLength ) ;
if ( MAX_PORT_RANGE > =
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRangeLength )
{
pstClassifierEntry - > ucSrcPortRangeLength =
psfCSType - > cCPacketClassificationRule .
u8ProtocolSourcePortRangeLength / 4 ;
for ( ucLoopIndex = 0 ; ucLoopIndex <
( pstClassifierEntry - > ucSrcPortRangeLength ) ; ucLoopIndex + + )
{
pstClassifierEntry - > usSrcPortRangeLo [ ucLoopIndex ] =
* ( ( PUSHORT ) ( psfCSType - > cCPacketClassificationRule .
u8ProtocolSourcePortRange + ucLoopIndex ) ) ;
pstClassifierEntry - > usSrcPortRangeHi [ ucLoopIndex ] =
* ( ( PUSHORT ) ( psfCSType - > cCPacketClassificationRule .
u8ProtocolSourcePortRange + 2 + ucLoopIndex ) ) ;
pstClassifierEntry - > usSrcPortRangeLo [ ucLoopIndex ] =
ntohs ( pstClassifierEntry - > usSrcPortRangeLo [ ucLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Source Port Range Lo:0x%X " , pstClassifierEntry - > usSrcPortRangeLo [ ucLoopIndex ] ) ;
pstClassifierEntry - > usSrcPortRangeHi [ ucLoopIndex ] = ntohs ( pstClassifierEntry - > usSrcPortRangeHi [ ucLoopIndex ] ) ;
}
}
//Destination Ip Address and Mask
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Ip Destination Parameters : " ) ;
CopyIpAddrToClassifier ( pstClassifierEntry ,
psfCSType - > cCPacketClassificationRule . u8IPDestinationAddressLength ,
psfCSType - > cCPacketClassificationRule . u8IPDestinationAddress ,
( Adapter - > PackInfo [ uiSearchRuleIndex ] . ucIpVersion = = IPV6 ) ?
TRUE : FALSE , eDestIpAddress ) ;
//Source Ip Address and Mask
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Ip Source Parameters : " ) ;
CopyIpAddrToClassifier ( pstClassifierEntry ,
psfCSType - > cCPacketClassificationRule . u8IPMaskedSourceAddressLength ,
psfCSType - > cCPacketClassificationRule . u8IPMaskedSourceAddress ,
( Adapter - > PackInfo [ uiSearchRuleIndex ] . ucIpVersion = = IPV6 ) ? TRUE : FALSE ,
eSrcIpAddress ) ;
//TOS
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " TOS Length:0x%X " , psfCSType - > cCPacketClassificationRule . u8IPTypeOfServiceLength ) ;
if ( 3 = = psfCSType - > cCPacketClassificationRule . u8IPTypeOfServiceLength )
{
pstClassifierEntry - > ucIPTypeOfServiceLength =
psfCSType - > cCPacketClassificationRule . u8IPTypeOfServiceLength ;
pstClassifierEntry - > ucTosLow =
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 0 ] ;
pstClassifierEntry - > ucTosHigh =
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 1 ] ;
pstClassifierEntry - > ucTosMask =
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 2 ] ;
pstClassifierEntry - > bTOSValid = TRUE ;
}
if ( psfCSType - > cCPacketClassificationRule . u8Protocol = = 0 )
{
//we didnt get protocol field filled in by the BS
pstClassifierEntry - > ucProtocolLength = 0 ;
}
else
{
pstClassifierEntry - > ucProtocolLength = 1 ; // 1 valid protocol
}
pstClassifierEntry - > ucProtocol [ 0 ] =
psfCSType - > cCPacketClassificationRule . u8Protocol ;
pstClassifierEntry - > u8ClassifierRulePriority =
psfCSType - > cCPacketClassificationRule . u8ClassifierRulePriority ;
//store the classifier rule ID and set this classifier entry as valid
pstClassifierEntry - > ucDirection =
Adapter - > PackInfo [ uiSearchRuleIndex ] . ucDirection ;
pstClassifierEntry - > uiClassifierRuleIndex = ntohs ( psfCSType - >
cCPacketClassificationRule . u16PacketClassificationRuleIndex ) ;
pstClassifierEntry - > usVCID_Value =
Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value ;
pstClassifierEntry - > ulSFID =
Adapter - > PackInfo [ uiSearchRuleIndex ] . ulSFID ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Search Index %d Dir: %d, Index: %d, Vcid: %d \n " ,
uiSearchRuleIndex , pstClassifierEntry - > ucDirection ,
pstClassifierEntry - > uiClassifierRuleIndex ,
pstClassifierEntry - > usVCID_Value ) ;
if ( psfCSType - > cCPacketClassificationRule . u8AssociatedPHSI )
{
pstClassifierEntry - > u8AssociatedPHSI = psfCSType - > cCPacketClassificationRule . u8AssociatedPHSI ;
}
//Copy ETH CS Parameters
pstClassifierEntry - > ucEthCSSrcMACLen = ( psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddressLength ) ;
memcpy ( pstClassifierEntry - > au8EThCSSrcMAC , psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress , MAC_ADDRESS_SIZE ) ;
memcpy ( pstClassifierEntry - > au8EThCSSrcMACMask , psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress + MAC_ADDRESS_SIZE , MAC_ADDRESS_SIZE ) ;
pstClassifierEntry - > ucEthCSDestMACLen = ( psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddressLength ) ;
memcpy ( pstClassifierEntry - > au8EThCSDestMAC , psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress , MAC_ADDRESS_SIZE ) ;
memcpy ( pstClassifierEntry - > au8EThCSDestMACMask , psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress + MAC_ADDRESS_SIZE , MAC_ADDRESS_SIZE ) ;
pstClassifierEntry - > ucEtherTypeLen = ( psfCSType - > cCPacketClassificationRule . u8EthertypeLength ) ;
memcpy ( pstClassifierEntry - > au8EthCSEtherType , psfCSType - > cCPacketClassificationRule . u8Ethertype , NUM_ETHERTYPE_BYTES ) ;
memcpy ( pstClassifierEntry - > usUserPriority , & psfCSType - > cCPacketClassificationRule . u16UserPriority , 2 ) ;
pstClassifierEntry - > usVLANID = ntohs ( psfCSType - > cCPacketClassificationRule . u16VLANID ) ;
pstClassifierEntry - > usValidityBitMap = ntohs ( psfCSType - > cCPacketClassificationRule . u16ValidityBitMap ) ;
pstClassifierEntry - > bUsed = TRUE ;
}
}
/**
@ ingroup ctrl_pkt_functions
*/
static inline VOID DeleteClassifierRuleFromSF ( PMINI_ADAPTER Adapter , UINT uiSearchRuleIndex , UINT nClassifierIndex )
{
S_CLASSIFIER_RULE * pstClassifierEntry = NULL ;
B_UINT16 u16PacketClassificationRuleIndex ;
USHORT usVCID ;
//VOID *pvPhsContext = NULL;
//ULONG ulPhsStatus;
usVCID = Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value ;
if ( nClassifierIndex > MAX_CLASSIFIERS - 1 )
return ;
if ( usVCID = = 0 )
return ;
u16PacketClassificationRuleIndex = Adapter - > astClassifierTable [ nClassifierIndex ] . uiClassifierRuleIndex ;
pstClassifierEntry = & Adapter - > astClassifierTable [ nClassifierIndex ] ;
if ( pstClassifierEntry )
{
pstClassifierEntry - > bUsed = FALSE ;
pstClassifierEntry - > uiClassifierRuleIndex = 0 ;
memset ( pstClassifierEntry , 0 , sizeof ( S_CLASSIFIER_RULE ) ) ;
//Delete the PHS Rule for this classifier
PhsDeleteClassifierRule (
& Adapter - > stBCMPhsContext ,
usVCID ,
u16PacketClassificationRuleIndex ) ;
}
}
/**
@ ingroup ctrl_pkt_functions
*/
VOID DeleteAllClassifiersForSF ( PMINI_ADAPTER Adapter , UINT uiSearchRuleIndex )
{
S_CLASSIFIER_RULE * pstClassifierEntry = NULL ;
UINT nClassifierIndex ;
//B_UINT16 u16PacketClassificationRuleIndex;
USHORT ulVCID ;
//VOID *pvPhsContext = NULL;
//ULONG ulPhsStatus;
ulVCID = Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value ;
if ( ulVCID = = 0 )
return ;
for ( nClassifierIndex = 0 ; nClassifierIndex < MAX_CLASSIFIERS ; nClassifierIndex + + )
{
if ( Adapter - > astClassifierTable [ nClassifierIndex ] . usVCID_Value = = ulVCID )
{
pstClassifierEntry = & Adapter - > astClassifierTable [ nClassifierIndex ] ;
if ( pstClassifierEntry - > bUsed )
{
DeleteClassifierRuleFromSF ( Adapter , uiSearchRuleIndex , nClassifierIndex ) ;
}
}
}
//Delete All Phs Rules Associated with this SF
PhsDeleteSFRules (
& Adapter - > stBCMPhsContext ,
ulVCID ) ;
}
/**
This routinue copies the Connection Management
related data into the Adapter structure .
@ ingroup ctrl_pkt_functions
*/
static VOID CopyToAdapter ( register PMINI_ADAPTER Adapter , /**<Pointer to the Adapter structure*/
register pstServiceFlowParamSI psfLocalSet , /**<Pointer to the ServiceFlowParamSI structure*/
register UINT uiSearchRuleIndex , /**<Index of Queue, to which this data belongs*/
register UCHAR ucDsxType ,
stLocalSFAddIndicationAlt * pstAddIndication )
{
//UCHAR ucProtocolLength=0;
ULONG ulSFID ;
UINT nClassifierIndex = 0 ;
E_CLASSIFIER_ACTION eClassifierAction = eInvalidClassifierAction ;
B_UINT16 u16PacketClassificationRuleIndex = 0 ;
UINT nIndex = 0 ;
stConvergenceSLTypes * psfCSType = NULL ;
S_PHS_RULE sPhsRule ;
USHORT uVCID = Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value ;
UINT UGIValue = 0 ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bValid = TRUE ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Search Rule Index = %d \n " , uiSearchRuleIndex ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " %s: SFID= %x " , __FUNCTION__ , ntohl ( psfLocalSet - > u32SFID ) ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Updating Queue %d " , uiSearchRuleIndex ) ;
ulSFID = ntohl ( psfLocalSet - > u32SFID ) ;
//Store IP Version used
//Get The Version Of IP used (IPv6 or IPv4) from CSSpecification field of SF
Adapter - > PackInfo [ uiSearchRuleIndex ] . bIPCSSupport = 0 ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bEthCSSupport = 0 ;
/*Enable IP/ETh CS Support As Required*/
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " CopyToAdapter : u8CSSpecification : %X \n " , psfLocalSet - > u8CSSpecification ) ;
switch ( psfLocalSet - > u8CSSpecification )
{
case eCSPacketIPV4 :
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bIPCSSupport = IPV4_CS ;
break ;
}
case eCSPacketIPV6 :
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bIPCSSupport = IPV6_CS ;
break ;
}
case eCS802_3PacketEthernet :
case eCS802_1QPacketVLAN :
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bEthCSSupport = ETH_CS_802_3 ;
break ;
}
case eCSPacketIPV4Over802_1QVLAN :
case eCSPacketIPV4Over802_3Ethernet :
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bIPCSSupport = IPV4_CS ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bEthCSSupport = ETH_CS_802_3 ;
break ;
}
case eCSPacketIPV6Over802_1QVLAN :
case eCSPacketIPV6Over802_3Ethernet :
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bIPCSSupport = IPV6_CS ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bEthCSSupport = ETH_CS_802_3 ;
break ;
}
default :
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Error in value of CS Classification.. setting default to IP CS \n " ) ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bIPCSSupport = IPV4_CS ;
break ;
}
}
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 " ,
uiSearchRuleIndex ,
Adapter - > PackInfo [ uiSearchRuleIndex ] . bEthCSSupport ,
Adapter - > PackInfo [ uiSearchRuleIndex ] . bIPCSSupport ) ;
//Store IP Version used
//Get The Version Of IP used (IPv6 or IPv4) from CSSpecification field of SF
if ( Adapter - > PackInfo [ uiSearchRuleIndex ] . bIPCSSupport = = IPV6_CS )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . ucIpVersion = IPV6 ;
}
else
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . ucIpVersion = IPV4 ;
}
/* To ensure that the ETH CS code doesn't gets executed if the BS doesn't supports ETH CS */
if ( ! Adapter - > bETHCSEnabled )
Adapter - > PackInfo [ uiSearchRuleIndex ] . bEthCSSupport = 0 ;
if ( psfLocalSet - > u8ServiceClassNameLength > 0 & &
psfLocalSet - > u8ServiceClassNameLength < 32 )
{
memcpy ( Adapter - > PackInfo [ uiSearchRuleIndex ] . ucServiceClassName ,
psfLocalSet - > u8ServiceClassName ,
psfLocalSet - > u8ServiceClassNameLength ) ;
}
Adapter - > PackInfo [ uiSearchRuleIndex ] . u8QueueType =
psfLocalSet - > u8ServiceFlowSchedulingType ;
if ( Adapter - > PackInfo [ uiSearchRuleIndex ] . u8QueueType = = BE & &
Adapter - > PackInfo [ uiSearchRuleIndex ] . ucDirection )
{
Adapter - > usBestEffortQueueIndex = uiSearchRuleIndex ;
}
Adapter - > PackInfo [ uiSearchRuleIndex ] . ulSFID = ntohl ( psfLocalSet - > u32SFID ) ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . u8TrafficPriority = psfLocalSet - > u8TrafficPriority ;
//copy all the classifier in the Service Flow param structure
for ( nIndex = 0 ; nIndex < psfLocalSet - > u8TotalClassifiers ; nIndex + + )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Classifier index =%d " , nIndex ) ;
psfCSType = & psfLocalSet - > cConvergenceSLTypes [ nIndex ] ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Classifier index =%d " , nIndex ) ;
if ( psfCSType - > cCPacketClassificationRule . u8ClassifierRulePriority )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bClassifierPriority = TRUE ;
}
if ( psfCSType - > cCPacketClassificationRule . u8ClassifierRulePriority )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bClassifierPriority = TRUE ;
}
if ( ucDsxType = = DSA_ACK )
{
eClassifierAction = eAddClassifier ;
}
else if ( ucDsxType = = DSC_ACK )
{
switch ( psfCSType - > u8ClassfierDSCAction )
{
case 0 : //DSC Add Classifier
{
eClassifierAction = eAddClassifier ;
}
break ;
case 1 : //DSC Replace Classifier
{
eClassifierAction = eReplaceClassifier ;
}
break ;
case 2 : //DSC Delete Classifier
{
eClassifierAction = eDeleteClassifier ;
}
break ;
default :
{
eClassifierAction = eInvalidClassifierAction ;
}
}
}
u16PacketClassificationRuleIndex = ntohs ( psfCSType - > cCPacketClassificationRule . u16PacketClassificationRuleIndex ) ;
switch ( eClassifierAction )
{
case eAddClassifier :
{
//Get a Free Classifier Index From Classifier table for this SF to add the Classifier
//Contained in this message
nClassifierIndex = SearchClsid ( Adapter , ulSFID , u16PacketClassificationRuleIndex ) ;
if ( nClassifierIndex > MAX_CLASSIFIERS )
{
nClassifierIndex = SearchFreeClsid ( Adapter ) ;
if ( nClassifierIndex > MAX_CLASSIFIERS )
{
//Failed To get a free Entry
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Error Failed To get a free Classifier Entry " ) ;
break ;
}
//Copy the Classifier Rule for this service flow into our Classifier table maintained per SF.
CopyClassifierRuleToSF ( Adapter , psfCSType , uiSearchRuleIndex , nClassifierIndex ) ;
}
else
{
//This Classifier Already Exists and it is invalid to Add Classifier with existing PCRI
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " CopyToAdapter : Error The Specified Classifier Already Exists \
and attempted To Add Classifier with Same PCRI : 0 x % x \ n " , u16PacketClassificationRuleIndex);
}
}
break ;
case eReplaceClassifier :
{
//Get the Classifier Index From Classifier table for this SF and replace existing Classifier
//with the new classifier Contained in this message
nClassifierIndex = SearchClsid ( Adapter , ulSFID , u16PacketClassificationRuleIndex ) ;
if ( nClassifierIndex > MAX_CLASSIFIERS )
{
//Failed To search the classifier
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Error Search for Classifier To be replaced failed " ) ;
break ;
}
//Copy the Classifier Rule for this service flow into our Classifier table maintained per SF.
CopyClassifierRuleToSF ( Adapter , psfCSType , uiSearchRuleIndex , nClassifierIndex ) ;
}
break ;
case eDeleteClassifier :
{
//Get the Classifier Index From Classifier table for this SF and replace existing Classifier
//with the new classifier Contained in this message
nClassifierIndex = SearchClsid ( Adapter , ulSFID , u16PacketClassificationRuleIndex ) ;
if ( nClassifierIndex > MAX_CLASSIFIERS )
{
//Failed To search the classifier
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Error Search for Classifier To be deleted failed " ) ;
break ;
}
//Delete This classifier
DeleteClassifierRuleFromSF ( Adapter , uiSearchRuleIndex , nClassifierIndex ) ;
}
break ;
default :
{
//Invalid Action for classifier
break ;
}
}
}
//Repeat parsing Classification Entries to process PHS Rules
for ( nIndex = 0 ; nIndex < psfLocalSet - > u8TotalClassifiers ; nIndex + + )
{
psfCSType = & psfLocalSet - > cConvergenceSLTypes [ nIndex ] ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " psfCSType->u8PhsDSCAction : 0x%x \n " ,
psfCSType - > u8PhsDSCAction ) ;
switch ( psfCSType - > u8PhsDSCAction )
{
case eDeleteAllPHSRules :
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Deleting All PHS Rules For VCID: 0x%X \n " , uVCID ) ;
//Delete All the PHS rules for this Service flow
PhsDeleteSFRules (
& Adapter - > stBCMPhsContext ,
uVCID ) ;
break ;
}
case eDeletePHSRule :
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " PHS DSC Action = Delete PHS Rule \n " ) ;
if ( psfCSType - > cPhsRule . u8PHSI )
{
PhsDeletePHSRule (
& Adapter - > stBCMPhsContext ,
uVCID ,
psfCSType - > cCPacketClassificationRule . u8AssociatedPHSI ) ;
}
else
{
//BCM_DEBUG_PRINT(CONN_MSG,("Error CPHSRule.PHSI is ZERO \n"));
}
break ;
}
default :
{
if ( ucDsxType = = DSC_ACK )
{
//BCM_DEBUG_PRINT(CONN_MSG,("Invalid PHS DSC Action For DSC \n",psfCSType->cPhsRule.u8PHSI));
break ; //FOr DSC ACK Case PHS DSC Action must be in valid set
}
}
//Proceed To Add PHS rule for DSA_ACK case even if PHS DSC action is unspecified
//No Break Here . Intentionally!
case eAddPHSRule :
case eSetPHSRule :
{
if ( psfCSType - > cPhsRule . u8PHSI )
{
//Apply This PHS Rule to all classifiers whose Associated PHSI Match
unsigned int uiClassifierIndex = 0 ;
if ( pstAddIndication - > u8Direction = = UPLINK_DIR )
{
for ( uiClassifierIndex = 0 ; uiClassifierIndex < MAX_CLASSIFIERS ; uiClassifierIndex + + )
{
if ( ( Adapter - > astClassifierTable [ uiClassifierIndex ] . bUsed ) & &
( Adapter - > astClassifierTable [ uiClassifierIndex ] . ulSFID = = Adapter - > PackInfo [ uiSearchRuleIndex ] . ulSFID ) & &
( Adapter - > astClassifierTable [ uiClassifierIndex ] . u8AssociatedPHSI = = psfCSType - > cPhsRule . u8PHSI ) )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Adding PHS Rule For Classifier : 0x%x cPhsRule.u8PHSI : 0x%x \n " ,
Adapter - > astClassifierTable [ uiClassifierIndex ] . uiClassifierRuleIndex ,
psfCSType - > cPhsRule . u8PHSI ) ;
//Update The PHS Rule for this classifier as Associated PHSI id defined
//Copy the PHS Rule
sPhsRule . u8PHSI = psfCSType - > cPhsRule . u8PHSI ;
sPhsRule . u8PHSFLength = psfCSType - > cPhsRule . u8PHSFLength ;
sPhsRule . u8PHSMLength = psfCSType - > cPhsRule . u8PHSMLength ;
sPhsRule . u8PHSS = psfCSType - > cPhsRule . u8PHSS ;
sPhsRule . u8PHSV = psfCSType - > cPhsRule . u8PHSV ;
memcpy ( sPhsRule . u8PHSF , psfCSType - > cPhsRule . u8PHSF , MAX_PHS_LENGTHS ) ;
memcpy ( sPhsRule . u8PHSM , psfCSType - > cPhsRule . u8PHSM , MAX_PHS_LENGTHS ) ;
sPhsRule . u8RefCnt = 0 ;
sPhsRule . bUnclassifiedPHSRule = FALSE ;
sPhsRule . PHSModifiedBytes = 0 ;
sPhsRule . PHSModifiedNumPackets = 0 ;
sPhsRule . PHSErrorNumPackets = 0 ;
//bPHSRuleAssociated = TRUE;
//Store The PHS Rule for this classifier
PhsUpdateClassifierRule (
& Adapter - > stBCMPhsContext ,
uVCID ,
Adapter - > astClassifierTable [ uiClassifierIndex ] . uiClassifierRuleIndex ,
& sPhsRule ,
Adapter - > astClassifierTable [ uiClassifierIndex ] . u8AssociatedPHSI ) ;
//Update PHS Rule For the Classifier
if ( sPhsRule . u8PHSI )
{
Adapter - > astClassifierTable [ uiClassifierIndex ] . u32PHSRuleID = sPhsRule . u8PHSI ;
memcpy ( & Adapter - > astClassifierTable [ uiClassifierIndex ] . sPhsRule , & sPhsRule , sizeof ( S_PHS_RULE ) ) ;
}
}
}
}
else
{
//Error PHS Rule specified in signaling could not be applied to any classifier
//Copy the PHS Rule
sPhsRule . u8PHSI = psfCSType - > cPhsRule . u8PHSI ;
sPhsRule . u8PHSFLength = psfCSType - > cPhsRule . u8PHSFLength ;
sPhsRule . u8PHSMLength = psfCSType - > cPhsRule . u8PHSMLength ;
sPhsRule . u8PHSS = psfCSType - > cPhsRule . u8PHSS ;
sPhsRule . u8PHSV = psfCSType - > cPhsRule . u8PHSV ;
memcpy ( sPhsRule . u8PHSF , psfCSType - > cPhsRule . u8PHSF , MAX_PHS_LENGTHS ) ;
memcpy ( sPhsRule . u8PHSM , psfCSType - > cPhsRule . u8PHSM , MAX_PHS_LENGTHS ) ;
sPhsRule . u8RefCnt = 0 ;
sPhsRule . bUnclassifiedPHSRule = TRUE ;
sPhsRule . PHSModifiedBytes = 0 ;
sPhsRule . PHSModifiedNumPackets = 0 ;
sPhsRule . PHSErrorNumPackets = 0 ;
//Store The PHS Rule for this classifier
/*
Passing the argument u8PHSI instead of clsid . Because for DL with no classifier rule ,
clsid will be zero hence we cant have multiple PHS rules for the same SF .
To support multiple PHS rule , passing u8PHSI .
*/
PhsUpdateClassifierRule (
& Adapter - > stBCMPhsContext ,
uVCID ,
sPhsRule . u8PHSI ,
& sPhsRule ,
sPhsRule . u8PHSI ) ;
}
}
}
break ;
}
}
if ( psfLocalSet - > u32MaxSustainedTrafficRate = = 0 )
{
//No Rate Limit . Set Max Sustained Traffic Rate to Maximum
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxAllowedRate =
WIMAX_MAX_ALLOWED_RATE ;
}
else if ( ntohl ( psfLocalSet - > u32MaxSustainedTrafficRate ) >
WIMAX_MAX_ALLOWED_RATE )
{
//Too large Allowed Rate specified. Limiting to Wi Max Allowed rate
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxAllowedRate =
WIMAX_MAX_ALLOWED_RATE ;
}
else
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxAllowedRate =
ntohl ( psfLocalSet - > u32MaxSustainedTrafficRate ) ;
}
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxLatency = ntohl ( psfLocalSet - > u32MaximumLatency ) ;
if ( Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxLatency = = 0 ) /* 0 should be treated as infinite */
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxLatency = MAX_LATENCY_ALLOWED ;
if ( ( Adapter - > PackInfo [ uiSearchRuleIndex ] . u8QueueType = = ERTPS | |
Adapter - > PackInfo [ uiSearchRuleIndex ] . u8QueueType = = UGS ) )
UGIValue = ntohs ( psfLocalSet - > u16UnsolicitedGrantInterval ) ;
if ( UGIValue = = 0 )
UGIValue = DEFAULT_UG_INTERVAL ;
/*
For UGI based connections . . .
DEFAULT_UGI_FACTOR * UGIInterval worth of data is the max token count at host . . .
The extra amount of token is to ensure that a large amount of jitter won ' t have loss in throughput . . .
In case of non - UGI based connection , 200 frames worth of data is the max token count at host . . .
*/
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxBucketSize =
( DEFAULT_UGI_FACTOR * Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxAllowedRate * UGIValue ) / 1000 ;
if ( Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxBucketSize < WIMAX_MAX_MTU * 8 )
{
UINT UGIFactor = 0 ;
/* Special Handling to ensure the biggest size of packet can go out from host to FW as follows:
1. Any packet from Host to FW can go out in different packet size .
2. So in case the Bucket count is smaller than MTU , the packets of size ( Size > TokenCount ) , will get dropped .
3. We can allow packets of MaxSize from Host - > FW that can go out from FW in multiple SDUs by fragmentation at Wimax Layer
*/
UGIFactor = ( Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxLatency / UGIValue + 1 ) ;
if ( UGIFactor > DEFAULT_UGI_FACTOR )
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxBucketSize =
( UGIFactor * Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxAllowedRate * UGIValue ) / 1000 ;
if ( Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxBucketSize > WIMAX_MAX_MTU * 8 )
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxBucketSize = WIMAX_MAX_MTU * 8 ;
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " LAT: %d, UGI: %d \n " , Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxLatency , UGIValue ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " uiMaxAllowedRate: 0x%x, u32MaxSustainedTrafficRate: 0x%x ,uiMaxBucketSize: 0x%x " ,
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxAllowedRate ,
ntohl ( psfLocalSet - > u32MaxSustainedTrafficRate ) ,
Adapter - > PackInfo [ uiSearchRuleIndex ] . uiMaxBucketSize ) ;
//copy the extended SF Parameters to Support MIBS
CopyMIBSExtendedSFParameters ( Adapter , psfLocalSet , uiSearchRuleIndex ) ;
//store header suppression enabled flag per SF
Adapter - > PackInfo [ uiSearchRuleIndex ] . bHeaderSuppressionEnabled =
! ( psfLocalSet - > u8RequesttransmissionPolicy &
MASK_DISABLE_HEADER_SUPPRESSION ) ;
if ( Adapter - > PackInfo [ uiSearchRuleIndex ] . pstSFIndication )
{
2010-11-01 13:35:21 +00:00
kfree ( Adapter - > PackInfo [ uiSearchRuleIndex ] . pstSFIndication ) ;
2010-09-08 21:46:36 +00:00
Adapter - > PackInfo [ uiSearchRuleIndex ] . pstSFIndication = NULL ;
}
Adapter - > PackInfo [ uiSearchRuleIndex ] . pstSFIndication = pstAddIndication ;
//Re Sort the SF list in PackInfo according to Traffic Priority
SortPackInfo ( Adapter ) ;
/* Re Sort the Classifier Rules table and re - arrange
according to Classifier Rule Priority */
SortClassifiers ( Adapter ) ;
DumpPhsRules ( & Adapter - > stBCMPhsContext ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " %s <===== " , __FUNCTION__ ) ;
}
/***********************************************************************
* Function - DumpCmControlPacket
*
* Description - This routinue Dumps the Contents of the AddIndication
* Structure in the Connection Management Control Packet
*
* Parameter - pvBuffer : Pointer to the buffer containing the
* AddIndication data .
*
* Returns - None
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2010-09-30 08:24:12 +00:00
static VOID DumpCmControlPacket ( PVOID pvBuffer )
2010-09-08 21:46:36 +00:00
{
UINT uiLoopIndex ;
UINT nIndex ;
stLocalSFAddIndicationAlt * pstAddIndication ;
UINT nCurClassifierCnt ;
PMINI_ADAPTER Adapter = GET_BCM_ADAPTER ( gblpnetdev ) ;
pstAddIndication = ( stLocalSFAddIndicationAlt * ) pvBuffer ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " ======> " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8Type : 0x%X " , pstAddIndication - > u8Type ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8Direction : 0x%X " , pstAddIndication - > u8Direction ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16TID: 0x%X " , ntohs ( pstAddIndication - > u16TID ) ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16CID : 0x%X " , ntohs ( pstAddIndication - > u16CID ) ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16VCID : 0x%X " , ntohs ( pstAddIndication - > u16VCID ) ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " AuthorizedSet---> " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32SFID : 0x%X " , htonl ( pstAddIndication - > sfAuthorizedSet . u32SFID ) ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16CID : 0x%X " , htons ( pstAddIndication - > sfAuthorizedSet . u16CID ) ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ServiceClassNameLength : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8ServiceClassNameLength ) ;
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 " ,
pstAddIndication - > sfAuthorizedSet . u8ServiceClassName [ 0 ] ,
pstAddIndication - > sfAuthorizedSet . u8ServiceClassName [ 1 ] ,
pstAddIndication - > sfAuthorizedSet . u8ServiceClassName [ 2 ] ,
pstAddIndication - > sfAuthorizedSet . u8ServiceClassName [ 3 ] ,
pstAddIndication - > sfAuthorizedSet . u8ServiceClassName [ 4 ] ,
pstAddIndication - > sfAuthorizedSet . u8ServiceClassName [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8MBSService : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8MBSService ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8QosParamSet : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8QosParamSet ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TrafficPriority : 0x%X, %p " ,
pstAddIndication - > sfAuthorizedSet . u8TrafficPriority , & pstAddIndication - > sfAuthorizedSet . u8TrafficPriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MaxSustainedTrafficRate : 0x%X 0x%p " ,
pstAddIndication - > sfAuthorizedSet . u32MaxSustainedTrafficRate ,
& pstAddIndication - > sfAuthorizedSet . u32MaxSustainedTrafficRate ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MaxTrafficBurst : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u32MaxTrafficBurst ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MinReservedTrafficRate : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u32MinReservedTrafficRate ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificQoSParamLength : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8VendorSpecificQoSParamLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificQoSParam : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8VendorSpecificQoSParam [ 0 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ServiceFlowSchedulingType : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8ServiceFlowSchedulingType ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32ToleratedJitter : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u32ToleratedJitter ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MaximumLatency : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u32MaximumLatency ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8FixedLengthVSVariableLengthSDUIndicator: 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8FixedLengthVSVariableLengthSDUIndicator ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8SDUSize : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8SDUSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16TargetSAID : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16TargetSAID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ARQEnable : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8ARQEnable ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQWindowSize : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16ARQWindowSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRetryTxTimeOut : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16ARQRetryTxTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRetryRxTimeOut : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16ARQRetryRxTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQBlockLifeTime : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16ARQBlockLifeTime ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQSyncLossTimeOut : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16ARQSyncLossTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ARQDeliverInOrder : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8ARQDeliverInOrder ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRxPurgeTimeOut : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16ARQRxPurgeTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQBlockSize : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16ARQBlockSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8CSSpecification : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8CSSpecification ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TypeOfDataDeliveryService : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8TypeOfDataDeliveryService ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16SDUInterArrivalTime : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16SDUInterArrivalTime ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16TimeBase : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16TimeBase ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8PagingPreference : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8PagingPreference ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16UnsolicitedPollingInterval : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u16UnsolicitedPollingInterval ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " sfAuthorizedSet.u8HARQChannelMapping %x %x %x " ,
* ( unsigned int * ) pstAddIndication - > sfAuthorizedSet . u8HARQChannelMapping ,
* ( unsigned int * ) & pstAddIndication - > sfAuthorizedSet . u8HARQChannelMapping [ 4 ] ,
* ( USHORT * ) & pstAddIndication - > sfAuthorizedSet . u8HARQChannelMapping [ 8 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TrafficIndicationPreference : 0x%X " ,
pstAddIndication - > sfAuthorizedSet . u8TrafficIndicationPreference ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " Total Classifiers Recieved : 0x%X " , pstAddIndication - > sfAuthorizedSet . u8TotalClassifiers ) ;
nCurClassifierCnt = pstAddIndication - > sfAuthorizedSet . u8TotalClassifiers ;
if ( nCurClassifierCnt > MAX_CLASSIFIERS_IN_SF )
{
nCurClassifierCnt = MAX_CLASSIFIERS_IN_SF ;
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " pstAddIndication->sfAuthorizedSet.bValid %d " , pstAddIndication - > sfAuthorizedSet . bValid ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " pstAddIndication->sfAuthorizedSet.u16MacOverhead %x " , pstAddIndication - > sfAuthorizedSet . u16MacOverhead ) ;
if ( ! pstAddIndication - > sfAuthorizedSet . bValid )
pstAddIndication - > sfAuthorizedSet . bValid = 1 ;
for ( nIndex = 0 ; nIndex < nCurClassifierCnt ; nIndex + + )
{
stConvergenceSLTypes * psfCSType = NULL ;
psfCSType = & pstAddIndication - > sfAuthorizedSet . cConvergenceSLTypes [ nIndex ] ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " psfCSType = %p " , psfCSType ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " CCPacketClassificationRuleSI====> " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ClassifierRulePriority :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8ClassifierRulePriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPTypeOfServiceLength :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfServiceLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPTypeOfService[3] :0x%X ,0x%X ,0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 2 ] ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 1 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8Protocol : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8Protocol ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPMaskedSourceAddressLength :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPMaskedSourceAddressLength ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 32 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPMaskedSourceAddress[32] : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8IPMaskedSourceAddress [ uiLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPDestinationAddressLength : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPDestinationAddressLength ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 32 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPDestinationAddress[32] : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8IPDestinationAddress [ uiLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolSourcePortRangeLength:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRangeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolSourcePortRange[4]: 0x%02X ,0x%02X ,0x%02X ,0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 3 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolDestPortRangeLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRangeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolDestPortRange[4]: 0x%02X ,0x%02X ,0x%02X ,0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 3 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetDestMacAddressLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddressLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetDestMacAddress[6] : 0x %02X %02X %02X %02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetSourceMACAddressLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddressLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetSourceMACAddress[6] : 0x %02X %02X %02X %02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthertypeLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8EthertypeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8Ethertype[3] : 0x%02X ,0x%02X ,0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 2 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16UserPriority : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u16UserPriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16VLANID : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u16VLANID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8AssociatedPHSI : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8AssociatedPHSI ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16PacketClassificationRuleIndex : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u16PacketClassificationRuleIndex ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificClassifierParamLength : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u8VendorSpecificClassifierParamLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificClassifierParam[1] : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u8VendorSpecificClassifierParam [ 0 ] ) ;
# ifdef VERSION_D5
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPv6FlowLableLength :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLableLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPv6FlowLable[6] : 0x %02X %02X %02X %02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 5 ] ) ;
# endif
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " bValid : 0x%02X " , pstAddIndication - > sfAuthorizedSet . bValid ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " AdmittedSet---> " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32SFID : 0x%X " , pstAddIndication - > sfAdmittedSet . u32SFID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16CID : 0x%X " , pstAddIndication - > sfAdmittedSet . u16CID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ServiceClassNameLength : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u8ServiceClassNameLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ServiceClassName : 0x %02X %02X %02X %02X %02X %02X " ,
pstAddIndication - > sfAdmittedSet . u8ServiceClassName [ 0 ] ,
pstAddIndication - > sfAdmittedSet . u8ServiceClassName [ 1 ] ,
pstAddIndication - > sfAdmittedSet . u8ServiceClassName [ 2 ] ,
pstAddIndication - > sfAdmittedSet . u8ServiceClassName [ 3 ] ,
pstAddIndication - > sfAdmittedSet . u8ServiceClassName [ 4 ] ,
pstAddIndication - > sfAdmittedSet . u8ServiceClassName [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8MBSService : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8MBSService ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8QosParamSet : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8QosParamSet ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TrafficPriority : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8TrafficPriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MaxTrafficBurst : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u32MaxTrafficBurst ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MinReservedTrafficRate : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u32MinReservedTrafficRate ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificQoSParamLength : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8VendorSpecificQoSParamLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificQoSParam : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8VendorSpecificQoSParam [ 0 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ServiceFlowSchedulingType : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8ServiceFlowSchedulingType ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32ToleratedJitter : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u32ToleratedJitter ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MaximumLatency : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u32MaximumLatency ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8FixedLengthVSVariableLengthSDUIndicator: 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8FixedLengthVSVariableLengthSDUIndicator ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8SDUSize : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8SDUSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16TargetSAID : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u16TargetSAID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ARQEnable : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8ARQEnable ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQWindowSize : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16ARQWindowSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRetryTxTimeOut : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16ARQRetryTxTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRetryRxTimeOut : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16ARQRetryRxTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQBlockLifeTime : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16ARQBlockLifeTime ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQSyncLossTimeOut : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16ARQSyncLossTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ARQDeliverInOrder : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8ARQDeliverInOrder ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRxPurgeTimeOut : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16ARQRxPurgeTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQBlockSize : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16ARQBlockSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8CSSpecification : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8CSSpecification ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TypeOfDataDeliveryService : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8TypeOfDataDeliveryService ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16SDUInterArrivalTime : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16SDUInterArrivalTime ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16TimeBase : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u16TimeBase ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8PagingPreference : 0x%X " ,
pstAddIndication - > sfAdmittedSet . u8PagingPreference ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TrafficIndicationPreference : 0x%02X " ,
pstAddIndication - > sfAdmittedSet . u8TrafficIndicationPreference ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " Total Classifiers Recieved : 0x%X " , pstAddIndication - > sfAdmittedSet . u8TotalClassifiers ) ;
nCurClassifierCnt = pstAddIndication - > sfAdmittedSet . u8TotalClassifiers ;
if ( nCurClassifierCnt > MAX_CLASSIFIERS_IN_SF )
{
nCurClassifierCnt = MAX_CLASSIFIERS_IN_SF ;
}
for ( nIndex = 0 ; nIndex < nCurClassifierCnt ; nIndex + + )
{
stConvergenceSLTypes * psfCSType = NULL ;
psfCSType = & pstAddIndication - > sfAdmittedSet . cConvergenceSLTypes [ nIndex ] ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " CCPacketClassificationRuleSI====> " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ClassifierRulePriority :0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8ClassifierRulePriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPTypeOfServiceLength :0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfServiceLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPTypeOfService[3] :0x%02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 2 ] ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 1 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8Protocol: 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8Protocol ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPMaskedSourceAddressLength :0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8IPMaskedSourceAddressLength ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 32 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPMaskedSourceAddress[32] : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8IPMaskedSourceAddress [ uiLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPDestinationAddressLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8IPDestinationAddressLength ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 32 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPDestinationAddress[32] : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8IPDestinationAddress [ uiLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolSourcePortRangeLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRangeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolSourcePortRange[4] : 0x %02X %02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 3 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolDestPortRangeLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRangeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolDestPortRange[4] : 0x %02X %02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 3 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetDestMacAddressLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddressLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetDestMacAddress[6] : 0x %02X %02X %02X %02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetSourceMACAddressLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddressLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetSourceMACAddress[6] : 0x %02X %02X %02X %02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthertypeLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8EthertypeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8Ethertype[3] : 0x%02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 2 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16UserPriority : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u16UserPriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16VLANID : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u16VLANID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8AssociatedPHSI : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8AssociatedPHSI ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16PacketClassificationRuleIndex : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u16PacketClassificationRuleIndex ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificClassifierParamLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8VendorSpecificClassifierParamLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificClassifierParam[1] : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8VendorSpecificClassifierParam [ 0 ] ) ;
# ifdef VERSION_D5
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPv6FlowLableLength : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLableLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPv6FlowLable[6] : 0x %02X %02X %02X %02X %02X %02X " ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 5 ] ) ;
# endif
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " bValid : 0x%X " , pstAddIndication - > sfAdmittedSet . bValid ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " ActiveSet---> " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32SFID : 0x%X " , pstAddIndication - > sfActiveSet . u32SFID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16CID : 0x%X " , pstAddIndication - > sfActiveSet . u16CID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ServiceClassNameLength : 0x%X " ,
pstAddIndication - > sfActiveSet . u8ServiceClassNameLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ServiceClassName : 0x %02X %02X %02X %02X %02X %02X " ,
pstAddIndication - > sfActiveSet . u8ServiceClassName [ 0 ] ,
pstAddIndication - > sfActiveSet . u8ServiceClassName [ 1 ] ,
pstAddIndication - > sfActiveSet . u8ServiceClassName [ 2 ] ,
pstAddIndication - > sfActiveSet . u8ServiceClassName [ 3 ] ,
pstAddIndication - > sfActiveSet . u8ServiceClassName [ 4 ] ,
pstAddIndication - > sfActiveSet . u8ServiceClassName [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8MBSService : 0x%02X " ,
pstAddIndication - > sfActiveSet . u8MBSService ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8QosParamSet : 0x%02X " ,
pstAddIndication - > sfActiveSet . u8QosParamSet ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TrafficPriority : 0x%02X " ,
pstAddIndication - > sfActiveSet . u8TrafficPriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MaxTrafficBurst : 0x%X " ,
pstAddIndication - > sfActiveSet . u32MaxTrafficBurst ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MinReservedTrafficRate : 0x%X " ,
pstAddIndication - > sfActiveSet . u32MinReservedTrafficRate ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificQoSParamLength : 0x%02X " ,
pstAddIndication - > sfActiveSet . u8VendorSpecificQoSParamLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificQoSParam : 0x%02X " ,
pstAddIndication - > sfActiveSet . u8VendorSpecificQoSParam [ 0 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ServiceFlowSchedulingType : 0x%02X " ,
pstAddIndication - > sfActiveSet . u8ServiceFlowSchedulingType ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32ToleratedJitter : 0x%X " ,
pstAddIndication - > sfActiveSet . u32ToleratedJitter ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u32MaximumLatency : 0x%X " ,
pstAddIndication - > sfActiveSet . u32MaximumLatency ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8FixedLengthVSVariableLengthSDUIndicator: 0x%02X " ,
pstAddIndication - > sfActiveSet . u8FixedLengthVSVariableLengthSDUIndicator ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8SDUSize : 0x%X " ,
pstAddIndication - > sfActiveSet . u8SDUSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16TargetSAID : 0x%X " ,
pstAddIndication - > sfActiveSet . u16TargetSAID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ARQEnable : 0x%X " ,
pstAddIndication - > sfActiveSet . u8ARQEnable ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQWindowSize : 0x%X " ,
pstAddIndication - > sfActiveSet . u16ARQWindowSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRetryTxTimeOut : 0x%X " ,
pstAddIndication - > sfActiveSet . u16ARQRetryTxTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRetryRxTimeOut : 0x%X " ,
pstAddIndication - > sfActiveSet . u16ARQRetryRxTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQBlockLifeTime : 0x%X " ,
pstAddIndication - > sfActiveSet . u16ARQBlockLifeTime ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQSyncLossTimeOut : 0x%X " ,
pstAddIndication - > sfActiveSet . u16ARQSyncLossTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ARQDeliverInOrder : 0x%X " ,
pstAddIndication - > sfActiveSet . u8ARQDeliverInOrder ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQRxPurgeTimeOut : 0x%X " ,
pstAddIndication - > sfActiveSet . u16ARQRxPurgeTimeOut ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16ARQBlockSize : 0x%X " ,
pstAddIndication - > sfActiveSet . u16ARQBlockSize ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8CSSpecification : 0x%X " ,
pstAddIndication - > sfActiveSet . u8CSSpecification ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TypeOfDataDeliveryService : 0x%X " ,
pstAddIndication - > sfActiveSet . u8TypeOfDataDeliveryService ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16SDUInterArrivalTime : 0x%X " ,
pstAddIndication - > sfActiveSet . u16SDUInterArrivalTime ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16TimeBase : 0x%X " ,
pstAddIndication - > sfActiveSet . u16TimeBase ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8PagingPreference : 0x%X " ,
pstAddIndication - > sfActiveSet . u8PagingPreference ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8TrafficIndicationPreference : 0x%X " ,
pstAddIndication - > sfActiveSet . u8TrafficIndicationPreference ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " Total Classifiers Recieved : 0x%X " , pstAddIndication - > sfActiveSet . u8TotalClassifiers ) ;
nCurClassifierCnt = pstAddIndication - > sfActiveSet . u8TotalClassifiers ;
if ( nCurClassifierCnt > MAX_CLASSIFIERS_IN_SF )
{
nCurClassifierCnt = MAX_CLASSIFIERS_IN_SF ;
}
for ( nIndex = 0 ; nIndex < nCurClassifierCnt ; nIndex + + )
{
stConvergenceSLTypes * psfCSType = NULL ;
psfCSType = & pstAddIndication - > sfActiveSet . cConvergenceSLTypes [ nIndex ] ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " CCPacketClassificationRuleSI====> " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ClassifierRulePriority :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8ClassifierRulePriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPTypeOfServiceLength :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfServiceLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPTypeOfService[3] :0x%X ,0x%X ,0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8IPTypeOfService [ 2 ] ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 1 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8Protocol : 0x%X " ,
psfCSType - > cCPacketClassificationRule . u8Protocol ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPMaskedSourceAddressLength :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPMaskedSourceAddressLength ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 32 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPMaskedSourceAddress[32]:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPMaskedSourceAddress [ uiLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPDestinationAddressLength : 0x%02X " ,
psfCSType - > cCPacketClassificationRule . u8IPDestinationAddressLength ) ;
for ( uiLoopIndex = 0 ; uiLoopIndex < 32 ; uiLoopIndex + + )
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPDestinationAddress[32]:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPDestinationAddress [ uiLoopIndex ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolSourcePortRangeLength:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRangeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolSourcePortRange[4]:0x%X ,0x%X ,0x%X ,0x%X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolSourcePortRange [ 3 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolDestPortRangeLength:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRangeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8ProtocolDestPortRange[4]:0x%X ,0x%X ,0x%X ,0x%X " ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8ProtocolDestPortRange [ 3 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetDestMacAddressLength:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddressLength ) ;
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 " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddress [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthernetSourceMACAddressLength:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8EthernetDestMacAddressLength ) ;
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 " ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8EthernetSourceMACAddress [ 5 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8EthertypeLength :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8EthertypeLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8Ethertype[3] :0x%X ,0x%X ,0x%X " ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8Ethertype [ 2 ] ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16UserPriority :0x%X " ,
psfCSType - > cCPacketClassificationRule . u16UserPriority ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16VLANID :0x%X " ,
psfCSType - > cCPacketClassificationRule . u16VLANID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8AssociatedPHSI :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8AssociatedPHSI ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u16PacketClassificationRuleIndex:0x%X " ,
psfCSType - > cCPacketClassificationRule . u16PacketClassificationRuleIndex ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificClassifierParamLength:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8VendorSpecificClassifierParamLength ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8VendorSpecificClassifierParam[1]:0x%X " ,
psfCSType - > cCPacketClassificationRule . u8VendorSpecificClassifierParam [ 0 ] ) ;
# ifdef VERSION_D5
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " u8IPv6FlowLableLength :0x%X " ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLableLength ) ;
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 " ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 0 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 1 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 2 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 3 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 4 ] ,
psfCSType - > cCPacketClassificationRule . u8IPv6FlowLable [ 5 ] ) ;
# endif
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , DUMP_CONTROL , DBG_LVL_ALL , " bValid : 0x%X " , pstAddIndication - > sfActiveSet . bValid ) ;
}
static inline ULONG RestoreSFParam ( PMINI_ADAPTER Adapter , ULONG ulAddrSFParamSet , PUCHAR pucDestBuffer )
{
UINT nBytesToRead = sizeof ( stServiceFlowParamSI ) ;
if ( ulAddrSFParamSet = = 0 | | NULL = = pucDestBuffer )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Got Param address as 0!! " ) ;
return 0 ;
}
ulAddrSFParamSet = ntohl ( ulAddrSFParamSet ) ;
//Read out the SF Param Set At the indicated Location
if ( rdm ( Adapter , ulAddrSFParamSet , ( PUCHAR ) pucDestBuffer , nBytesToRead ) < 0 )
return STATUS_FAILURE ;
return 1 ;
}
2010-11-01 03:52:36 +00:00
static ULONG StoreSFParam ( PMINI_ADAPTER Adapter , PUCHAR pucSrcBuffer , ULONG ulAddrSFParamSet )
2010-09-08 21:46:36 +00:00
{
UINT nBytesToWrite = sizeof ( stServiceFlowParamSI ) ;
UINT uiRetVal = 0 ;
if ( ulAddrSFParamSet = = 0 | | NULL = = pucSrcBuffer )
{
return 0 ;
}
uiRetVal = wrm ( Adapter , ulAddrSFParamSet , ( PUCHAR ) pucSrcBuffer , nBytesToWrite ) ;
if ( uiRetVal < 0 ) {
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " %s:%d WRM failed " , __FUNCTION__ , __LINE__ ) ;
return uiRetVal ;
}
return 1 ;
}
ULONG StoreCmControlResponseMessage ( PMINI_ADAPTER Adapter , PVOID pvBuffer , UINT * puBufferLength )
{
stLocalSFAddIndicationAlt * pstAddIndicationAlt = NULL ;
stLocalSFAddIndication * pstAddIndication = NULL ;
stLocalSFDeleteRequest * pstDeletionRequest ;
UINT uiSearchRuleIndex ;
ULONG ulSFID ;
pstAddIndicationAlt = ( stLocalSFAddIndicationAlt * ) ( pvBuffer ) ;
/*
* In case of DSD Req By MS , we should immediately delete this SF so that
* we can stop the further classifying the pkt for this SF .
*/
if ( pstAddIndicationAlt - > u8Type = = DSD_REQ )
{
pstDeletionRequest = ( stLocalSFDeleteRequest * ) pvBuffer ;
ulSFID = ntohl ( pstDeletionRequest - > u32SFID ) ;
uiSearchRuleIndex = SearchSfid ( Adapter , ulSFID ) ;
if ( uiSearchRuleIndex < NO_OF_QUEUES )
{
deleteSFBySfid ( Adapter , uiSearchRuleIndex ) ;
Adapter - > u32TotalDSD + + ;
}
return 1 ;
}
if ( ( pstAddIndicationAlt - > u8Type = = DSD_RSP ) | |
( pstAddIndicationAlt - > u8Type = = DSD_ACK ) )
{
//No Special handling send the message as it is
return 1 ;
}
// For DSA_REQ, only upto "psfAuthorizedSet" parameter should be accessed by driver!
pstAddIndication = ( stLocalSFAddIndication * ) kmalloc ( sizeof ( * pstAddIndication ) , GFP_KERNEL ) ;
if ( NULL = = pstAddIndication )
return 0 ;
/* AUTHORIZED SET */
pstAddIndication - > psfAuthorizedSet = ( stServiceFlowParamSI * )
GetNextTargetBufferLocation ( Adapter , pstAddIndicationAlt - > u16TID ) ;
if ( ! pstAddIndication - > psfAuthorizedSet )
return 0 ;
if ( StoreSFParam ( Adapter , ( PUCHAR ) & pstAddIndicationAlt - > sfAuthorizedSet ,
( ULONG ) pstAddIndication - > psfAuthorizedSet ) ! = 1 )
return 0 ;
2010-09-30 08:24:11 +00:00
/* this can't possibly be right */
pstAddIndication - > psfAuthorizedSet = ( stServiceFlowParamSI * ) ntohl ( ( ULONG ) pstAddIndication - > psfAuthorizedSet ) ;
2010-09-08 21:46:36 +00:00
if ( pstAddIndicationAlt - > u8Type = = DSA_REQ )
{
stLocalSFAddRequest AddRequest ;
AddRequest . u8Type = pstAddIndicationAlt - > u8Type ;
AddRequest . eConnectionDir = pstAddIndicationAlt - > u8Direction ;
AddRequest . u16TID = pstAddIndicationAlt - > u16TID ;
AddRequest . u16CID = pstAddIndicationAlt - > u16CID ;
AddRequest . u16VCID = pstAddIndicationAlt - > u16VCID ;
AddRequest . psfParameterSet = pstAddIndication - > psfAuthorizedSet ;
( * puBufferLength ) = sizeof ( stLocalSFAddRequest ) ;
memcpy ( pvBuffer , & AddRequest , sizeof ( stLocalSFAddRequest ) ) ;
return 1 ;
}
// Since it's not DSA_REQ, we can access all field in pstAddIndicationAlt
//We need to extract the structure from the buffer and pack it differently
pstAddIndication - > u8Type = pstAddIndicationAlt - > u8Type ;
pstAddIndication - > eConnectionDir = pstAddIndicationAlt - > u8Direction ;
pstAddIndication - > u16TID = pstAddIndicationAlt - > u16TID ;
pstAddIndication - > u16CID = pstAddIndicationAlt - > u16CID ;
pstAddIndication - > u16VCID = pstAddIndicationAlt - > u16VCID ;
pstAddIndication - > u8CC = pstAddIndicationAlt - > u8CC ;
/* ADMITTED SET */
pstAddIndication - > psfAdmittedSet = ( stServiceFlowParamSI * )
GetNextTargetBufferLocation ( Adapter , pstAddIndicationAlt - > u16TID ) ;
if ( ! pstAddIndication - > psfAdmittedSet )
return 0 ;
if ( StoreSFParam ( Adapter , ( PUCHAR ) & pstAddIndicationAlt - > sfAdmittedSet , ( ULONG ) pstAddIndication - > psfAdmittedSet ) ! = 1 )
return 0 ;
pstAddIndication - > psfAdmittedSet = ( stServiceFlowParamSI * ) ntohl ( ( ULONG ) pstAddIndication - > psfAdmittedSet ) ;
/* ACTIVE SET */
pstAddIndication - > psfActiveSet = ( stServiceFlowParamSI * )
GetNextTargetBufferLocation ( Adapter , pstAddIndicationAlt - > u16TID ) ;
if ( ! pstAddIndication - > psfActiveSet )
return 0 ;
if ( StoreSFParam ( Adapter , ( PUCHAR ) & pstAddIndicationAlt - > sfActiveSet , ( ULONG ) pstAddIndication - > psfActiveSet ) ! = 1 )
return 0 ;
pstAddIndication - > psfActiveSet = ( stServiceFlowParamSI * ) ntohl ( ( ULONG ) pstAddIndication - > psfActiveSet ) ;
( * puBufferLength ) = sizeof ( stLocalSFAddIndication ) ;
* ( stLocalSFAddIndication * ) pvBuffer = * pstAddIndication ;
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
return 1 ;
}
static inline stLocalSFAddIndicationAlt
* RestoreCmControlResponseMessage ( register PMINI_ADAPTER Adapter , register PVOID pvBuffer )
{
ULONG ulStatus = 0 ;
stLocalSFAddIndication * pstAddIndication = NULL ;
stLocalSFAddIndicationAlt * pstAddIndicationDest = NULL ;
pstAddIndication = ( stLocalSFAddIndication * ) ( pvBuffer ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " =====> " ) ;
if ( ( pstAddIndication - > u8Type = = DSD_REQ ) | |
( pstAddIndication - > u8Type = = DSD_RSP ) | |
( pstAddIndication - > u8Type = = DSD_ACK ) )
{
return ( stLocalSFAddIndicationAlt * ) pvBuffer ;
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Inside RestoreCmControlResponseMessage " ) ;
/*
//Need to Allocate memory to contain the SUPER Large structures
//Our driver cant create these structures on Stack :(
*/
pstAddIndicationDest = kmalloc ( sizeof ( stLocalSFAddIndicationAlt ) , GFP_KERNEL ) ;
if ( pstAddIndicationDest )
{
memset ( pstAddIndicationDest , 0 , sizeof ( stLocalSFAddIndicationAlt ) ) ;
}
else
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Failed to allocate memory for SF Add Indication Structure " ) ;
return NULL ;
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " AddIndication-u8Type : 0x%X " , pstAddIndication - > u8Type ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " AddIndication-u8Direction : 0x%X " , pstAddIndication - > eConnectionDir ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " AddIndication-u8TID : 0x%X " , ntohs ( pstAddIndication - > u16TID ) ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " AddIndication-u8CID : 0x%X " , ntohs ( pstAddIndication - > u16CID ) ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " AddIndication-u16VCID : 0x%X " , ntohs ( pstAddIndication - > u16VCID ) ) ;
2010-09-30 08:24:11 +00:00
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " AddIndication-autorized set loc : %p " , pstAddIndication - > psfAuthorizedSet ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " AddIndication-admitted set loc : %p " , pstAddIndication - > psfAdmittedSet ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " AddIndication-Active set loc : %p " , pstAddIndication - > psfActiveSet ) ;
2010-09-08 21:46:36 +00:00
pstAddIndicationDest - > u8Type = pstAddIndication - > u8Type ;
pstAddIndicationDest - > u8Direction = pstAddIndication - > eConnectionDir ;
pstAddIndicationDest - > u16TID = pstAddIndication - > u16TID ;
pstAddIndicationDest - > u16CID = pstAddIndication - > u16CID ;
pstAddIndicationDest - > u16VCID = pstAddIndication - > u16VCID ;
pstAddIndicationDest - > u8CC = pstAddIndication - > u8CC ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Restoring Active Set " ) ;
ulStatus = RestoreSFParam ( Adapter , ( ULONG ) pstAddIndication - > psfActiveSet , ( PUCHAR ) & pstAddIndicationDest - > sfActiveSet ) ;
if ( ulStatus ! = 1 )
{
goto failed_restore_sf_param ;
}
if ( pstAddIndicationDest - > sfActiveSet . u8TotalClassifiers > MAX_CLASSIFIERS_IN_SF )
pstAddIndicationDest - > sfActiveSet . u8TotalClassifiers = MAX_CLASSIFIERS_IN_SF ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Restoring Admitted Set " ) ;
ulStatus = RestoreSFParam ( Adapter , ( ULONG ) pstAddIndication - > psfAdmittedSet , ( PUCHAR ) & pstAddIndicationDest - > sfAdmittedSet ) ;
if ( ulStatus ! = 1 )
{
goto failed_restore_sf_param ;
}
if ( pstAddIndicationDest - > sfAdmittedSet . u8TotalClassifiers > MAX_CLASSIFIERS_IN_SF )
pstAddIndicationDest - > sfAdmittedSet . u8TotalClassifiers = MAX_CLASSIFIERS_IN_SF ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Restoring Authorized Set " ) ;
ulStatus = RestoreSFParam ( Adapter , ( ULONG ) pstAddIndication - > psfAuthorizedSet , ( PUCHAR ) & pstAddIndicationDest - > sfAuthorizedSet ) ;
if ( ulStatus ! = 1 )
{
goto failed_restore_sf_param ;
}
if ( pstAddIndicationDest - > sfAuthorizedSet . u8TotalClassifiers > MAX_CLASSIFIERS_IN_SF )
pstAddIndicationDest - > sfAuthorizedSet . u8TotalClassifiers = MAX_CLASSIFIERS_IN_SF ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Dumping the whole raw packet " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " ============================================================ " ) ;
2010-09-14 22:39:58 +00:00
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " pstAddIndicationDest->sfActiveSet size %zx %p " , sizeof ( * pstAddIndicationDest ) , pstAddIndicationDest ) ;
2010-09-08 21:46:36 +00:00
//BCM_DEBUG_PRINT_BUFFER(Adapter,DBG_TYPE_OTHERS, CONN_MSG, DBG_LVL_ALL, (unsigned char *)pstAddIndicationDest, sizeof(*pstAddIndicationDest));
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " ============================================================ " ) ;
return pstAddIndicationDest ;
failed_restore_sf_param :
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndicationDest ) ;
2010-09-08 21:46:36 +00:00
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " <===== " ) ;
return NULL ;
}
ULONG SetUpTargetDsxBuffers ( PMINI_ADAPTER Adapter )
{
ULONG ulTargetDsxBuffersBase = 0 ;
ULONG ulCntTargetBuffers ;
ULONG ulIndex = 0 ;
int Status ;
2010-10-08 12:56:35 +00:00
if ( ! Adapter ) {
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Adapter was NULL!!! " ) ;
return 0 ;
}
2010-09-08 21:46:36 +00:00
if ( Adapter - > astTargetDsxBuffer [ 0 ] . ulTargetDsxBuffer )
return 1 ;
2010-09-14 22:39:58 +00:00
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Size of Each DSX Buffer(Also size of ServiceFlowParamSI): %zx " , sizeof ( stServiceFlowParamSI ) ) ;
2010-09-08 21:46:36 +00:00
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Reading DSX buffer From Target location %x " , DSX_MESSAGE_EXCHANGE_BUFFER ) ;
Status = rdmalt ( Adapter , DSX_MESSAGE_EXCHANGE_BUFFER ,
( PUINT ) & ulTargetDsxBuffersBase , sizeof ( UINT ) ) ;
if ( Status < 0 )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " RDM failed!! " ) ;
return 0 ;
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Base Address Of DSX Target Buffer : 0x%lx " , ulTargetDsxBuffersBase ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Tgt Buffer is Now %lx : " , ulTargetDsxBuffersBase ) ;
ulCntTargetBuffers = DSX_MESSAGE_EXCHANGE_BUFFER_SIZE / sizeof ( stServiceFlowParamSI ) ;
Adapter - > ulTotalTargetBuffersAvailable =
ulCntTargetBuffers > MAX_TARGET_DSX_BUFFERS ?
MAX_TARGET_DSX_BUFFERS : ulCntTargetBuffers ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Total Target DSX Buffer setup %lx " , Adapter - > ulTotalTargetBuffersAvailable ) ;
for ( ulIndex = 0 ; ulIndex < Adapter - > ulTotalTargetBuffersAvailable ; ulIndex + + )
{
Adapter - > astTargetDsxBuffer [ ulIndex ] . ulTargetDsxBuffer = ulTargetDsxBuffersBase ;
Adapter - > astTargetDsxBuffer [ ulIndex ] . valid = 1 ;
Adapter - > astTargetDsxBuffer [ ulIndex ] . tid = 0 ;
ulTargetDsxBuffersBase + = sizeof ( stServiceFlowParamSI ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Target DSX Buffer %lx setup at 0x%lx " ,
ulIndex , Adapter - > astTargetDsxBuffer [ ulIndex ] . ulTargetDsxBuffer ) ;
}
Adapter - > ulCurrentTargetBuffer = 0 ;
Adapter - > ulFreeTargetBufferCnt = Adapter - > ulTotalTargetBuffersAvailable ;
return 1 ;
}
ULONG GetNextTargetBufferLocation ( PMINI_ADAPTER Adapter , B_UINT16 tid )
{
ULONG ulTargetDSXBufferAddress ;
ULONG ulTargetDsxBufferIndexToUse , ulMaxTry ;
if ( ( Adapter - > ulTotalTargetBuffersAvailable = = 0 ) | |
( Adapter - > ulFreeTargetBufferCnt = = 0 ) )
{
ClearTargetDSXBuffer ( Adapter , tid , FALSE ) ;
return 0 ;
}
ulTargetDsxBufferIndexToUse = Adapter - > ulCurrentTargetBuffer ;
ulMaxTry = Adapter - > ulTotalTargetBuffersAvailable ;
while ( ( ulMaxTry ) & & ( Adapter - > astTargetDsxBuffer [ ulTargetDsxBufferIndexToUse ] . valid ! = 1 ) )
{
ulTargetDsxBufferIndexToUse = ( ulTargetDsxBufferIndexToUse + 1 ) %
Adapter - > ulTotalTargetBuffersAvailable ;
ulMaxTry - - ;
}
if ( ulMaxTry = = 0 )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " \n GetNextTargetBufferLocation : Error No Free Target DSX Buffers FreeCnt : %lx " , Adapter - > ulFreeTargetBufferCnt ) ;
ClearTargetDSXBuffer ( Adapter , tid , FALSE ) ;
return 0 ;
}
ulTargetDSXBufferAddress =
Adapter - > astTargetDsxBuffer [ ulTargetDsxBufferIndexToUse ] . ulTargetDsxBuffer ;
Adapter - > astTargetDsxBuffer [ ulTargetDsxBufferIndexToUse ] . valid = 0 ;
Adapter - > astTargetDsxBuffer [ ulTargetDsxBufferIndexToUse ] . tid = tid ;
Adapter - > ulFreeTargetBufferCnt - - ;
ulTargetDsxBufferIndexToUse =
( ulTargetDsxBufferIndexToUse + 1 ) % Adapter - > ulTotalTargetBuffersAvailable ;
Adapter - > ulCurrentTargetBuffer = ulTargetDsxBufferIndexToUse ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " GetNextTargetBufferLocation :Returning address %lx tid %d \n " ,
ulTargetDSXBufferAddress , tid ) ;
return ulTargetDSXBufferAddress ;
}
INT AllocAdapterDsxBuffer ( PMINI_ADAPTER Adapter )
{
/*
//Need to Allocate memory to contain the SUPER Large structures
//Our driver cant create these structures on Stack
*/
Adapter - > caDsxReqResp = kmalloc ( sizeof ( stLocalSFAddIndicationAlt ) + LEADER_SIZE , GFP_KERNEL ) ;
if ( ! Adapter - > caDsxReqResp )
return - ENOMEM ;
return 0 ;
}
INT FreeAdapterDsxBuffer ( PMINI_ADAPTER Adapter )
{
if ( Adapter - > caDsxReqResp )
{
2010-11-01 13:35:21 +00:00
kfree ( Adapter - > caDsxReqResp ) ;
2010-09-08 21:46:36 +00:00
}
return 0 ;
}
/**
@ ingroup ctrl_pkt_functions
This routinue would process the Control responses
for the Connection Management .
@ return - Queue index for the free SFID else returns Invalid Index .
*/
BOOLEAN CmControlResponseMessage ( PMINI_ADAPTER Adapter , /**<Pointer to the Adapter structure*/
PVOID pvBuffer /**Starting Address of the Buffer, that contains the AddIndication Data*/
)
{
stServiceFlowParamSI * psfLocalSet = NULL ;
stLocalSFAddIndicationAlt * pstAddIndication = NULL ;
stLocalSFChangeIndicationAlt * pstChangeIndication = NULL ;
PLEADER pLeader = NULL ;
/*
//Otherwise the message contains a target address from where we need to
//read out the rest of the service flow param structure
*/
if ( ( pstAddIndication = RestoreCmControlResponseMessage ( Adapter , pvBuffer ) )
= = NULL )
{
ClearTargetDSXBuffer ( Adapter , ( ( stLocalSFAddIndication * ) pvBuffer ) - > u16TID , FALSE ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " Error in restoring Service Flow param structure from DSx message " ) ;
return FALSE ;
}
DumpCmControlPacket ( pstAddIndication ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " ====> " ) ;
pLeader = ( PLEADER ) Adapter - > caDsxReqResp ;
pLeader - > Status = CM_CONTROL_NEWDSX_MULTICLASSIFIER_REQ ;
pLeader - > Vcid = 0 ;
ClearTargetDSXBuffer ( Adapter , pstAddIndication - > u16TID , FALSE ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " ### TID RECEIVED %d \n " , pstAddIndication - > u16TID ) ;
switch ( pstAddIndication - > u8Type )
{
case DSA_REQ :
{
pLeader - > PLength = sizeof ( stLocalSFAddIndicationAlt ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Sending DSA Response.... \n " ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " SENDING DSA RESPONSE TO MAC %d " , pLeader - > PLength ) ;
* ( ( stLocalSFAddIndicationAlt * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) )
= * pstAddIndication ;
( ( stLocalSFAddIndicationAlt * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) ) - > u8Type = DSA_RSP ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " VCID = %x " , ntohs ( pstAddIndication - > u16VCID ) ) ;
CopyBufferToControlPacket ( Adapter , ( PVOID ) Adapter - > caDsxReqResp ) ;
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
}
break ;
case DSA_RSP :
{
pLeader - > PLength = sizeof ( stLocalSFAddIndicationAlt ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " SENDING DSA ACK TO MAC %d " ,
pLeader - > PLength ) ;
* ( ( stLocalSFAddIndicationAlt * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) )
= * pstAddIndication ;
( ( stLocalSFAddIndicationAlt * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) ) - > u8Type = DSA_ACK ;
} //no break here..we should go down.
case DSA_ACK :
{
UINT uiSearchRuleIndex = 0 ;
struct timeval tv = { 0 } ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " VCID:0x%X " ,
ntohs ( pstAddIndication - > u16VCID ) ) ;
uiSearchRuleIndex = SearchFreeSfid ( Adapter ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " uiSearchRuleIndex:0x%X " ,
uiSearchRuleIndex ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Direction:0x%X " ,
pstAddIndication - > u8Direction ) ;
if ( ( uiSearchRuleIndex < NO_OF_QUEUES ) )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . ucDirection =
pstAddIndication - > u8Direction ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " bValid:0x%X " ,
pstAddIndication - > sfActiveSet . bValid ) ;
if ( pstAddIndication - > sfActiveSet . bValid = = TRUE )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActiveSet = TRUE ;
}
if ( pstAddIndication - > sfAuthorizedSet . bValid = = TRUE )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bAuthorizedSet = TRUE ;
}
if ( pstAddIndication - > sfAdmittedSet . bValid = = TRUE )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bAdmittedSet = TRUE ;
}
if ( FALSE = = pstAddIndication - > sfActiveSet . bValid )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActive = FALSE ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActivateRequestSent = FALSE ;
if ( pstAddIndication - > sfAdmittedSet . bValid )
{
psfLocalSet = & pstAddIndication - > sfAdmittedSet ;
}
else if ( pstAddIndication - > sfAuthorizedSet . bValid )
{
psfLocalSet = & pstAddIndication - > sfAuthorizedSet ;
}
}
else
{
psfLocalSet = & pstAddIndication - > sfActiveSet ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActive = TRUE ;
}
if ( ! psfLocalSet )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " No set is valid \n " ) ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActive = FALSE ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bValid = FALSE ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value = 0 ;
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
}
else if ( psfLocalSet - > bValid & & ( pstAddIndication - > u8CC = = 0 ) )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " DSA ACK " ) ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value =
ntohs ( pstAddIndication - > u16VCID ) ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . usCID =
ntohs ( pstAddIndication - > u16CID ) ;
if ( UPLINK_DIR = = pstAddIndication - > u8Direction )
atomic_set ( & Adapter - > PackInfo [ uiSearchRuleIndex ] . uiPerSFTxResourceCount , DEFAULT_PERSFCOUNT ) ;
CopyToAdapter ( Adapter , psfLocalSet , uiSearchRuleIndex ,
DSA_ACK , pstAddIndication ) ;
// don't free pstAddIndication
/* Inside CopyToAdapter, Sorting of all the SFs take place.
Hence any access to the newly added SF through uiSearchRuleIndex is invalid .
SHOULD BE STRICTLY AVOIDED .
*/
// *(PULONG)(((PUCHAR)pvBuffer)+1)=psfLocalSet->u32SFID;
memcpy ( ( ( ( PUCHAR ) pvBuffer ) + 1 ) , & psfLocalSet - > u32SFID , 4 ) ;
if ( pstAddIndication - > sfActiveSet . bValid = = TRUE )
{
if ( UPLINK_DIR = = pstAddIndication - > u8Direction )
{
if ( ! Adapter - > LinkUpStatus )
{
netif_carrier_on ( Adapter - > dev ) ;
netif_start_queue ( Adapter - > dev ) ;
Adapter - > LinkUpStatus = 1 ;
do_gettimeofday ( & tv ) ;
atomic_set ( & Adapter - > TxPktAvail , 1 ) ;
wake_up ( & Adapter - > tx_packet_wait_queue ) ;
Adapter - > liTimeSinceLastNetEntry = tv . tv_sec ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " ============Tx Service Flow Created! " ) ;
}
}
}
}
else
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActive = FALSE ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bValid = FALSE ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value = 0 ;
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
}
}
else
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " DSA ACK did not get valid SFID " ) ;
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
return FALSE ;
}
}
break ;
case DSC_REQ :
{
pLeader - > PLength = sizeof ( stLocalSFChangeIndicationAlt ) ;
pstChangeIndication = ( stLocalSFChangeIndicationAlt * ) pstAddIndication ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " SENDING DSC RESPONSE TO MAC %d " , pLeader - > PLength ) ;
* ( ( stLocalSFChangeIndicationAlt * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) ) = * pstChangeIndication ;
( ( stLocalSFChangeIndicationAlt * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) ) - > u8Type = DSC_RSP ;
CopyBufferToControlPacket ( Adapter , ( PVOID ) Adapter - > caDsxReqResp ) ;
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
}
break ;
case DSC_RSP :
{
pLeader - > PLength = sizeof ( stLocalSFChangeIndicationAlt ) ;
pstChangeIndication = ( stLocalSFChangeIndicationAlt * ) pstAddIndication ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " SENDING DSC ACK TO MAC %d " , pLeader - > PLength ) ;
* ( ( stLocalSFChangeIndicationAlt * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) ) = * pstChangeIndication ;
( ( stLocalSFChangeIndicationAlt * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) ) - > u8Type = DSC_ACK ;
}
case DSC_ACK :
{
UINT uiSearchRuleIndex = 0 ;
pstChangeIndication = ( stLocalSFChangeIndicationAlt * ) pstAddIndication ;
uiSearchRuleIndex = SearchSfid ( Adapter , ntohl ( pstChangeIndication - > sfActiveSet . u32SFID ) ) ;
if ( uiSearchRuleIndex > NO_OF_QUEUES - 1 )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " SF doesn't exist for which DSC_ACK is received " ) ;
}
if ( ( uiSearchRuleIndex < NO_OF_QUEUES ) )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . ucDirection = pstChangeIndication - > u8Direction ;
if ( pstChangeIndication - > sfActiveSet . bValid = = TRUE )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActiveSet = TRUE ;
}
if ( pstChangeIndication - > sfAuthorizedSet . bValid = = TRUE )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bAuthorizedSet = TRUE ;
}
if ( pstChangeIndication - > sfAdmittedSet . bValid = = TRUE )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bAdmittedSet = TRUE ;
}
if ( FALSE = = pstChangeIndication - > sfActiveSet . bValid )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActive = FALSE ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActivateRequestSent = FALSE ;
if ( pstChangeIndication - > sfAdmittedSet . bValid )
{
psfLocalSet = & pstChangeIndication - > sfAdmittedSet ;
}
else if ( pstChangeIndication - > sfAuthorizedSet . bValid )
{
psfLocalSet = & pstChangeIndication - > sfAuthorizedSet ;
}
}
else
{
psfLocalSet = & pstChangeIndication - > sfActiveSet ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActive = TRUE ;
}
if ( psfLocalSet - > bValid & & ( pstChangeIndication - > u8CC = = 0 ) )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value =
ntohs ( pstChangeIndication - > u16VCID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " CC field is %d bvalid = %d \n " ,
pstChangeIndication - > u8CC , psfLocalSet - > bValid ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " VCID= %d \n " , ntohs ( pstChangeIndication - > u16VCID ) ) ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . usCID =
ntohs ( pstChangeIndication - > u16CID ) ;
CopyToAdapter ( Adapter , psfLocalSet , uiSearchRuleIndex ,
DSC_ACK , pstAddIndication ) ;
* ( PULONG ) ( ( ( PUCHAR ) pvBuffer ) + 1 ) = psfLocalSet - > u32SFID ;
}
else if ( pstChangeIndication - > u8CC = = 6 )
{
deleteSFBySfid ( Adapter , uiSearchRuleIndex ) ;
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
}
}
else
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " DSC ACK did not get valid SFID " ) ;
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
return FALSE ;
}
}
break ;
case DSD_REQ :
{
UINT uiSearchRuleIndex ;
ULONG ulSFID ;
pLeader - > PLength = sizeof ( stLocalSFDeleteIndication ) ;
* ( ( stLocalSFDeleteIndication * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) ) = * ( ( stLocalSFDeleteIndication * ) pstAddIndication ) ;
ulSFID = ntohl ( ( ( stLocalSFDeleteIndication * ) pstAddIndication ) - > u32SFID ) ;
uiSearchRuleIndex = SearchSfid ( Adapter , ulSFID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " DSD - Removing connection %x " , uiSearchRuleIndex ) ;
if ( uiSearchRuleIndex < NO_OF_QUEUES )
{
//Delete All Classifiers Associated with this SFID
deleteSFBySfid ( Adapter , uiSearchRuleIndex ) ;
Adapter - > u32TotalDSD + + ;
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " SENDING DSD RESPONSE TO MAC " ) ;
( ( stLocalSFDeleteIndication * ) & ( Adapter - > caDsxReqResp [ LEADER_SIZE ] ) ) - > u8Type = DSD_RSP ;
CopyBufferToControlPacket ( Adapter , ( PVOID ) Adapter - > caDsxReqResp ) ;
}
case DSD_RSP :
{
//Do nothing as SF has already got Deleted
}
break ;
case DSD_ACK :
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " DSD ACK Rcd, let App handle it \n " ) ;
break ;
default :
2010-11-01 13:35:21 +00:00
kfree ( pstAddIndication ) ;
2010-09-08 21:46:36 +00:00
return FALSE ;
}
return TRUE ;
}
2010-09-30 08:24:12 +00:00
int get_dsx_sf_data_to_application ( PMINI_ADAPTER Adapter , UINT uiSFId , void __user * user_buffer )
2010-09-08 21:46:36 +00:00
{
int status = 0 ;
struct _packet_info * psSfInfo = NULL ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " status =%d " , status ) ;
status = SearchSfid ( Adapter , uiSFId ) ;
2010-10-08 13:49:04 +00:00
if ( status > = NO_OF_QUEUES ) {
2010-09-08 21:46:36 +00:00
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " SFID %d not present in queue !!! " , uiSFId ) ;
return - EINVAL ;
}
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " status =%d " , status ) ;
psSfInfo = & Adapter - > PackInfo [ status ] ;
2010-09-30 08:24:12 +00:00
if ( psSfInfo - > pstSFIndication & & copy_to_user ( user_buffer ,
psSfInfo - > pstSFIndication , sizeof ( stLocalSFAddIndicationAlt ) ) )
2010-09-08 21:46:36 +00:00
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_PRINTK , 0 , 0 , " copy to user failed SFID %d, present in queue !!! " , uiSFId ) ;
status = - EFAULT ;
return status ;
}
return STATUS_SUCCESS ;
}
VOID OverrideServiceFlowParams ( PMINI_ADAPTER Adapter , PUINT puiBuffer )
{
B_UINT32 u32NumofSFsinMsg = ntohl ( * ( puiBuffer + 1 ) ) ;
stIM_SFHostNotify * pHostInfo = NULL ;
UINT uiSearchRuleIndex = 0 ;
ULONG ulSFID = 0 ;
puiBuffer + = 2 ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " u32NumofSFsinMsg: 0x%x \n " , u32NumofSFsinMsg ) ;
while ( u32NumofSFsinMsg ! = 0 & & u32NumofSFsinMsg < NO_OF_QUEUES )
{
u32NumofSFsinMsg - - ;
pHostInfo = ( stIM_SFHostNotify * ) puiBuffer ;
puiBuffer = ( PUINT ) ( pHostInfo + 1 ) ;
ulSFID = ntohl ( pHostInfo - > SFID ) ;
uiSearchRuleIndex = SearchSfid ( Adapter , ulSFID ) ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " SFID: 0x%lx \n " , ulSFID ) ;
if ( uiSearchRuleIndex > = NO_OF_QUEUES | | uiSearchRuleIndex = = HiPriority )
{
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 ) ;
continue ;
}
if ( pHostInfo - > RetainSF = = FALSE )
{
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " Going to Delete SF " ) ;
deleteSFBySfid ( Adapter , uiSearchRuleIndex ) ;
}
else
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . usVCID_Value = ntohs ( pHostInfo - > VCID ) ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . usCID = ntohs ( pHostInfo - > newCID ) ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActive = FALSE ;
BCM_DEBUG_PRINT ( Adapter , DBG_TYPE_OTHERS , CONN_MSG , DBG_LVL_ALL , " pHostInfo->QoSParamSet: 0x%x \n " , pHostInfo - > QoSParamSet ) ;
if ( pHostInfo - > QoSParamSet & 0x1 )
Adapter - > PackInfo [ uiSearchRuleIndex ] . bAuthorizedSet = TRUE ;
if ( pHostInfo - > QoSParamSet & 0x2 )
Adapter - > PackInfo [ uiSearchRuleIndex ] . bAdmittedSet = TRUE ;
if ( pHostInfo - > QoSParamSet & 0x4 )
{
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActiveSet = TRUE ;
Adapter - > PackInfo [ uiSearchRuleIndex ] . bActive = TRUE ;
}
}
}
}