#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

struct bcm_packet_class_rules {
	/* 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;
};

struct bcm_phs_rules {
	/* 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];
};

struct bcm_convergence_types {
	/* 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];
	/* Packet classification rules structure */
	struct bcm_packet_class_rules cCPacketClassificationRule;
	/* Payload header suppression rules structure */
	struct bcm_phs_rules cPhsRule;
};

struct bcm_connect_mgr_params {
	/* 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
	 */
	struct bcm_convergence_types cConvergenceSLTypes[MAX_CLASSIFIERS_IN_SF];
};

struct bcm_add_request {
	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 */
	struct bcm_connect_mgr_params *psfParameterSet; /* < connection manager parameters */
};

struct bcm_add_indication {
	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 */
	struct bcm_connect_mgr_params *psfAuthorizedSet; /* Authorized set of connection manager parameters */
	struct bcm_connect_mgr_params *psfAdmittedSet; /* Admitted set of connection manager parameters */
	struct bcm_connect_mgr_params *psfActiveSet; /* Activeset of connection manager parameters */
	B_UINT8 u8CC; /* <Confirmation Code */
	B_UINT8 u8Padd; /* < 8-bit Padding */
	B_UINT16 u16Padd; /* < 16 bit Padding */
};

struct bcm_del_request {
	B_UINT8 u8Type; /* < Type */
	B_UINT8 u8Padding; /* < Padding byte */
	B_UINT16 u16TID; /* < TID */
	/* brief 32bitSFID */
	B_UINT32 u32SFID; /* < SFID */
};

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
