FreeCalypso > hg > fc-tourmaline
view src/g23m-fad/l2r/l2r.h @ 281:a75eefbf8be4
Phone boot with PWON: weed out short button presses
Every standard end user phone has a design provision, most naturally
implemented in firmware, whereby the PWON button effects a boot only
if it is held down long enough - short presses of this PWON button
are detected, assumed to be spurious and cause the fw to power back off
instead of proceeding with boot. The present change introduces this
standard function in FreeCalypso.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 24 Sep 2021 02:03:08 +0000 |
parents | fa8dc04885d8 |
children |
line wrap: on
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