#ifndef CNTRL_SIGNALING_INTERFACE_
#define CNTRL_SIGNALING_INTERFACE_

#define DSA_REQ			11
#define DSA_RSP			12
#define DSA_ACK			13
#define DSC_REQ			14
#define DSC_RSP			15
#define DSC_ACK			16
#define DSD_REQ			17
#define DSD_RSP			18
#define DSD_ACK			19
#define MAX_CLASSIFIERS_IN_SF	4

#define MAX_STRING_LEN			20
#define MAX_PHS_LENGTHS			255
#define VENDOR_PHS_PARAM_LENGTH		10
#define MAX_NUM_ACTIVE_BS		10
#define AUTH_TOKEN_LENGTH		10
#define NUM_HARQ_CHANNELS		16 /* Changed from 10 to 16 to accommodate all HARQ channels */
#define VENDOR_CLASSIFIER_PARAM_LENGTH	1  /* Changed the size to 1 byte since we dnt use it */
#define  VENDOR_SPECIF_QOS_PARAM	1
#define VENDOR_PHS_PARAM_LENGTH		10
#define MBS_CONTENTS_ID_LENGTH		10
#define GLOBAL_SF_CLASSNAME_LENGTH	6

#define TYPE_OF_SERVICE_LENGTH		3
#define IP_MASKED_SRC_ADDRESS_LENGTH	32
#define IP_MASKED_DEST_ADDRESS_LENGTH	32
#define PROTOCOL_SRC_PORT_RANGE_LENGTH	4
#define PROTOCOL_DEST_PORT_RANGE_LENGTH	4
#define ETHERNET_DEST_MAC_ADDR_LENGTH	12
#define ETHERNET_SRC_MAC_ADDR_LENGTH	12
#define NUM_ETHERTYPE_BYTES		3
#define NUM_IPV6_FLOWLABLE_BYTES	3

/*
 * structure Definitions
 *
 * brief class cCPacketClassificationRule
 */
struct _stCPacketClassificationRuleSI {
	/* 16bit UserPriority Of The Service Flow */
	B_UINT16 u16UserPriority;
	/* 16bit VLANID Of The Service Flow */
	B_UINT16 u16VLANID;
	/* 16bit Packet Classification RuleIndex Of The Service Flow */
	B_UINT16 u16PacketClassificationRuleIndex;
	/* 8bit Classifier Rule Priority Of The Service Flow */
	B_UINT8 u8ClassifierRulePriority;
	/* Length of IP TypeOfService field */
	B_UINT8 u8IPTypeOfServiceLength;
	/* 3bytes IP TypeOfService */
	B_UINT8 u8IPTypeOfService[TYPE_OF_SERVICE_LENGTH];
	/* Protocol used in classification of Service Flow */
	B_UINT8 u8Protocol;
	/* Length of IP Masked Source Address */
	B_UINT8 u8IPMaskedSourceAddressLength;
	/* IP Masked Source Address used in classification for the Service Flow */
	B_UINT8 u8IPMaskedSourceAddress[IP_MASKED_SRC_ADDRESS_LENGTH];
	/* Length of IP Destination Address */
	B_UINT8 u8IPDestinationAddressLength;
	/* IP Destination Address used in classification for the Service Flow */
	B_UINT8 u8IPDestinationAddress[IP_MASKED_DEST_ADDRESS_LENGTH];
	/* Length of Protocol Source Port Range */
	B_UINT8 u8ProtocolSourcePortRangeLength;
	/* Protocol Source Port Range used in the Service Flow */
	B_UINT8 u8ProtocolSourcePortRange[PROTOCOL_SRC_PORT_RANGE_LENGTH];
	/* Length of Protocol Dest Port Range */
	B_UINT8 u8ProtocolDestPortRangeLength;
	/* Protocol Dest Port Range used in the Service Flow */
	B_UINT8 u8ProtocolDestPortRange[PROTOCOL_DEST_PORT_RANGE_LENGTH];
	/* Length of Ethernet Destination MAC Address */
	B_UINT8 u8EthernetDestMacAddressLength;
	/* Ethernet Destination MAC Address  used in classification of the Service Flow */
	B_UINT8 u8EthernetDestMacAddress[ETHERNET_DEST_MAC_ADDR_LENGTH];
	/* Length of Ethernet Source MAC Address */
	B_UINT8 u8EthernetSourceMACAddressLength;
	/* Ethernet Source MAC Address  used in classification of the Service Flow */
	B_UINT8 u8EthernetSourceMACAddress[ETHERNET_SRC_MAC_ADDR_LENGTH];
	/* Length of Ethertype */
	B_UINT8 u8EthertypeLength;
	/* 3bytes Ethertype Of The Service Flow */
	B_UINT8 u8Ethertype[NUM_ETHERTYPE_BYTES];
	/* 8bit Associated PHSI Of The Service Flow */
	B_UINT8 u8AssociatedPHSI;
	/* Length of Vendor Specific Classifier Param length Of The Service Flow */
	B_UINT8 u8VendorSpecificClassifierParamLength;
	/* Vendor Specific Classifier Param Of The Service Flow */
	B_UINT8 u8VendorSpecificClassifierParam[VENDOR_CLASSIFIER_PARAM_LENGTH];
	/* Length Of IPv6 Flow Lable of the Service Flow */
	B_UINT8 u8IPv6FlowLableLength;
	/* IPv6 Flow Lable Of The Service Flow */
	B_UINT8 u8IPv6FlowLable[NUM_IPV6_FLOWLABLE_BYTES];
	/* Action associated with the classifier rule */
	B_UINT8 u8ClassifierActionRule;
	B_UINT16 u16ValidityBitMap;
};
typedef struct _stCPacketClassificationRuleSI CCPacketClassificationRuleSI, stCPacketClassificationRuleSI, *pstCPacketClassificationRuleSI;

/* brief class CPhsRuleSI */
typedef struct _stPhsRuleSI {
	/* 8bit PHS Index Of The Service Flow */
	B_UINT8 u8PHSI;
	/* PHSF Length Of The Service Flow */
	B_UINT8 u8PHSFLength;
	/* String of bytes containing header information to be suppressed by the sending CS and reconstructed by the receiving CS */
	B_UINT8 u8PHSF[MAX_PHS_LENGTHS];
	/* PHSM Length Of The Service Flow */
	B_UINT8 u8PHSMLength;
	/* PHS Mask for the SF */
	B_UINT8 u8PHSM[MAX_PHS_LENGTHS];
	/* 8bit Total number of bytes to be suppressed for the Service Flow */
	B_UINT8 u8PHSS;
	/* 8bit Indicates whether or not Packet Header contents need to be verified prior to suppression */
	B_UINT8 u8PHSV;
	/* Vendor Specific PHS param Length Of The Service Flow */
	B_UINT8 u8VendorSpecificPHSParamsLength;
	/* Vendor Specific PHS param Of The Service Flow */
	B_UINT8 u8VendorSpecificPHSParams[VENDOR_PHS_PARAM_LENGTH];
	B_UINT8 u8Padding[2];
} stPhsRuleSI, *pstPhsRuleSI;
typedef stPhsRuleSI CPhsRuleSI;

/* brief structure cConvergenceSLTypes */
struct _stConvergenceSLTypes {
	/* 8bit Phs Classfier Action Of The Service Flow */
	B_UINT8 u8ClassfierDSCAction;
	/* 8bit Phs DSC Action Of The Service Flow */
	B_UINT8 u8PhsDSCAction;
	/* 16bit Padding */
	B_UINT8 u8Padding[2];
	/* brief class cCPacketClassificationRule */
	stCPacketClassificationRuleSI cCPacketClassificationRule;
	/* brief class CPhsRuleSI */
	struct _stPhsRuleSI cPhsRule;
};
typedef struct _stConvergenceSLTypes stConvergenceSLTypes, CConvergenceSLTypes, *pstConvergenceSLTypes;

/* brief structure CServiceFlowParamSI */
typedef struct _stServiceFlowParamSI {
	/* 32bitSFID Of The Service Flow */
	B_UINT32 u32SFID;
	/* 32bit Maximum Sustained Traffic Rate of the Service Flow */
	B_UINT32 u32MaxSustainedTrafficRate;
	/* 32bit Maximum Traffic Burst allowed for the Service Flow */
	B_UINT32 u32MaxTrafficBurst;
	/* 32bit Minimum Reserved Traffic Rate of the Service Flow */
	B_UINT32 u32MinReservedTrafficRate;
	/* 32bit Tolerated Jitter of the Service Flow */
	B_UINT32 u32ToleratedJitter;
	/* 32bit Maximum Latency of the Service Flow */
	B_UINT32 u32MaximumLatency;
	/* 16bitCID Of The Service Flow */
	B_UINT16 u16CID;
	/* 16bit SAID on which the service flow being set up shall be mapped */
	B_UINT16 u16TargetSAID;
	/* 16bit  ARQ window size negotiated */
	B_UINT16 u16ARQWindowSize;
	/* 16bit Total Tx delay incl sending, receiving & processing delays */
	B_UINT16 u16ARQRetryTxTimeOut;
	/* 16bit Total Rx delay incl sending, receiving & processing delays */
	B_UINT16 u16ARQRetryRxTimeOut;
	/* 16bit ARQ block lifetime */
	B_UINT16 u16ARQBlockLifeTime;
	/* 16bit ARQ Sync loss timeout */
	B_UINT16 u16ARQSyncLossTimeOut;
	/* 16bit ARQ Purge timeout */
	B_UINT16 u16ARQRxPurgeTimeOut;
	/* TODO::Remove this once we move to a new CORR2 driver
	 * brief Size of an ARQ block
	 */
	B_UINT16 u16ARQBlockSize;
	/* #endif */
	/* 16bit Nominal interval b/w consecutive SDU arrivals at MAC SAP */
	B_UINT16 u16SDUInterArrivalTime;
	/* 16bit Specifies the time base for rate measurement */
	B_UINT16 u16TimeBase;
	/* 16bit Interval b/w Successive Grant oppurtunities */
	B_UINT16 u16UnsolicitedGrantInterval;
	/* 16bit Interval b/w Successive Polling grant oppurtunities */
	B_UINT16 u16UnsolicitedPollingInterval;
	/* internal var to get the overhead */
	B_UINT16 u16MacOverhead;
	/* MBS contents Identifier */
	B_UINT16 u16MBSContentsID[MBS_CONTENTS_ID_LENGTH];
	/* MBS contents Identifier length */
	B_UINT8 u8MBSContentsIDLength;
	/* ServiceClassName Length Of The Service Flow */
	B_UINT8 u8ServiceClassNameLength;
	/* 32bytes ServiceClassName Of The Service Flow */
	B_UINT8 u8ServiceClassName[32];
	/* 8bit Indicates whether or not MBS service is requested for this Serivce Flow */
	B_UINT8 u8MBSService;
	/* 8bit QOS Parameter Set specifies proper application of QoS parameters to Provisioned, Admitted and Active sets */
	B_UINT8 u8QosParamSet;
	/* 8bit Traffic Priority Of the Service Flow */
	B_UINT8 u8TrafficPriority;
	/* 8bit Uplink Grant Scheduling Type of The Service Flow */
	B_UINT8 u8ServiceFlowSchedulingType;
	/* 8bit Request transmission Policy of the Service Flow */
	B_UINT8 u8RequesttransmissionPolicy;
	/* 8bit Specifies whether SDUs for this Service flow are of FixedLength or Variable length */
	B_UINT8 u8FixedLengthVSVariableLengthSDUIndicator;
	/* 8bit Length of the SDU for a fixed length SDU service flow */
	B_UINT8 u8SDUSize;
	/* 8bit Indicates whether or not ARQ is requested for this connection */
	B_UINT8 u8ARQEnable;
	/* < 8bit Indicates whether or not data has tobe delivered in order to higher layer */
	B_UINT8 u8ARQDeliverInOrder;
	/* 8bit Receiver ARQ ACK processing time */
	B_UINT8 u8RxARQAckProcessingTime;
	/* 8bit Convergence Sublayer Specification Of The Service Flow */
	B_UINT8 u8CSSpecification;
	/* 8 bit Type of data delivery service */
	B_UINT8 u8TypeOfDataDeliveryService;
	/* 8bit Specifies whether a service flow may generate Paging */
	B_UINT8 u8PagingPreference;
	/* 8bit Indicates the MBS Zone through which the connection or virtual connection is valid */
	B_UINT8 u8MBSZoneIdentifierassignment;
	/* 8bit Specifies whether traffic on SF should generate MOB_TRF_IND to MS in sleep mode */
	B_UINT8 u8TrafficIndicationPreference;
	/* 8bit Speciifes the length of predefined Global QoS parameter set encoding for this SF */
	B_UINT8 u8GlobalServicesClassNameLength;
	/* 6 byte Speciifes the predefined Global QoS parameter set encoding for this SF */
	B_UINT8 u8GlobalServicesClassName[GLOBAL_SF_CLASSNAME_LENGTH];
	/* 8bit Indicates whether or not SN feedback is enabled for the conn */
	B_UINT8 u8SNFeedbackEnabled;
	/* Indicates the size of the Fragment Sequence Number for the connection */
	B_UINT8 u8FSNSize;
	/* 8bit Number of CIDs in active BS list */
	B_UINT8 u8CIDAllocation4activeBSsLength;
	/* CIDs of BS in the active list */
	B_UINT8 u8CIDAllocation4activeBSs[MAX_NUM_ACTIVE_BS];
	/* Specifies if PDU extended subheader should be applied on every PDU on this conn */
	B_UINT8 u8PDUSNExtendedSubheader4HarqReordering;
	/* 8bit Specifies whether the connection uses HARQ or not */
	B_UINT8 u8HARQServiceFlows;
	/* Specifies the length of Authorization token */
	B_UINT8 u8AuthTokenLength;
	/* Specifies the Authorization token */
	B_UINT8 u8AuthToken[AUTH_TOKEN_LENGTH];
	/* specifes Number of HARQ channels used to carry data length */
	B_UINT8 u8HarqChannelMappingLength;
	/* specifes HARQ channels used to carry data */
	B_UINT8 u8HARQChannelMapping[NUM_HARQ_CHANNELS];
	/* 8bit Length of Vendor Specific QoS Params */
	B_UINT8 u8VendorSpecificQoSParamLength;
	/* 1byte  Vendor Specific QoS Param Of The Service Flow */
	B_UINT8 u8VendorSpecificQoSParam[VENDOR_SPECIF_QOS_PARAM];
	/* indicates total classifiers in the SF */
	B_UINT8 u8TotalClassifiers;  /* < Total number of valid classifiers */
	B_UINT8 bValid;	/* < Validity flag */
	B_UINT8 u8Padding;	 /* < Padding byte */
/*
 * Structure for Convergence SubLayer Types with a maximum of 4 classifiers
 */
	stConvergenceSLTypes cConvergenceSLTypes[MAX_CLASSIFIERS_IN_SF];

} stServiceFlowParamSI, *pstServiceFlowParamSI;
typedef stServiceFlowParamSI CServiceFlowParamSI;

/*
 * structure stLocalSFAddRequest
 */
typedef struct _stLocalSFAddRequest {
	B_UINT8 u8Type;	/* < Type */
	B_UINT8 eConnectionDir; /* < Connection direction */
	/* brief 16 bit TID */
	B_UINT16 u16TID; /* < 16bit TID */
	/* brief 16bitCID */
	B_UINT16 u16CID; /* < 16bit CID */
	/* brief 16bitVCID */
	B_UINT16 u16VCID; /* < 16bit VCID */
	/* brief structure ParameterSet */
	stServiceFlowParamSI *psfParameterSet; /* < structure ParameterSet */

} stLocalSFAddRequest, *pstLocalSFAddRequest;

/*
 * structure stLocalSFAddIndication
 */
typedef struct _stLocalSFAddIndication {
	B_UINT8 u8Type;	/* < Type */
	B_UINT8 eConnectionDir;	/* < Connection Direction */
	/* brief 16 bit TID */
	B_UINT16 u16TID; /* < TID */
	/* brief 16bitCID */
	B_UINT16 u16CID; /* < 16bitCID */
	/* brief 16bitVCID */
	B_UINT16 u16VCID; /* < 16bitVCID */
	/* brief structure AuthorizedSet */
	/* brief structure AuthorizedSet */
	stServiceFlowParamSI *psfAuthorizedSet; /* < AuthorizedSet of type stServiceFlowParamSI */
	/* brief structure AdmittedSet */
	stServiceFlowParamSI *psfAdmittedSet; /* < AdmittedSet of type stServiceFlowParamSI */
	/* brief structure ActiveSet */
	stServiceFlowParamSI *psfActiveSet; /* < sfActiveSet of type stServiceFlowParamSI */
	B_UINT8 u8CC; /* <Confirmation Code */
	B_UINT8 u8Padd; /* < 8-bit Padding */
	B_UINT16 u16Padd; /* < 16 bit Padding */

} stLocalSFAddIndication;

typedef struct _stLocalSFAddIndication *pstLocalSFAddIndication;
/*
 * structure stLocalSFChangeRequest is same as structure stLocalSFAddIndication
 */
typedef struct _stLocalSFAddIndication stLocalSFChangeRequest, *pstLocalSFChangeRequest;
/*
 * structure stLocalSFChangeIndication is same as structure stLocalSFAddIndication
 */
typedef struct _stLocalSFAddIndication stLocalSFChangeIndication, *pstLocalSFChangeIndication;

/*
 * structure stLocalSFDeleteRequest
 */
typedef struct _stLocalSFDeleteRequest {
	B_UINT8 u8Type; /* < Type */
	B_UINT8 u8Padding; /* < Padding byte */
	B_UINT16 u16TID; /* < TID */
	/* brief 32bitSFID */
	B_UINT32 u32SFID; /* < SFID */
} stLocalSFDeleteRequest, *pstLocalSFDeleteRequest;

struct bcm_del_indication {
	B_UINT8 u8Type;	/* < Type */
	B_UINT8 u8Padding; /* < Padding */
	B_UINT16 u16TID; /* < TID */
	/* brief 16bitCID */
	B_UINT16 u16CID; /* < CID */
	/* brief 16bitVCID */
	B_UINT16 u16VCID; /* < VCID */
	/* brief 32bitSFID */
	B_UINT32 u32SFID; /* < SFID */
	/* brief 8bit Confirmation code */
	B_UINT8 u8ConfirmationCode; /* < Confirmation code */
	B_UINT8 u8Padding1[3]; /* < 3 byte Padding */
};

struct bcm_stim_sfhostnotify {
	B_UINT32 SFID; /* SFID of the service flow */
	B_UINT16 newCID; /* the new/changed CID */
	B_UINT16 VCID; /* Get new Vcid if the flow has been made active in CID update TLV, but was inactive earlier or the orig vcid */
	B_UINT8 RetainSF; /* Indication to Host if the SF is to be retained or deleted; if TRUE-retain else delete */
	B_UINT8 QoSParamSet; /* QoS paramset of the retained SF */
	B_UINT16 u16reserved; /* For byte alignment */
};

#endif
