/* +----------------------------------------------------------------------------- | Project : CSD (8411)| Modul : l2r.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| L2R+----------------------------------------------------------------------------- */ #ifndef L2R_H#define L2R_H/* * Conditional Compiling */#define L2R_TRACE_FLOW/* * instance management */#define GET_INSTANCE(p) &l2r_data_base[0]#define L2R_INSTANCES 1/* * Types */typedef enum{ NONTRANSP = 0, TRANSP = 1} T_MODE;/* * Constants *//* * information for dti library */#define L2R_DTI_UP_INTERFACE 0#define L2R_DTI_UP_CHANNEL 0#define L2R_DTI_UP_DEF_INSTANCE 0#define L2R_DTI_UPLINK_QUEUE_SIZE 0#define L2R_BREAK_LEN 2#define TIMER_TUP_SND 1/* * global unchangeable constants */#define DATA_SIZE_SHORT 25 /* num of data bytes in l2r frame (short format) */#define DATA_SIZE_LONG 67 /* num of data bytes in l2r frame (long format)*/#define LL_TO TUP_SND_VALUE /* default value for timer UP_SND (lower layer waiting for data) */ /* * derived constants */#define HEADER_LEN (RLP_HEADER_LEN/8) /* 16 / 8 = 2 */#define TRAILER_LEN 0 /* No CRC -> no trailer */#define HT_LEN (HEADER_LEN + TRAILER_LEN)#define RLP_FRAME_SIZE_SHORT (DATA_SIZE_SHORT + HT_LEN)#define RLP_FRAME_SIZE_LONG (DATA_SIZE_LONG + HT_LEN)#define L2R_FRAMES_PER_PRIM_MAX ((L2R_BYTES_PER_PRIM_MAX + RLP_FRAME_SIZE_SHORT - 1) / RLP_FRAME_SIZE_SHORT)#define L2R_ENCODING_OFFSET (HEADER_LEN) /* Offset L2R frame in RLP frame in bytes */#define MAX_UP_REMAP_QUEUE_SIZE (MAX_UP_PRIMS + L2R_K_MS_IWF_MAX + 1)#define UP_REMAP_BUFFER_SIZE 20/* global user specific constants */#define MAX_UP_PRIMS 17 /* Maximum number of primitives, which L2R holds for sending, */#define MAX_DL_PRIMS 17 /* Maximum number of primitives, which L2R holds for receiving */ /* 17 prims * 10 Frames * 25 Bytes * 8 Bit = 34000 Bit (>32kBit)*/ /* if there are less than 10 frames per primitive, then the maximum */ /* buffer size will be smaller. */#define UP_RIBU_PREALLOC 2 /* Number of primitives to be preallocated (minimum: 2) */#define MIN_RIBU_SIZE 3 /* Minimum ring buffer size (send and receive) */ /* minimum: UP_RIBU_PREALLOC+1 *//* constants for L2RCOP status octets */#define SO_ADR_MASK 0x1F /* 0b00011111 */#define SO_ADR_MASK_TWO_OCT 0x7F /* 0b01111111 */#define SO_TWO_OCTET 27 /* 0b11011 */#define SO_BREAK_ACK 28 /* 0b11100 */#define SO_BREAK_REQ 29 /* 0b11101 */#define SO_END_FULL 30 /* 0b11110 */#define SO_END_EMPTY 31 /* 0b11111 */#define SO_SA_BIT 7#define SO_SB_BIT 6#define SO_X_BIT 5#define SO_SA_BIT_MASK 0x80#define SO_SB_BIT_MASK 0x40#define SO_X_BIT_MASK 0x20#define SO_STATUS_BITS_MASK (SO_SA_BIT_MASK + SO_SB_BIT_MASK)#define GET_SO_SA_BIT(oct) (((oct) & SO_SA_BIT_MASK) >> SO_SA_BIT)#define GET_SO_SB_BIT(oct) (((oct) & SO_SB_BIT_MASK) >> SO_SB_BIT)#define GET_SO_X_BIT(oct) (((oct) & SO_X_BIT_MASK) >> SO_X_BIT)/*#define CLR_BIT(oct, bit) (oct &= ~(1<<bit))*/#define SET_BIT(oct, bit) (oct |= (1<<bit))/* * Bitoffset for encoding/decoding */#define ENCODE_OFFSET 0#ifndef NTRACE/* for trace purposes */#define SERVICE_NAME_DTI "DTI"#define SERVICE_NAME_MGT "MGT"#define SERVICE_NAME_CONIND "CONIND"#define SERVICE_NAME_BREAK "BREAK"#define SERVICE_NAME_UP "UP"#define SERVICE_NAME_UP_UL "UP_UL"#define SERVICE_NAME_UP_LL "UP_LL"#define SERVICE_NAME_DN "DN"#define SERVICE_NAME_DN_UL "DN_UL"#define SERVICE_NAME_DN_LL "DN_LL"#endif#define DTI dti.#define MGT mgt.#define CONIND mgt.ConIndState.#define BREAK mgt.BreakState.#define UP up.#define UP_UL up.UL_State.#define UP_LL up.LL_State.#define DN dn.#define DN_UL dn.UL_State.#define DN_LL dn.LL_State./* * States of the entity process MGT */#define MGT_DETACHED 0#define MGT_PENDING_ATTACH 1#define MGT_ATTACHED 2#define MGT_PENDING_CONNECT 3#define MGT_CONNECTED 4#define MGT_DISCONNECT_INITIATED 5#define MGT_PENDING_DETACH 6#define MGT_PERMANENT_ERROR 7/* * States of the entity process DN */#define DN_DISCONNECTED 0#define DN_CONNECTED 1#define DN_WAIT_FIRST_DATA 2/* * States of the entity process UP */#define UP_DISCONNECTED 0#define UP_CONNECTED 1#define UP_REMAP 2/*==== TYPES ======================================================*//**********************************************************************************//* * L2R global typedefs */#define IW_IDLE 0#define IW_WAIT 1#define ISW_IDLE 0#define ISW_SEND 1#define ISW_WAIT 2#define FL_INACTIVE 0#define FL_ACTIVE 1#define FL_INVALID 2typedef UBYTE T_FLOW;typedef UBYTE T_BIT;typedef UBYTE T_PRIM_INDEX;typedef UBYTE T_UP_REMAP_PRIM_INDEX;typedef UBYTE* T_P_UBYTE;/*typedef UBYTE T_L2R_FRAME_SHORT[DATA_SIZE_SHORT];*/typedef UBYTE T_L2R_FRAME_LONG[DATA_SIZE_LONG];typedef T_L2R_FRAME_LONG* T_P_L2R_FRAME;typedef T_P_L2R_FRAME T_ADR_VECTOR[L2R_FRAMES_PER_PRIM_MAX];typedef T_ADR_VECTOR* T_P_ADR_VECTOR;typedef T_RLP_REMAP_DATA_IND* T_P_RLP_REMAP_DATA_IND;typedef struct{ T_PRIM_INDEX nFr; /* number of entries in vectors */ T_ADR_VECTOR adr; /* array of adress vectors */ T_PRIM_INDEX index; /* vector index of current frame */ UBYTE offset; /* offset in current frame */ UBYTE off_status; /* offset of status octet in current frame */ T_P_RLP_REMAP_DATA_IND prim; /* pointer to primitive (for FREE etc.) */} T_RPRIM_DESCRIPTOR; /* remap primitive descriptor *//**********************************************************************************//* * Process downlink specific types */typedef T_RLP_DATA_IND* T_P_RLP_DATA_IND;typedef struct{ T_PRIM_INDEX nFr; /* number of entries in vectors */ T_P_ADR_VECTOR dadr; /* pointer to adress vector */ T_PRIM_INDEX index; /* vector index of current frame */ UBYTE offset; /* offset in current frame */ UBYTE off_status; /* offset of status octet in current frame */ T_P_RLP_DATA_IND prim; /* pointer to primitive (for FREE etc.) */} T_DPRIM_DESCRIPTOR;typedef T_DPRIM_DESCRIPTOR* T_P_DPRIM_DESCRIPTOR;typedef UBYTE T_PRIM_DESC_RIBU_INDEX;typedef UBYTE T_PRIM_DESC_RIBU_SIZE;/* * D o w n l i n k R i n g B u f f e r * * The Downlink Ring Buffer is an ordinary ring buffer. The L2RCOP entity * writes received primitives into the buffer, the relay entity reads them * from the buffer, and then the L2RCOP entity frees the primitive. *//* * Ring buffer is by one bigger than max. number of prims, * because it needs always one empty entry */#define MAX_DPRIM_RIBU_SIZE (MAX_DL_PRIMS + 1)typedef struct{ /* The field read may be written only by the relay entity. The other fields may be written only by the L2RCOP entity. If the relay entity finds a NULL pointer at the read position, then it doesn't read any data. */ T_PRIM_DESC_RIBU_INDEX free; /* current free index in primDesc array */ T_RIBU idx; T_P_DPRIM_DESCRIPTOR _primDesc[MAX_DPRIM_RIBU_SIZE];} T_DPRIM_DESC_RIBU;/**********************************************************************************//* * Process uplink specific types */typedef T_RLP_DATA_REQ* T_P_RLP_DATA_REQ;typedef struct{ /* The fields index, offset and full may be written only by the relay entity */ /* The other fields may be written only by the L2RCOP entity */ T_PRIM_INDEX nFr; /* number of entries in vectors */ T_P_ADR_VECTOR adr; /* pointer to adress vector */ T_PRIM_INDEX index; /* vector index of current frame */ UBYTE offset; /* offset in current frame */ UBYTE off_status; /* offset of status octet in current frame */ BOOL full; /* primitive is filled up and ready for sending */ T_FLOW sa; /* last sa bit in this primitive */ T_FLOW sb; /* last sb bit in this primitive */ T_P_RLP_DATA_REQ prim; /* pointer to primitive (for FREE etc.) */} T_UPRIM_DESCRIPTOR;typedef T_UPRIM_DESCRIPTOR* T_P_UPRIM_DESCRIPTOR;/* * U p l i n k R i n g B u f f e r * * The L2RCOP entity can take a primitive away from the relay entity. This * happens, when there are not enough data to be sent and the timer expires. * In this case the L2RCOP entity takes the half ready primitive and sends * it to RLP * * The handling of the ring buffer is as follows: * * * The L2RCOP entity allocates a number of primitives. The slot in which * the next primitive has to be allocated is indicated by the alloc index. * Besides the primitive, which is just beeing filled by the relay * entity, there should be one complete empty primitive ready. This * means that the alloc index is at least by two greater than the write * index, unless the L2RCOP entity can not provide new primitives quick * enough. * * The relay entity writes data into the primitive indicated by the write * index. * * When a primitive is filled up, the relay advances the write pointer and * sends a DTI2_DATA_REQ primitive to the L2RCOP entity. * * When the L2RCOP entity receives the DTI2_DATA_REQ primitive it takes the * primitive at the read position (which usually is identical with the * previous write position), and advances the read index. * Then it sends the primitive to the lower layer, * and checks, if a new primitive has to be allocated. * * When a timeout occurs, the L2RCOP entity locks the complete buffer. * If no primitive is in the ring buffer (i.e read = write = alloc), a * new primitive is allocated and sent as an empty primitive to the lower * layer. If a completely filled primitive is in the buffer (i.e write /= * read), this primitive is sent in the regular way. Otherwise there is * a partial filled or empty primitive in the buffer (write /= alloc). * Then this primitive is sent and the write index is incremented. In the * case of a partial filled primitive the last uncompleted L2R status * octet has to be finished before sending the primitive. Finally it * is checked, if a new primitive has to be allocated. * * When a break is requested from the upper layer, the data are discarded * and a BREAK signal is put into a new primitive and sent to the lower layer. * Then the buffer is new initialised. *//* * Ring buffer is by one bigger than max. number of prims, because it * needs always one empty entry */#define MAX_UPRIM_RIBU_SIZE (MAX_UP_PRIMS+1)typedef struct{ /* The field write may be written only by the relay entity. The other fields may be written only by the L2RCOP entity. If the relay entity finds a NULL pointer at the write position, then it doesn't write any data. */ T_PRIM_DESC_RIBU_INDEX alloc; /* current alloc index in primDesc array */ T_RIBU idx; T_P_UPRIM_DESCRIPTOR primDesc[MAX_UPRIM_RIBU_SIZE];} T_UPRIM_DESC_RIBU;/**********************************************************************************//* * Relay entity specific types *//**********************************************************************************//* * process global data *//**********************************************************************************/typedef struct{ UBYTE state;#ifndef NTRACE char *name; char *state_name;#endif} T_SUB_STATE;/* * data for process management */typedef struct{ UBYTE state;#ifndef NTRACE char *name; char *state_name;#endif T_SUB_STATE BreakState; T_SUB_STATE ConIndState; /* IW_WAIT: RLP_CONNECT_IND is pending during MGT_PENDING_ATTACH*/ BOOL Connected; /* Indicates, that L2R is in the connected state */ BOOL FlowCtrlUsed; /* Flow Control is used (no COPnoFlCt) */ T_PRIM_DESC_RIBU_SIZE RiBuSize; /* Size of ring buffers (number of primitives) */ ULONG link_id; /* Channel identifier */ UBYTE InstID; /* instance identifier */ USHORT FrameSize; /* Size of frame, (RLP_FRAME_SIZE_LONG or RLP_FRAME_SIZE_SHORT) */ UBYTE FramesPerPrim; /* Number of frames per primitive */ ULONG ConnectPrimType;/* {L2R_CONNECT_CNF, L2R_CONNECT_IND} */} T_MGT;/**********************************************************************************//* * data for process downlink */typedef struct{ UBYTE state;#ifndef NTRACE char *name; char *state_name;#endif T_SUB_STATE UL_State; /* State of upper layer (only for test environment) */ /* WAIT: Upper layer is waiting for data from L2R */ T_SUB_STATE LL_State; /* State of lower layer */ /* WAIT: L2R has requested data from LL and is still waiting for it */ BOOL FlowCtrlUsed; /* Flow control is used */ UBYTE InstID; /* instance number */ ULONG link_id; /* Channel identifier */ BOOL DtiConnected; /* DTI is connected */ T_FLOW DnFlow; /* Flow control state for downlink data transfer */ T_FLOW UpFlow; /* Flow control state for uplink data transfer */ T_FLOW ULFlow; /* Flow control state of upper layer */ T_FLOW LLFlow; /* Flow control state of lower layer */ T_FLOW MrgFlow; /* Merged flow control state = LLFlow + UpFlow */#ifdef L2R_TRACE_FLOW T_FLOW LastSentFlow; /* Last flow control state, sent to DTI */#endif BOOL ReportMrgFlow;/* Merged flow has changed and must be reported to upper layer */ T_PRIM_DESC_RIBU_INDEX FlowThresh; /* Threshold for flow control */ UBYTE LastState; /* Last received state (sa, sb, x as in status octet) */ T_DTI2_DATA_IND *Brk_dti_data_ind; /* data indication for relaying break indication */ T_DPRIM_DESC_RIBU RiBu; T_DPRIM_DESCRIPTOR PrimDesc[MAX_DPRIM_RIBU_SIZE]; T_ADR_VECTOR AdrVec[MAX_DPRIM_RIBU_SIZE];} T_DN;/**********************************************************************************//* * data for process uplink */typedef struct{ UBYTE state;#ifndef NTRACE char *name; char *state_name;#endif T_SUB_STATE UL_State; /* State of upper layer (only for test environment) */ /* IW_'WAIT': L2R is waiting for data from upper layer*/ T_SUB_STATE LL_State; /* State of lower layer */ /* ISW_WAIT: LL has requested data and is still waiting for it */ /* ISW_SEND: data are ready for sending, but no request from LL */ BOOL FlowCtrlUsed; /* Flow control is used */ UBYTE InstID; /* instance number */ ULONG link_id; /* Channel identifier */ BOOL DtiConnected; /* DTI is connected */ T_FLOW DnFlow; /* Flow control state for downlink data transfer */ T_FLOW UpFlow; /* Flow control state for uplink data transfer */ T_FLOW ULFlow; /* Flow control state of upper layer */ T_FLOW LLFlow; /* Flow control state of lower layer */ T_FLOW MrgFlow; /* Merged flow control state = UP_ULFlow + UP_DNFlow */ T_PRIM_DESC_RIBU_INDEX FlowThreshLo; /* Low Threshold for flow control */ T_PRIM_DESC_RIBU_INDEX FlowThreshHi; /* High Threshold for flow control */ USHORT DataSize; /* Size of data, (calculated from FrameSize) */ USHORT FrameSize; /* Size of frame, (RLP_FRAME_SIZE_LONG or RLP_FRAME_SIZE_SHORT) */ USHORT OldFrameSize; /* Size of RLP frame (before REMAP command) */ UBYTE FramesPerPrim; UBYTE LastRcvdSa; /* Last received value of sa */ UBYTE LastRcvdSb; /* Last received value of sb */ UBYTE LastSentSa; /* Last sent value of sa */ UBYTE LastSentSb; /* Last sent value of sb */ T_FLOW LastSentFlow; /* Last sent value of flow control */ T_DTI2_DATA_REQ *Prim; /* For DTI interface to hold last received primitive */ T_UPRIM_DESC_RIBU RiBu; T_UPRIM_DESCRIPTOR PrimDesc[MAX_UPRIM_RIBU_SIZE]; T_ADR_VECTOR AdrVec[MAX_UPRIM_RIBU_SIZE]; BOOL StoreDataActive; /* prevents recursive calls of up_store_data */ BOOL UrgentMsg; /* A BREAK primitive is waiting to be sent */ BOOL DiscardRemapData;/* Data in RLP_REMAP_DATA_IND have to be discarded */ T_RPRIM_DESCRIPTOR QRemapPrimDesc; T_P_RLP_REMAP_DATA_IND QRemap[MAX_UP_REMAP_QUEUE_SIZE]; /* Queue for primitives, which have to be remapped */ T_UP_REMAP_PRIM_INDEX QRemapRead; /* Read index for REMAP Queue */ T_UP_REMAP_PRIM_INDEX QRemapWrite; /* Write index for REMAP Queue */ UBYTE BRemap[UP_REMAP_BUFFER_SIZE]; /* Char. buffer for copying data from REMAP Queue */ T_P_UBYTE BRemapAdr; /* Start address in remap buffer */ USHORT BRemapLen; /* Number of bytes in remap buffer */ UBYTE BRemapSa; /* Value of SA in remap buffer */ UBYTE BRemapSb; /* Value of SB in remap buffer */ UBYTE BRemapLastState; /* Last state in remap buffer (sa, sb, x as in status octet) */} T_UP;/**********************************************************************************//* * data for relay entity *//* * entity data for each L2R instance */typedef struct{ T_SUB_STATE dti; /* state variable for DTI library */ T_MGT mgt; /* process management */ T_DN dn; /* process downlink */ T_UP up; /* process uplink */} T_L2R_DATA;/*==== EXPORT =====================================================*//* * data base */EXTERN T_L2R_DATA l2r_data_base [];EXTERN T_L2R_DATA *l2r_data;EXTERN ULONG l2r_data_magic_num;#define L2R_DATA_MAGIC_NUM (('L'<<24) + ('2'<<16) + ('R'<<8)) /* "L2R",NUL */#define ENTITY_DATA l2r_data/* * Prototypes * * L2R MANAGEMENT * * MANAGEMENT primitive processing */#ifdef OPTION_MULTITHREAD #define mgt_l2r_connect_cnf _ENTITY_PREFIXED(mgt_l2r_connect_cnf) #define mgt_l2r_activate_req _ENTITY_PREFIXED(mgt_l2r_activate_req) #define mgt_l2r_deactivate_req _ENTITY_PREFIXED(mgt_l2r_deactivate_req) #define mgt_l2r_connect_req _ENTITY_PREFIXED(mgt_l2r_connect_req) #define mgt_l2r_disc_req _ENTITY_PREFIXED(mgt_l2r_disc_req) #define mgt_l2r_dti_req _ENTITY_PREFIXED(mgt_l2r_dti_req) #define mgt_rlp_detach_cnf _ENTITY_PREFIXED(mgt_rlp_detach_cnf) #define mgt_rlp_connect_ind _ENTITY_PREFIXED(mgt_rlp_connect_ind) #define mgt_rlp_connect_cnf _ENTITY_PREFIXED(mgt_rlp_connect_cnf) #define mgt_rlp_disc_ind _ENTITY_PREFIXED(mgt_rlp_disc_ind) #define mgt_rlp_disc_cnf _ENTITY_PREFIXED(mgt_rlp_disc_cnf) #define mgt_rlp_reset_ind _ENTITY_PREFIXED(mgt_rlp_reset_ind) #define mgt_rlp_reset_cnf _ENTITY_PREFIXED(mgt_rlp_reset_cnf) #define mgt_rlp_ui_ind _ENTITY_PREFIXED(mgt_rlp_ui_ind) #define mgt_rlp_xid_ind _ENTITY_PREFIXED(mgt_rlp_xid_ind) #define mgt_rlp_error_ind _ENTITY_PREFIXED(mgt_rlp_error_ind) #define mgt_rlp_statistic_ind _ENTITY_PREFIXED(mgt_rlp_statistic_ind)#endifEXTERN void mgt_l2r_connect_cnf (UBYTE nack);EXTERN void mgt_l2r_activate_req (T_L2R_ACTIVATE_REQ *l2r_activate_req);EXTERN void mgt_l2r_deactivate_req (T_L2R_DEACTIVATE_REQ *l2r_deactivate_req);EXTERN void mgt_l2r_connect_req (T_L2R_CONNECT_REQ *l2r_connect_req);EXTERN void mgt_l2r_disc_req (T_L2R_DISC_REQ *l2r_disc_req);EXTERN void mgt_l2r_dti_req (T_L2R_DTI_REQ *l2r_dti_req);EXTERN void mgt_rlp_detach_cnf (T_RLP_DETACH_CNF *rlp_detach_cnf);EXTERN void mgt_rlp_connect_ind (T_RLP_CONNECT_IND *rlp_connect_ind);EXTERN void mgt_rlp_connect_cnf (T_RLP_CONNECT_CNF *rlp_connect_cnf);EXTERN void mgt_rlp_disc_ind (T_RLP_DISC_IND *rlp_disc_ind);EXTERN void mgt_rlp_disc_cnf (T_RLP_DISC_CNF *rlp_disc_cnf);EXTERN void mgt_rlp_reset_ind (T_RLP_RESET_IND *rlp_reset_ind);EXTERN void mgt_rlp_reset_cnf (T_RLP_RESET_CNF *rlp_reset_cnf);EXTERN void mgt_rlp_ui_ind (T_RLP_UI_IND *rlp_ui_ind);EXTERN void mgt_rlp_xid_ind (T_RLP_XID_IND *rlp_xid_ind);EXTERN void mgt_rlp_error_ind (T_RLP_ERROR_IND *rlp_error_ind);EXTERN void mgt_rlp_statistic_ind (T_RLP_STATISTIC_IND *rlp_statistic_ind);/* * MANAGEMENT signal processing */#ifdef OPTION_MULTITHREAD #define sig_dn_mgt_break_ind _ENTITY_PREFIXED(sig_dn_mgt_break_ind) #define sig_dn_mgt_first_data_ind _ENTITY_PREFIXED(sig_dn_mgt_first_data_ind) #define sig_up_mgt_break_ind _ENTITY_PREFIXED(sig_up_mgt_break_ind)#endifEXTERN void sig_dn_mgt_break_ind(T_BIT sa, T_BIT sb, T_FLOW flow);EXTERN void sig_dn_mgt_first_data_ind(void);EXTERN void sig_up_mgt_break_ind(T_DTI2_DATA_REQ *dti_data_req);/* * MANAGEMENT procedures */#ifdef OPTION_MULTITHREAD #define mgt_init _ENTITY_PREFIXED(mgt_init ) #define mgt_checkpar _ENTITY_PREFIXED(mgt_checkpar ) #define mgt_deinit_connection _ENTITY_PREFIXED(mgt_deinit_connection ) #define mgt_init_connection _ENTITY_PREFIXED(mgt_init_connection ) #define mgt_send_l2r_error_ind _ENTITY_PREFIXED(mgt_send_l2r_error_ind)#endifEXTERN void mgt_init(T_MGT *dmgt);EXTERN BOOL mgt_checkpar(T_L2R_ACTIVATE_REQ *ar);EXTERN void mgt_deinit_connection(void);EXTERN void mgt_init_connection(BOOL indication);EXTERN void mgt_send_l2r_error_ind(USHORT cause);/* * L2R DN * * DN primitive processing */#ifdef OPTION_MULTITHREAD #define dn_rlp_data_ind _ENTITY_PREFIXED(dn_rlp_data_ind)#endifEXTERN void dn_rlp_data_ind (T_RLP_DATA_IND *rlp_data_ind);/* * DN signal processing */#ifdef OPTION_MULTITHREAD #define sig_mgt_dn_conn_req _ENTITY_PREFIXED(sig_mgt_dn_conn_req) #define sig_mgt_dn_disc_req _ENTITY_PREFIXED(sig_mgt_dn_disc_req) #define sig_mgt_dn_break_req _ENTITY_PREFIXED(sig_mgt_dn_break_req) #define sig_mgt_dn_clear_req _ENTITY_PREFIXED(sig_mgt_dn_clear_req) #define sig_mgt_dn_reconn_req _ENTITY_PREFIXED(sig_mgt_dn_reconn_req) #define sig_mgt_dn_dti_conn_setup _ENTITY_PREFIXED(sig_mgt_dn_dti_conn_setup) #define sig_up_dn_flow _ENTITY_PREFIXED(sig_up_dn_flow) #define sig_up_dn_ul_flow _ENTITY_PREFIXED(sig_up_dn_ul_flow) #define sig_mgt_dn_send_break_req _ENTITY_PREFIXED(sig_mgt_dn_send_break_req)#endifEXTERN void sig_mgt_dn_conn_req(BOOL flowCtrlUsed, T_PRIM_DESC_RIBU_SIZE riBuSize, UBYTE inst_id);EXTERN void sig_mgt_dn_disc_req (void);EXTERN void sig_mgt_dn_break_req (void);EXTERN void sig_mgt_dn_clear_req (void);EXTERN void sig_mgt_dn_reconn_req (void);EXTERN void sig_mgt_dn_dti_conn_setup (ULONG link_id);EXTERN void sig_up_dn_flow (T_FLOW); /* Flow Control Active */EXTERN void sig_up_dn_ul_flow (T_FLOW); /* Flow Control Active */EXTERN void sig_mgt_dn_send_break_req();/* * DN procedures */#ifdef OPTION_MULTITHREAD #define dn_init _ENTITY_PREFIXED(dn_init ) #define dn_check_flow _ENTITY_PREFIXED(dn_check_flow ) #define dn_send_data_ind _ENTITY_PREFIXED(dn_send_data_ind ) #define dn_scan_break_req _ENTITY_PREFIXED(dn_scan_break_req ) #define dn_free_all_prims _ENTITY_PREFIXED(dn_free_all_prims ) #define dn_cond_free_prims _ENTITY_PREFIXED(dn_cond_free_prims ) #define dn_store_prim _ENTITY_PREFIXED(dn_store_prim ) #define dn_cond_report_status _ENTITY_PREFIXED(dn_cond_report_status ) #define dn_init_ribu _ENTITY_PREFIXED(dn_init_ribu ) #define dn_cond_req_data _ENTITY_PREFIXED(dn_cond_req_data ) #define dn_merge_flow _ENTITY_PREFIXED(dn_merge_flow ) #define dn_store_status _ENTITY_PREFIXED(dn_store_status ) #define dn_cond_report_status _ENTITY_PREFIXED(dn_cond_report_status )#endifEXTERN void dn_init(T_DN *ddn);EXTERN void dn_check_flow(void);EXTERN void dn_send_data_ind(void);EXTERN void dn_scan_break_req ( T_P_RLP_DATA_IND data_ind, BOOL *found, T_PRIM_INDEX *index, T_PRIM_INDEX *frames, T_PRIM_INDEX *emptyfr, T_BIT *sa, T_BIT *sb, T_FLOW *flow_brk, T_FLOW *flow_gen );EXTERN void dn_store_prim ( T_P_RLP_DATA_IND data_ind, T_PRIM_INDEX index );EXTERN void dn_free_all_prims ( void );EXTERN void dn_cond_free_prims ( void );EXTERN void dn_init_ribu ( void );GLOBAL void dn_cond_report_status ( void );EXTERN void dn_cond_req_data ( void );EXTERN void dn_store_status ( T_FLOW flow );EXTERN void dn_merge_flow ( void );EXTERN void dn_cond_report_status ( void );/* * L2R UP * * UP primitive processing */#ifdef OPTION_MULTITHREAD #define up_rlp_ready_ind _ENTITY_PREFIXED(up_rlp_ready_ind)#endifEXTERN void up_rlp_ready_ind (T_RLP_READY_IND *rlp_ready_ind);/* * UP signal processing */#ifdef OPTION_MULTITHREAD #define sig_mgt_up_conn_req _ENTITY_PREFIXED(sig_mgt_up_conn_req) #define sig_mgt_up_disc_req _ENTITY_PREFIXED(sig_mgt_up_disc_req) #define sig_mgt_up_break_req _ENTITY_PREFIXED(sig_mgt_up_break_req) #define sig_mgt_up_clear_req _ENTITY_PREFIXED(sig_mgt_up_clear_req) #define sig_mgt_up_dti_conn_setup _ENTITY_PREFIXED(sig_mgt_up_dti_conn_setup) #define sig_mgt_up_dti_conn_open _ENTITY_PREFIXED(sig_mgt_up_dti_conn_open) #define sig_dn_up_flow _ENTITY_PREFIXED(sig_dn_up_flow) #define sig_dn_up_ll_flow _ENTITY_PREFIXED(sig_dn_up_ll_flow)#endifEXTERN void sig_mgt_up_conn_req ( UBYTE framesPerPrim, USHORT frameSize, BOOL flowCtrlUsed, T_PRIM_DESC_RIBU_SIZE riBufferSize, UBYTE inst_id );EXTERN void sig_mgt_up_disc_req ( void );EXTERN void sig_mgt_up_break_req ( T_BIT sa, T_BIT sb, T_FLOW flow );EXTERN void sig_mgt_up_clear_req ( void );EXTERN void sig_mgt_up_dti_conn_setup (ULONG link_id);EXTERN void sig_mgt_up_dti_conn_open();EXTERN void sig_dn_up_flow ( T_FLOW flow );EXTERN void sig_dn_up_ll_flow ( T_FLOW flow );/* * UP procedures */#ifdef OPTION_MULTITHREAD #define up_init _ENTITY_PREFIXED(up_init ) #define up_send_prim_timeout _ENTITY_PREFIXED(up_send_prim_timeout ) #define up_check_alloc _ENTITY_PREFIXED(up_check_alloc ) #define up_check_flow _ENTITY_PREFIXED(up_check_flow ) #define up_store_data _ENTITY_PREFIXED(up_store_data ) #define up_send_ready _ENTITY_PREFIXED(up_send_ready ) #define up_deinit_ribu _ENTITY_PREFIXED(up_deinit_ribu ) #define up_send_current_prim _ENTITY_PREFIXED(up_send_current_prim ) #define up_send_prim_cond _ENTITY_PREFIXED(up_send_prim_cond ) #define up_init_ribu _ENTITY_PREFIXED(up_init_ribu ) #define up_store_status _ENTITY_PREFIXED(up_store_status ) #define up_send_empty_frame _ENTITY_PREFIXED(up_send_empty_frame ) #define up_send_status _ENTITY_PREFIXED(up_send_status ) #define up_merge_flow _ENTITY_PREFIXED(up_merge_flow ) #define up_rq_init _ENTITY_PREFIXED(up_rq_init ) #define up_some_data_to_send _ENTITY_PREFIXED(up_some_data_to_send )#endif#define sig_dti_mgt_connection_opened_ind \ _ENTITY_PREFIXED(sig_dti_mgt_connection_opened_ind)#define sig_dti_mgt_connection_closed_ind \ _ENTITY_PREFIXED(sig_dti_mgt_connection_closed_ind)#define sig_dti_dn_tx_buffer_full_ind \ _ENTITY_PREFIXED(sig_dti_dn_tx_buffer_full_ind )#define sig_dti_dn_tx_buffer_ready_ind \ _ENTITY_PREFIXED(sig_dti_dn_tx_buffer_ready_ind )#define sig_dti_up_data_received_ind \ _ENTITY_PREFIXED(sig_dti_up_data_received_ind )EXTERN void up_init(T_UP *dup);EXTERN void up_send_prim_timeout ( void );EXTERN void up_check_alloc ( void );EXTERN void up_check_flow ( void );EXTERN void up_store_data ( void );EXTERN void up_send_ready ( void );EXTERN void up_deinit_ribu ( void );EXTERN void up_send_current_prim ( void );EXTERN void up_send_prim_cond ( void );EXTERN void up_init_ribu ( void );EXTERN void up_store_status ( T_BIT sa, T_BIT sb, T_FLOW flow );EXTERN void up_send_empty_frame ( T_BIT sa, T_BIT sb, T_FLOW flow );EXTERN void up_send_status ( T_BIT sa, T_BIT sb, T_FLOW flow, UBYTE adr );EXTERN void up_merge_flow ( void );EXTERN void up_rq_init ( void );EXTERN BOOL up_some_data_to_send ( void );/* * these functions are called by pei_sig_callback */EXTERN void sig_dti_mgt_connection_opened_ind();EXTERN void sig_dti_mgt_connection_closed_ind();EXTERN void sig_dti_dn_tx_buffer_full_ind();EXTERN void sig_dti_dn_tx_buffer_ready_ind();EXTERN void sig_dti_up_data_received_ind ( T_DTI2_DATA_REQ *dti_data_req );/* * timer */#define TIMERSTART(i,v) vsi_t_start (VSI_CALLER i, v)#define TIMERSTOP(i) vsi_t_stop (VSI_CALLER i);/* * Communication handles */#ifdef OPTION_MULTITHREAD #define hCommCTRL _ENTITY_PREFIXED(hCommCTRL) #define hCommRLP _ENTITY_PREFIXED(hCommRLP)#ifdef _SIMULATION_ #define hCommRA _ENTITY_PREFIXED(hCommRA)#endif#endif /* OPTION_MULTITHREAD */EXTERN DTI_HANDLE l2r_hDTI; /* DTI connection handle for DTI library */EXTERN T_HANDLE l2r_handle;EXTERN T_HANDLE hCommCTRL; /* Controller Communication */EXTERN T_HANDLE hCommRLP; /* RLP Communication */#ifdef _SIMULATION_EXTERN T_HANDLE hCommRA; /* RA Communication */#endifEXTERN T_MODE l2r_data_mode; /* * MALLOC / FREE for old frame */#endif