FreeCalypso > hg > fc-selenite
view src/g23m-fad/rlp/rlp.h @ 203:ba3693cbd40e
src/cs: sync with Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 29 Jun 2020 00:27:13 +0000 |
parents | d393cd9bb723 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | 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