FreeCalypso > hg > fc-magnetite
view src/g23m-gsm/dl/dl.h @ 140:8b72ed3b54ec
cfg-headers/2092-pruned: 2092 sans ATP, LCC and MKS
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 08 Oct 2016 22:38:26 +0000 |
parents | 27a4235405c6 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS | Modul : DL +----------------------------------------------------------------------------- | 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 | Data Link Layer +----------------------------------------------------------------------------- */ #ifndef __DL_H__ #define __DL_H__ #ifdef TI_PS_HCOMM_CHANGE #include "cl_hComm_handle.h" #endif #if !defined(_SIMULATION_) && defined(WIN32) #define _SIMULATION_ #endif /* !_SIMULATION_ && WIN32 */ #if defined (_SIMULATION_) #if defined(DL_2TO1) #include <p_8010_148_l1test_sap.h> #endif /* DL_2TO1 */ #else /* _SIMULATION_ */ #if !defined(_TARGET_) #define _TARGET_ #endif /* !_TARGET_ */ #endif /* _SIMULATION_ */ /* * the following defines have an impact on the behaviour of the layer 2 */ /* * DL_TRACE_ENABLED * is set : Enables the trace feature (buffered or immediately trace) * isīnt set: Disables the trace feature */ #define DL_TRACE_ENABLED /* * DL_IMMEDIATE_TRACE * operates only with enabled trace feature! * is set : Enables unbuffered trace. Write out the trace immediately without * buffering (or rather delayed by signalling to itself while the MS * is in interrupt context state). * isīnt set: Enables buffered trace (write out in idle mode only) * Attention: Due to the interrupt context of the uplink and downlink trace this feature requires very fast trace capability. The normal trace transfer rate of 115200 Baud is not sufficient! */ #define DL_IMMEDIATE_TRACE /* * DISABLE_MEASREPORT_TRACE * operates only with enabled buffered trace! * is set : Disables trace of measurement reports * isīnt set: Normal trace of measurement reports #define DISABLE_MEASREPORT_TRACE */ /* * DISABLE_EMPTY_UI * operates only with enabled buffered trace! * is set : Disables trace of empty frames * isīnt set: Normal trace of empty frames */ #define DISABLE_EMPTY_UI /* * DELAYED_RELEASE_IND * is set : Delayed release indication after reception of DISC to enable * layer 1 the transmission of the UA acknowledge (After sent of the * release indication to RR, RR stops the dedicated mode in layer 1). * During the delay, DL sends only dummy frames for some uplink * opportunities (see DL_FACCH_RELEASE_DELAY_VALUE and * DL_SDCCH_RELEASE_DELAY_VALUE). The delay stops after the given * count of uplinked dummy frames or at a downlink on this channel. * isīnt set: No delayed release indication */ #define DELAYED_RELEASE_IND #if defined(DELAYED_RELEASE_IND) /* * When RR stops the dedicated mode, the TI layer is not capable for correct * completion of the UA response transmission. Therefore DL delays the release * indication to RR for some uplink opportunities to give layer 1 time to * transmit the frame completely before RR stops the dedicated mode. */ #define DL_FACCH_RELEASE_DELAY_VALUE 4 /* number of wait dummies on FACCH */ #define DL_SDCCH_RELEASE_DELAY_VALUE 1 /* number of wait dummies on SDCCH */ #endif /* DELAYED_RELEASE_IND */ /* * DELAYED_SABM * is set : To give layer 1 some time to switch the physical channel on FACCH * DL delays the transmit of the SABM frame. After (re-)establishment * request from RR, DL sends only dummies (return NULL) for the first * uplink opportunities (see DL_FACCH_SABM_DELAY_VALUE). * isīnt set: No delayed uplink of the SABM frame. */ #define DELAYED_SABM #if defined(DELAYED_SABM) #undef DELAYED_SABM #endif /* DELAYED_SABM */ #if defined(DELAYED_SABM) /* * To give layer 1 some time to switch the physical channel on FACCH * DL delays the transmit of the SABM frame. After (re-)establishment request * from RR, DL sends only dummies (return NULL) for the first uplink * opportunities. */ #define DL_FACCH_SABM_DELAY_VALUE 1 #endif /* DELAYED_SABM */ /* * LATE_LEAVING_DEDICATED * is set : The leaving of dedicated mode happens in latest moment, after * the reception of an UA frame after sent of DISC * or before uplink of the UA frame after reception of a DISC frame. * isīnt set: In this case the dedicated mode is leaving immediately after * the detection of a release (after the incoming L3 message * CHANNEL RELEASE, or after reception of a DISC frame or before * the uplink of a DISC frame). */ #define LATE_LEAVING_DEDICATED /* * IFRAME_AS_RR * is set : I frame might response with I frame * isīnt set: I frame must response with RR frame */ #define IFRAME_AS_RR /* * INVOKE_SIGNAL * is set : DL does not send primitives or traces within L1 interrupt context * anymore. It sends signals instead. The primitives or traces are * delayed until the entity will be in the own context. * isīnt set: Primitves or traces are processed immediately even is DL within * in L1 interrupt context. */ #define INVOKE_SIGNAL /* * SEND_FN_TO_L2_IN_DCCH * is set to 1: The function dll_dcch_downlink() contains one more parameter, the absolute frame number FN. * is set to 0: No changes relating to dll_dcch_downlink. */ #define SEND_FN_TO_L2_IN_DCCH 1 /* * RR_SHORT_PD_DETECT_KNOWN_MSG_ONLY * is set to 1: The Bter format is detected for known message types * only (the known messages are defined some lines after in * this header file). * is set to 0: The Bter format is detected on the basis of the short L2 header * format. This is a more general approach, but with the * disadvantage of possibly misconstrued invalid messages. */ //#define RR_SHORT_PD_DETECT_KNOWN_MSG_ONLY /* * DL_2TO1 flag is used to identify new L1 interface via the MPHC entity * as well as the test interface of the new 2to1 stack. */ #ifdef DL_2TO1 #define MAX_L2_FRAME_SIZE L1_MAX_L2_FRAME_SIZE #define T_RADIO_FRAME T_L1_RADIO_FRAME #define T_PH_DATA_IND T_MPHC_PH_DATA_IND #define PH_DATA_IND MPHC_PH_DATA_IND #define L2_CHANNEL_SDCCH L1_L2_CHANNEL_SDCCH #define L2_CHANNEL_FACCH_F L1_L2_CHANNEL_FACCH_F #define L2_CHANNEL_FACCH_H L1_L2_CHANNEL_FACCH_H #define L2_CHANNEL_SACCH L1_L2_CHANNEL_SACCH #define CM_SIGNALLING_ONLY MPHC_CM_SIGNALLING_ONLY #define CM_TCH_FS MPHC_CM_TCH_FS #define CM_TCH_HS MPHC_CM_TCH_HS #define VALID_BLOCK L1_VALID_BLOCK #define DATA_VALID MPHC_DATA_VALID #define DL_SAPI_0 PS_SAPI_0 #define DL_SAPI_3 PS_SAPI_3 #define PH_READY_TO_SEND L1TEST_CALL_MPHC_READ_DCCH #endif /*DL_2TO1*/ #if defined(_SIMULATION_) #define DL_TRACE_ENABLED /* trace during simulation */ #define DL_IMMEDIATE_TRACE /* is write out immediately */ #undef DISABLE_MEASREPORT_TRACE /* enable trace of measurement reports */ #undef DISABLE_EMPTY_UI /* enable trace of empty frames */ #define DL_TRACE_WIN32 #define TRACE_EVENT_WIN(s) TRACE_EVENT(s) #define TRACE_EVENT_WIN_P1(s,a1) TRACE_EVENT_P1(s,a1) #define TRACE_EVENT_WIN_P2(s,a1,a2) TRACE_EVENT_P2(s,a1,a2) #define TRACE_EVENT_WIN_P3(s,a1,a2,a3) TRACE_EVENT_P3(s,a1,a2,a3) #define TRACE_EVENT_WIN_P4(s,a1,a2,a3,a4) TRACE_EVENT_P4(s,a1,a2,a3,a4) #define TRACE_EVENT_WIN_P5(s,a1,a2,a3,a4,a5) TRACE_EVENT_P5(s,a1,a2,a3,a4,a5) #define TRACE_EVENT_WIN_P6(s,a1,a2,a3,a4,a5,a6) TRACE_EVENT_P6(s,a1,a2,a3,a4,a5,a6) #if 0 #define TRACE_EVENT_WIN_P7(s,a1,a2,a3,a4,a5,a6,a7) TRACE_EVENT_P7(s,a1,a2,a3,a4,a5,a6,a7) #endif /* 0 */ #define TRACE_EVENT_WIN_P8(s,a1,a2,a3,a4,a5,a6,a7,a8) TRACE_EVENT_P8(s,a1,a2,a3,a4,a5,a6,a7,a8) #define TRACE_EVENT_WIN_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9) TRACE_EVENT_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9) #else /* _SIMULATION_ */ #undef DL_TRACE_WIN32 #define TRACE_EVENT_WIN(s) #define TRACE_EVENT_WIN_P1(s,a1) #define TRACE_EVENT_WIN_P2(s,a1,a2) #define TRACE_EVENT_WIN_P3(s,a1,a2,a3) #define TRACE_EVENT_WIN_P4(s,a1,a2,a3,a4) #define TRACE_EVENT_WIN_P5(s,a1,a2,a3,a4,a5) #define TRACE_EVENT_WIN_P6(s,a1,a2,a3,a4,a5,a6) #define TRACE_EVENT_WIN_P7(s,a1,a2,a3,a4,a5,a6,a7) #define TRACE_EVENT_WIN_P8(s,a1,a2,a3,a4,a5,a6,a7,a8) #define TRACE_EVENT_WIN_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9) #endif /* _SIMULATION_ */ /*==== CONSTANTS ==================================================*/ /* * Frame Header Macros */ #define GET_LENGTH_INDICATOR(s) ((((s)[2]) & 0xFC)>>2) #define GET_P_BIT(s) ((((s)[1]) & 0x10)>>4) #define GET_M_BIT(s) ((((s)[2]) & 0x02)>>1) #define GET_RECEIVE_NUMBER(s) ((((s)[1]) & 0xE0)>>5) #define GET_SEND_NUMBER(s) ((((s)[1]) & 0x0E)>>1) #define GET_SAPI(s) ((((s)[0]) & 0x1C)>>2) #define GET_EA(s) (((s)[0]) & 1) #define GET_FORMAT_TYPE(s) (((s)[1]) & 3) #define GET_CR(s) ((((s)[0]) & 2)>>1) #define GET_EL(s) (((s)[2]) & 1) #define GET_S_TYPE(s) (((s)[1]) & 0x0F) #define GET_U_TYPE(s) (((s)[1]) & 0xEF) #define GET_BTER_FORMAT(s) (((s)[0]) & (BTER_FORMAT_MASK)) #if 0 #define GET_LENGTH_FIELD(s) (((s)[2])) #define GET_PSEUDO_LENGTH(s) ((((s)[0]) & 0xFC)>>2) #endif /* 0 */ /* Boolean constants */ #if !defined(TRUE) #define TRUE (1 EQ 1) #define FALSE (1 EQ 0) #endif #if !defined(ELEMENTS) #define ELEMENTS(array) (sizeof(array)/sizeof(array[0])) #endif /* !ELEMENTS */ /* * Bitoffset for encoding/decoding */ #define ENCODE_OFFSET 24 /* * TI Circuit Switches Interface */ #define SIG_ONLY 0 #define NO_SIGNALLING 1 /* * Frame Sizes * Maximum number of octets for the information field for frames of * format A and B (SACCH, SDCCH, FACCH) */ #define N201_SDCCH DL_N201_DCCH_A_B #define N201_SACCH DL_N201_SACCH_A_B #define N201_FACCH DL_N201_DCCH_A_B /* * VTX commands */ #define EMPTY_CMD 0 #define RR_CMD 1 #define SABM_CMD 2 #define DISC_CMD 3 #define UA_CMD 4 #define DM_CMD 5 #define RR_RSP 6 #define REJ_CMD 7 /* * Format Types (Control field format: octet bits 2+1) */ #define I_FORMAT 0 /* information transfer format (only bit 1) */ #define I1_FORMAT 2 /* information transfer format (only bit 1) + N(S) */ #define S_FORMAT 1 /* supervisory format (bits 2+1) */ #define U_FORMAT 3 /* unnumbered format (bits 2+1) */ /* * Frame Types (Control field format: octet bits 8-6,4-1) */ #define I_FRAME 0 /* I format (only bit 1) */ #define RR_FRAME 1 /* S format (bits 4-1) */ #define RNR_FRAME 5 /* S format (bits 4-1) */ #define REJ_FRAME 9 /* S format (bits 4-1) */ #define DISC_FRAME 0x43 /* U format (bits 8-6,4-1) */ #define SABM_FRAME 0x2F /* U format (bits 8-6,4-1) */ #define UI_FRAME 0x03 /* U format (bits 8-6,4-1) */ #define DM_FRAME 0x0F /* U format (bits 8-6,4-1) */ #define UA_FRAME 0x63 /* U format (bits 8-6,4-1) */ /* * L2 Header Values */ #define MS2BS_CMD 0 #define MS2BS_RSP 1 #if 0 #define BS2MS_CMD 1 #define BS2MS_RSP 0 #define ADDR_RESP_SAPI0 0x03 #define ADDR_RESP_SAPI3 0x0F #define ADDR_CMD_SAPI0 0x01 #define ADDR_CMD_SAPI3 0x0D #define UA_F0 0x63 #define UA_F1 0x73 #define RR_F0 0x01 #define RR_F1 0x11 #define RR_P0 0x01 #define RR_P1 0x11 #define REJ_F0 0x09 #define REJ_F1 0x19 #define DISC_P0 0x43 #define DISC_P1 0x53 #define SABM_P0 0x2F #define SABM_P1 0x3F #define DM_F0 0x0F #define DM_F1 0x1F #define UI_P0 0x03 #define I_P0 0x00 #define I_P1 0x10 #define LENGTH_ZERO 0x01 #endif /* 0 */ /* * Message types for RR messsages using the RR short PD * * up/downlink message type channel name * BSS->MS downlink | 0 0 0 0 0 | | SACCH System Information Type 10 * BSS->MS downlink | 0 0 0 0 1 | | FACCH Notification/FACCH * BSS->MS downlink | 0 0 0 1 0 | | DCCH Uplink Free * MS->BSS uplink | 0 0 1 0 0 | | SACCH Enhanced Measurement Report * BSS->MS downlink | 0 0 1 0 1 | | SACCH Measurement Information * | | | * 0 | | RR short PD * 0 0 Short L2 header type 1 */ #define RR_SHORT_PD 0 #define L2_SHORT_HEAD 0 #if defined(RR_SHORT_PD_DETECT_KNOWN_MSG_ONLY) /* detection of known messages only */ #define RR_SHORT_PD_SI10 (((RR_SHORT_PD)<<7)|(0x00<<2)|(L2_SHORT_HEAD)) /* 0x00 */ #define RR_SHORT_PD_NOTI_FACCH (((RR_SHORT_PD)<<7)|(0x01<<2)|(L2_SHORT_HEAD)) /* 0x04 */ #define RR_SHORT_PD_UPLINK_FREE (((RR_SHORT_PD)<<7)|(0x02<<2)|(L2_SHORT_HEAD)) /* 0x08 */ #define RR_SHORT_PD_ENH_MEAS_REP (((RR_SHORT_PD)<<7)|(0x04<<2)|(L2_SHORT_HEAD)) /* 0x10 */ #define RR_SHORT_PD_MEAS_INFO (((RR_SHORT_PD)<<7)|(0x05<<2)|(L2_SHORT_HEAD)) /* 0x14 */ #endif /* RR_SHORT_PD_DETECT_KNOWN_MSG_ONLY */ /* general mask for Bter format */ #define NOT_RR_SHORT_PD ((~RR_SHORT_PD)&0x01) #define NOT_L2_SHORT_HEAD ((~L2_SHORT_HEAD)&0x03) #define BTER_FORMAT_MASK (((NOT_RR_SHORT_PD)<<7)|(0x00<<2)|(NOT_L2_SHORT_HEAD)) /* 0x83 */ #define SHORT_L2_HEADER_TYPE_1 (((RR_SHORT_PD)<<7)|(0x00<<2)|(L2_SHORT_HEAD)) /* 0x00 */ /* * Repetitions */ #define FACCH_N200_FR 34 #define FACCH_N200_HR 29 #define SDCCH_N200 23 #define SACCH_N200 5 #define N200_ESTABLISHMENT 5 #ifndef DL_2TO1 /* align DL.sap with 8010_152_PS_Include.sap */ #define PS_SAPI_0 DL_SAPI_0 #define PS_SAPI_3 DL_SAPI_3 /* align DL.sap with 8010_153_Cause_Include.sap */ #define CAUSE_DL_INFO_FIELD_MISMATCH DL_INFO_FIELD_MISMATCH #endif /* DL_2TO1 */ #define C_DCCH0 0 /* SAPI=0: SDCCH, FACCH */ #define C_DCCH3 1 /* SAPI=3: SDCCH, SACCH */ #define C_SACCH0 2 /* SAPI=0: SACCH */ #define MAX_CHANNELS 3 #define PROCESS_NAME_INIT \ "DCCH0", \ "DCCH3", \ "SACCH0" /* * States of all Processes */ #define STATE_INVALID 0 #define STATE_DISABLED 1 #define STATE_IDLE_DL 2 #define STATE_SUSPENDED 3 #define STATE_CONTENTION_RESOLUTION 4 #define STATE_AWAITING_ESTABLISHMENT 4 #define STATE_MULTIPLE_FRAME_ESTABLISHED 5 #define STATE_TIMER_RECOVERY 6 #define STATE_AWAITING_RELEASE 7 #define MAX_STATES 8 /* * States of the Process DCCH0, (SAPI=0: SDCCH, FACCH) */ #define STATE_DCCH0_NAME_INIT \ "invalid" ,\ "DISABLED" ,\ "IDLE" ,\ "SUSPENDED" ,\ "CONTENTION_RESOLUTION" ,\ "MULTIPLE_FRAME_ESTABLISHED" ,\ "TIMER_RECOVERY" ,\ "AWAITING_RELEASE" /* * States of the Process DCCH3 (SAPI=3: SDCCH, SACCH) */ #define STATE_DCCH3_NAME_INIT \ "invalid" ,\ "DISABLED" ,\ "IDLE" ,\ "SUSPENDED" ,\ "AWAITING_ESTABLISHMENT" ,\ "MULTIPLE_FRAME_ESTABLISHED" ,\ "TIMER_RECOVERY" ,\ "AWAITING_RELEASE" /* * DL manages 3 (MAX_CHANNELS) states: SACCH0, DCCH0, DCCH3 */ #ifdef OPTION_MULTITHREAD #define PROCESS_NAME _ENTITY_PREFIXED(PROCESS_NAME) #endif /* * A definition is provided in DL_PEI.C */ #ifdef DL_PEI_C GLOBAL const char * const STATE_DCCH0_NAME[MAX_STATES] = { STATE_DCCH0_NAME_INIT }; GLOBAL const char * const STATE_DCCH3_NAME[MAX_STATES] = { STATE_DCCH3_NAME_INIT }; GLOBAL const char * const PROCESS_NAME[MAX_CHANNELS] = { PROCESS_NAME_INIT }; #if defined(DL_TRACE_WIN32) GLOBAL const char * const CH_TYPE_NAME[] = { "ch=0?", "SACCH", /* 0x1 SACCH */ "SDCCH", /* 0x2 SDCCH */ "FACCH_H", /* 0x3 FACCH Halfrate */ "FACCH_F", /* 0x4 FACCH Fullrate */ "CCCH", /* 0x5 CCCH */ "NBCCH", /* 0x6 normal BCCH */ "PCH", /* 0x7 PCH */ "EPCH", /* 0x8 extended PCH */ "CBCH", /* 0x9 Cell Broadcast Channel */ "EBCCH" /* 0xa extended BCCH */ }; GLOBAL const char * const VTX_NAME[] = { "EMPTY_CMD", /* 0 */ "RR_CMD", /* 1 */ "SABM_CMD", /* 2 */ "DISC_CMD", /* 3 */ "UA_CMD", /* 4 */ "DM_CMD", /* 5 */ "RR_RSP", /* 6 */ "REJ_CMD" /* 7 */ }; GLOBAL const char * const SEND_NAME[] = { "RETURN_NULL", /* 0 */ "UPLINK_NULL", /* 1 */ "UPLINK_EMPTY", /* 2 */ "UPLINK_NORMAL", /* 3 */ "UPLINK_UA", /* 4 */ "UPLINK_UA_F", /* 5 */ "UPLINK_IFRAME", /* 6 */ "UPLINK_IFRAME_P", /* 7 */ "UPLINK_RR", /* 8 */ "UPLINK_RR_F", /* 9 */ "UPLINK_REJ", /* 10 */ "UPLINK_REJ_F", /* 11 */ "UPLINK_DCCH3", /* 12 */ "UPLINK_REPORT" /* 13 */ }; #endif /* DL_TRACE_WIN32 */ #else /* DL_PEI_C */ EXTERN const char * const STATE_DCCH0_NAME[MAX_STATES]; EXTERN const char * const STATE_DCCH3_NAME[MAX_STATES]; EXTERN const char * const PROCESS_NAME[MAX_CHANNELS]; #if defined(DL_TRACE_WIN32) EXTERN const char * const CH_TYPE_NAME[]; EXTERN const char * const VTX_NAME[]; EXTERN const char * const SEND_NAME[]; #endif /* DL_TRACE_WIN32 */ #endif /* DL_PEI_C */ /* * TRACE Constants */ #define TRACE_UPLINK 0 #define TRACE_DOWNLINK 1 #define TRACE_DL_EVENT 2 #define TRACE_CHSTATE 3 #define TRACE_PL_EVENT 4 #define TRACE_RR_EVENT 5 #define TRACE_UACK_UP 6 #define TRACE_UACK_DN 7 #define TRACE_CH_UNKNOWN MAX_CHANNELS /* * Error Causes */ #define T200_EXPIRED_N200_PLUS_1_TIMES 0 #define UNSOLICITED_UA_RESPONSE 2 #define UNSOLICITED_DM_RESPONSE 3 #define UNSOLICITED_DM_RESPONSE_ABNORMAL_REL 4 #define UNSOLICITED_SUPERVISORY_RESPONSE 5 #define SEQUENCE_ERROR 6 #define U_FRAME_WITH_INCORRECT_PARAMETERS 7 #define S_FRAME_WITH_INCORRECT_PARAMETERS 8 #define I_FRAME_WITH_INCORRECT_USE_OF_M_BIT 9 #define I_FRAME_WITH_INCORRECT_LENGTH 10 #define FRAME_NOT_IMPLEMENTED 11 /* * DL Uplink commands */ enum uplink_enum { RETURN_NULL = 0, UPLINK_NULL, UPLINK_EMPTY, UPLINK_NORMAL, UPLINK_UA, UPLINK_UA_F, UPLINK_IFRAME, UPLINK_IFRAME_P, UPLINK_RR, UPLINK_RR_F, UPLINK_REJ, UPLINK_REJ_F, UPLINK_DCCH3, UPLINK_REPORT }; #if defined(__PEI_H__) /* frame version 2.4.x */ typedef ULONG T_SIGNAL_OPC; #define FRAME_2_4_X #elif defined(PEI_H) /* frame version 2.3.x */ typedef USHORT T_SIGNAL_OPC; #define FRAME_2_3_X #else /* frame version unknown */ #pragma error("unknown frame version, missing PEI_H or __PEI_H__") #endif /* frame version */ /*==== TYPES ======================================================*/ typedef struct { USHORT l_buf; USHORT o_buf; UBYTE buf [DL_MAX_L2_FRAME_SIZE]; } T_FRAME; /* Buffer concept: * Store buffer Contains complete layer 3 messages for the uplink direction * Sending buffer Contains the complete message which is just send on uplink * Transmit buffer Contains the segment which is just send on uplink * Switch buffer Contains a layer 3 message in case of resumption or reconnection */ #define INDEX_MAX_STORE_BUFFER (MAX_QUEUED_MESSAGES-1) #define INDEX_SENDING_BUFFER MAX_QUEUED_MESSAGES #define INDEX_SWITCH_BUFFER (MAX_QUEUED_MESSAGES+1) typedef struct { USHORT no_of_stored_messages; T_DL_DATA_REQ * store_buffer [MAX_QUEUED_MESSAGES]; T_DL_DATA_REQ * sending_buffer; T_DL_DATA_REQ * switch_buffer; USHORT act_length; USHORT act_offset; T_FRAME transmit_buffer; UBYTE m_bit; } T_QUEUE; typedef struct { UBYTE ch_type; UBYTE vtx; UBYTE T200_counter; UBYTE time_flag; UBYTE contention_resolution; UBYTE reject_exception; UBYTE acknowledge_pending; UBYTE rc; UBYTE f_bit; UBYTE f_bit_flag; UBYTE p_bit_flag; UBYTE va; UBYTE vr; UBYTE vs; } T_CCH; #if defined(INVOKE_SIGNAL) typedef struct { UBYTE ch_type; UBYTE sapi; UBYTE indication; } T_DL_SIG_ESTABLISH_IND; typedef struct { UBYTE ch_type; UBYTE sapi; } T_DL_SIG_ESTABLISH_CNF; typedef struct { UBYTE ch_type; UBYTE sapi; ULONG fn; } T_DL_SIG_DATA_IND; typedef struct { UBYTE sapi; } T_DL_SIG_DATA_CNF; #if 0 /* happens in primitive context only */ typedef struct { UBYTE error_flag; UBYTE layer1head[2]; UBYTE layer3msg[DL_N201_SACCH_A_B]; UBYTE length; ULONG fn; } T_DL_SIG_UNITDATA_IND; #endif /* 0 */ typedef struct { UBYTE ch_type; UBYTE error_flag; UBYTE layer1head[2]; UBYTE layer3msg[DL_N201_DCCH_Bter]; UBYTE length; ULONG fn; } T_DL_SIG_SHORT_UNITDATA_IND; typedef struct { UBYTE ch_type; UBYTE sapi; UBYTE cs; BOOL init; } T_DL_SIG_RELEASE_IND; typedef struct { UBYTE ch_type; UBYTE sapi; BOOL init; } T_DL_SIG_RELEASE_CNF; typedef struct { UBYTE ch_type; UBYTE sapi; } T_DL_SIG_ERROR_IND; typedef struct { void *pointer; } T_DL_SIG_FREE_POINTER; typedef struct { T_DL_DATA_IND ** in_msg; UBYTE new_data_in[MAX_L2_FRAME_SIZE]; } T_DL_SIG_CONCATENATE; typedef struct { UBYTE trace_type; UBYTE channel; UBYTE ch_type; UBYTE data_len; T_TIME trace_time; UBYTE data[MAX_L2_FRAME_SIZE]; } T_DL_SIG_L2TRACE; typedef struct { UBYTE type; UBYTE ch_type; UBYTE *frame; } T_DL_SIG_L3TRACE; typedef struct { UBYTE data[7 /*EM_DL_BUFFER_SIZE*/]; UBYTE length; } T_DL_SIG_EM_WRITE; typedef union { T_DL_SIG_ESTABLISH_IND establish_ind; T_DL_SIG_ESTABLISH_CNF establish_cnf; T_DL_SIG_DATA_IND data_ind; T_DL_SIG_DATA_CNF data_cnf; #if 0 /* happens in primitive context only */ T_DL_SIG_UNITDATA_IND unitdata_ind; #endif /* 0 */ T_DL_SIG_SHORT_UNITDATA_IND short_unitdata_ind; T_DL_SIG_RELEASE_IND release_ind; T_DL_SIG_RELEASE_CNF release_cnf; T_DL_SIG_ERROR_IND error_ind; T_DL_SIG_FREE_POINTER free_pointer; T_DL_SIG_CONCATENATE concatenate; T_DL_SIG_L3TRACE l3trace; #if defined(DL_TRACE_ENABLED) && defined(DL_IMMEDIATE_TRACE) T_DL_SIG_L2TRACE l2trace; #endif /* DL_TRACE_ENABLED && DL_IMMEDIATE_TRACE */ #if defined(FF_EM_MODE) T_DL_SIG_EM_WRITE em_write; #endif /* FF_EM_MODE */ } T_DL_SIGNAL_DATA_UNION; typedef struct { BOOL busy; #if defined(_SIMULATION_) UBYTE idx; #endif /* _SIMULATION_ */ T_DL_SIGNAL_DATA_UNION u; } T_DL_SIGNAL_DATA; #if defined(DL_TRACE_ENABLED) #define DL_SIGNAL_DATA_ELEMENTS 9 #else /* DL_TRACE_ENABLED */ #define DL_SIGNAL_DATA_ELEMENTS 6 #endif /* DL_TRACE_ENABLED */ /* * number of signal data entries must be sufficient for * 1 data indication or confirmation * 1 error indication * 1-2 free commands * 1-2 engineering command * 2-3 traces */ typedef struct { int sig_idx; T_DL_SIGNAL_DATA sig_data[DL_SIGNAL_DATA_ELEMENTS]; } T_DL_SIGNAL; #endif /* INVOKE_SIGNAL */ typedef struct { BOOL dl_active; BOOL interrupt_context; UBYTE state[MAX_CHANNELS]; T_CCH cch[MAX_CHANNELS]; T_FRAME sacch_act_buffer; T_FRAME sacch_last_buffer; T_FRAME rr_short_pd_buffer; UBYTE rr_short_pd_ch_type; UBYTE sacch_mode; T_DL_DATA_IND * dcch0_in_msg; T_DL_DATA_IND * dcch3_in_msg; T_QUEUE dcch0_queue; T_QUEUE dcch3_queue; BOOL dcch0_unserved; /* storing of indication (unserved DL-DATA_REQīs) */ BOOL dcch3_unserved; /* for use with DL-ESTABLISHMENT-CNF */ T_RADIO_FRAME l2_frame;/* Buffer for l2_frame and empty l2 frame */ BOOL RR_dedicated;/* Flag for RR dedictated mode * (necessary for measurement reports) */ ULONG fn; /* last received frame number */ UBYTE dcch0_ch_type; UBYTE dcch0_disc_request;/* Flags for faster sending of DISC */ UBYTE dcch3_disc_request;/* after L3 msg CAHNNEL RELEASE */ /* * Flag for priority arrangement on the SACCH channel. * DL must ensure that if a SAPI=3 frame is awaiting transmission, two SAPI=3 * frames are not sent in consecutive SACCH frames. * Dl must also be ensured that any SAPI=3 frame is followed by at least one * SAPI=0 frame. * This flag controls the priority of SMS messages and measurement reports. */ UBYTE sacch_last_uplink_sapi; #if !defined(FF_GTI) #if defined(DELAYED_SABM) UBYTE dcch0_sabm_flag; UBYTE dcch0_sabm_delay; #endif /* DELAYED_SABM */ #if defined(DELAYED_RELEASE_IND) UBYTE release_ind_ch_type; UBYTE release_ind_sapi; UBYTE release_ind_delay; #endif /* DELAYED_RELEASE_IND */ #endif /* !FF_GTI */ #if defined(INVOKE_SIGNAL) T_DL_SIGNAL signal_struct; #endif /* INVOKE_SIGNAL */ } T_DL_DATA_STORE; /* * Predefined mesaurement reports * * If all entities are linked into one module this definitions * prefixes all this functions with the enity name */ #ifdef OPTION_MULTITHREAD #define meas_report_no_nc _ENTITY_PREFIXED(meas_report_no_nc) #endif EXTERN const T_FRAME meas_report_no_nc; /*==== EXPORT =====================================================*/ #if defined(WIN32) #include <stdio.h> #endif /* WIN32 */ /* * Prototypes Distribute RR */ EXTERN void drr_dl_establish_req (T_DL_ESTABLISH_REQ * est_req); EXTERN void drr_dl_establish_ind (UBYTE ch_type, UBYTE sapi, UBYTE indication); EXTERN void drr_dl_resume_req (T_DL_RESUME_REQ * resume_req); EXTERN void drr_dl_reconnect_req (T_DL_RECONNECT_REQ * reconnect_req); EXTERN void drr_dl_release_req (T_DL_RELEASE_REQ * release_req); #ifndef DL_2TO1 EXTERN void drr_mdl_release_req (T_MDL_RELEASE_REQ * release_req); #endif /* DL_2TO1 */ EXTERN void drr_dl_suspend_req (T_DL_SUSPEND_REQ * suspend_req); EXTERN void drr_dl_data_req (T_DL_DATA_REQ * data_req); EXTERN void drr_dl_data_ind (UBYTE sapi, ULONG fn); EXTERN void drr_dl_data_cnf (UBYTE sapi); EXTERN void drr_dl_unitdata_req (T_DL_UNITDATA_REQ * unitdata_req); EXTERN void drr_dl_unitdata_ind (UBYTE error_flag, UBYTE * layer1head, UBYTE * layer3msg, UBYTE length, ULONG fn); EXTERN void drr_dl_short_unitdata_req (T_DL_SHORT_UNITDATA_REQ * short_unitdata_req); EXTERN void drr_dl_short_unitdata_ind (UBYTE ch_type, UBYTE error_flag, UBYTE * layer1head, UBYTE * layer3msg, UBYTE length, ULONG fn); EXTERN void drr_dl_establish_cnf (UBYTE ch_type, UBYTE sapi); EXTERN void drr_dl_release_ind (UBYTE ch_type, UBYTE sapi, UBYTE cs, BOOL init); EXTERN void drr_dl_release_cnf (UBYTE ch_type, UBYTE sapi, BOOL init); EXTERN void drr_error_ind (UBYTE ch_type, UBYTE sapi); /* * Prototypes Slow Associated Control Channel */ EXTERN void sacch0_init_dl_data (void); EXTERN void sacch0_reset_meas (void); EXTERN void sacch0_send_data (void); /* * Prototypes Slow Dedicated Control Channel (SAPI 0) */ EXTERN void dcch0_init_dl_data (void); EXTERN void dcch0_delay_sabm (T_CCH * pcch); EXTERN void dcch0_establish_req (T_DL_ESTABLISH_REQ * est_req); EXTERN void dcch0_resume_req (T_DL_RESUME_REQ * resume_req); EXTERN void dcch0_reconnect_req (T_DL_RECONNECT_REQ * reconnect_req); EXTERN BOOL dcch0_release_req (T_DL_RELEASE_REQ * dl_release_req); EXTERN void dcch0_mdl_release_req (void); EXTERN void dcch0_suspend_req (T_DL_SUSPEND_REQ * suspend_req); EXTERN void dcch0_data_req (T_DL_DATA_REQ * data_req); EXTERN int dcch0_check_disc (int send); /* * Prototypes Slow Dedicated Control Channel (SAPI 3) */ EXTERN void dcch3_init_dl_data (void); EXTERN void dcch3_enable (UBYTE ch_type); EXTERN void dcch3_establish_req (T_DL_ESTABLISH_REQ * est_req); EXTERN BOOL dcch3_release_req (T_DL_RELEASE_REQ * dl_release_req); EXTERN void dcch3_mdl_release_req (void); EXTERN void dcch3_data_req (T_DL_DATA_REQ * data_req); EXTERN int dcch3_check_disc (int send); #if defined(INVOKE_SIGNAL) EXTERN void sig_init_signal_data (void); EXTERN void sig_invoke_drr_dl_establish_ind (UBYTE ch_type, UBYTE sapi, UBYTE indication); EXTERN void sig_invoke_drr_dl_data_cnf (UBYTE sapi); #if 0 /* happens in primitive context only */ EXTERN void sig_invoke_drr_dl_unitdata_ind (UBYTE error_flag, UBYTE * layer1head, UBYTE * layer3msg, UBYTE length, ULONG fn); #endif /* 0 */ EXTERN void sig_invoke_drr_dl_short_unitdata_ind (UBYTE ch_type, UBYTE error_flag, UBYTE * layer1head, UBYTE * layer3msg, UBYTE length, ULONG fn); EXTERN void sig_invoke_drr_dl_establish_cnf (UBYTE ch_type, UBYTE sapi); EXTERN void sig_invoke_drr_dl_release_ind (UBYTE ch_type, UBYTE sapi, UBYTE cs, BOOL init); EXTERN void sig_invoke_drr_dl_release_cnf (UBYTE ch_type, UBYTE sapi, BOOL init); EXTERN void sig_invoke_drr_error_ind (UBYTE ch_type, UBYTE sapi); EXTERN void sig_invoke_com_free_pointer (void * pointer); EXTERN void sig_invoke_com_concatenate (T_DL_DATA_IND ** in_msg, UBYTE * new_data_in); EXTERN void sig_invoke_com_data_ind (UBYTE ch_type, UBYTE sapi, ULONG fn); EXTERN void sig_invoke_com_l3trace (UBYTE type, UBYTE ch_type, UBYTE * frame); #if defined(DL_TRACE_ENABLED) && defined(DL_IMMEDIATE_TRACE) EXTERN void sig_invoke_com_l2trace (UBYTE trace_type, UBYTE channel, UBYTE ch_type, T_TIME trace_time, UBYTE * data); #endif /* DL_TRACE_ENABLED && DL_IMMEDIATE_TRACE */ #if defined(FF_EM_MODE) EXTERN void sig_invoke_dl_em_write (UBYTE length, UBYTE * data); EXTERN void sig_invoke_dl_em_first_event_check (void); #endif /* FF_EM_MODE */ EXTERN void sig_handle_drr_dl_establish_ind (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_drr_dl_data_cnf (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_drr_dl_short_unitdata_ind (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_drr_dl_establish_cnf (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_drr_dl_release_ind (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_drr_dl_release_cnf (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_drr_error_ind (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_com_free_pointer (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_com_concatenate (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_com_free_pointer (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_com_data_ind (T_DL_SIGNAL_DATA * signal); EXTERN void sig_handle_com_l3trace (T_DL_SIGNAL_DATA * signal); #if defined(DL_TRACE_ENABLED) && defined(DL_IMMEDIATE_TRACE) EXTERN void sig_handle_com_l2trace (T_DL_SIGNAL_DATA * signal); #endif /* DL_TRACE_ENABLED && DL_IMMEDIATE_TRACE */ #if defined(FF_EM_MODE) EXTERN UBYTE em_dl_write (UBYTE length, UBYTE * data); EXTERN void sig_handle_dl_em_write (T_DL_DATA_STORE * dl_data, T_DL_SIGNAL_DATA * signal); EXTERN void dl_em_first_event_check(void);/*for ACI notification of first EM event*/ EXTERN void sig_handle_dl_em_first_event_check (void); #endif /* FF_EM_MODE */ #endif /* INVOKE_SIGNAL */ /* * Prototypes Distribute PL */ #ifdef _SIMULATION_ #ifdef DL_2TO1 EXTERN void l1test_call_mphc_read_dcch (T_L1TEST_CALL_MPHC_READ_DCCH * ready); EXTERN void l1test_return_mphc_read_dcch (T_RADIO_FRAME * frame); EXTERN void l1test_call_mphc_read_sacch (T_L1TEST_CALL_MPHC_READ_SACCH * ready); EXTERN void l1test_return_mphc_read_sacch (T_RADIO_FRAME* frame); EXTERN void l1test_call_mphc_dcch_downlink (T_L1TEST_CALL_MPHC_DCCH_DOWNLINK * data_ind); EXTERN void l1test_return_mphc_dcch_downlink (T_L1TEST_RETURN_MPHC_DCCH_DOWNLINK * resp); #else /* DL_2TO1 */ EXTERN void dph_ph_ready_to_send (T_PH_READY_TO_SEND * ready); #endif /* DL_2TO1 */ #endif /* _SIMULATION_ */ /* SACCH Uplink Interface according to L1M_GS011-1 v.1.22, section 23. */ EXTERN T_RADIO_FRAME *dll_read_sacch (U8 chn_mode); /* SACCH Downlink Interface according to L1M_GS011-1 v.1.22, section 24. */ /* SACCH (SDCCH/FACCH only simulation) Downlink Test Interface */ EXTERN void dph_ph_data_ind (T_PH_DATA_IND * data_ind); #if defined(DL_2TO1) || defined(USE_L1M_GS001_1) /* DCCH Uplink Interface according to L1M_GS001-1, section 25. */ EXTERN T_RADIO_FRAME * dll_read_dcch (U8 chn_mode, U8 channel_type); /* DCCH Downlink Interface according to L1M_GS001-1, section 26. */ EXTERN void dll_dcch_downlink (U32 * data_ptr, U8 valid_flag, U8 channel_type, U32 fn); #else /* DL_2TO1 || USE_L1M_GS001_1 */ /* DCCH Uplink Interface according to L1M_GS001-1 v.1.22, section 25. */ EXTERN T_RADIO_FRAME * dll_read_dcch (U8 chn_mode); /* DCCH Downlink Interface according to L1M_GS001-1 v.1.22, section 26. */ #if defined(SEND_FN_TO_L2_IN_DCCH) && (SEND_FN_TO_L2_IN_DCCH == 1) EXTERN void dll_dcch_downlink (U32 * data_ptr, U8 valid_flag, U32 fn); #else /* SEND_FN_TO_L2_IN_DCCH == 1 */ EXTERN void dll_dcch_downlink (U32 * data_ptr, U8 valid_flag); #endif /* SEND_FN_TO_L2_IN_DCCH == 1 */ #endif /* DL_2TO1 || USE_L1M_GS001_1 */ /* SACCH/SDCCH/FACCH Uplink Interface */ EXTERN T_RADIO_FRAME *dl1_uplink_ind (UBYTE channel_type, UBYTE no_signalling_flag); /* * Prototypes Downlink and Uplink Functions (DL_STATE.c) */ EXTERN int dl_downlink (UBYTE error_flag, UBYTE channel_type, UBYTE * frame, ULONG fn); EXTERN void set_channel_state (UBYTE channel, UBYTE state); EXTERN T_RADIO_FRAME* dl_uplink (UBYTE channel, UBYTE sapi, UBYTE no_signalling_mode, BOOL recursiv); EXTERN int uplink_awaiting_release (UBYTE channel, UBYTE sapi); /* * Prototypes Common Functions */ EXTERN void com_free_pointer (void * pointer); EXTERN void com_free_queue_buffer (T_QUEUE * queue, USHORT index); EXTERN void com_clear_queue (UBYTE sapi); EXTERN void com_restore_queue (UBYTE sapi, T_DL_DATA_REQ * est_req); EXTERN void com_recover_queue (UBYTE sapi); EXTERN void com_store_queue (UBYTE sapi, T_DL_DATA_REQ * data_req); EXTERN void com_read_queue (UBYTE ch_type, UBYTE sapi, UBYTE * m_bit); EXTERN BOOL com_queue_awaiting_transmission (UBYTE sapi); EXTERN void com_leave_dedicated (UBYTE ch_type); EXTERN void possible_reset_dcch0_ch_type (void); EXTERN void com_concatenate (T_DL_DATA_IND ** in_msg, UBYTE * new_data_in); EXTERN UBYTE com_check_nr (UBYTE va, UBYTE vs, UBYTE nr); EXTERN void com_prepare_DISC (UBYTE channel, UBYTE sapi); EXTERN void com_build_UA_response (UBYTE ch_type, UBYTE sapi, UBYTE f_bit); EXTERN void com_build_RR_response (UBYTE ch_type, UBYTE sapi, UBYTE nr, UBYTE f_bit); EXTERN void com_build_REJ_response (UBYTE ch_type, UBYTE sapi, UBYTE nr, UBYTE f_bit); EXTERN void com_build_DISC_command (UBYTE ch_type, UBYTE sapi, UBYTE p_bit); EXTERN void com_build_SABM (UBYTE ch_type, UBYTE sapi, BOOL contention_resultion); EXTERN void com_build_DM_response (UBYTE ch_type, UBYTE sapi, UBYTE f_bit); EXTERN void com_build_I_command (UBYTE ch_type, UBYTE sapi, UBYTE ns, UBYTE nr, UBYTE p_bit, UBYTE m_bit, T_QUEUE * queue); EXTERN void com_build_UI_command (UBYTE ch_type, UBYTE sapi, const T_FRAME * buffer); EXTERN void com_build_UI_Bter (UBYTE ch_type); EXTERN UBYTE com_compare_L3_msg (T_DL_DATA_REQ * data_ind1, UBYTE * data_ind2); GLOBAL void com_data_ind (UBYTE ch_type, UBYTE sapi, ULONG fn); EXTERN void com_l2trace (UBYTE trace_type, UBYTE channel, UBYTE ch_type, T_TIME event_time, UBYTE * data); EXTERN void com_l3trace (UBYTE type, UBYTE ch_type, UBYTE * frame); EXTERN void com_print_l3trace (UBYTE type, UBYTE ch_type, UBYTE sapi, UBYTE * l3msg); EXTERN void com_init_data (void); EXTERN CHAR* dl_version (void); EXTERN T_DL_DATA_STORE *dl_get_data (void); #if defined (DL_TRACE_ENABLED) EXTERN void dl_trace (UCHAR trace_type, UCHAR channel, UCHAR ch_type, UCHAR * data); #if defined(DL_IMMEDIATE_TRACE) EXTERN void dl_fast_trace (UBYTE trace_type, UBYTE channel, UBYTE ch_type, T_TIME trace_time, ULONG trace_mask, UBYTE * data); #else /* DL_IMMEDIATE_TRACE */ EXTERN void dl_trace_init (void); EXTERN void dl_trace_exit (void); EXTERN void dl_trace_read (void); EXTERN void dl_trace_read_all (void); EXTERN void dl_trace_clear (void); #endif /* DL_IMMEDIATE_TRACE */ #endif /* DL_TRACE_ENABLED */ /* * Prototypes Customer Specific Functions */ EXTERN USHORT dl_handle; #define ENTITY_DATA dl_data #if defined (DL_PEI_C) GLOBAL T_DL_DATA_STORE dl_data_base; #else EXTERN T_DL_DATA_STORE dl_data_base; #endif /* DL_PEI_C */ #define GET_INSTANCE_DATA register T_DL_DATA_STORE *dl_data= &dl_data_base /* * If all entities are linked into one module this definitions * prefixes the global data with the enity name */ #ifdef TI_PS_HCOMM_CHANGE #define hCommDL _hCommDL #else /* for hCommHandles backward compatibility */ #ifdef OPTION_MULTITHREAD #define hCommDL _ENTITY_PREFIXED(hCommDL) #define hCommRR _ENTITY_PREFIXED(hCommRR) #define hCommPL _ENTITY_PREFIXED(hCommPL) #endif EXTERN T_HANDLE hCommDL; /* Self Communication */ EXTERN T_HANDLE hCommRR; /* RR Communication */ EXTERN T_HANDLE hCommPL; /* PL Communication */ #endif #define SYST_TRACE(a) vsi_o_ttrace(0, 0xFFFF,a) #define SYST 0, 0xffff #ifdef TI_PS_HCOMM_CHANGE #define DLTRC _hCommDL, 0x0200 #else /* for hCommHandles backward compatibility */ #define DLTRC hCommDL, 0x0200 #endif #define SYST_TRACE_P(a) vsi_o_ttrace a #if defined(DL_TRACE_ENABLED) #if defined(DL_IMMEDIATE_TRACE) #define DL_OFFLINE_TRACE(type, ch, ch_type, data) \ com_l2trace (type, (U8) (ch),(U8)(ch_type), 0, (UBYTE *)(data)) #else /* DL_IMMEDIATE_TRACE */ #define DL_OFFLINE_TRACE(type, ch, ch_type, data) \ dl_trace ((UCHAR)(type), (UCHAR)(ch), (UCHAR)(ch_type), (UCHAR *)(data)) #endif /* DL_IMMEDIATE_TRACE */ #else #define DL_OFFLINE_TRACE(type, ch, ch_type, data) /* do nothing */ #endif /* DL_TRACE_ENABLED */ #if !defined(_FILE10_) #define __FILE10__ (__FILE__+strlen(__FILE__)-11) #endif /* !_FILE10_ */ #if defined(DL_TRACE_ENABLED) || defined(FF_EM_MODE) EXTERN void com_semaphore_err (void); GLOBAL int com_enter_critical_section (T_HANDLE sem); GLOBAL int com_leave_critical_section (T_HANDLE sem); #define ENTER_CRITICAL_SECTION(sem) if (com_enter_critical_section(sem))return #define LEAVE_CRITICAL_SECTION(sem) if (com_leave_critical_section(sem))return #if !defined(DL_IMMEDIATE_TRACE) GLOBAL int com_semaphore_state (T_HANDLE sem); #define TEST_SEMAPHORE(sem) if (com_semaphore_state(sem)) return #endif /* !DL_IMMEDIATE_TRACE */ #endif /* DL_TRACE_ENABLED || FF_EM_MODE */ #if defined (DL_TRACE_ENABLED) && defined(DL_TRACE_PFREE) #define MY_PFREE(p) p = my_pfree (p, __LINE__, __FILE10__) void* my_pfree(void *pointer, int line, char *file); #else #define MY_PFREE(p) PFREE(p) #endif /* DL_TRACE_ENABLED */ #if defined(_SIMULATION_) #define COM_FREE_QUEUE_BUFFER(q,i) \ {TRACE_EVENT_WIN_P4 ("FREE_QUEUE_BUFFER:q=%p i=%u (%s#%u)",q,i,__FILE10__, __LINE__);\ com_free_queue_buffer(q, i);} #define COM_FREE_POINTER(p) \ {TRACE_EVENT_WIN_P4 ("call com_free_pointer(,%s=%08x) (%s#%u)", #p, p, __FILE10__, __LINE__);\ com_free_pointer ( p);} #else /* _SIMULATION_ */ #define COM_FREE_QUEUE_BUFFER(q,i) com_free_queue_buffer(q,i) #define COM_FREE_POINTER(p) com_free_pointer ( p) #endif /* _SIMULATION_ */ #if 0 #define ARRAY_TRACE #if defined(ARRAY_TRACE) EXTERN void rr_array_trace (UBYTE*array, int size, char *titel); #define TRACE_ARRAY(array, size, titel) rr_array_trace(array, size, titel) #else /* ARRAY_TRACE */ #define TRACE_ARRAY(array, size, titel) #endif /* ARRAY_TRACE */ #endif /* 0 */ #endif /* !__DL_H__ */