diff src/g23m-fad/rlp/rlp.h @ 174:90eb61ecd093

src/g23m-fad: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 12 Oct 2016 05:40:46 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-fad/rlp/rlp.h	Wed Oct 12 05:40:46 2016 +0000
@@ -0,0 +1,1389 @@
+/*
++-----------------------------------------------------------------------------
+|  Project :  CSD (8411)
+|  Modul   :  Rlp.h
++-----------------------------------------------------------------------------
+|  Copyright 2002 Texas Instruments Berlin, AG
+|                 All rights reserved.
+|
+|                 This file is confidential and a trade secret of Texas
+|                 Instruments Berlin, AG
+|                 The receipt of or possession of this file does not convey
+|                 any rights to reproduce or disclose its contents or to
+|                 manufacture, use, or sell anything it may describe, in
+|                 whole, or in part, without the specific written consent of
+|                 Texas Instruments Berlin, AG.
++-----------------------------------------------------------------------------
+|  Purpose :  Definitions for the Protocol Stack Entity
+|             Radio Link Protocol
++-----------------------------------------------------------------------------
+*/
+
+#ifndef RLP_H
+#define RLP_H
+
+/*
+ * Conditional Compiling
+ */
+
+#undef TRACE_INTERPRETED_RLP_FRAME
+#undef TRACE_RLP_FRAME
+#define V42BIS
+
+/*
+ * Macros
+ */
+
+ /*
+ * instance management
+ */
+#define GET_INSTANCE(p) &rlp_data_base[0]
+
+/*
+ * Constants
+ */
+/*
+ * global unchangable constants
+ */
+#ifdef V42BIS
+#define ORIG_RLP_VERS	      1     /* rlp version (1=single link ext)*/
+#else
+#define ORIG_RLP_VERS	      0     /* rlp version (0=single link)*/
+#endif
+
+#define WIND_SIZE_MAX   61     /* max window size RLP	     */
+#define DATA_SIZE_SHORT 25     /* num of data bytes in rlp frame (short format) */
+#define DATA_SIZE_LONG	67     /* num of data bytes in rlp frame (long format, version 1) */
+
+/*
+ * default timeout for the RLP timer
+ */
+#define GEN_TO	TT_VALUE /* default retransmission timer*/
+#define UL_TO   TUL_RCV_VALUE
+
+/*
+ * max number of outstanding SREJs
+ */
+#define MAX_SREJ_COUNT  10
+
+/*
+* timer indices
+*
+* 0..MAX_SREJ_COUNT  reserved for field
+*/
+#define TT_HANDLE	    (MAX_SREJ_COUNT+1)
+#define TRCVR_HANDLE    (MAX_SREJ_COUNT+2)
+#define TXID_HANDLE	    (MAX_SREJ_COUNT+3)
+#define TUL_RCV_HANDLE  (MAX_SREJ_COUNT+4)
+
+/*
+ * number of frames that are requested in case if low water
+ */
+
+/*
+ * maximum number N2 can have
+ */
+#define N2_MAX  255
+
+/*
+ * derived constants
+ */
+#define HEADER_LEN        (RLP_HEADER_LEN/8)
+#define TRAILER_LEN       (RLP_TRAILER_LEN/8)
+#define FRAME_SIZE_SHORT  (DATA_SIZE_SHORT+HEADER_LEN+TRAILER_LEN)
+#define FRAME_SIZE_LONG   (DATA_SIZE_LONG+HEADER_LEN+TRAILER_LEN)
+
+/*
+ * constants for XID parameter types
+ */
+#define XID_T_NULL	    0  /* end tag			*/
+#define XID_T_RLP_VERS	1  /* rlp version number		*/
+#define XID_T_K_IWF_MS	2  /* window size iwf->ms 	*/
+#define XID_T_K_MS_IWF	3  /* window size ms->iwf 	*/
+#define XID_T_T1	      4  /* acknowledge timer		*/
+#define XID_T_N2	      5  /* max num of retrans attempts */
+#define XID_T_T2	      6  /* reply delay 		*/
+#define XID_T_COMPR	    7  /* data compression		*/
+
+/*
+ * constants for XID parameter length in bytes
+ */
+#define XID_L_RLP_VERS	1  /* rlp version number		*/
+#define XID_L_K_MS_IWF	1  /* window size ms->iwf 	*/
+#define XID_L_K_IWF_MS	1  /* window size iwf->ms 	*/
+#define XID_L_T1	      1  /* acknowledge timer		*/
+#define XID_L_N2	      1  /* max num of retrans attempts */
+#define XID_L_T2	      1  /* reply delay 		*/
+#define XID_L_COMPR	    4  /* data compression		*/
+
+/*
+ * constants, to indicate parameters, which are used in XID
+ */
+#define UF_SET_RLP_VERS   0x01
+#define UF_SET_K_IWF_MS   0x02
+#define UF_SET_K_MS_IWF   0x04
+#define UF_SET_T1	        0x08
+#define UF_SET_N2	        0x10
+#define UF_SET_T2	        0x20
+#define UF_SET_COMPR	    0x40
+#define UF_ALL		        0x7F
+
+/*
+ * default values for XID
+ */
+#define DEF_RLP_VERS	  0
+#define DEF_K_MS_IWF	  61
+#define DEF_K_IWF_MS	  61
+#define DEF_T1_FR14400	  520
+#define DEF_T1_FR9600	  480
+#define DEF_T1_FR4800	  540
+#define DEF_T1_HR4800	  780
+
+#define DEF_T2		  80
+#define DEF_N2		  6
+#define DEF_PT		  0
+#define DEF_P0		  0
+#define DEF_P1		  512
+#define DEF_P2		  6
+
+/*
+ * Bitoffset for encoding/decoding
+ */
+#define ENCODE_OFFSET	  0
+
+/*
+ * Parameter of dynamic configuration commands
+ */
+
+#ifndef NTRACE
+
+/* for trace purposes */
+
+#define SERVICE_NAME_KER      "KER"
+#define SERVICE_NAME_KERXID_C "XID_C"
+#define SERVICE_NAME_RCV      "RCV"
+#define SERVICE_NAME_SND      "SND"
+
+#endif
+
+#define KER       ker.
+#define KERXID_C  ker.XID_C.
+#define RCV	      rcv.
+#define SND	      snd.
+
+/*
+ * State index for the entity processes
+ */
+
+/*
+ * States of the entity process KERNEL
+ */
+#define RLP_ADM_AND_DETACHED	      0
+#define RLP_ADM_AND_ATTACHED	      1
+#define RLP_PENDING_CONNECT_REQ     2
+#define RLP_PENDING_CONNECT_IND     3
+#define RLP_CONNECTION_ESTABLISHED  4
+#define RLP_PENDING_RESET_REQ	      5
+#define RLP_PENDING_RESET_IND	      6
+#define RLP_DISCONNECT_INITIATED    7
+#define RLP_PERMANENT_ERROR	        9
+#define RLP_PENDING_REMAP_REQ	      10
+#define RLP_REMAP_DATA		          11
+
+/*
+ * States of the entity process RCV
+ */
+#define RPDU_WAIT_FOR_A_BLOCK 0
+
+
+/*
+ * States of the entity process SND
+ */
+#define SPDU_WAIT_EVENT 0
+
+/*==== TYPES ======================================================*/
+
+/*
+ * RLP global typedefs
+ */
+
+typedef ULONG T_BITSET;
+
+typedef UBYTE	    T_BIT_INT;
+typedef T_BIT_INT T_BIT;
+
+typedef UBYTE	    T_FRAME_NUM;
+typedef UBYTE	    T_EXT_FRAME_NUM;
+
+/*
+ * structure of a RLP Frame
+ */
+typedef UBYTE   T_RLP_FRAMEDATA;
+/*
+typedef UBYTE   T_RLP_FRAME_SHORT[FRAME_SIZE_SHORT];
+*/
+typedef UBYTE   T_RLP_FRAME_LONG[FRAME_SIZE_LONG];
+typedef UBYTE*  T_RLP_FRAMEPTR;
+
+/*
+ * bitcoding of the M5-M1 of the RLP header for the
+ * different frame types.
+ */
+typedef enum
+{
+  UF_UI    =0x00,
+  UF_DM    =0x03,
+  UF_SABM  =0x07,
+  UF_DISC  =0x08,
+  UF_UA    =0x0C,
+  UF_NULL  =0x0F,
+  UF_XID   =0x17,
+  UF_TEST  =0x1C,
+  UF_REMAP =0x11
+} T_UF;
+
+/*
+ * bitcoding of the S2-S1 of the RLP header for the
+ * different frame types.
+ */
+typedef enum
+{
+  SF_RR   =0x00,
+  SF_RNR  =0x01,
+  SF_REJ  =0x02,
+  SF_SREJ =0x03
+} T_SF;
+
+typedef enum
+{
+  PDU_INVALID,
+  PDU_SABM,
+  PDU_DISC,
+  PDU_UA,
+  PDU_DM,
+  PDU_TEST,
+  PDU_NULL,
+  PDU_XID,
+  PDU_UI,
+  PDU_RR_I,
+  PDU_RNR_I,
+  PDU_SREJ_I,
+  PDU_REJ_I,
+  PDU_RR,
+  PDU_RNR,
+  PDU_SREJ,
+  PDU_REJ,
+  PDU_REMAP
+} T_PDU_TYPE;
+
+/*
+ * Process kernel specific types
+ */
+#define IS_IDLE   0
+#define IS_SEND   1
+
+#define IW_IDLE   0
+#define IW_WAIT   1
+
+#define ISW_IDLE  0
+#define ISW_SEND  1
+#define ISW_WAIT  2
+
+#define  DTX_N    0
+#define  DTX_RR   1
+#define  DTX_RNR  2
+
+typedef UBYTE T_COUNTER;
+
+#define INVALID_IDX	((UBYTE) -1)
+
+/*
+ * send buffer management
+ */
+#define SBM_INVALID_IDX   INVALID_IDX
+
+#define SBM_BUF_SIZE	  (WIND_SIZE_MAX+1)
+#define SBM_PRIMBUF_SIZE  SBM_BUF_SIZE
+
+typedef T_RLP_DATA_REQ	  T_SBM_PRIM;
+
+typedef UBYTE T_SBM_BUFFER_INDEX;
+typedef UBYTE T_SBM_BUFFER_EXTIDX;
+
+typedef USHORT T_SBM_PRIM_INDEX;
+typedef USHORT T_SBM_PRIM_EXTIDX;
+
+typedef struct
+{
+  T_SBM_PRIM *Prim;
+  UBYTE       RefCount;
+} T_SBM_PRIMSLOT;
+
+typedef enum
+{
+  SBM_IDLE,
+  SBM_SEND,
+  SBM_WAIT
+} T_SBM_STATE;
+
+typedef struct
+{
+  T_SBM_PRIM_EXTIDX	PrimSlot1;  /* Index on T_SBM_PRIM	   */
+  T_SBM_PRIM_EXTIDX	PrimSlot2;  /* Index on T_SBM_PRIM	   */
+  USHORT		    Offset1;        /* Offset of data in primitive  */
+  USHORT		    Offset2;        /* Offset of data in primitive  */
+  USHORT		    Len1;	          /* Length of data in primitive  */
+  USHORT		    Len2;	          /* Length of data in primitive  */
+  T_SBM_STATE		S_State;        /* 'SBM_SEND' means, data has to be sent (with seq. num. n) */
+  T_SBM_BUFFER_EXTIDX	NextSREJ;
+} T_SBM_SLOT;
+
+/*
+ * receive buffer management
+ */
+#define RBM_INVALID_IDX   INVALID_IDX
+
+#define RBM_BUF_SIZE	  (WIND_SIZE_MAX+1)
+
+#ifdef _SIMULATION_
+#define RBM_PQ_MAX_PRIM   10
+#else
+#define RBM_PQ_MAX_PRIM   4
+#endif
+
+#define RBM_PQ_THRE_RNR   (RBM_PQ_MAX_PRIM-2)
+#define RBM_PQ_SIZE	      (RBM_PQ_MAX_PRIM+1)
+
+typedef T_RLP_DATA_IND  T_RBM_PRIM;
+
+typedef UBYTE T_RBM_BUFFER_INDEX;
+typedef UBYTE T_RBM_BUFFER_EXTIDX;
+typedef UBYTE T_RBM_PQ_INDEX;
+
+typedef T_RLP_FRAME_LONG  T_RBM_FRAME_LONG;
+typedef T_RLP_FRAMEPTR	  T_RBM_FRAMEPTR;
+
+typedef enum
+{
+  RBM_IDLE,
+  RBM_RCVD,
+  RBM_SREJ,
+  RBM_WAIT
+} T_RBM_STATE;
+
+
+typedef struct
+{
+  T_RBM_FRAME_LONG Frame;   /* To store user information */
+  T_RBM_STATE	   R_State;   /* 'RBM_RCVD': data has been received (with seq. num. n)
+			                         'RBM_SREJ': the retrans. has to be requested using srej(n)
+			                         'RBM_WAIT': the entity waits for the requested retransmitted data */
+} T_RBM_SLOT;
+
+/*
+ * SREJ timer managment
+ */
+
+#define SRM_DATA_SIZE	 (WIND_SIZE_MAX+1)
+
+typedef T_COUNTER	 T_SRM_COUNTER;
+
+typedef struct
+{
+  T_SRM_COUNTER   count;
+} T_SRM_SLOT;
+
+/*
+ * process global data
+ */
+
+/*
+ * data for process kernel
+ */
+
+/*
+ * table entry for timeout handling of the T_RCVS timer
+ */
+typedef struct
+{
+  BOOL	    	isFree;
+  T_FRAME_NUM	slot;
+  UBYTE 	    trcvs_running;
+} T_RCVS_ENTRY;
+
+typedef struct
+{
+  UBYTE state;
+#ifndef NTRACE
+  char *name;
+  char *state_name;
+#endif
+} T_SUB_STATE;
+
+typedef struct
+{
+  UBYTE state;
+#ifndef NTRACE
+  char *name;
+  char *state_name;
+#endif
+
+  /*------------ variables according to GSM 04.22 ----------------------------------*/
+
+  T_BIT 	    ABit;	      /* to store the Ack_Flg value of a received Connect_Resp frame */
+
+  T_BIT 	    Ackn_FBit;	  /* Value of the F-Bit used in the next acknowledging PDU. */
+  UBYTE	        Ackn_State;   /* 'SEND': an acknowledging PDU (Supervisory or Data) has to be sent */
+				              /* after receiving an I-frame or a command frame with the Poll bit = 1 */
+
+  USHORT	    BytesPerPrim; /* number of bytes in RLP data primitives */
+  BOOL		    Connected;	  /* Process in RLP_CONNECTION_ESTABLISHED state */
+
+  USHORT	    Def_T1;       /* Default value for T1, depends on transmission rate */
+
+  T_COUNTER	    DISC_Count;   /* to count the transmissions of DISC.*/
+  BOOL		    DISC_Ind;	  /* In RLP_DISCONNECT_INITIATED: Indicate succesfull DISC by RLP_DISC_IND */
+  T_BIT 	    DISC_PBit;	  /* The value of the P-bit in the next DISC command PDU.*/
+  UBYTE	        DISC_State;   /* 'SEND': the DISC command PDU has to be sent at the next possible opportunity. */
+				              /* 'WAIT': the RLP entity waits for the corresponding response.*/
+  T_BIT 	    DM_FBit;	  /* Value of the F-Bit used in the next DM response PDU.*/
+  UBYTE         DM_State;	  /* 'SEND': the PDU DM has to be sent. */
+  UBYTE	        DTX_SF;	      /* to store the last Superv. frame for DTX (only RR or RNR can be suppressed) */
+  T_FRAME_NUM   DTX_VR;	      /* to store the last transmitted value of VR (used to decide the DTX condition) */
+  USHORT	    FrameSize;	  /* Size of RLP frame may be FRAME_SIZE_SHORT or FRAME_SIZE_LONG */
+  USHORT	    FramesPerPrim;/* number of frames in RLP data primitives (calculated from BytesPerPrim) */
+
+  T_FRAME_NUM	K_ms_iwf;	    /* window size ms->iwf */
+  T_FRAME_NUM	K_iwf_ms;	    /* window size iwf->ms */
+
+  BOOL		    LRFull;	      /* Local Receiver Full */
+  BOOL		    LRReady;	  /* Local Receiver Ready */
+
+  UBYTE 	    N2; 	        /* maximum numer of retransmission attempts */
+
+  USHORT	    OldFrameSize;	/* Size of RLP frame before REMAP */
+
+  T_FRAME_NUM	Orig_K_iwf_ms;  /* original value for k_iwf_ms */
+  T_FRAME_NUM	Orig_K_ms_iwf;  /* original value for k_ms_iwf */
+  UBYTE 	    Orig_N2;	    /* original value for n2 */
+  UBYTE 	    Orig_P0;	    /* original value for p0 */
+  USHORT	    Orig_P1;	    /* original value for p1 */
+  UBYTE 	    Orig_P2;	    /* original value for p2 */
+  UBYTE 	    Orig_Pt;	    /* original value for pt */
+  USHORT	    Orig_T1;	    /* original value for t1 */
+  USHORT	    Orig_T2;	    /* original value for t2 */
+
+  UBYTE 	    P0; 	        /* V.42bis data compression request */
+  USHORT	    P1; 	        /* number of possible codewords   */
+  UBYTE 	    P2; 	        /* maximum encodable string length */
+
+  T_COUNTER	    Poll_Count;   /* to count the transmissions of poll requests*/
+  UBYTE	        Poll_State;   /* 'SEND': a supervisory PDU with P-bit set to one has to be sent*/
+				              /* 'WAIT': the RLP entity waits for the response with F-bit set to one */
+  UBYTE	        Poll_xchg;    /* 'IDLE': sending of a frame with P-bit set is allowed */
+				              /* 'WAIT': an acknowledgement of a previous P-bit is outstanding */
+  UBYTE 	    Pt;	          /* type of data compression */
+
+  UBYTE	        REJ_State;	  /* The REJ_State is send if and only if a REJ PDU has to be sent */
+
+  T_RLP_FRAME_LONG  REMAP_Frame;      /* frame to be sent in the next REMAP PDU*/
+  T_FRAME_DESC	    REMAP_FrameDesc;  /* Descriptor for REMAP_Frame (static) */
+  T_FRAME_NUM	    RemapNr;		      /* Frame number taken from REMAP response */
+
+  UBYTE 	    Rlp_Vers;	  /* negotiated RLP version */
+  BOOL		    RRReady;	  /* Remote Receiver Ready*/
+  T_COUNTER	    SABM_Count;   /* to count the transmissions of SABM*/
+  UBYTE	        SABM_State;   /* 'SEND': the SABM PDU has to be sent */
+				                    /* 'WAIT': the RLP entity waits for the UA response */
+  T_SF		    SF; 	        /* to store the last superv. PDU type*/
+  USHORT	    SREJ_Count;   /* number of outstanding SREJs == number of running SREJ timers (downlink) */
+
+  USHORT	    T1; 	    /* value for acknowledge timer */
+  USHORT	    T2; 	    /* reply delay */
+  USHORT	    T_ul;	    /* value for timer T_UL_RCV (upper layer waiting for data) */
+
+  T_RLP_FRAME_LONG  TEST_R_Frame;     /* data to be sent in the next TEST response PDU */
+  T_FRAME_DESC	    TEST_R_FrameDesc; /* descriptor for TEST_R_Frame (static) */
+  T_BIT 	        TEST_R_FBit;      /* value of the P-Bit used in the next TEST response PDU */
+  UBYTE	            TEST_R_State;     /* 'SEND': the TEST response PDU has to be sent */
+
+  T_BIT 	        UA_FBit;	    /* value of the F-Bit used in the next UA response */
+  UBYTE	            UA_State;	    /* if (UA_State = SEND) an UA PDU has to be sent */
+
+  T_RLP_FRAME_LONG  UI_Frame;	    /* frame to be sent in the next UI PDU*/
+  T_FRAME_DESC	    UI_FrameDesc;   /* Descriptor for UI_Frame (static) */
+  T_BIT 	        UI_PBit;	    /* value of the P-Bit used in the next UI PDU */
+  UBYTE	            UI_State;	    /* 'SEND': a UI PDU has to be sent */
+
+  UBYTE	            UL_Rcv_State;   /* 'WAIT': Upper layer is waiting for data */
+  UBYTE	            UL_Snd_State;   /* 'WAIT': RLP is waiting for data from upper layer*/
+
+  T_COUNTER	        XID_Count;	  /* to count the transmissions of XID commands */
+
+  T_RLP_FRAME_LONG  XID_C_Frame;    /* data to be sent in the next XID command PDU */
+  T_FRAME_DESC	    XID_C_FrameDesc;/* Descriptor for XID_C_Frame (static) */
+  T_BIT 	        XID_C_PBit;       /* value of the P-Bit used in the next XID command PDU */
+
+  T_SUB_STATE	    XID_C;          /* 'SEND': the XID command PDU has to be sent */
+				                    /* 'WAIT': the RLP entity waits for the next XID response */
+
+  T_BITSET	        XID_C_Used_Flg; /* Contains bits that indicate
+                                       which parameters have been received in the last XID command PDU */
+
+  T_RLP_FRAME_LONG  XID_R_Frame;      /* frame to be sent in the next XID response PDU */
+  T_FRAME_DESC	    XID_R_FrameDesc;  /* Descriptor for XID_R_Frame (static) */
+  T_BIT 	        XID_R_FBit;       /* value of the P-Bit used in the next XID response PDU */
+  UBYTE	            XID_R_State;      /* 'SEND': the XID response PDU has to be sent*/
+  T_BITSET	        XID_R_Used_Flg;   /* Contains bits that indicate
+                                       which parameters have to be send in the next XID response PDU */
+
+  T_RCVS_ENTRY	    rcvsTab[MAX_SREJ_COUNT];
+
+} T_KER;
+
+/*
+ * data for process receive_pdu
+ */
+
+/* no global data */
+
+/*
+ * data for process send_pdu
+ */
+
+typedef struct
+{
+  UBYTE state;
+#ifndef NTRACE
+  char *name;
+  char *state_name;
+#endif
+
+  T_RLP_FRAME_LONG  HO_Frame;	    /* Buffer and Descriptor for RLP Frames with header only */
+  T_FRAME_DESC	    HO_FrameDesc;
+  USHORT	    FrameSize;		      /* Size of RLP frame may be FRAME_SIZE_SHORT or FRAME_SIZE_LONG */
+} T_SND;
+
+/*
+ * data for send buffer management
+ */
+typedef struct
+{
+  T_SBM_PRIM_INDEX	    CurrPrimSlot;
+  USHORT		            CurrPrimOff;
+  USHORT		            CurrPrimLen;
+  T_SBM_BUFFER_INDEX	  K;
+  T_SBM_BUFFER_EXTIDX	  LastSentFrame;
+  T_SBM_PRIMSLOT	      Prim[SBM_PRIMBUF_SIZE];
+  T_SBM_SLOT		        Frame[SBM_BUF_SIZE];
+  USHORT		            FrameSize;
+  T_SBM_BUFFER_EXTIDX	  SREJ_List;
+  T_SBM_BUFFER_INDEX	  REJ_Buf[N2_MAX +1];
+  UBYTE 		            REJ_BufLo;
+  UBYTE 		            REJ_BufHi;
+  UBYTE 		            REJ_BufSize;
+  T_SBM_BUFFER_INDEX	  REJ_BufLastN;
+  T_SBM_BUFFER_INDEX	  VA;
+  T_SBM_BUFFER_INDEX	  VD;
+  T_SBM_BUFFER_INDEX	  VS;
+} T_SBM;
+
+/*
+ * data for receive buffer management
+ */
+typedef struct
+{
+  BOOL			          Initialised;
+  BOOL			          FrameInRiBu;
+  T_RBM_PRIM         *CurrPrim;
+  USHORT		          CurrPrimCou;
+  USHORT		          FramesPerPrim;
+  T_RBM_BUFFER_INDEX  K;
+  T_RBM_SLOT		      Slot[RBM_BUF_SIZE];
+  USHORT		          FrameSize;
+  T_RBM_FRAME_LONG	  Frame;
+  T_RBM_PRIM	       *PQ_Array[RBM_PQ_SIZE];
+  T_RBM_PQ_INDEX	    PQ_Read;
+  T_RBM_PQ_INDEX	    PQ_Write;
+  T_RBM_BUFFER_INDEX  VR;
+  T_RBM_BUFFER_INDEX  LastVR;
+} T_RBM;
+
+/*
+ * data for srej timer management
+ */
+typedef struct
+{
+  T_SRM_SLOT   Data[SRM_DATA_SIZE];
+} T_SRM;
+
+#if defined (TRACE_INTERPRETED_RLP_FRAME) || defined (TRACE_RLP_FRAME)
+
+typedef struct
+{
+  char trc_buf[80];
+  UBYTE idx;
+} T_RLP_DEBUG;
+
+#endif
+
+/*
+ * entity data for each RLP instance
+ */
+
+typedef struct
+{
+  UBYTE 	  tul_rcv_running;
+  T_FRAME_NUM rcvs_slot;
+
+  T_KER 	  ker; /* process kernel */
+  T_SND 	  snd; /* process send_pdu */
+  T_SBM 	  sbm; /* send buffer manager */
+  T_SUB_STATE rcv;
+  T_RBM 	  rbm; /* receive buffer manager */
+  T_SRM 	  srm; /* srej timer manager */
+
+  /* Flags for frame trace */
+  BOOL		 uplink_frame_trace;
+  BOOL		 downlink_frame_trace;
+
+#if defined (TRACE_INTERPRETED_RLP_FRAME) || defined (TRACE_RLP_FRAME)
+  T_RLP_DEBUG deb;
+#endif
+
+} T_RLP_DATA;
+
+
+/*==== EXPORT =====================================================*/
+/*
+ * data base
+ */
+
+
+/*
+ * instance data base
+ */
+#ifdef RLP_PEI_C
+
+/*lint -e759 : header declaration for symbol 'rlp_data_base' could be moved from header to module */
+GLOBAL T_RLP_DATA rlp_data_base[1], *rlp_data;
+GLOBAL ULONG rlp_data_base_size;
+GLOBAL ULONG rlp_data_magic_num;
+
+#else
+
+EXTERN T_RLP_DATA  rlp_data_base [], *rlp_data;
+EXTERN ULONG rlp_data_magic_num;
+
+#endif
+
+#define ENTITY_DATA rlp_data
+#define RLP_DATA_MAGIC_NUM (('R'<<24) + ('L'<<16) + ('P'<<8))	/* "FAD",NUL */
+
+/*
+ *  Prototypes
+ *
+ *  RLP KERNEL
+ *
+ *  KERNEL primitive processing
+ */
+
+EXTERN void ker_rlp_attach_req	 (T_RLP_ATTACH_REQ	*rlp_attach_req);
+EXTERN void ker_rlp_detach_req	 (T_RLP_DETACH_REQ	*rlp_detach_req);
+EXTERN void ker_rlp_connect_req	 (T_RLP_CONNECT_REQ	*rlp_connect_req);
+EXTERN void ker_rlp_connect_res	 (T_RLP_CONNECT_RES	*rlp_connect_res);
+EXTERN void ker_rlp_disc_req	 (T_RLP_DISC_REQ	*rlp_disc_req);
+EXTERN void ker_rlp_reset_req	 (T_RLP_RESET_REQ	*rlp_reset_req);
+EXTERN void ker_rlp_reset_res	 (T_RLP_RESET_RES	*rlp_reset_res);
+EXTERN void ker_rlp_data_req	 (T_RLP_DATA_REQ	*rlp_data_req);
+EXTERN void ker_rlp_getdata_req	 (T_RLP_GETDATA_REQ	*rlp_getdata_req);
+EXTERN void ker_rlp_ui_req	 (T_RLP_UI_REQ		*rlp_ui_req);
+EXTERN void ker_rlp_remap_req	 (T_RLP_REMAP_REQ	*rlp_remap_req);
+EXTERN void ker_rlp_remap_data_res (T_RLP_REMAP_DATA_RES	*ker_rlp_remap_data_res);
+
+/*
+ *  KERNEL signal processing
+ */
+#ifdef OPTION_MULTITHREAD
+  #define sig_rcv_ker_sabm_ind	   _ENTITY_PREFIXED(sig_rcv_ker_sabm_ind)
+  #define sig_rcv_ker_disc_ind	   _ENTITY_PREFIXED(sig_rcv_ker_disc_ind)
+  #define sig_rcv_ker_ua_ind	     _ENTITY_PREFIXED(sig_rcv_ker_ua_ind)
+  #define sig_rcv_ker_dm_ind	     _ENTITY_PREFIXED(sig_rcv_ker_dm_ind)
+  #define sig_rcv_ker_rr_ind	     _ENTITY_PREFIXED(sig_rcv_ker_rr_ind)
+  #define sig_rcv_ker_rnr_ind	     _ENTITY_PREFIXED(sig_rcv_ker_rnr_ind)
+  #define sig_rcv_ker_rej_ind	     _ENTITY_PREFIXED(sig_rcv_ker_rej_ind)
+  #define sig_rcv_ker_srej_ind	   _ENTITY_PREFIXED(sig_rcv_ker_srej_ind)
+  #define sig_rcv_ker_rr_i_ind	   _ENTITY_PREFIXED(sig_rcv_ker_rr_i_ind)
+  #define sig_rcv_ker_rnr_i_ind    _ENTITY_PREFIXED(sig_rcv_ker_rnr_i_ind)
+  #define sig_rcv_ker_rej_i_ind    _ENTITY_PREFIXED(sig_rcv_ker_rej_i_ind)
+  #define sig_rcv_ker_srej_i_ind   _ENTITY_PREFIXED(sig_rcv_ker_srej_i_ind)
+  #define sig_rcv_ker_xid_ind	     _ENTITY_PREFIXED(sig_rcv_ker_xid_ind)
+  #define sig_rcv_ker_test_ind	   _ENTITY_PREFIXED(sig_rcv_ker_test_ind)
+  #define sig_rcv_ker_ready_ind    _ENTITY_PREFIXED(sig_rcv_ker_ready_ind)
+  #define sig_rcv_ker_remap_ind    _ENTITY_PREFIXED(sig_rcv_ker_remap_ind)
+  #define sig_rcv_ker_rawdata_ind  _ENTITY_PREFIXED(sig_rcv_ker_rawdata_ind)
+#endif
+
+EXTERN void sig_rcv_ker_sabm_ind     (void);
+EXTERN void sig_rcv_ker_disc_ind     (T_BIT);
+EXTERN void sig_rcv_ker_ua_ind	     (T_BIT);
+EXTERN void sig_rcv_ker_dm_ind	     (T_BIT);
+EXTERN void sig_rcv_ker_rr_ind	     (T_BIT, T_BIT, T_FRAME_NUM);
+EXTERN void sig_rcv_ker_rnr_ind      (T_BIT, T_BIT, T_FRAME_NUM);
+EXTERN void sig_rcv_ker_rej_ind      (T_BIT, T_BIT, T_FRAME_NUM);
+EXTERN void sig_rcv_ker_srej_ind     (T_BIT, T_BIT, T_FRAME_NUM);
+EXTERN void sig_rcv_ker_rr_i_ind     (T_BIT, T_BIT, T_FRAME_NUM, T_FRAME_NUM);
+EXTERN void sig_rcv_ker_rnr_i_ind    (T_BIT, T_BIT, T_FRAME_NUM, T_FRAME_NUM);
+EXTERN void sig_rcv_ker_rej_i_ind    (T_BIT, T_BIT, T_FRAME_NUM, T_FRAME_NUM);
+EXTERN void sig_rcv_ker_srej_i_ind   (T_BIT, T_BIT, T_FRAME_NUM, T_FRAME_NUM);
+EXTERN void sig_rcv_ker_xid_ind      (T_BIT, T_BIT);
+EXTERN void sig_rcv_ker_test_ind     (T_BIT, T_BIT);
+EXTERN void sig_rcv_ker_ready_ind    (void);
+EXTERN void sig_rcv_ker_remap_ind    (void);
+
+#ifdef _SIMULATION_
+EXTERN void sig_rcv_ker_rawdata_ind  (T_RA_DATA_IND *);
+#else
+EXTERN void sig_rcv_ker_rawdata_ind  (void);
+#endif
+/*
+ *  KERNEL procedures
+ */
+
+#ifdef OPTION_MULTITHREAD
+
+  #define ker_init                _ENTITY_PREFIXED(ker_init)
+  #define ker_get_xid_data        _ENTITY_PREFIXED(ker_get_xid_data)
+  #define ker_put_xid_data        _ENTITY_PREFIXED(ker_put_xid_data)
+  #define ker_copy_frame_to_sdu   _ENTITY_PREFIXED(ker_copy_frame_to_sdu)
+  #define ker_copy_sdu_to_frame   _ENTITY_PREFIXED(ker_copy_sdu_to_frame)
+  #define ker_get_frame_desc      _ENTITY_PREFIXED(ker_get_frame_desc)
+  #define ker_i_handler           _ENTITY_PREFIXED(ker_i_handler)
+  #define ker_init_link_vars      _ENTITY_PREFIXED(ker_init_link_vars)
+  #define ker_reset_all_t_rcvs    _ENTITY_PREFIXED(ker_reset_all_t_rcvs)
+  #define ker_s_handler           _ENTITY_PREFIXED(ker_s_handler)
+  #define ker_send_data           _ENTITY_PREFIXED(ker_send_data)
+  #define ker_send_txu            _ENTITY_PREFIXED(ker_send_txu)
+  #define ker_deinit_link_vars    _ENTITY_PREFIXED(ker_deinit_link_vars)
+  #define ker_send_rlp_error_ind  _ENTITY_PREFIXED(ker_send_rlp_error_ind)
+  #define ker_init_xid_data       _ENTITY_PREFIXED(ker_init_xid_data)
+  #define ker_getSlotTRCVS        _ENTITY_PREFIXED(ker_getSlotTRCVS)
+  #define ker_fill_remap_frame    _ENTITY_PREFIXED(ker_fill_remap_frame)
+  #define ker_send_remap_data     _ENTITY_PREFIXED(ker_send_remap_data)
+  #define ker_set_frame_size      _ENTITY_PREFIXED(ker_set_frame_size)
+
+#ifdef TRACE_RLP_FRAME
+  #define ker_trace_rlp_frame     _ENTITY_PREFIXED(ker_trace_rlp_frame)
+#endif
+
+#endif
+
+EXTERN void	ker_init(void);
+
+EXTERN void		  ker_get_xid_data
+			  (
+			    T_RLP_FRAMEDATA *raw_data,
+			    UBYTE	    index,
+			    T_RLP_XID_IND   *xid_data,
+			    BOOL	     ms_is_initiator,
+			    ULONG	    *used_flags
+			  );
+
+EXTERN void		  ker_put_xid_data
+			  (
+			    T_RLP_FRAMEDATA *l_Data,	      /* buffer for data */
+			    UBYTE	            index,	      /* start index in buffer */
+			    ULONG	            l_uf,	        /* valid parameters */
+			    BOOL	         ms_is_initiator, /* MS is sending XID*/
+			    UBYTE	        l_rlp_version,    /* negotiated vers. */
+			    T_FRAME_NUM   l_k_iwf_ms,       /* winSize ms->iwf  */
+			    T_FRAME_NUM   l_k_ms_iwf,       /* winSize iwf->ms  */
+			    USHORT	      l_t1,	            /* ack timer value  */
+			    UBYTE	        l_n2,	            /* num restransmiss */
+			    USHORT	      l_t2,	            /* reply delay	  */
+			    UBYTE	        l_pt,	            /* type data compr. */
+			    UBYTE	        l_p0,	            /* v42bis comp. req */
+			    USHORT	      l_p1,	            /* num possible code*/
+			    UBYTE	        l_p2	            /* max encod. strlen*/
+			  );
+
+EXTERN void		  ker_copy_frame_to_sdu
+			  (
+			    T_RLP_FRAMEPTR  frame,
+			    T_sdu	   *sdu
+			  );
+
+EXTERN void		  ker_copy_sdu_to_frame
+			  (
+			    T_sdu	   *sdu,
+			    T_RLP_FRAMEPTR  frame,
+			    USHORT	    n
+			  );
+
+EXTERN void		  ker_get_frame_desc
+			  (
+			    T_RLP_FRAMEPTR  frame,
+			    T_FRAME_DESC   *frameDesc
+			  );
+
+EXTERN BOOL ker_i_handler(T_FRAME_NUM ns);
+
+EXTERN void		  ker_init_link_vars
+			  (
+			    void
+			  );
+
+#ifdef TRACE_RLP_FRAME
+EXTERN void		  ker_trace_rlp_frame
+			  (
+			    T_RLP_FRAMEPTR  frame
+			  );
+#endif
+
+EXTERN void		  ker_reset_all_t_rcvs
+			  (
+			    void
+			  );
+
+EXTERN void		  ker_s_handler
+			  (
+			    T_BIT	cBit,
+			    T_BIT	pFBit,
+			    T_SF	sf,
+			    T_FRAME_NUM nr,
+			    BOOL	*retransError
+			  );
+
+EXTERN void		  ker_send_data
+			  (
+			    void
+			  );
+
+EXTERN BOOL		  ker_send_txu
+			  (
+			    void
+			  );
+
+EXTERN void		  ker_deinit_link_vars
+			  (
+			    void
+			  );
+
+EXTERN void		  ker_send_rlp_error_ind
+			  (
+			    USHORT cause
+			  );
+
+EXTERN void		  ker_init_xid_data
+			  (
+			    T_RLP_ATTACH_REQ  *rlp_attach_request
+			  );
+
+EXTERN T_FRAME_NUM	  ker_getSlotTRCVS
+			  (
+			    USHORT index
+			  );
+
+EXTERN void		  ker_fill_remap_frame
+			  (
+			    T_FRAME_NUM  vr
+			  );
+
+EXTERN BOOL		  ker_send_remap_data
+			  (
+			    void
+			  );
+
+EXTERN void		  ker_set_frame_size
+			  (
+			    UBYTE rate
+			  );
+
+/*
+ *  RLP RCV
+ *
+ *  RCV primitive processing
+ */
+#ifdef _SIMULATION_
+EXTERN const void rcv_ra_ready_ind(T_RA_READY_IND *ra_ready_ind);
+#else
+EXTERN void rcv_ra_ready_ind(void);
+#endif
+
+EXTERN void rcv_ra_data_ind(T_RA_DATA_IND *ra_data_ind);
+
+/*
+ *  RCV signal processing
+ */
+#ifdef OPTION_MULTITHREAD
+  #define sig_ker_rcv_rawdata_res   _ENTITY_PREFIXED(sig_ker_rcv_rawdata_res)
+#endif
+
+EXTERN void sig_ker_rcv_rawdata_res
+	    (
+	      T_PDU_TYPE  pduType,
+	      T_BIT	  cBit,
+	      T_BIT	  pFBit,
+	      T_FRAME_NUM nr,
+	      T_FRAME_NUM ns,
+	      BOOL	  crc
+	    );
+
+/*
+ *  RCV procedures
+ */
+
+#ifdef OPTION_MULTITHREAD
+  #define rcv_init		      _ENTITY_PREFIXED(rcv_init)
+#endif
+
+EXTERN void rcv_init(void);
+
+/*
+ *  RLP SND
+ */
+
+/*
+ *  SND signal processing
+ */
+#ifdef OPTION_MULTITHREAD
+  #define sig_ker_snd_sabm_req	 _ENTITY_PREFIXED(sig_ker_snd_sabm_req)
+  #define sig_ker_snd_disc_req	 _ENTITY_PREFIXED(sig_ker_snd_disc_req)
+  #define sig_ker_snd_ua_req		 _ENTITY_PREFIXED(sig_ker_snd_ua_req)
+  #define sig_ker_snd_dm_req		 _ENTITY_PREFIXED(sig_ker_snd_dm_req)
+  #define sig_ker_snd_rr_req		 _ENTITY_PREFIXED(sig_ker_snd_rr_req)
+  #define sig_ker_snd_rnr_req		 _ENTITY_PREFIXED(sig_ker_snd_rnr_req)
+  #define sig_ker_snd_rej_req		 _ENTITY_PREFIXED(sig_ker_snd_rej_req)
+  #define sig_ker_snd_srej_req	 _ENTITY_PREFIXED(sig_ker_snd_srej_req)
+  #define sig_ker_snd_rr_i_req	 _ENTITY_PREFIXED(sig_ker_snd_rr_i_req)
+  #define sig_ker_snd_rnr_i_req  _ENTITY_PREFIXED(sig_ker_snd_rnr_i_req)
+  #define sig_ker_snd_rej_i_req  _ENTITY_PREFIXED(sig_ker_snd_rej_i_req)
+  #define sig_ker_snd_srej_i_req _ENTITY_PREFIXED(sig_ker_snd_srej_i_req)
+  #define sig_ker_snd_ui_req		 _ENTITY_PREFIXED(sig_ker_snd_ui_req)
+  #define sig_ker_snd_xid_req		 _ENTITY_PREFIXED(sig_ker_snd_xid_req)
+  #define sig_ker_snd_test_req	 _ENTITY_PREFIXED(sig_ker_snd_test_req)
+  #define sig_ker_snd_remap_req  _ENTITY_PREFIXED(sig_ker_snd_remap_req)
+  #define sig_ker_snd_null_req	 _ENTITY_PREFIXED(sig_ker_snd_null_req)
+
+  #define sig_ker_snd_set_frame_size_req _ENTITY_PREFIXED(sig_ker_snd_set_frame_size_req)
+#endif
+
+EXTERN void sig_ker_snd_sabm_req	   (void);
+EXTERN void sig_ker_snd_disc_req	   (T_BIT);
+EXTERN void sig_ker_snd_ua_req		   (T_BIT);
+EXTERN void sig_ker_snd_dm_req		   (T_BIT);
+
+#ifdef ENABLE_DTX
+EXTERN void sig_ker_snd_rr_req		   (T_BIT, T_BIT, T_FRAME_NUM, T_BIT);
+#else
+EXTERN void sig_ker_snd_rr_req		   (T_BIT, T_BIT, T_FRAME_NUM);
+#endif
+
+EXTERN void sig_ker_snd_rnr_req 	   (T_BIT, T_BIT, T_FRAME_NUM, T_BIT);
+EXTERN void sig_ker_snd_rej_req 	   (T_BIT, T_BIT, T_FRAME_NUM);
+EXTERN void sig_ker_snd_srej_req	   (T_BIT, T_BIT, T_FRAME_NUM);
+EXTERN void sig_ker_snd_rr_i_req	   (T_BIT, T_BIT, T_FRAME_NUM, T_FRAME_NUM, T_FRAME_DESC *);
+EXTERN void sig_ker_snd_rnr_i_req	   (T_BIT, T_BIT, T_FRAME_NUM, T_FRAME_NUM, T_FRAME_DESC *);
+EXTERN void sig_ker_snd_rej_i_req	   (T_BIT, T_BIT, T_FRAME_NUM, T_FRAME_NUM, T_FRAME_DESC *);
+EXTERN void sig_ker_snd_srej_i_req	 (T_BIT, T_BIT, T_FRAME_NUM, T_FRAME_NUM, T_FRAME_DESC *);
+EXTERN void sig_ker_snd_ui_req		   (T_BIT, T_BIT, T_FRAME_DESC *);
+EXTERN void sig_ker_snd_xid_req 	   (T_BIT, T_BIT, T_FRAME_DESC *);
+EXTERN void sig_ker_snd_test_req	   (T_BIT, T_BIT, T_FRAME_DESC *);
+EXTERN void sig_ker_snd_remap_req	   (T_FRAME_DESC *);
+EXTERN void sig_ker_snd_null_req	   (void);
+
+EXTERN void sig_ker_snd_set_frame_size_req (USHORT);
+
+/*
+ *  SND procedures
+ */
+
+#ifdef OPTION_MULTITHREAD
+  #define snd_init		      _ENTITY_PREFIXED(snd_init)
+  #define snd_send_u_frame	_ENTITY_PREFIXED(snd_send_u_frame)
+  #define snd_send_s_frame	_ENTITY_PREFIXED(snd_send_s_frame)
+  #define snd_send_si_frame	_ENTITY_PREFIXED(snd_send_si_frame)
+#endif
+
+EXTERN void snd_init(T_SND *snd);
+
+EXTERN void snd_send_u_frame
+	    (
+	      T_UF	    frameType,
+	      T_BIT	    pFBit,
+	      T_BIT	    crBit,
+	      T_FRAME_DESC *dataDesc
+	    );
+
+EXTERN void snd_send_s_frame
+	    (
+	      T_SF	    frameType,
+	      T_FRAME_NUM   nr,
+	      T_BIT	    pFBit,
+	      T_BIT	    crBit,
+	      T_FRAME_DESC *dataDesc
+	    );
+
+EXTERN void snd_send_si_frame
+	    (
+	      T_SF	    frameType,
+	      T_FRAME_NUM   nr,
+	      T_BIT	    pFBit,
+	      T_FRAME_NUM   ns,
+	      T_BIT	    crBit,
+	      T_FRAME_DESC *dataDesc
+	    );
+
+/*
+ * Send Buffer Management SBM
+ */
+#ifdef OPTION_MULTITHREAD
+  #define sbm_set_wind_size	  _ENTITY_PREFIXED(sbm_set_wind_size)
+  #define sbm_init		        _ENTITY_PREFIXED(sbm_init)
+  #define sbm_store_prim	    _ENTITY_PREFIXED(sbm_store_prim)
+  #define sbm_ack_upto_n	    _ENTITY_PREFIXED(sbm_ack_upto_n)
+  #define sbm_srej_frame	    _ENTITY_PREFIXED(sbm_srej_frame)
+  #define sbm_get_frame 	    _ENTITY_PREFIXED(sbm_get_frame)
+  #define sbm_rej_from_n	    _ENTITY_PREFIXED(sbm_rej_from_n)
+  #define sbm_frame_in_range	_ENTITY_PREFIXED(sbm_frame_in_range)
+  #define sbm_space_in_buf	  _ENTITY_PREFIXED(sbm_space_in_buf)
+  #define sbm_deinit		      _ENTITY_PREFIXED(sbm_deinit)
+  #define sbm_set_retrans	    _ENTITY_PREFIXED(sbm_set_retrans)
+  #define sbm_check_rej_count	_ENTITY_PREFIXED(sbm_check_rej_count)
+  #define sbm_recall_prim	    _ENTITY_PREFIXED(sbm_recall_prim)
+#endif
+
+EXTERN void	      sbm_set_wind_size
+		      (
+			T_SBM_BUFFER_INDEX windSize
+		      );
+
+EXTERN void	      sbm_init
+		      (
+			T_SBM_BUFFER_INDEX windSize,
+			USHORT		   frameSize,
+			UBYTE		   n2
+		      );
+
+EXTERN void	      sbm_store_prim
+		      (
+			T_SBM_PRIM *sendPrim
+		      );
+
+EXTERN BOOL	      sbm_ack_upto_n
+		      (
+			T_SBM_BUFFER_EXTIDX
+		      );
+
+EXTERN void	      sbm_srej_frame
+		      (
+			T_SBM_BUFFER_INDEX n
+		      );
+
+EXTERN void	      sbm_get_frame
+		      (
+			T_FRAME_DESC	   *frameDesc,
+			T_SBM_BUFFER_INDEX *frameNo,
+			BOOL		   *framesCouldBeSent,
+			BOOL		   *ok
+		      );
+
+EXTERN void	      sbm_rej_from_n
+		      (
+			T_SBM_BUFFER_INDEX n,
+			BOOL  *retransError
+		      );
+
+EXTERN BOOL	      sbm_frame_in_range
+		      (
+			T_SBM_BUFFER_INDEX n
+		      );
+
+EXTERN USHORT	      sbm_space_in_buf
+		      (
+			void
+		      );
+
+EXTERN void	     sbm_deinit
+		      (
+			void
+		      );
+
+EXTERN void	     sbm_set_retrans
+		      (
+			UBYTE n2
+		      );
+
+EXTERN void	     sbm_check_rej_count
+		      (
+			BOOL *retransError
+		      );
+
+EXTERN BOOL	     sbm_recall_prim
+		      (
+			T_SBM_PRIM **sendPrim
+		      );
+
+EXTERN void	     sbm_reset_after_remap
+		      (
+			USHORT		   newFrameSize,
+			T_SBM_BUFFER_INDEX new_vs
+		      );
+
+/*
+ * Receive Buffer Management RBM
+ */
+#ifdef OPTION_MULTITHREAD
+  #define rbm_set_wind_size       _ENTITY_PREFIXED(rbm_set_wind_size)
+  #define rbm_init                _ENTITY_PREFIXED(rbm_init)
+  #define rbm_deinit              _ENTITY_PREFIXED(rbm_deinit)
+  #define rbm_reset               _ENTITY_PREFIXED(rbm_reset)
+  #define rbm_reset_srej_slots    _ENTITY_PREFIXED(rbm_reset_srej_slots)
+  #define rbm_reset_all_r_states  _ENTITY_PREFIXED(rbm_reset_all_r_states)
+  #define rbm_check_slots_srej    _ENTITY_PREFIXED(rbm_check_slots_srej)
+  #define rbm_set_rslot_wait      _ENTITY_PREFIXED(rbm_set_rslot_wait)
+  #define rbm_set_rslot_wait2srej _ENTITY_PREFIXED(rbm_set_rslot_wait2srej)
+  #define rbm_set_rslot_rcvd      _ENTITY_PREFIXED(rbm_set_rslot_rcvd)
+  #define rbm_get_current_frame   _ENTITY_PREFIXED(rbm_get_current_frame)
+  #define rbm_accept_current_frame _ENTITY_PREFIXED(rbm_accept_current_frame)
+  #define rbm_mark_missing_i_frames_srej  _ENTITY_PREFIXED(rbm_mark_missing_i_frames_srej)
+  #define rbm_count_missing_i_frames      _ENTITY_PREFIXED(rbm_count_missing_i_frames)
+  #define rbm_buffer_all_in_sequence_frames _ENTITY_PREFIXED(rbm_buffer_all_in_sequence_frames)
+  #define rbm_ns_check            _ENTITY_PREFIXED(rbm_ns_check)
+  #define rbm_get_vr              _ENTITY_PREFIXED(rbm_get_vr)
+  #define rbm_get_prim            _ENTITY_PREFIXED(rbm_get_prim)
+  #define rbm_get_curr_prim       _ENTITY_PREFIXED(rbm_get_curr_prim)
+  #define rbm_move_current_frame  _ENTITY_PREFIXED(rbm_move_current_frame)
+  #define rbm_is_state_wait       _ENTITY_PREFIXED(rbm_is_state_wait)
+  #define rbm_prepare_remap       _ENTITY_PREFIXED(rbm_prepare_remap)
+
+#ifdef _SIMULATION_
+  #define rbm_store_frame           _ENTITY_PREFIXED(rbm_store_frame)
+#endif
+#endif
+
+EXTERN BOOL	      rbm_set_wind_size
+		      (
+			T_RBM_BUFFER_INDEX windSize
+		      );
+
+EXTERN void	      rbm_init
+		      (
+			T_RBM_BUFFER_INDEX windSize,
+			USHORT		   frameSize,
+			USHORT		   framesPerPrim
+		      );
+
+EXTERN void	      rbm_deinit
+		      (
+			void
+		      );
+
+EXTERN void rbm_reset(T_RBM *rbm);
+
+EXTERN void	      rbm_reset_srej_slots
+		      (
+			void
+		      );
+
+EXTERN void	      rbm_reset_all_r_states
+		      (
+			void
+		      );
+
+EXTERN T_RBM_BUFFER_EXTIDX rbm_check_slots_srej
+			   (
+			     void
+			   );
+
+EXTERN void	      rbm_set_rslot_wait
+		      (
+			T_RBM_BUFFER_INDEX slot
+		      );
+
+EXTERN void	      rbm_set_rslot_wait2srej
+		      (
+			T_RBM_BUFFER_INDEX slot
+		      );
+
+EXTERN void	      rbm_set_rslot_rcvd
+		      (
+			T_RBM_BUFFER_INDEX  slot,
+			BOOL		   *resetTimer
+		      );
+
+EXTERN T_RBM_FRAMEPTR rbm_get_current_frame
+		      (
+			void
+		      );
+
+EXTERN void	      rbm_accept_current_frame
+		      (
+			void
+		      );
+
+EXTERN void	      rbm_mark_missing_i_frames_srej
+		      (
+			T_RBM_BUFFER_INDEX ns
+		      );
+
+EXTERN void	      rbm_count_missing_i_frames
+		      (
+			T_RBM_BUFFER_INDEX  ns,
+			T_RBM_BUFFER_INDEX *count
+		      );
+
+EXTERN void	      rbm_buffer_all_in_sequence_frames
+		      (
+			T_RBM_BUFFER_INDEX  fromSlot,
+			BOOL		   *primIsReady,
+			BOOL		   *rcvReady,
+			BOOL		   *rcvFull
+		      );
+
+EXTERN void	      rbm_ns_check
+		      (
+			T_RBM_BUFFER_INDEX  ns,
+			BOOL		   *valid,
+			BOOL		   *expected
+		      );
+
+EXTERN T_RBM_BUFFER_INDEX rbm_get_vr
+			  (
+			    void
+			  );
+
+EXTERN BOOL	      rbm_get_prim
+		      (
+			T_RBM_PRIM **prim,
+			BOOL	   *rcvReady,
+			BOOL	   *rcvFull
+		      );
+
+EXTERN T_RBM_PRIM    *rbm_get_curr_prim
+		      (
+			void
+		      );
+
+EXTERN void	      rbm_move_current_frame
+		      (
+			T_RBM_BUFFER_INDEX slot
+		      );
+
+EXTERN BOOL	      rbm_is_state_wait
+		      (
+			T_RBM_BUFFER_INDEX slot
+		      );
+
+EXTERN T_FRAME_NUM    rbm_prepare_remap
+		      (
+			USHORT frameSize
+		      );
+
+#ifdef _SIMULATION_
+EXTERN void	rbm_store_frame(T_RBM_FRAMEPTR frame);
+#endif
+
+/*
+ * SREJ Timer Management SRM
+ */
+#ifdef OPTION_MULTITHREAD
+  #define srm_init           _ENTITY_PREFIXED(srm_init)
+  #define srm_deinit         _ENTITY_PREFIXED(srm_deinit)
+  #define srm_reset          _ENTITY_PREFIXED(srm_reset)
+  #define srm_clear          _ENTITY_PREFIXED(srm_clear)
+  #define srm_count          _ENTITY_PREFIXED(srm_count)
+  #define srm_get_counter      _ENTITY_PREFIXED(srm_get_counter)
+#endif
+
+EXTERN void	      srm_init
+		      (
+			void
+		      );
+
+EXTERN void	      srm_deinit
+		      (
+			void
+		      );
+
+EXTERN void	      srm_reset
+		      (
+			void
+		      );
+
+EXTERN void	      srm_clear
+		      (
+			T_FRAME_NUM n
+		      );
+
+EXTERN void	      srm_count
+		      (
+			T_FRAME_NUM n
+		      );
+
+EXTERN T_COUNTER      srm_get_counter
+		      (
+			T_FRAME_NUM n
+		      );
+
+/*
+ *  timer
+ */
+#define TIMERSTART(i,v)  vsi_t_start(VSI_CALLER i,v);
+#define TIMERSTOP(i)	 vsi_t_stop(VSI_CALLER i);
+ /*
+ *  time
+ *  xid parameters are given in 10^2 s, we store in 10^3 s (ms)
+ */
+#define TIME_INT2EXT(t) ((t) / 10)
+#define TIME_EXT2INT(t) ((t) * 10)
+
+/*
+ * Communication handles
+ */
+#ifdef OPTION_MULTITHREAD
+  #define hCommL2R     _ENTITY_PREFIXED(hCommL2R)
+#ifdef _SIMULATION_
+  #define hCommRA      _ENTITY_PREFIXED(hCommRA)
+#endif
+#endif
+
+#ifdef RLP_PEI_C
+
+GLOBAL T_HANDLE rlp_handle;
+GLOBAL T_HANDLE hCommL2R = VSI_ERROR;	 /* L2R Communication */
+
+#ifdef _SIMULATION_
+GLOBAL T_HANDLE hCommRA  = VSI_ERROR;	 /* RA	Communication */
+#endif
+
+#else
+EXTERN T_HANDLE  rlp_handle;
+EXTERN T_HANDLE  hCommL2R;	 /* L2R Communication */
+
+#ifdef _SIMULATION_
+EXTERN T_HANDLE  hCommRA;	 /* RA	Communication */
+#endif
+
+#endif
+
+GLOBAL void rlp_exec_timeout (USHORT index);
+
+#ifdef _SIMULATION_
+
+#define HEX_BYTE(B,H) { UBYTE b, *a = (UBYTE*)H;\
+        b = (((UBYTE)B) >> 4) & 0x0F;\
+        if (b > 9) b += 'A'-10; else b += '0'; *a = b;\
+        b = ((UBYTE)B) & 0x0F;\
+        if (b > 9) b += 'A'-10; else b += '0'; *(a+1) = b;}
+
+#endif
+
+#if defined (TRACE_INTERPRETED_RLP_FRAME) || defined (TRACE_RLP_FRAME)
+
+#define DEC_BYTE(B,A) {UBYTE b, rep, *a = ((UBYTE*)A)+2; b = (UBYTE) B;\
+        for (rep=0;rep<3;rep++) {*a = (b%10) + '0'; b /= 10; a--;}}
+
+#endif
+
+#endif