line source
+ − /*
+ − +-----------------------------------------------------------------------------
+ − | 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 2
+ −
+ − typedef 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)
+ − #endif
+ −
+ − EXTERN 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)
+ − #endif
+ −
+ − EXTERN 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)
+ − #endif
+ −
+ − EXTERN 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)
+ − #endif
+ −
+ − EXTERN 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)
+ − #endif
+ −
+ − EXTERN 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 )
+ − #endif
+ −
+ − EXTERN 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)
+ − #endif
+ −
+ − EXTERN 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)
+ − #endif
+ −
+ −
+ − EXTERN 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 */
+ − #endif
+ −
+ − EXTERN T_MODE l2r_data_mode;
+ −
+ − /*
+ − * MALLOC / FREE for old frame
+ − */
+ −
+ − #endif