line source
+ − /*
+ − +-----------------------------------------------------------------------------
+ − | Project :
+ − | Modul :
+ − +-----------------------------------------------------------------------------
+ − | 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
+ − | Logical Link Control (LLC)
+ − +-----------------------------------------------------------------------------
+ − */
+ −
+ − #ifndef LLC_H
+ − #define LLC_H
+ −
+ − /*#ifdef FF_EGPRS
+ − #ifndef LLC_EDGE
+ − #define LLC_EDGE
+ − #endif *//*LLC_EDGE*/
+ − /*#endif */ /*FF_EGPRS*/
+ −
+ −
+ − /*
+ − * Shift of constants from SAPs LL and LLGMM to PS_include are handled here.
+ − */
+ − #ifdef LL_2to1
+ −
+ −
+ − #ifndef DTACS_MOBILITY_MANAGEMENT
+ − #define DTACS_MOBILITY_MANAGEMENT GRLC_MOBILITY_MANAGEMENT
+ − #endif
+ − #ifndef GRR_DTACS_DEFGRR_DTACS_DEF
+ − #define GRR_DTACS_DEF GRLC_DTACS_DEF
+ − #endif
+ − #ifndef GRR_DTACS_MOBILITY_MANAGEMENT
+ − #define GRR_DTACS_MOBILITY_MANAGEMENT GRLC_DTACS_MOBILITY_MANAGEMENT
+ − #endif
+ −
+ −
+ − #ifndef LLC_MAX_CNF
+ − #define LLC_MAX_CNF LL_MAX_CNF
+ − #endif
+ − #ifndef LLC_MAX_L3_XID_LEN
+ − #define LLC_MAX_L3_XID_LEN LL_MAX_L3_XID_LEN
+ − #endif
+ −
+ −
+ −
+ − #ifndef LLGMM_ERRCS_ACK_NO_PEER_RES_REEST
+ − #define LLGMM_ERRCS_ACK_NO_PEER_RES_REEST CAUSE_LLC_ACK_NO_PEER_RES_REEST
+ − #endif
+ − #ifndef LLGMM_ERRCS_DISC_NO_PEER_RES
+ − #define LLGMM_ERRCS_DISC_NO_PEER_RES CAUSE_LLC_DISC_NO_PEER_RES
+ − #endif
+ − #ifndef LLGMM_ERRCS_DM1_RECEIVED
+ − #define LLGMM_ERRCS_DM1_RECEIVED CAUSE_LLC_DM1_RECEIVED
+ − #endif
+ − #ifndef LLGMM_ERRCS_DM1_RECEIVED_REEST
+ − #define LLGMM_ERRCS_DM1_RECEIVED_REEST CAUSE_LLC_DM1_RECEIVED_REEST
+ − #endif
+ − #ifndef LLGMM_ERRCS_FRMR_COND
+ − #define LLGMM_ERRCS_FRMR_COND CAUSE_LLC_FRMR_COND
+ − #endif
+ − #ifndef LLGMM_ERRCS_FRMR_COND_REEST
+ − #define LLGMM_ERRCS_FRMR_COND_REEST CAUSE_LLC_FRMR_COND_REEST
+ − #endif
+ − #ifndef LLGMM_ERRCS_FRMR_RECEIVED
+ − #define LLGMM_ERRCS_FRMR_RECEIVED CAUSE_LLC_FRMR_RECEIVED
+ − #endif
+ − #ifndef LLGMM_ERRCS_L3_REEST
+ − #define LLGMM_ERRCS_L3_REEST CAUSE_LLC_L3_REEST
+ − #endif
+ − #ifndef LLGMM_ERRCS_MULT_ASS_TLLI
+ − #define LLGMM_ERRCS_MULT_ASS_TLLI CAUSE_LLC_MULT_ASS_TLLI
+ − #endif
+ − #ifndef LLGMM_ERRCS_NO_PEER_RES
+ − #define LLGMM_ERRCS_NO_PEER_RES CAUSE_LLC_NO_PEER_RES
+ − #endif
+ − #ifndef LLGMM_ERRCS_PEER_BUSY_REEST
+ − #define LLGMM_ERRCS_PEER_BUSY_REEST CAUSE_LLC_PEER_BUSY_REEST
+ − #endif
+ − #ifndef LLGMM_ERRCS_PEER_REEST
+ − #define LLGMM_ERRCS_PEER_REEST CAUSE_LLC_PEER_REEST
+ − #endif
+ − #ifndef LLGMM_ERRCS_SABM_NO_PEER_RES
+ − #define LLGMM_ERRCS_SABM_NO_PEER_RES CAUSE_LLC_SABM_NO_PEER_RES
+ − #endif
+ − #ifndef LLGMM_ERRCS_XID_NO_PEER_RE
+ − #define LLGMM_ERRCS_XID_NO_PEER_RES CAUSE_LLC_XID_NO_PEER_RES
+ − #endif
+ − #ifndef LLGMM_ERRCS_DM0_RECEIVED_REEST
+ − #define LLGMM_ERRCS_DM0_RECEIVED_REEST CAUSE_LLC_DM0_RECEIVED_REEST
+ − #endif
+ −
+ −
+ − #ifndef LL_ERRCS_NO_PEER_RES
+ − #define LL_ERRCS_NO_PEER_RES CAUSE_LLC_NO_PEER_RES
+ − #endif
+ − #ifndef LL_ERRCS_INVALID_XID
+ − #define LL_ERRCS_INVALID_XID CAUSE_LLC_INVALID_XID
+ − #endif
+ −
+ − #ifndef LL_PEAK_SUB
+ − #define LL_PEAK_SUB PS_PEAK_SUB
+ − #endif
+ − #ifndef LL_RELCS_DM_RECEIVED
+ − #define LL_RELCS_DM_RECEIVED CAUSE_LLC_DM_RECEIVED
+ − #endif
+ − #ifndef LL_RELCS_INVALID_XID
+ − #define LL_RELCS_INVALID_XID CAUSE_LLC_INVALID_XID
+ − #endif
+ − #ifndef LL_RELCS_NORMAL
+ − #define LL_RELCS_NORMAL CAUSE_LLC_NORMAL_REL
+ − #endif
+ − #ifndef LL_RELCS_NO_PEER_RES
+ − #define LL_RELCS_NO_PEER_RES CAUSE_LLC_NO_PEER_RES
+ − #endif
+ −
+ − #ifndef LL_DELAY_SUB
+ − #define LL_DELAY_SUB PS_DELAY_SUB
+ − #endif
+ − #ifndef LL_MEAN_SUB
+ − #define LL_MEAN_SUB PS_MEAN_SUB
+ − #endif
+ − #ifndef LL_NO_REL
+ − #define LL_NO_REL PS_NO_REL
+ − #endif
+ − #ifndef LL_PRECED_SUB
+ − #define LL_PRECED_SUB PS_PRECED_SUB
+ − #endif
+ − #ifndef LL_RLC_PROT
+ − #define LL_RLC_PROT PS_RLC_PROT
+ − #endif
+ −
+ − #ifndef LL_SAPI_1
+ − #define LL_SAPI_1 PS_SAPI_1
+ − #endif
+ − #ifndef LL_SAPI_3
+ − #define LL_SAPI_3 PS_SAPI_3
+ − #endif
+ − #ifndef LL_SAPI_5
+ − #define LL_SAPI_5 PS_SAPI_5
+ − #endif
+ − #ifndef LL_SAPI_7
+ − #define LL_SAPI_7 PS_SAPI_7
+ − #endif
+ − #ifndef LL_SAPI_9
+ − #define LL_SAPI_9 PS_SAPI_9
+ − #endif
+ − #ifndef LL_SAPI_11
+ − #define LL_SAPI_11 PS_SAPI_11
+ − #endif
+ − #ifndef LL_RADIO_PRIO_1
+ − #define LL_RADIO_PRIO_1 PS_RADIO_PRIO_1
+ − #endif
+ − #ifndef LL_TLLI_INVALID
+ − #define LL_TLLI_INVALID PS_TLLI_INVALID
+ − #endif
+ −
+ − #ifndef GRLC_RADIO_PRIO_1
+ − #define GRLC_RADIO_PRIO_1 PS_RADIO_PRIO_1
+ − #endif
+ − #ifndef GRLC_PEAK_SUB
+ − #define GRLC_PEAK_SUB PS_PEAK_SUB
+ − #endif
+ −
+ − #ifndef T_desc_list3
+ − #define T_desc_list3 T_LL_desc_list3
+ − #endif
+ −
+ − #endif /* LL_2to1 */
+ −
+ −
+ −
+ − /* --------------------------------------------------------------------------------- */
+ −
+ − /* remove traces */
+ − #ifndef _SIMULATION_
+ − #ifdef GET_STATE
+ − #undef GET_STATE
+ − #define GET_STATE(P) (ENTITY_DATA->P state)
+ − #endif
+ − #endif /* _SIMULATION_ */
+ − /* --------------------------------------------------------------------------------- */
+ − #ifdef TRACE_EVE
+ − #define TRACE_0_INFO(s) TRACE_EVENT ("Info: " s)
+ − #define TRACE_1_INFO(s,p1) TRACE_EVENT_P1("Info: " s,p1)
+ − #define TRACE_2_INFO(s,p1,p2) TRACE_EVENT_P2("Info: " s,p1,p2)
+ − #define TRACE_3_INFO(s,p1,p2,p3) TRACE_EVENT_P3("Info: " s,p1,p2,p3)
+ − #define TRACE_4_INFO(s,p1,p2,p3,p4) TRACE_EVENT_P4("Info: " s,p1,p2,p3,p4)
+ − #else
+ − #define TRACE_0_INFO(s)
+ − #define TRACE_1_INFO(s,p1)
+ − #define TRACE_2_INFO(s,p1,p2)
+ − #define TRACE_3_INFO(s,p1,p2,p3)
+ − #define TRACE_4_INFO(s,p1,p2,p3,p4)
+ − #endif
+ −
+ − #ifdef TRACE_PRIM
+ − #define TRACE_0_PARA(s) vsi_o_ttrace(VSI_CALLER TC_PRIM, "IPar: " s)
+ − #define TRACE_1_PARA(s,p1) vsi_o_ttrace(VSI_CALLER TC_PRIM, "IPar: " s,p1)
+ − #define TRACE_2_PARA(s,p1,p2) vsi_o_ttrace(VSI_CALLER TC_PRIM, "IPar: " s,p1,p2)
+ − #define TRACE_3_PARA(s,p1,p2,p3) vsi_o_ttrace(VSI_CALLER TC_PRIM, "IPar: " s,p1,p2,p3)
+ − #define TRACE_4_PARA(s,p1,p2,p3,p4) vsi_o_ttrace(VSI_CALLER TC_PRIM, "IPar: " s,p1,p2,p3,p4)
+ −
+ − #define TRACE_0_OUT_PARA(s) vsi_o_ttrace(VSI_CALLER TC_PRIM, "OPar: " s)
+ − #define TRACE_1_OUT_PARA(s,p1) vsi_o_ttrace(VSI_CALLER TC_PRIM, "OPar: " s,p1)
+ − #define TRACE_2_OUT_PARA(s,p1,p2) vsi_o_ttrace(VSI_CALLER TC_PRIM, "OPar: " s,p1,p2)
+ − #define TRACE_3_OUT_PARA(s,p1,p2,p3) vsi_o_ttrace(VSI_CALLER TC_PRIM, "OPar: " s,p1,p2,p3)
+ − #define TRACE_4_OUT_PARA(s,p1,p2,p3,p4) vsi_o_ttrace(VSI_CALLER TC_PRIM, "OPar: " s,p1,p2,p3,p4)
+ −
+ − #define TRACE_PRIM_FROM(s) vsi_o_ttrace(VSI_CALLER TC_PRIM, "Pdir: " s)
+ − #define TRACE_PRIM_TO(s) vsi_o_ttrace(VSI_CALLER TC_PRIM, "Pdir: " s)
+ − #else
+ − #define TRACE_0_PARA(s)
+ − #define TRACE_1_PARA(s,p1)
+ − #define TRACE_2_PARA(s,p1,p2)
+ − #define TRACE_3_PARA(s,p1,p2,p3)
+ − #define TRACE_4_PARA(s,p1,p2,p3,p4)
+ −
+ − #define TRACE_0_OUT_PARA(s)
+ − #define TRACE_1_OUT_PARA(s,p1)
+ − #define TRACE_2_OUT_PARA(s,p1,p2)
+ − #define TRACE_3_OUT_PARA(s,p1,p2,p3)
+ − #define TRACE_4_OUT_PARA(s,p1,p2,p3,p4)
+ −
+ − #define TRACE_PRIM_FROM(s)
+ − #define TRACE_PRIM_TO(s)
+ − #endif
+ − /* --------------------------------------------------------------------------------- */
+ −
+ − /*
+ − * The following macro is similar to PFREE_DESC2. Instead of doing
+ − * a PFREE(P) it does a MFREE(p). This macro is used to free CCI primitives
+ − * which are removed from CCI SAP and added into this header file.
+ − */
+ − #define MFREE_PRIM_DESC2(p) { MFREE_DESC2 ((p)->desc_list2.first); \
+ − MFREE ((p)); \
+ − }
+ −
+ − /*
+ − * The following macro is similar to PFREE_DESC. Instead of doing
+ − * a PFREE(P) it does a MFREE(p). This macro is used to free CCI primitives
+ − * which are removed from CCI SAP and added into this header file.
+ − */
+ − #define MFREE_PRIM_DESC(p) { MFREE_DESC ((p)->desc_list.first); \
+ − MFREE ((p)); \
+ − }
+ −
+ − /*
+ − * defines the user of the vsi interface
+ − */
+ − #define VSI_CALLER LLC_handle,
+ − #define VSI_CALLER_SINGLE LLC_handle
+ −
+ − /*
+ − * Macros
+ − */
+ −
+ − /*
+ − * Switch all LLC services with multiple incarnations to use the incarnation
+ − * for the given SAPI. Current sapi is stored and all LLC layer parameters
+ − * with multiple incarnations are switched to use the incarnation for the
+ − * given SAPI.
+ − */
+ − #define SWITCH_LLC(s) llc_data->current_sapi = s; \
+ − SWITCH_PARAM (iov_i, IMAP(s)); \
+ − SWITCH_PARAM (n200, UIMAP(s)); \
+ − SWITCH_PARAM (n201_u, UIMAP(s)); \
+ − SWITCH_PARAM (n201_i, IMAP(s)); \
+ − SWITCH_PARAM (md, IMAP(s)); \
+ − SWITCH_PARAM (mu, IMAP(s)); \
+ − SWITCH_PARAM (kd, IMAP(s)); \
+ − SWITCH_PARAM (ku, IMAP(s)); \
+ − SWITCH_PARAM (requested_l3_xid, IMAP(s)); \
+ − SWITCH_SERVICE (llc, sapi, UIMAP(s)); \
+ − SWITCH_SERVICE (llc, u, UIMAP(s)); \
+ − SWITCH_SERVICE (llc, itx, IMAP(s)); \
+ − SWITCH_SERVICE (llc, irx, IMAP(s)); \
+ − SWITCH_SERVICE (llc, uitx, UIMAP(s)); \
+ − SWITCH_SERVICE (llc, uirx, UIMAP(s)); \
+ − SWITCH_SERVICE (llc, t200, UIMAP(s));
+ −
+ − /*
+ − * Switch service s of entity e to use incarnation i.
+ − */
+ − #define SWITCH_SERVICE(e,s,i) e##_data->##s = &(##e##_data->##s##_base[i]);
+ −
+ − /*
+ − * Switch LLC layer parameter p to incarnation i.
+ − */
+ − #define SWITCH_PARAM(p,i) llc_data->##p = &(llc_data->##p##_base[i]);
+ −
+ −
+ − /*
+ − * Map SAPI to incarnation, for either acknowledged (4 incarnations) or
+ − * unacknowledged operation (6 incarnations)
+ − */
+ − #ifdef LL_2to1
+ − #define IMAP(s) (s == PS_SAPI_3 ? 0 : \
+ − s == PS_SAPI_5 ? 1 : \
+ − s == PS_SAPI_9 ? 2 : \
+ − s == PS_SAPI_11? 3 : 0)
+ −
+ − #define UIMAP(s) (s == PS_SAPI_1 ? 0 : \
+ − s == PS_SAPI_3 ? 1 : \
+ − s == PS_SAPI_5 ? 2 : \
+ − s == PS_SAPI_7 ? 3 : \
+ − s == PS_SAPI_9 ? 4 : \
+ − s == PS_SAPI_11? 5 : 0)
+ − #else
+ − #define IMAP(s) (s == LL_SAPI_3 ? 0 : \
+ − s == LL_SAPI_5 ? 1 : \
+ − s == LL_SAPI_9 ? 2 : \
+ − s == LL_SAPI_11? 3 : 0)
+ −
+ − #define UIMAP(s) (s == LL_SAPI_1 ? 0 : \
+ − s == LL_SAPI_3 ? 1 : \
+ − s == LL_SAPI_5 ? 2 : \
+ − s == LL_SAPI_7 ? 3 : \
+ − s == LL_SAPI_9 ? 4 : \
+ − s == LL_SAPI_11? 5 : 0)
+ − #endif
+ −
+ −
+ − /*
+ − * Add octet size of XID parameter P to variable V if the parameter is tagged.
+ − */
+ − #define ADD_IF_TAGGED(V,P) \
+ − if (llc_data->u->xid_tag & (0x00000001L << P)) \
+ − { \
+ − V += P##_LEN + P##_HDR_LEN; \
+ − }
+ −
+ − /*
+ − * Tag XID parameter if requested to negotiate
+ − */
+ − #define TAG_IF_REQUESTED(V,P) \
+ − if (llc_data->##V##valid) \
+ − { \
+ − llc_data->u->xid_tag |= (0x00000001L << P); \
+ − }
+ −
+ − /*
+ − * Tag XID parameter if requested to negotiate and sense of negotiation fits
+ − */
+ − #define TAG_IF_REQUESTED_RSP(S,V,P) \
+ − if (llc_data->u->requested_xid.##V##.valid) \
+ − { \
+ − if (llc_data->decoded_xid.##V##.valid) \
+ − { \
+ − /* simple add parameter. Sense of negotiation is already checked */ \
+ − llc_data->u->xid_tag |= (0x00000001L << P); \
+ − } \
+ − else \
+ − { \
+ − /* Sense of negotiation compared with current values */ \
+ − if (llc_data->u->requested_xid.##V##.value S *(llc_data->##V)) \
+ − { \
+ − llc_data->u->xid_tag |= (0x00000001L << P); \
+ − } \
+ − } \
+ − }
+ −
+ −
+ − /*
+ − * Timer values are negotiated in units of 0.1 seconds but internally stored
+ − * in milliseconds. Therefore a conversion must be done with each XID
+ − * negotiation of timer values.
+ − */
+ − #define XID_TIMER_CONVERSION 100
+ −
+ − #define XID2INT(l) (l * XID_TIMER_CONVERSION)
+ − #define INT2XID(l) (l / XID_TIMER_CONVERSION)
+ −
+ − /*
+ − * Timer start- and stop macros for LLC
+ − */
+ − #define TIMERSTART(t,d) itx_##t##_start((d))
+ − #define TIMERSTOP(t) itx_##t##_stop()
+ −
+ −
+ − /*
+ − * Number of service incarnations (LLME, TX, and RX have only one incarnation)
+ − */
+ − #define ACKNOWLEDGED_INC 4
+ − #define UNACKNOWLEDGED_INC 6
+ − #define MAX_SAPI_INC 6
+ −
+ −
+ − #define U_NUM_INC UNACKNOWLEDGED_INC
+ −
+ − #define ITX_NUM_INC ACKNOWLEDGED_INC
+ − #define IRX_NUM_INC ACKNOWLEDGED_INC
+ −
+ − #define UITX_NUM_INC UNACKNOWLEDGED_INC
+ − #define UIRX_NUM_INC UNACKNOWLEDGED_INC
+ −
+ − #define T200_NUM_INC UNACKNOWLEDGED_INC
+ − #define T201_NUM_INC ACKNOWLEDGED_INC
+ −
+ −
+ − /*
+ − * Constants
+ − */
+ −
+ − /*
+ − * Value constants for attached_counter
+ − */
+ − #define CCI_NO_ATTACHE (0x0) /* no entity/service is attached to the primitive */
+ − /*
+ − * Value constants for fcs_check
+ − */
+ − #define CCI_FCS_PASSED (0x0) /* FCS check has been successfully passed */
+ − #define CCI_FCS_FAILED (0x1) /* FCS check has been failed */
+ − /*
+ − * Value constants for pm
+ − */
+ − #define CCI_PM_UNPROTECTED (0x0) /* FCS covers frame header and information fields */
+ − #define CCI_PM_PROTECTED (0x1) /* FCS covers frame header field and first N202 octets of information field */
+ − /*
+ − * Value constants for ciphering_algorithm
+ − */
+ − #define CCI_CIPHER_NO_ALGORITHM (0x0) /* frame shall not be ciphered */
+ − #define CCI_CIPHER_GPRS_A5_1 (0x1) /* frame shall be ciphered using algorithm GPRS A5/1 */
+ − #define CCI_CIPHER_GPRS_A5_2 (0x2) /* frame shall be ciphered using algorithm GPRS A5/2 */
+ − /*
+ − * Value constants for direction
+ − */
+ − #define CCI_DIRECTION_UPLINK (0x0) /* direction of LLC frame transmission is MS to SGSN */
+ − #define CCI_DIRECTION_DOWNLINK (0x1) /* direction of LLC frame transmission is SGSN to MS */
+ −
+ −
+ −
+ − /*
+ − * Bitoffset for encoding/decoding
+ − */
+ − #define ENCODE_OFFSET 0
+ −
+ −
+ − /*
+ − * C/R bit
+ − */
+ − #define SGSN_COMMAND 1
+ − #define SGSN_RESPONSE 0
+ − #define MS_COMMAND 0
+ − #define MS_RESPONSE 1
+ −
+ − /*
+ − * Size definitions for common U frames (in octets and in bits).
+ − * Define only the header of the frame. FCS_SIZE will be added when the FCS
+ − * is calculated!
+ − */
+ − #define U_HDR_SIZE 2
+ − #define U_HDR_SIZE_BITS (U_HDR_SIZE * 8)
+ − #define FCS_SIZE 3
+ − #define FCS_SIZE_BITS (FCS_SIZE * 8)
+ −
+ − #ifdef REL99
+ − #define U_NULL_SIZE (U_HDR_SIZE)
+ − #define U_NULL_SIZE_BITS (U_NULL_SIZE * 8)
+ − #endif /* REL99 */
+ −
+ − #define U_DISC_SIZE (U_HDR_SIZE)
+ − #define U_DISC_SIZE_BITS (U_DISC_SIZE * 8)
+ −
+ − #define U_DM_SIZE (U_HDR_SIZE)
+ − #define U_DM_SIZE_BITS (U_DM_SIZE * 8)
+ −
+ − #define U_FRMR_INFO_SIZE 10
+ − #define U_FRMR_SIZE (U_HDR_SIZE + U_FRMR_INFO_SIZE)
+ − #define U_FRMR_SIZE_BITS (U_FRMR_SIZE * 8)
+ −
+ − /*
+ − * Masks and IDs for the different frame formats. Bitwise AND *_MASK with
+ − * the first octet of the control field must result in *_ID.
+ − */
+ − #define I_FRAME_MASK 0x80
+ − #define S_FRAME_MASK 0xC0
+ − #define UI_FRAME_MASK 0xE0
+ − #define U_FRAME_MASK 0xE0
+ −
+ − #define I_FRAME_ID 0x00
+ − #define S_FRAME_ID 0x80
+ − #define UI_FRAME_ID 0xC0
+ − #define U_FRAME_ID 0xE0
+ −
+ − /*
+ − * Number of octets that must be contained in a valid control field of a frame.
+ − */
+ − #define I_CTRL_OCTETS 3
+ − #define S_CTRL_OCTETS 2
+ − #define UI_CTRL_OCTETS 2
+ − #define U_CTRL_OCTETS 1
+ −
+ − /*
+ − * Minimum number of octets that must be contained in a frame to access
+ − * the complete control field.
+ − */
+ − #define CTRL_MIN_OCTETS 2
+ − #define I_CTRL_MIN_OCTETS 4
+ − #define S_CTRL_MIN_OCTETS 3
+ − #define UI_CTRL_MIN_OCTETS 3
+ − #define U_CTRL_MIN_OCTETS 2
+ −
+ − /*
+ − * Minimum number of octets that must be contained in a valid frame, excluding
+ − * the FCS field.
+ − */
+ − #define I_FRAME_MIN_OCTETS_WITHOUT_FCS 5
+ − #define S_FRAME_MIN_OCTETS_WITHOUT_FCS 3
+ − #define UI_FRAME_MIN_OCTETS_WITHOUT_FCS 3
+ − #define U_FRAME_MIN_OCTETS_WITHOUT_FCS 2
+ −
+ − /*
+ − * Minimum number of octets that must be contained in a valid frame.
+ − */
+ − #define FRAME_MIN_OCTETS 5
+ − #define I_FRAME_MIN_OCTETS 8
+ − #define S_FRAME_MIN_OCTETS 6
+ − #define UI_FRAME_MIN_OCTETS 6
+ − #define U_FRAME_MIN_OCTETS 5
+ −
+ − #define U_FRAME_FRMR_INFO_OCTETS U_FRMR_INFO_SIZE
+ −
+ − #define S_FRAME_SACK_MIN_CTRL_OCTETS 1
+ − #define S_FRAME_SACK_MAX_CTRL_OCTETS 32
+ −
+ − /*
+ − * I frame and S frame commands/responses (bits S1, S2).
+ − */
+ − #define I_FRAME_RR 0x00
+ − #define I_FRAME_ACK 0x01
+ − #define I_FRAME_RNR 0x02
+ − #define I_FRAME_SACK 0x03
+ −
+ − /*
+ − * U frame commands/responses (bits M4, M3, M2, M1).
+ − */
+ − #ifdef REL99
+ − #define U_FRAME_NULL 0x00
+ − #endif /*REL99*/
+ − #define U_FRAME_DM 0x01
+ − #define U_FRAME_DISC 0x04
+ − #define U_FRAME_UA 0x06
+ − #define U_FRAME_SABM 0x07
+ − #define U_FRAME_FRMR 0x08
+ − #define U_FRAME_XID 0x0B
+ −
+ − /*
+ − * Reasons of frame rejection condition. The lower nibble conforms
+ − * to W4-W1 in the FRMR response frame.
+ − */
+ − #define FRMR_W1 0x01
+ − #define FRMR_W2 0x02
+ − #define FRMR_W3 0x04
+ − #define FRMR_W4 0x08
+ −
+ − /*
+ − * !!!!!asap <R.LLC.XCEPTION.A.010> "W1 bit: Bit W3 shall be set to 1 in
+ − * conjunction with this bit." Is that always the case?
+ − */
+ − #define FRMR_INCORRECT_LENGTH FRMR_W1
+ − #define FRMR_INCORRECT_LENGTH_ABM (FRMR_W1 | FRMR_W4)
+ − #define FRMR_EXCEEDS_N201 FRMR_W2
+ − #define FRMR_EXCEEDS_N201_ABM (FRMR_W2 | FRMR_W4)
+ − #define FRMR_UNDEFINED_CTRL FRMR_W3
+ − #define FRMR_UNDEFINED_CTRL_ABM (FRMR_W3 | FRMR_W4)
+ −
+ − #define FRMR_CTRL_LENGTH_UNKNOWN 0x00
+ −
+ −
+ − /*
+ − * Maximum value of LLC sequence numbers and state variables:
+ − * N(S), N(R), V(S), V(R), ...
+ − */
+ − #define MAX_SEQUENCE_NUMBER 511
+ −
+ −
+ − /*
+ − * UITX_*_QUEUE_SIZE defines the maximum number of frames for the various
+ − * UITX service incarnations (depeding on SAPI). UITX is the only service
+ − * which is limited with uplink flow control. Enough memory must be present
+ − * for all other services (U, ITX). U requires a maximum of 2 simultaneously
+ − * stored frames per SAPI: the first being a received response to a
+ − * previously sent command, and the second being a command which is to be sent
+ − * directly afterwards.
+ − */
+ − #define UITX_1_QUEUE_SIZE 10
+ − #define UITX_3_QUEUE_SIZE 1
+ − #define UITX_5_QUEUE_SIZE 1
+ − #define UITX_7_QUEUE_SIZE 1
+ − #define UITX_9_QUEUE_SIZE 1
+ − #define UITX_11_QUEUE_SIZE 1
+ −
+ − #define ITX_3_QUEUE_SIZE 1
+ − #define ITX_5_QUEUE_SIZE 1
+ − #define ITX_9_QUEUE_SIZE 1
+ − #define ITX_11_QUEUE_SIZE 1
+ −
+ − /*
+ − * Because of the lack of flow control between GRLC and LLC, it is possible,
+ − * that LLC recieve frames from GRLC, but can not forward them to the higher
+ − * layers. The following constants define the number of UI frames to buffer
+ − * per SAPI until we get an LL_GETUNITDATA_REQ
+ − */
+ − #define UIRX_QUEUE_SIZE 32
+ −
+ − /*
+ − * The number of queued I-frames in ITX is limited to the windowsize ku.
+ − * If only ku frames are queued and we got an acknowledge for this, LLC
+ − * would have no more frames to send. The following variable defines a
+ − * number of additional frames to buffer.
+ − */
+ − #ifdef _SIMULATION_
+ − #define ITX_ADD_QUEUE_SIZE 8
+ − #else
+ − #define ITX_ADD_QUEUE_SIZE 1
+ − #endif
+ − /*
+ − * Maximum supported LLC parameter which should be negotiated initial.
+ − * Only values which are different to the default should be defined here.
+ − * In future this value should be read from the flash file system.
+ − */
+ − #define N201_U_SUPPORTED 520
+ − #define N201_I_SUPPORTED 520
+ − #define KD_KD_SUPPORTED 64
+ − #if defined (LL_2to1) || defined (REL99)
+ − #define KD_KU_SUPPORTED 16
+ − #else
+ − #define KD_KU_SUPPORTED 8
+ − #endif
+ − #define KD_MD_SUPPORTED 0
+ − #define KD_MU_SUPPORTED 0
+ −
+ − /*
+ − * Service definitions. Used to access service data with GET/SET_STATE.
+ − *
+ − * Services with multiple incarnation have to be defined as xxx->
+ − * Services with only one incarnation have to be defined as xxx.
+ − */
+ − #define LLME llme.
+ − #define SAPI sapi->
+ − #define U u->
+ − #define ITX itx->
+ − #define IRX irx->
+ − #define UITX uitx->
+ − #define UIRX uirx->
+ − #define T200 t200->
+ − #define T201 t201->
+ − #define TX tx.
+ − #define RX rx.
+ −
+ −
+ − /* #ifndef NTRACE*/
+ −
+ − /*
+ − * These defintions are only needed for debugging purposes (!NTRACE).
+ − */
+ −
+ − /*
+ − * The following definitions are necessary for the state initialisation of
+ − * services with the INIT_STATE() macro.
+ − */
+ − #define U_0 U
+ − #define U_1 U
+ − #define U_2 U
+ − #define U_3 U
+ − #define U_4 U
+ − #define U_5 U
+ −
+ − #define ITX_0 ITX
+ − #define ITX_1 ITX
+ − #define ITX_2 ITX
+ − #define ITX_3 ITX
+ −
+ − #define IRX_0 IRX
+ − #define IRX_1 IRX
+ − #define IRX_2 IRX
+ − #define IRX_3 IRX
+ −
+ − #define UITX_0 UITX
+ − #define UITX_1 UITX
+ − #define UITX_2 UITX
+ − #define UITX_3 UITX
+ − #define UITX_4 UITX
+ − #define UITX_5 UITX
+ −
+ − #define UIRX_0 UIRX
+ − #define UIRX_1 UIRX
+ − #define UIRX_2 UIRX
+ − #define UIRX_3 UIRX
+ − #define UIRX_4 UIRX
+ − #define UIRX_5 UIRX
+ −
+ − #define T200_0 T200
+ − #define T200_1 T200
+ − #define T200_2 T200
+ − #define T200_3 T200
+ − #define T200_4 T200
+ − #define T200_5 T200
+ −
+ − #define T201_0 T201
+ − #define T201_1 T201
+ − #define T201_2 T201
+ − #define T201_3 T201
+ −
+ − /*
+ − * Service name definitions for trace purposes. The service abbrevation
+ − * (e.g. LLME) has to be the same as above for the service definitions.
+ − */
+ − #define SERVICE_NAME_LLME "LLME"
+ −
+ − #define SERVICE_NAME_U_0 "U_1"
+ − #define SERVICE_NAME_U_1 "U_3"
+ − #define SERVICE_NAME_U_2 "U_5"
+ − #define SERVICE_NAME_U_3 "U_7"
+ − #define SERVICE_NAME_U_4 "U_9"
+ − #define SERVICE_NAME_U_5 "U_11"
+ −
+ − #define SERVICE_NAME_ITX_0 "ITX_3"
+ − #define SERVICE_NAME_ITX_1 "ITX_5"
+ − #define SERVICE_NAME_ITX_2 "ITX_9"
+ − #define SERVICE_NAME_ITX_3 "ITX_11"
+ −
+ − #define SERVICE_NAME_IRX_0 "IRX_3"
+ − #define SERVICE_NAME_IRX_1 "IRX_5"
+ − #define SERVICE_NAME_IRX_2 "IRX_9"
+ − #define SERVICE_NAME_IRX_3 "IRX_11"
+ −
+ − #define SERVICE_NAME_UITX_0 "UITX_1"
+ − #define SERVICE_NAME_UITX_1 "UITX_3"
+ − #define SERVICE_NAME_UITX_2 "UITX_5"
+ − #define SERVICE_NAME_UITX_3 "UITX_7"
+ − #define SERVICE_NAME_UITX_4 "UITX_9"
+ − #define SERVICE_NAME_UITX_5 "UITX_11"
+ −
+ − #define SERVICE_NAME_UIRX_0 "UIRX_1"
+ − #define SERVICE_NAME_UIRX_1 "UIRX_3"
+ − #define SERVICE_NAME_UIRX_2 "UIRX_5"
+ − #define SERVICE_NAME_UIRX_3 "UIRX_7"
+ − #define SERVICE_NAME_UIRX_4 "UIRX_9"
+ − #define SERVICE_NAME_UIRX_5 "UIRX_11"
+ −
+ − #define SERVICE_NAME_T200_0 "T200_1"
+ − #define SERVICE_NAME_T200_1 "T200_3"
+ − #define SERVICE_NAME_T200_2 "T200_5"
+ − #define SERVICE_NAME_T200_3 "T200_7"
+ − #define SERVICE_NAME_T200_4 "T200_9"
+ − #define SERVICE_NAME_T200_5 "T200_11"
+ −
+ − #define SERVICE_NAME_TX "TX"
+ − #define SERVICE_NAME_RX "RX"
+ −
+ − /* #endif !NTRACE */
+ −
+ −
+ − /*
+ − * Timer definitions. For each timer a BASE and MAX value is defined.
+ − */
+ − #define TIMER_T200_BASE (0)
+ − #define TIMER_T200_1 (TIMER_T200_BASE)
+ − #define TIMER_T200_3 (TIMER_T200_BASE+1)
+ − #define TIMER_T200_5 (TIMER_T200_BASE+2)
+ − #define TIMER_T200_7 (TIMER_T200_BASE+3)
+ − #define TIMER_T200_9 (TIMER_T200_BASE+4)
+ − #define TIMER_T200_11 (TIMER_T200_BASE+5)
+ − #define TIMER_T200_MAX (TIMER_T200_11)
+ −
+ − #define TIMER_T201_BASE (TIMER_T200_MAX+1)
+ − #define TIMER_T201_3 (TIMER_T201_BASE)
+ − #define TIMER_T201_5 (TIMER_T201_BASE+1)
+ − #define TIMER_T201_9 (TIMER_T201_BASE+2)
+ − #define TIMER_T201_11 (TIMER_T201_BASE+3)
+ − #define TIMER_T201_MAX (TIMER_T201_11)
+ −
+ − #define TIMER_MAX (TIMER_T201_MAX)
+ − #define TIMER_NUM (TIMER_MAX+1)
+ −
+ −
+ − /*
+ − * State definitions for each service.
+ − */
+ −
+ − #define LLME_TLLI_UNASSIGNED 1
+ − #define LLME_TLLI_ASSIGNED 2
+ − #define LLME_TLLI_ASSIGNED_SUSPENDED 3
+ −
+ − #define U_TLLI_UNASSIGNED 1
+ − #define U_ADM 2
+ − #define U_LOCAL_ESTABLISHMENT 3
+ − #define U_REMOTE_ESTABLISHMENT 4
+ − #define U_ABM 5
+ − #define U_LOCAL_RELEASE 6
+ − #define U_ESTABLISH_RES_PENDING 7
+ −
+ − #define ITX_TLLI_UNASSIGNED 1
+ − #define ITX_TLLI_ASSIGNED 2
+ − #define ITX_ABM 3
+ − #define ITX_ABM_PEER_BUSY 4
+ −
+ − #define IRX_TLLI_UNASSIGNED 1
+ − #define IRX_TLLI_ASSIGNED 2
+ − #define IRX_ABM 3
+ − #define IRX_ABM_BUSY 4
+ −
+ − #define UITX_TLLI_UNASSIGNED_NOT_READY 1
+ − #define UITX_TLLI_UNASSIGNED_READY 2
+ − #define UITX_ADM_NOT_READY 3
+ − #define UITX_ADM_READY 4
+ −
+ − #define UIRX_TLLI_UNASSIGNED_NOT_READY 1
+ − #define UIRX_TLLI_UNASSIGNED_READY 2
+ − #define UIRX_ADM_NOT_READY 3
+ − #define UIRX_ADM_READY 4
+ −
+ − #define T200_TLLI_UNASSIGNED 1
+ − #define T200_RESET 2
+ − #define T200_RUNNING 3
+ −
+ − #define TX_TLLI_UNASSIGNED_NOT_READY 1
+ − #define TX_TLLI_UNASSIGNED_READY 2
+ − #define TX_TLLI_ASSIGNED_NOT_READY 3
+ − #define TX_TLLI_ASSIGNED_READY 4
+ −
+ − #define RX_TLLI_UNASSIGNED 1
+ − #define RX_TLLI_ASSIGNED 2
+ −
+ − #ifndef TI_PS_OP_CIPH_DRIVER
+ −
+ − /*
+ − * user defined constants
+ − */
+ −
+ − #define CIPH_SIZE_CK (0x10)
+ − #define CIPH_MAX_ELEM (0x14)
+ − #define CIPH_MAX_HEADER_SIZE (0x25)
+ − #define CIPH_N202 (0x4)
+ −
+ − /*==== TYPES ======================================================*/
+ −
+ − /*
+ − * The following definitions was originally generated by CCD. The definitions are not used as
+ − * primitive definitions anymore, only for SNDCP internal usage.
+ − */
+ − /* --------------------------------------------------------------------------------- */
+ − /*
+ − * enum to Variable algo
+ − * Ciphering algorithm.
+ − * CCDGEN:WriteEnum_Count==2834
+ − */
+ − #ifndef __T_CIPH_algo__
+ − #define __T_CIPH_algo__
+ − typedef enum
+ − {
+ − CIPH_EA0 = 0x0, /* No encryption */
+ − CIPH_EA1 = 0x1, /* Frame shall be ciphered using algorithm EA1 */
+ − CIPH_EA2 = 0x2, /* Frame shall be ciphered using algorithm EA2 */
+ − CIPH_EA3 = 0x3 /* Frame shall be ciphered using algorithm EA3 */
+ − }T_CIPH_algo;
+ − #endif
+ − /*
+ − * enum to Variable direction
+ − * DIRECTION parameter
+ − * CCDGEN:WriteEnum_Count==2836
+ − */
+ − #ifndef __T_CIPH_direction__
+ − #define __T_CIPH_direction__
+ − typedef enum
+ − {
+ − CIPH_UPLINK_DIR = 0x0, /* See [3G 33.102] */
+ − CIPH_DOWNLINK_DIR = 0x1 /* See [3G 33.102] */
+ − }T_CIPH_direction;
+ − #endif
+ − /*
+ − * enum to Variable status
+ − * Status of the ciphering process
+ − * CCDGEN:WriteEnum_Count==2853
+ − */
+ − #ifndef __T_CIPH_status__
+ − #define __T_CIPH_status__
+ − typedef enum
+ − {
+ − CIPH_CIPH_FAIL = 0x0, /* Ciphering successful */
+ − CIPH_CIPH_PASS = 0x1, /* Ciphering failed */
+ − CIPH_CIPH_BUSY = 0x2, /* Ongoing ciphering */
+ − CIPH_FCS_ERROR = 0x3 /* FCS error */
+ − }T_CIPH_status;
+ − #endif
+ − /*
+ − * enum to Variable pm
+ − * Protected or unprotected mode
+ − * CCDGEN:WriteEnum_Count==2840
+ − */
+ − #ifndef __T_CIPH_pm__
+ − #define __T_CIPH_pm__
+ − typedef enum
+ − {
+ − CIPH_PM_UNPROTECTED = 0x0, /* FCS covers frame header field and first N202 octets of information field */
+ − CIPH_PM_PROTECTED = 0x1 /* FCS covers frame header and information fields */
+ − }T_CIPH_pm;
+ − #endif
+ −
+ − #ifndef __T_CIPH_ck__
+ − #define __T_CIPH_ck__
+ − /*
+ − * Ciphering key.
+ − * CCDGEN:WriteStruct_Count==13956
+ − */
+ − typedef struct
+ − {
+ − U8 ck_element[CIPH_SIZE_CK]; /*< 0: 16> T_CIPH_ck_element, Ciphering key element */
+ − } T_CIPH_ck;
+ − #endif
+ −
+ − #ifndef __T_CIPH_init_cipher_req_parms__
+ − #define __T_CIPH_init_cipher_req_parms__
+ − /*
+ − * Ciphering algorithm initialisation parameters.
+ − * CCDGEN:WriteStruct_Count==13968
+ − */
+ − typedef struct
+ − {
+ − U8 algo; /*< 0: 1> T_CIPH_algo, Ciphering algorithm. */
+ − U8 direction; /*< 1: 1> T_CIPH_direction, DIRECTION parameter */
+ − U8 zzz_align0; /*< 2: 1> alignment */
+ − U8 zzz_align1; /*< 3: 1> alignment */
+ − T_CIPH_ck *ptr_ck; /*< 4: 4> pointer to Ciphering key. */
+ − } T_CIPH_init_cipher_req_parms;
+ − #endif
+ −
+ −
+ − #ifndef __T_CIPH_gprs_parameters__
+ − #define __T_CIPH_gprs_parameters__
+ − /*
+ − * Structure containing LLC parameters
+ − * CCDGEN:WriteStruct_Count==13976
+ − */
+ − typedef struct
+ − {
+ − U8 pm; /*< 0: 1> T_CIPH_pm, Protected or unprotected mode */
+ − U8 zzz_align0; /*< 1: 1> alignment */
+ − U16 header_size; /*< 2: 2> T_CIPH_header_size, Frame header size */
+ − U32 ciphering_input; /*< 4: 4> frame-dependent ciphering input */
+ − U32 threshold; /*< 8: 4> T_CIPH_threshold, Threshold parameter */
+ − } T_CIPH_gprs_parameters;
+ − #endif
+ −
+ − #ifndef __T_CIPH_umts_parameters__
+ − #define __T_CIPH_umts_parameters__
+ − /*
+ − * Structure containing umts parameters
+ − * CCDGEN:WriteStruct_Count==13980
+ − */
+ − typedef struct
+ − {
+ − U8 bearer; /*< 0: 1> T_CIPH_bearer, BEARER parameter */
+ − U8 zzz_align0; /*< 1: 1> alignment */
+ − U8 zzz_align1; /*< 2: 1> alignment */
+ − U8 zzz_align2; /*< 3: 1> alignment */
+ − U32 count_c; /*< 4: 4> COUNT-C parameter */
+ − U8 dest_bit_offset; /*< 8: 1> T_CIPH_dest_bit_offset, Bit offset */
+ − U8 org_bit_offset; /*< 9: 1> T_CIPH_org_bit_offset, Bit offset */
+ − U8 zzz_align3; /*< 10: 1> alignment */
+ − U8 zzz_align4; /*< 11: 1> alignment */
+ − U32 threshold; /*< 12: 4> T_CIPH_threshold, Threshold parameter */
+ − } T_CIPH_umts_parameters;
+ − #endif
+ −
+ − #ifndef __T_CIPH_in_data__
+ − #define __T_CIPH_in_data__
+ − /*
+ − * Structure containing length and pointer to the data
+ − * CCDGEN:WriteStruct_Count==13984
+ − */
+ − typedef struct
+ − {
+ − U16 len; /*< 0: 2> Length of buffer */
+ − U8 zzz_align0; /*< 2: 1> alignment */
+ − U8 zzz_align1; /*< 3: 1> alignment */
+ − U32 buf; /*< 4: 4> Pointer to the data in buffer */
+ − } T_CIPH_in_data;
+ − #endif
+ −
+ − /*
+ − * Stucture containing length and pointer to the data
+ − * CCDGEN:WriteStruct_Count==13988
+ − */
+ − #ifndef __T_CIPH_out_data__
+ − #define __T_CIPH_out_data__
+ − typedef T_CIPH_in_data T_CIPH_out_data;
+ − #endif
+ − #ifndef __T_CIPH_cipher_req_parms__
+ − #define __T_CIPH_cipher_req_parms__
+ − /*
+ − * Ciphering algorithm parameters.
+ − * CCDGEN:WriteStruct_Count==13990
+ − */
+ − typedef union
+ − {
+ − T_CIPH_gprs_parameters gprs_parameters; /*< 0: 12> Structure containing LLC parameters */
+ − T_CIPH_umts_parameters umts_parameters; /*< 0: 16> Structure containing umts parameters */
+ − } T_CIPH_cipher_req_parms;
+ − #endif
+ −
+ − #ifndef __T_CIPH_in_data_list__
+ − #define __T_CIPH_in_data_list__
+ − /*
+ − * Structure containing a list of in_data elements
+ − * CCDGEN:WriteStruct_Count==13994
+ − */
+ − typedef struct
+ − {
+ − T_CIPH_in_data *ptr_in_data; /*< 0: 4> pointer to Structure containing length and pointer to the data */
+ − U16 c_in_data; /*< 4: 2> Number of elements */
+ − U8 zzz_align0; /*< 6: 1> alignment */
+ − U8 zzz_align1; /*< 7: 1> alignment */
+ − } T_CIPH_in_data_list;
+ − #endif
+ −
+ − #endif /* TI_PS_OP_CIPH_DRIVER */
+ −
+ − /* --------------------------------------------------------------------------------- */
+ −
+ − #ifndef __T_kc__
+ − #define __T_kc__
+ − typedef struct
+ − {
+ − U8 key[8]; /*< 0: 8> ciphering key content */
+ − } T_kc;
+ − #endif
+ −
+ − #ifndef __T_CCI_CIPHER_REQ__
+ − #define __T_CCI_CIPHER_REQ__
+ − typedef struct
+ − {
+ − U8 pm; /*< 0: 1> protected mode */
+ − U8 ciphering_algorithm; /*< 16: 1> ciphering algorithm */
+ − U8 direction; /*< 17: 1> ciphering transfer direction */
+ − U8 attached_counter; /*< 29: 1> attached to primitive data counter */
+ − U32 ciphering_input; /*< 4: 4> frame-dependent ciphering input */
+ − T_kc kc; /*< 8: 8> ciphering key */
+ − U32 reference1; /*< 32: 4> frame reference number */
+ − U16 header_size; /*< 36: 2> frame header size */
+ − U8 zzz_align0; /*< 38: 1> alignment */
+ − U8 zzz_align1; /*< 39: 1> alignment */
+ − T_sdu sdu; /*< 40: ? > service data unit */
+ − } T_CCI_CIPHER_REQ;
+ − #endif
+ −
+ − #ifndef __T_CCI_DECIPHER_REQ__
+ − #define __T_CCI_DECIPHER_REQ__
+ − typedef struct
+ − {
+ − U8 pm; /*< 0: 1> protected mode */
+ − U8 ciphering_algorithm; /*< 1: 1> ciphering algorithm */
+ − U8 direction; /*< 16: 1> ciphering transfer direction */
+ − U8 zzz_align0; /*< 30: 1> alignment */
+ − T_kc kc; /*< 4: 8> ciphering key */
+ − U32 ciphering_input; /*< 12: 4> frame-dependent ciphering input */
+ − U32 reference1; /*< 20: 4> frame reference number */
+ − U32 reference2; /*< 24: 4> second frame reference number */
+ − U16 header_size; /*< 28: 2> frame header size */
+ − U8 zzz_align1; /*< 30: 1> alignment */
+ − U8 zzz_align2; /*< 31: 1> alignment */
+ − T_desc_list desc_list; /*< 32: ? > list of generic data descriptors */
+ − } T_CCI_DECIPHER_REQ;
+ − #endif
+ −
+ − #ifndef __T_CCI_RESET_REQ__
+ − #define __T_CCI_RESET_REQ__
+ − typedef struct
+ − {
+ − U8 dummy; /*< 0: 1> no parameters */
+ − } T_CCI_RESET_REQ;
+ − #endif
+ −
+ − #ifndef __T_CCI_CIPHER_DESC_REQ__
+ − #define __T_CCI_CIPHER_DESC_REQ__
+ − typedef struct
+ − {
+ − U8 pm; /*< 0: 1> protected mode */
+ − U8 ciphering_algorithm; /*< 16: 1> ciphering algorithm */
+ − U8 direction; /*< 17: 1> ciphering transfer direction */
+ − U8 attached_counter; /*< 29: 1> attached to primitive data counter */
+ − U32 ciphering_input; /*< 4: 4> frame-dependent ciphering input */
+ − T_kc kc; /*< 8: 8> ciphering key */
+ − U32 reference1; /*< 32: 4> frame reference number */
+ − U16 header_size; /*< 36: 2> frame header size */
+ − U8 zzz_align0; /*< 38: 1> alignment */
+ − U8 zzz_align1; /*< 39: 1> alignment */
+ − T_desc_list3 desc_list3; /*< 40: 8> List of generic data descriptors */
+ − } T_CCI_CIPHER_DESC_REQ;
+ − #endif
+ −
+ − /* --------------------------------------------------------------------------------- */
+ −
+ − /*
+ − * LLC global typedefs
+ − */
+ −
+ − typedef UBYTE T_BIT_INT;
+ − typedef T_BIT_INT T_BIT;
+ −
+ − /*
+ − * T_FRAME_NUM must be unsigned!
+ − */
+ − typedef USHORT T_FRAME_NUM;
+ −
+ − /*
+ − * FRAME_NUM_VALID(a, b, c) equal to ETSI: a <= b <= c
+ − */
+ − #define FRAME_NUM_VALID(a,b,c) ( (((T_FRAME_NUM)((b)-(a)))%(MAX_SEQUENCE_NUMBER+1)) <= \
+ − (((T_FRAME_NUM)((c)-(a)))%(MAX_SEQUENCE_NUMBER+1)) )
+ −
+ − /*
+ − * FRAME_WIN_VALID(a, b, k) equal to ETSI: a < b + k
+ − */
+ − #define FRAME_WIN_VALID(a,b,k) ( (((T_FRAME_NUM)((a)-(b)))%(MAX_SEQUENCE_NUMBER+1)) < (k) )
+ −
+ − /*
+ − * FRAME_NUM_DISTANCE(a,b) equal to b - a for frame nums
+ − */
+ − #define FRAME_NUM_DISTANCE(a,b) ((T_FRAME_NUM)((b)-(a))%(MAX_SEQUENCE_NUMBER+1))
+ −
+ −
+ − typedef struct
+ − {
+ − UBYTE data[S_FRAME_SACK_MAX_CTRL_OCTETS];
+ − } T_SACK_BITMAP;
+ −
+ −
+ − typedef enum
+ − {
+ − ABIT_NO_REQ,
+ − ABIT_SET_REQ
+ − } T_ABIT_REQ_TYPE;
+ −
+ − typedef enum
+ − {
+ − IQ_NO_FRAME, /* return code only */
+ − IQ_NEW_FRAME, /* new in the queue */
+ − IQ_RETR_FRAME, /* ITX - marked for retransmission */
+ − IQ_W4ACK_FRAME, /* ITX - is send, but no ack up to now */
+ − IQ_IS_ACK_FRAME /* ITX - is ack and waiting for to be next in sequence */
+ − } T_IQ_STATUS;
+ −
+ − typedef enum
+ − {
+ − NS_EQUAL_VR,
+ − NS_NO_SEQUENCE_ERROR,
+ − NS_EQUAL_VR_PLUS_1,
+ − NS_IN_RANGE_VR_KU
+ − } T_LAST_NS_TYPE;
+ −
+ − typedef enum
+ − {
+ − I_FRAME = I_FRAME_ID,
+ − S_FRAME = S_FRAME_ID,
+ − UI_FRAME = UI_FRAME_ID,
+ − U_FRAME = U_FRAME_ID
+ − } T_PDU_TYPE;
+ −
+ − typedef enum
+ − {
+ − /*
+ − * The values are chosen to correspond with the Sx and Mx bits in the frame
+ − * control field. Thus these commands can be used to build the header of a
+ − * frame.
+ − * NOTE:
+ − * Some I and U frame commands have the same value.
+ − */
+ − #ifdef REL99
+ − U_NULL = U_FRAME_NULL,
+ − #endif /* REL99 */
+ − I_RR = I_FRAME_RR,
+ − I_ACK = I_FRAME_ACK,
+ − I_RNR = I_FRAME_RNR,
+ − I_SACK = I_FRAME_SACK,
+ − U_SABM = U_FRAME_SABM,
+ − U_DISC = U_FRAME_DISC,
+ − U_UA = U_FRAME_UA,
+ − U_DM = U_FRAME_DM,
+ − U_FRMR = U_FRAME_FRMR,
+ − U_XID = U_FRAME_XID
+ − } T_COMMAND;
+ −
+ − typedef enum
+ − {
+ − NO_SERVICE,
+ − SERVICE_LLME,
+ − SERVICE_ITX,
+ − SERVICE_IRX,
+ − SERVICE_UITX,
+ − SERVICE_UIRX,
+ − SERVICE_U,
+ − SERVICE_TX,
+ − SERVICE_RX,
+ − SERVICE_T200
+ − } T_SERVICE;
+ −
+ − typedef enum
+ − {
+ − PRIM_DATA,
+ − PRIM_UNITDATA,
+ − PRIM_REMOVED,
+ − NO_PRIM
+ − } T_PRIM_TYPE;
+ −
+ − typedef enum
+ − {
+ − EXPIRY_TIMED,
+ − EXPIRY_REQUESTED
+ − } T_EXPIRY_MODE_TYPE;
+ −
+ −
+ − /*
+ − * Don't use enum for SAPI, because that's larger in size than UBYTE.
+ − */
+ − typedef UBYTE T_SAPI;
+ −
+ − #define SAPI_1 LL_SAPI_1
+ − #define SAPI_2 LL_SAPI_INVALID
+ − #define SAPI_3 LL_SAPI_3
+ − #define SAPI_4 LL_SAPI_INVALID
+ − #define SAPI_5 LL_SAPI_5
+ − #define SAPI_6 LL_SAPI_INVALID
+ − #define SAPI_7 LL_SAPI_7
+ − #define SAPI_8 LL_SAPI_INVALID
+ − #define SAPI_9 LL_SAPI_9
+ − #define SAPI_10 LL_SAPI_INVALID
+ − #define SAPI_11 LL_SAPI_11
+ − #define SAPI_12 LL_SAPI_INVALID
+ − #define SAPI_13 LL_SAPI_INVALID
+ − #define SAPI_14 LL_SAPI_INVALID
+ − #define SAPI_15 LL_SAPI_INVALID
+ −
+ − /*
+ − * Indicates which primitive to use after successful (re-)establishment:
+ − * LL_ESTABLISH_IND/CNF
+ − */
+ − typedef UBYTE T_ESTABLISHMENT;
+ −
+ − #define IND_ESTABLISHMENT 1
+ − #define CNF_ESTABLISHMENT 2
+ −
+ − /*
+ − * Local TX transmit queue.
+ − * NOTE:
+ − * The ph_* variables must exactly match the types of T_GRLC_DATA_REQ /
+ − * T_GRLC_UNITDATA_REQ.
+ − */
+ − typedef struct T_TX_QUEUE_ELEMENT
+ − {
+ − struct T_TX_QUEUE_ELEMENT *next; /* pointer to next element */
+ − ULONG primitive; /* stored primitive */
+ − ULONG reference; /* entry reference number */
+ − T_PRIM_TYPE prim_type; /* primitive type */
+ − UBYTE ph_sapi; /* primitive header: sapi */
+ − ULONG ph_tlli; /* tlli */
+ − UBYTE ph_grlc_qos_peak; /* grlc_qos.peak */
+ − UBYTE ph_radio_prio; /* radio_prio */
+ − UBYTE ph_cause; /* cause */
+ − T_SERVICE rx_service; /* flow control service */
+ − BOOL remove_frame; /* TRUE: frame has to remove */
+ − #ifdef REL99
+ − UBYTE ph_pkt_flow_id; /* packet flow identifier */
+ − #endif /* REL99 */
+ − } T_TX_QUEUE;
+ −
+ −
+ − typedef struct T_ITX_I_QUEUE_ENTRY
+ − {
+ − struct T_ITX_I_QUEUE_ENTRY *next; /* pointer to next element */
+ − #ifdef LL_DESC
+ − T_LL_DESC_REQ* frame; /* pointer to L3 prim */
+ − #else
+ − T_LL_DATA_REQ* frame; /* pointer to L3 prim */
+ − #endif
+ − USHORT n_retr; /* retransmission counter */
+ − T_IQ_STATUS status; /* status flag */
+ − T_FRAME_NUM ns; /* send sequence number N(S) */
+ − ULONG oc_i_tx; /* OC to use for this N(S) */
+ −
+ − /*
+ − * Copy of original LL_DATA_REQ parameter for attached_counter handling
+ − */
+ − #ifdef LL_2to1
+ − T_PS_qos_r97 ll_qos; /* quality of service */
+ − T_LL_reference1 reference; /* ciphering indicator */
+ − #else
+ − T_ll_qos ll_qos; /* quality of service */
+ − T_reference1 reference; /* ciphering indicator */
+ − #endif
+ − #ifdef REL99
+ − UBYTE pkt_flow_id; /*Packet Flow Identifier */
+ − #endif /* REL99 */
+ − #ifdef LL_DESC
+ − USHORT offset; /* Offset of buffer */
+ − USHORT len; /* Length of buffer */
+ − #else
+ − USHORT sdu_o_buf; /* Offset of SDU data */
+ − USHORT sdu_l_buf; /* Length of SDU data */
+ − #endif
+ − UBYTE radio_prio; /* Radio Priority */
+ − UBYTE seg_pos; /* First and/or last seg? */
+ −
+ − } T_ITX_I_QUEUE_ENTRY;
+ −
+ −
+ − typedef struct
+ − {
+ − struct T_ITX_I_QUEUE_ENTRY *first; /* pointer to first element */
+ − USHORT entries; /* number of Queue enties */
+ − } T_ITX_I_QUEUE;
+ −
+ −
+ − typedef struct T_ITX_S_QUEUE_ENTRY
+ − {
+ − struct T_ITX_S_QUEUE_ENTRY *next; /* pointer to next element */
+ − T_COMMAND sx; /* Supervisiory command Sx */
+ − T_ABIT_REQ_TYPE rt; /* A bit request flag */
+ − T_FRAME_NUM nr; /* N(R) of command */
+ − T_SACK_BITMAP bitmap; /* SACK bitmap */
+ − } T_ITX_S_QUEUE_ENTRY;
+ −
+ −
+ − typedef struct T_IRX_QUEUE
+ − {
+ − struct T_IRX_QUEUE *next; /* pointer to next element */
+ − T_LL_UNITDATA_IND* frame; /* pointer to L3 prim */
+ − T_FRAME_NUM ns; /* received frame number N(S) */
+ − } T_IRX_QUEUE;
+ −
+ − typedef struct T_UIRX_QUEUE
+ − {
+ − struct T_UIRX_QUEUE *next; /* pointer to next element */
+ − T_LL_UNITDATA_IND* frame; /* pointer to L3 prim */
+ − } T_UIRX_QUEUE;
+ −
+ −
+ − typedef struct /* T_XID_PARAMETERS */
+ − {
+ − struct /* Version */
+ − {
+ − BOOL valid;
+ − UBYTE value;
+ − } version;
+ − struct /* IOV-UI */
+ − {
+ − BOOL valid;
+ − ULONG value;
+ − } iov_ui;
+ − struct /* IOV-I */
+ − {
+ − BOOL valid;
+ − ULONG value;
+ − } iov_i;
+ − struct /* T200 */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } t200;
+ − struct /* N200 */
+ − {
+ − BOOL valid;
+ − UBYTE value;
+ − } n200;
+ − struct /* N201-U */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } n201_u;
+ − struct /* N201-I */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } n201_i;
+ − struct /* mD */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } md;
+ − struct /* mU */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } mu;
+ − struct /* kD */
+ − {
+ − BOOL valid;
+ − UBYTE value;
+ − } kd;
+ − struct /* kU */
+ − {
+ − BOOL valid;
+ − UBYTE value;
+ − } ku;
+ − struct /* Reset */
+ − {
+ − BOOL valid;
+ − } reset;
+ − } T_XID_PARAMETERS;
+ −
+ −
+ −
+ − typedef struct /* T_FFS_XID_PARAMETERS */
+ − {
+ − struct /* T200 */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } t200[UNACKNOWLEDGED_INC];
+ − struct /* N200 */
+ − {
+ − BOOL valid;
+ − UBYTE value;
+ − } n200[UNACKNOWLEDGED_INC];
+ − struct /* N201-U */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } n201_u[UNACKNOWLEDGED_INC];
+ − struct /* N201-I */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } n201_i[ACKNOWLEDGED_INC];
+ − struct /* mD */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } md[ACKNOWLEDGED_INC];
+ − struct /* mU */
+ − {
+ − BOOL valid;
+ − USHORT value;
+ − } mu[ACKNOWLEDGED_INC];
+ − struct /* kD */
+ − {
+ − BOOL valid;
+ − UBYTE value;
+ − } kd[ACKNOWLEDGED_INC];
+ − struct /* kU */
+ − {
+ − BOOL valid;
+ − UBYTE value;
+ − } ku[ACKNOWLEDGED_INC];
+ − } T_FFS_XID_PARAMETERS;
+ −
+ −
+ − typedef struct /* T_LLME_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ − } T_LLME_DATA;
+ −
+ −
+ − typedef struct /* T_U_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ − /*
+ − * TLLI of current transaction (is set with incoming primitives, time-outs,
+ − * and signals with primitive payload).
+ − */
+ − ULONG current_tlli;
+ −
+ − /*
+ − * Number of retransmissions per sent command frame.
+ − */
+ − UBYTE retransmission_counter;
+ −
+ − /*
+ − * If LLC receives an release request from Layer 3 and is not able to confirm
+ − * the request immediately, release_requested has to be set to TRUE.
+ − */
+ − UBYTE release_requested;
+ −
+ − /*
+ − * Send LL_ESTABLISH_IND/CNF after successful establishment.
+ − */
+ − T_ESTABLISHMENT ind_cnf_establishment;
+ −
+ − /*
+ − * Indicates if XID command has been sent.
+ − */
+ − BOOL xid_pending;
+ −
+ − /*
+ − * Indicates that an LL_XID_IND has been sent.
+ − */
+ − BOOL ll_xid_resp_pending;
+ −
+ − /*
+ − * Reason of frame rejection condition.
+ − */
+ − UBYTE frmr_reason;
+ −
+ − /*
+ − * Used to tag parameters for the next XID response. This is done by
+ − * setting the corresponding bit (with the definitions from llc_uf.h) to 1.
+ − * This variable is initialised by llme_init(), and with every call of
+ − * u_eval_xid().
+ − */
+ − ULONG xid_tag;
+ −
+ − /*
+ − * Tags parameters for further negotiation that have not been included in
+ − * the XID command but are included in the XID response. These parameters
+ − * have to be included in every XID response until the parameter has been
+ − * explicitly negotiated, either by responding to an XID command that
+ − * included the parameter, or by explicitly including the parameter
+ − * the next time an XID command is transmitted.
+ − * <R.LLC.XIDNEG_R.A.015>
+ − * This variable is initialised by llme_init().
+ − */
+ − ULONG xid_tag_negotiate;
+ −
+ − /*
+ − * Used to tag parameters that have actually been sent in the last command
+ − * or response frame. It is used for collision checks and the like.
+ − * This variable is initialised by llme_init(), and with every call of
+ − * u_insert_xid().
+ − */
+ − ULONG xid_tag_sent;
+ −
+ − /*
+ − * Structure to contain XID parameters that are requested to be negotiated.
+ − * Valid flags are initialised by llme_init(), and are being reset when
+ − * the parameter has explicitly been included in a response.
+ − */
+ − T_XID_PARAMETERS requested_xid;
+ −
+ − } T_U_DATA;
+ −
+ −
+ − typedef struct /* T_ITX_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ −
+ − BOOL tx_waiting;
+ − BOOL buffer_was_full;
+ −
+ − /*
+ − * I frame buffer size variables: Total length of
+ − * transmitted and not acknowlegded information fields.
+ − */
+ − ULONG B_tx;
+ −
+ − /*
+ − * Local transmit queues for I- and S frames
+ − */
+ − T_ITX_I_QUEUE i_queue;
+ − T_ITX_S_QUEUE_ENTRY *s_queue;
+ −
+ − /*
+ − * T201 Data
+ − */
+ − T_ITX_I_QUEUE_ENTRY *t201_entry;
+ − USHORT n_pb_retr;
+ −
+ − } T_ITX_DATA;
+ −
+ −
+ − typedef struct /* T_IRX_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ −
+ − /*
+ − * I frame buffer size variables: Total length of
+ − * stored information fields.
+ − */
+ − ULONG B_rx;
+ −
+ − /*
+ − * Next frame number to forward to L3
+ − */
+ − T_FRAME_NUM vf;
+ −
+ − /*
+ − * L3 ready to receive a data indication flag
+ − */
+ − BOOL ll_send_ready;
+ − T_LAST_NS_TYPE last_ns;
+ −
+ − T_IRX_QUEUE *queue;
+ − } T_IRX_DATA;
+ −
+ −
+ − typedef struct /* T_UITX_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ − /*
+ − * Unacknowledged send sequence number
+ − */
+ − T_FRAME_NUM vu;
+ − } T_UITX_DATA;
+ −
+ −
+ − typedef struct /* T_UIRX_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ − /*
+ − * Bit field for received N(U) values, relative to V(UR).
+ − */
+ − ULONG last_32_frames_bitfield;
+ −
+ − T_UIRX_QUEUE *queue;
+ −
+ − } T_UIRX_DATA;
+ −
+ −
+ − typedef struct /* T_T200_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ − /*
+ − * Length of timer T200 in milliseconds (is negotiated in 0.1s!).
+ − * LLC layer parameter.
+ − */
+ − T_TIME length;
+ − /*
+ − * The frame which is associated with the timer, the RLC/MAC cause of the
+ − * frame, and the service that started the timer. This is the t200_data
+ − * array of SDL.
+ − */
+ − #ifdef LL_DESC
+ − T_LL_UNITDESC_REQ *frame;
+ − #else
+ − T_LL_UNITDATA_REQ *frame;
+ − #endif
+ − UBYTE cause;
+ − T_SERVICE originator;
+ −
+ − } T_T200_DATA;
+ −
+ −
+ − typedef struct /* T_TX_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ − /*
+ − * Local transmit queue (single-linked dynamic list).
+ − */
+ − T_TX_QUEUE *queue;
+ − /*
+ − * Counter of available space for UITX primitives in the queue.
+ − */
+ − UBYTE queue_counter_itx[ITX_NUM_INC];
+ − UBYTE queue_counter_uitx[UITX_NUM_INC];
+ − } T_TX_DATA;
+ −
+ −
+ − typedef struct /* T_RX_DATA */
+ − {
+ − UBYTE state;
+ − /*
+ − * Required for state traces.
+ − */
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ − } T_RX_DATA;
+ −
+ −
+ − typedef struct /* T_SAPI_DATA */
+ − {
+ − /*
+ − * Unacknowledged receive sequence numbers (0..511)
+ − */
+ − T_FRAME_NUM vur;
+ − T_FRAME_NUM last_vur;
+ −
+ − /*
+ − * Acknowledged mode frame numbers (0..511)
+ − */
+ − T_FRAME_NUM vr;
+ − T_FRAME_NUM va;
+ − T_FRAME_NUM vs;
+ −
+ − /*
+ − * Binary overflow counters for acknowledged/unacknowledged mode and
+ − * uplink/downlink. These variables are initialised with llme_init(),
+ − * and the unacknowledged OCs are reset when XID reset has been received.
+ − */
+ − ULONG oc_ui_tx;
+ − ULONG oc_ui_rx;
+ − ULONG oc_i_tx;
+ − ULONG oc_i_rx;
+ −
+ − /*
+ − * pbit_outstanding set to TRUE indicates that a frame with P bit set to 1
+ − * is currently outstanding
+ − */
+ − BOOL pbit_outstanding;
+ −
+ − } T_SAPI_DATA;
+ −
+ − typedef struct /* Layer 3 */
+ − {
+ − BOOL valid;
+ − UBYTE length;
+ − #ifdef LL_2to1
+ − UBYTE value[LL_MAX_L3_XID_LEN];
+ − #else
+ − UBYTE value[LLC_MAX_L3_XID_LEN];
+ − #endif
+ − } T_L3_XID;
+ −
+ − /*
+ − * CCI global typedefs
+ − */
+ − typedef enum
+ − {
+ − CIPHER_REQ,
+ − DECIPHER_REQ,
+ − NO_REQ
+ − } T_CCI_PRIM_TYPE;
+ −
+ − /* CCI data base */
+ − typedef struct /*T_FBS_SERVICE */
+ − {
+ − UBYTE state;
+ − #ifndef NTRACE
+ − char *name;
+ − char *state_name;
+ − #endif
+ −
+ − USHORT volatile *cntl_reg;
+ − USHORT volatile *status_reg;
+ − USHORT volatile *status_irq_reg;
+ − USHORT volatile *conf_ul_reg1;
+ − USHORT volatile *conf_ul_reg2;
+ − USHORT volatile *conf_ul_reg3;
+ − USHORT volatile *conf_ul_reg4;
+ − USHORT volatile *conf_ul_reg5;
+ − USHORT volatile *conf_dl_reg1;
+ − USHORT volatile *conf_dl_reg2;
+ − USHORT volatile *conf_dl_reg3;
+ − USHORT volatile *conf_dl_reg4;
+ − USHORT volatile *conf_dl_reg5;
+ − USHORT volatile *kc_reg1;
+ − USHORT volatile *kc_reg2;
+ − USHORT volatile *kc_reg3;
+ − USHORT volatile *kc_reg4;
+ − USHORT volatile *fcs_ul_reg1;
+ − USHORT volatile *fcs_ul_reg2;
+ − USHORT volatile *fcs_dl_reg1;
+ − USHORT volatile *fcs_dl_reg2;
+ − #if (BOARD == 61 OR BOARD == 71) /* G-Sample or I-Sample */
+ − USHORT volatile *switch_reg;
+ − #endif
+ − USHORT volatile *data16_reg;
+ − UBYTE volatile *data8_reg;
+ −
+ − #ifdef _GEA_SIMULATION_
+ − UBYTE *simulated_reg;
+ − UBYTE *simulated_reg_buffer;
+ − #endif
+ −
+ − /*primitives should also be defined as global */
+ − #ifdef LL_DESC
+ − T_CCI_CIPHER_DESC_REQ *cci_cipher_req;
+ − #else
+ − T_CCI_CIPHER_REQ *cci_cipher_req;
+ − #endif
+ − T_CCI_DECIPHER_REQ *cci_decipher_req;
+ −
+ − #ifndef TI_PS_OP_CIPH_DRIVER
+ − T_CIPH_init_cipher_req_parms ciph_params;
+ − BOOL initialized;
+ − #endif
+ − ULONG cci_freed_partition;
+ − BOOL cci_info_trace;
+ −
+ − } T_FBS_DATA;
+ −
+ −
+ − typedef struct /* T_LLC_DATA */
+ − {
+ − /*
+ − * Indicates LLC is suspended or not (default).
+ − * This variable is initialised by llme_init().
+ − */
+ − BOOL suspended;
+ −
+ − /*
+ − * Indicates LLC that GRLC is suspended or not (default).
+ − * This variable is initialised by llme_init().
+ − */
+ − BOOL grlc_suspended;
+ −
+ − /*
+ − * Current SAPI number. This is used for outgoing primitives. It is set
+ − * with each external event, like an incoming primitive or a time-out.
+ − */
+ − T_SAPI current_sapi;
+ −
+ − /*
+ − * TLLI New and TLLI Old. These are set by GMM via LLGMM_ASSIGN_REQ.
+ − * TLLI New is used for sending primitives (if the upper layer did not
+ − * already specify the TLLI). TLLI Old is currently unused.
+ − * Both variables are initialised by llme_init().
+ − */
+ − ULONG tlli_new;
+ − ULONG tlli_old;
+ −
+ − /*
+ − * LLC layer parameters (according to GSM 04.64, Version 6.4.0). These
+ − * parameters are initialised by llc_init_parameters().
+ − */
+ − UBYTE version;
+ −
+ − ULONG iov_ui;
+ − ULONG iov_i_base[ACKNOWLEDGED_INC];
+ − ULONG *iov_i;
+ −
+ − /*
+ − * T200 and T201 values are defined in the respective service data arrays.
+ − */
+ − UBYTE n200_base[UNACKNOWLEDGED_INC];
+ − UBYTE *n200;
+ −
+ − USHORT n201_u_base[UNACKNOWLEDGED_INC];
+ − USHORT n201_i_base[ACKNOWLEDGED_INC];
+ − USHORT *n201_u;
+ − USHORT *n201_i;
+ −
+ − USHORT md_base[ACKNOWLEDGED_INC];
+ − USHORT mu_base[ACKNOWLEDGED_INC];
+ − USHORT *md;
+ − USHORT *mu;
+ −
+ − UBYTE kd_base[ACKNOWLEDGED_INC];
+ − UBYTE ku_base[ACKNOWLEDGED_INC];
+ − UBYTE *kd;
+ − UBYTE *ku;
+ −
+ − T_L3_XID requested_l3_xid_base[ACKNOWLEDGED_INC];
+ − T_L3_XID *requested_l3_xid;
+ −
+ − /*
+ − * Structure to contain decoded XID parameters.
+ − * Valid flags are initialized by u_check_xid() each time received XID
+ − * is checked.
+ − */
+ − T_XID_PARAMETERS decoded_xid;
+ − T_L3_XID decoded_l3_xid;
+ −
+ − /*
+ − * LLC layer variables needed for ciphering (see services TX/RX). These
+ − * variables are set with LLGMM_ASSIGN_REQ by GMM.
+ − */
+ − #ifdef LL_2to1
+ − T_LLGMM_llgmm_kc kc;
+ − #else
+ − T_llgmm_kc kc;
+ − #endif
+ −
+ −
+ − UBYTE ciphering_algorithm;
+ −
+ − /*
+ − * Service data structures.
+ − *
+ − * Services with multiple incarnations require an array of structures
+ − * named xxx_base[] with xxx = service abbrevation, and additionally a
+ − * pointer named *xxx, which will be accessed instead of xxx_base.
+ − *
+ − * Services with only one incarnation just have to declare one structure
+ − * named xxx (no need for xxx_base[] and *xxx).
+ − *
+ − * The differentiation between the two access possibilites is made with
+ − * the defines of the service names above (LLC_SERVICE_XXX).
+ − */
+ − T_LLME_DATA llme;
+ −
+ − T_SAPI_DATA sapi_base[MAX_SAPI_INC];
+ − T_SAPI_DATA *sapi;
+ −
+ − T_U_DATA u_base[U_NUM_INC];
+ − T_U_DATA *u;
+ −
+ − T_ITX_DATA itx_base[ITX_NUM_INC];
+ − T_IRX_DATA irx_base[IRX_NUM_INC];
+ − T_ITX_DATA *itx;
+ − T_IRX_DATA *irx;
+ −
+ − T_UITX_DATA uitx_base[UITX_NUM_INC];
+ − T_UIRX_DATA uirx_base[UIRX_NUM_INC];
+ − T_UITX_DATA *uitx;
+ − T_UIRX_DATA *uirx;
+ −
+ − T_T200_DATA t200_base[T200_NUM_INC];
+ − T_T200_DATA *t200;
+ −
+ − T_TX_DATA tx;
+ − T_RX_DATA rx;
+ −
+ − T_FBS_DATA fbs;
+ −
+ − #ifdef _SIMULATION_
+ − /*
+ − * Structure to contain XID parameters that are configured in ffs.
+ − */
+ − T_FFS_XID_PARAMETERS ffs_xid;
+ − #endif
+ −
+ − /*Number of milliseconds to delay after sending reset_ind to SNDCP*/
+ − USHORT millis;
+ − #ifdef REL99
+ − U16 cur_pfi; /* current packet flow identifier */
+ − #endif
+ − T_ll_qos cur_qos; /* quality of service R97 */
+ − U8 cur_radio_prio; /* T_PS_radio_prio, Radio priority */
+ − } T_LLC_DATA;
+ −
+ −
+ − /*==== EXPORT =====================================================*/
+ −
+ − /*
+ − * Entity data base
+ − */
+ − #ifdef LLC_PEI_C
+ − T_LLC_DATA llc_data_base, *llc_data;
+ − #else
+ − EXTERN T_LLC_DATA llc_data_base, *llc_data;
+ − #endif
+ −
+ − #define ENTITY_DATA llc_data
+ −
+ − /*
+ − * Communication handles (see also LLC_PEI.C)
+ − */
+ − #define hCommGMM llc_hCommGMM
+ − #define hCommSNDCP llc_hCommSNDCP
+ − #ifdef LL_2to1
+ − #define hCommMM llc_hCommMM
+ − #else
+ − #define hCommGSMS llc_hCommGSMS
+ − #endif
+ − #define hCommGRLC llc_hCommGRLC
+ −
+ − #ifdef LLC_PEI_C
+ − T_HANDLE hCommGMM = VSI_ERROR;
+ − T_HANDLE hCommSNDCP = VSI_ERROR;
+ − #ifdef LL_2to1
+ − T_HANDLE hCommMM = VSI_ERROR;
+ − #else
+ − T_HANDLE hCommGSMS = VSI_ERROR;
+ − #endif
+ − T_HANDLE hCommGRLC = VSI_ERROR;
+ −
+ − T_HANDLE LLC_handle;
+ − /*
+ − * make the pei_create function unique
+ − */
+ − #define pei_create llc_pei_create
+ −
+ − #else
+ − EXTERN T_HANDLE hCommGMM;
+ − EXTERN T_HANDLE hCommSNDCP;
+ − #ifdef LL_2to1
+ − EXTERN T_HANDLE hCommMM;
+ − #else
+ − EXTERN T_HANDLE hCommGSMS;
+ − #endif
+ − EXTERN T_HANDLE hCommGRLC;
+ −
+ − EXTERN T_HANDLE LLC_handle;
+ −
+ − #endif /* LLC_PEI_C */
+ −
+ −
+ − #endif /* LLC_H */