view src/g23m-fad/ra/ra.h @ 52:6d77f6e1670a

bug in the last commit
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 19 Oct 2020 05:27:40 +0000
parents fa8dc04885d8
children
line wrap: on
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 Rate Adaption.
+----------------------------------------------------------------------------- 
*/ 

#ifndef RA_H
#define RA_H

#include "cl_ribu.h"

/*
 * Conditional Compiling
 */

#define HO_WORKAROUND
#undef V42BIS

#undef TRACE_RA_TRA_STATUS
#undef TRACE_RA_TRA_DATA

#undef TRACE_RA_FAX_DL_FRAME_TYPE
#undef TRACE_RA_FAX_UL_FRAME_TYPE
#undef TRACE_RA_FAX_UL_SKIP

#undef TRACE_RA_RLP

#if defined TRACE_RA_TRA_STATUS \
 || defined TRACE_RA_FAX_DL_FRAME_TYPE \
 || defined TRACE_RA_FAX_UL_FRAME_TYPE \
 || defined _SIMULATION_

#define BYTE2HEXSTR(B, H) {UBYTE b, *a = (UBYTE*)(H);\
        b = (((UBYTE)(B)) >> 4) & 0x0F;\
        if (b > 9) b += 'A'-10; else b += '0'; *a = b;\
        b = ((UBYTE)(B)) & 0x0F;\
        if (b > 9) b += 'A'-10; else b += '0'; *(a+1) = b;}

#endif

/*
  This constant gives the minimum number of frames,
  which have to be sent in a FR_TRAIN sequence.
  It is not derived from any protocol specfication,
  but found to be necessary to establish fax calls
  (MOC) at 2400bps on the D1 network
 */
#define MIN_FR_TRAIN_LEN 32

 /*
 * Macros
 */
/*
 * instance management
 */
#ifndef NTRACE

/* for trace purposes */

#define SERVICE_NAME_KER  "KER"

#endif

#define KER ker.

/*
 * States of the entity process TRANS
 */
#define TRA_NULL            0
#define TRA_INIT_L1         1
#define TRA_SYNCH_TCH_START 2
#define TRA_SYNCH_TCH_FOUND 3
#define TRA_WAIT_SYNC_LOST  4
#define TRA_DATA_TRANS_PRE1 5
#define TRA_DATA_TRANS_PRE2 6
#define TRA_DATA_TRANS_PRE3 7
#define TRA_DATA_TRANS      8
#define TRA_STATES          9

/*
 * States of the entity process RLP
 */
#define RLP_NULL            0
#define RLP_INIT_L1         1
#define RLP_DATA_TRANS      2
#define RLP_STATES          3

#ifdef FF_FAX
/*
 * States of the entity process FAX
 */
#define FAX_NULL            0
#define FAX_INIT_L1         1
#define FAX_SYNCH_TCH_START 2
#define FAX_SYNCH_TCH_FOUND 3
#define FAX_WAIT_SYNC_LOST  4
#define FAX_DATA_TRANS_PRE  5
#define FAX_DATA_TRANS      6
#define FAX_MODIFY          7
#define FAX_STATES          8
#endif /* FF_FAX */

/*
 * Bitmask definitions:
 * msk_xxx  bitmask left-justified value
 * pos_xxx  bitposition of the Less Significant Bit
 * adr_xxx  index into the shm_addr and cont_addr tables
 * wof_xxx  word offset which is to be added to the address
 *          in addr_shm table
 */

/*
 * Bitmask definitions for the d_ra_conf control word of the RADAP
 */

#define msk_conf_b_itc            0x0003
#define pos_conf_b_itc            0
#define adr_conf_b_itc            d_ra_conf
#define wof_conf_b_itc            0

/*
  #define V_ITC_SPEECH    0
*/
  #define V_ITC_DATA      1
  #define V_ITC_FAX       2

#define msk_conf_b_nsb            0x0004
#define pos_conf_b_nsb            2
#define adr_conf_b_nsb            d_ra_conf
#define wof_conf_b_nsb            0

  #define V_NSB_ONE_STOP  0
  #define V_NSB_TWO_STOP  1

#define msk_conf_b_ndb            0x0008
#define pos_conf_b_ndb            3
#define adr_conf_b_ndb            d_ra_conf
#define wof_conf_b_ndb            0

  #define V_NDMSK_B_7_DBITS   0
  #define V_NDMSK_B_8_DBITS   1

#define msk_conf_b_ur             0x00f0
#define pos_conf_b_ur             4
#define adr_conf_b_ur             d_ra_conf
#define wof_conf_b_ur             0

  #define V_UR_300        1
  #define V_UR_1200       2
  #define V_UR_2400       3
  #define V_UR_4800       4
  #define V_UR_9600       5
  /* not used             6 */
  #define V_UR_1200_75    7
  #define V_UR_14400      8

#define msk_conf_b_ce             0x0100
#define pos_conf_b_ce             8
#define adr_conf_b_ce             d_ra_conf
#define wof_conf_b_ce             0
  #define V_CE_TRANSP     0
  #define V_CE_NON_TRANSP 1

#define msk_conf_b_ct             0x0200
#define pos_conf_b_ct             9
#define adr_conf_b_ct             d_ra_conf
#define wof_conf_b_ct             0
  #define V_CT_FR         0
  #define V_CT_HR         1

/*
 * Bitmask definitions for the d_ra_act control word of the RADAP
 */
#define msk_act_b_init            0x0001
#define pos_act_b_init            0
#define adr_act_b_init            d_ra_act
#define wof_act_b_init            0

#define msk_act_b_syncul          0x0002
#define pos_act_b_syncul          1
#define adr_act_b_syncul          d_ra_act
#define wof_act_b_syncul          0

#define msk_act_b_syncdl          0x0004
#define pos_act_b_syncdl          2
#define adr_act_b_syncdl          d_ra_act
#define wof_act_b_syncdl          0

#define msk_act_b_ovspul          0x0008
#define pos_act_b_ovspul          3
#define adr_act_b_ovspul          d_ra_act
#define wof_act_b_ovspul          0

#define msk_act_b_f48blk_ul       0x0020
#define pos_act_b_f48blk_ul       5
#define adr_act_b_f48blk_ul       d_ra_act
#define wof_act_b_f48blk_ul       0

#define msk_act_b_f48blk_dl       0x0040
#define pos_act_b_f48blk_dl       6
#define adr_act_b_f48blk_dl       d_ra_act
#define wof_act_b_f48blk_dl       0

/*
 * Bitmask definitions for the d_ra_test
 * control word of the RADAP
 */
/*
#define msk_test_b_sul            0x0001
#define pos_test_b_sul            0
#define adr_test_b_sul            d_ra_test
#define wof_test_b_sul            0

#define msk_test_b_sdl            0x0002
#define pos_test_b_sdl            1
#define adr_test_b_sdl            d_ra_test
#define wof_test_b_sdl            0

#define msk_test_b_sched          0x0004
#define pos_test_b_sched          2
#define adr_test_b_sched          d_ra_test
#define wof_test_b_sched          0
*/

#define msk_test_b_t_dl_debug     0x0010
#define pos_test_b_t_dl_debug     4
#define adr_test_b_t_dl_debug     d_ra_test
#define wof_test_b_t_dl_debug     0

/*
 * Bitmask definitions for the d_ra_statu
 * control word of the RADAP
 */
#define msk_statu_b_sa            0x0001
#define pos_statu_b_sa            0
#define adr_statu_b_sa            d_ra_statu
#define wof_statu_b_sa            0

#define msk_statu_b_sb            0x0002
#define pos_statu_b_sb            1
#define adr_statu_b_sb            d_ra_statu
#define wof_statu_b_sb            0

#define msk_statu_b_x             0x0004
#define pos_statu_b_x             2
#define adr_statu_b_x             d_ra_statu
#define wof_statu_b_x             0

#define msk_statu_b_fed_ul        0x0008
#define pos_statu_b_fed_ul        3
#define adr_statu_b_fed_ul        d_ra_statu
#define wof_statu_b_fed_ul        0

/*
 * Bitmask definitions for the d_ra_statd control word of the RADAP
 */
#define msk_statd_b_sa            0x0001
#define pos_statd_b_sa            0
#define adr_statd_b_sa            d_ra_statd
#define wof_statd_b_sa            0

#define msk_statd_b_sb            0x0002
#define pos_statd_b_sb            1
#define adr_statd_b_sb            d_ra_statd
#define wof_statd_b_sb            0

#define msk_statd_b_x             0x0004
#define pos_statd_b_x             2
#define adr_statd_b_x             d_ra_statd
#define wof_statd_b_x             0

/*
 * for d_ra_statd only
 */
#define msk_statd_b_syncdet       0x0008
#define pos_statd_b_syncdet       3
#define adr_statd_b_syncdet       d_ra_statd
#define wof_statd_b_syncdet       0

/*
 * Bitmask definitions for the d_fax control word of the RADAP
 */
#define msk_fax_b_status_stop     0x0001
#define pos_fax_b_status_stop     0
#define adr_fax_b_status_stop     d_fax
#define wof_fax_b_status_stop     0

#define msk_fax_b_status_detect   0x0002
#define pos_fax_b_status_detect   1
#define adr_fax_b_status_detect   d_fax
#define wof_fax_b_status_detect   0

#define msk_fax_b_ident_thres     0x007c
#define pos_fax_b_ident_thres     2
#define adr_fax_b_ident_thres     d_fax
#define wof_fax_b_ident_thres     0

#define msk_fax_b_info_thres      0x0f80
#define pos_fax_b_info_thres      7
#define adr_fax_b_info_thres      d_fax
#define wof_fax_b_info_thres      0

#define msk_fax_b_status_receive  0x1000
#define pos_fax_b_status_receive  12
#define adr_fax_b_status_receive  d_fax
#define wof_fax_b_status_receive  0

#define msk_fax_b_data_receive    0x2000
#define pos_fax_b_data_receive    13
#define adr_fax_b_data_receive    d_fax
#define wof_fax_b_data_receive    0

#define msk_fax_b_byte_interface  0x4000
#define pos_fax_b_byte_interface  14
#define adr_fax_b_byte_interface  d_fax
#define wof_fax_b_byte_interface  0

/*
 * Bitmask definitions for the a_rau control field of the RADAP
 */
#define RAU_DATA_14400           36
#define RAU_DATA_9600            24
#define RAU_DATA_4800            12
#define RAU_DATA_2400             6
#define RAU_DATA_1200             3

#define msk_rau_byte_cnt          0x00ff
#define pos_rau_byte_cnt          0
#define adr_rau_byte_cnt          a_rau
#define wof_rau_byte_cnt          0

#define msk_rau_break_len         0xff00
#define pos_rau_break_len         8
#define adr_rau_break_len         a_rau
#define wof_rau_break_len         1

#define msk_rau_break_pos         0x00ff
#define pos_rau_break_pos         0
#define adr_rau_break_pos         a_rau
#define wof_rau_break_pos         1

/*
#define msk_rau_data              0xffff
#define pos_rau_data              0
*/
#define adr_rau_data              a_rau
#define wof_rau_data              2

/*
 * Bitmask definitions for the a_rad control field of the RADAP
 */
/*
#define MAX_RAD_DATA              36
*/
#define msk_rad_byte_cnt          0x00ff
#define pos_rad_byte_cnt          0
#define adr_rad_byte_cnt          a_rad
#define wof_rad_byte_cnt          0

#define msk_rad_break_len         0xff00
#define pos_rad_break_len         8
#define adr_rad_break_len         a_rad
#define wof_rad_break_len         1

#define msk_rad_break_pos         0x00ff
#define pos_rad_break_pos         0
#define adr_rad_break_pos         a_rad
#define wof_rad_break_pos         1

/*
#define msk_rad_data              0xffff
#define pos_rad_data              0
*/
#define adr_rad_data              a_rad
#define wof_rad_data              2

/*
 * Definitions of frame sizes for non transparent mode (in bytes, not including the FCC)
 */

#define NT_DATA_SIZE              27  /* Full frame at 9600 full rate and 4800 half rate */
#define NT_DATA_SIZE_14400_A      36  /* First half of frame at 14400 */
#define NT_DATA_SIZE_14400_B      33  /* Second half of frame at 14400 */
#define NT_DATA_SIZE_4800_FR_A    15  /* First half of frame at 4800 full rate */
#define NT_DATA_SIZE_4800_FR_B    12  /* Second half of frame at 4800 full rate */

/*
 * Bitmask definitions for the a_ntu control field of the RADAP
 */

#define msk_ntu_byte_cnt          0x00ff
#define pos_ntu_byte_cnt          0
#define adr_ntu_byte_cnt          a_ntu
#define wof_ntu_byte_cnt          0

#define msk_ntu_M1                0x0001
#define pos_ntu_M1                0
#define adr_ntu_M1                a_ntu
#define wof_ntu_M1                1

#define msk_ntu_M2                0x0002
#define pos_ntu_M2                1
#define adr_ntu_M2                a_ntu
#define wof_ntu_M2                1

#define msk_ntu_empty             0x0004
#define pos_ntu_empty             2
#define adr_ntu_empty             a_ntu
#define wof_ntu_empty             1

/*
#define msk_ntu_data              0xffff
#define pos_ntu_data              0
*/
#define adr_ntu_data              a_ntu
#define wof_ntu_data              2

/*
 * Bitmask definitions for the a_ntd control word of the RADAP
 */
#define msk_ntd_byte_cnt          0x00ff
#define pos_ntd_byte_cnt          0
#define adr_ntd_byte_cnt          a_ntd
#define wof_ntd_byte_cnt          0

#define msk_ntd_M1                0x0001
#define pos_ntd_M1                0
#define adr_ntd_M1                a_ntd
#define wof_ntd_M1                1

/*
#define msk_ntd_M2                0x0002
#define pos_ntd_M2                1
#define adr_ntd_M2                a_ntd
#define wof_ntd_M2                1
*/

#define msk_ntd_fcs_ok            0x0008
#define pos_ntd_fcs_ok            3
#define adr_ntd_fcs_ok            a_ntd
#define wof_ntd_fcs_ok            1

/*
#define msk_ntd_data              0x00ff
#define pos_ntd_data              0
*/
#define adr_ntd_data              a_ntd
#define wof_ntd_data              2

/*
 * Bitmask definitions for the a_faxu control word of the RADAP
 */
#define msk_faxu_byte_cnt         0x00ff
#define pos_faxu_byte_cnt         0
#define adr_faxu_byte_cnt         a_faxu
#define wof_faxu_byte_cnt         0

/*
#define msk_faxu_sync_cnt         0x00ff
#define pos_faxu_sync_cnt         0
#define adr_faxu_sync_cnt         a_faxu
#define wof_faxu_sync_cnt         0
*/

#define msk_faxu_control          0xff00
#define pos_faxu_control          8
#define adr_faxu_control          a_faxu
#define wof_faxu_control          0

/*
#define msk_faxu_data             0xffff
#define pos_faxu_data             0
*/
#define adr_faxu_data             a_faxu
#define wof_faxu_data             1

/*
 * Bitmask definitions for the a_faxd control word of the RADAP
 */
#define msk_faxd_byte_cnt         0x00ff
#define pos_faxd_byte_cnt         0
#define adr_faxd_byte_cnt         a_faxd
#define wof_faxd_byte_cnt         0

/*
#define msk_faxd_sync_cnt         0x00ff
#define pos_faxd_sync_cnt         0
#define adr_faxd_sync_cnt         a_faxd
#define wof_faxd_sync_cnt         0
*/

#define msk_faxd_control          0xff00
#define pos_faxd_control          8
#define adr_faxd_control          a_faxd
#define wof_faxd_control          0

#define V_CTRL_DATA    0
#define V_CTRL_STATUS  1
#define V_CTRL_SYNC    2
#define V_CTRL_TRAIN   3

/*
#define msk_faxd_data             0xffff
#define pos_faxd_data             0
*/
#define adr_faxd_data             a_faxd
#define wof_faxd_data             1

/*
 * index for the address array
 */
#define d_ra_conf   0
#define d_ra_act    1
#define d_ra_test   2
#define d_ra_statu  3
#define d_ra_statd  4
#define d_fax       5
#define a_rau       6
#define a_rad       7
#define a_ntu       8
#define a_ntd       9
#define a_faxu      10
#define a_faxd      11 /* must be the last in the list */

#define RA_FIFO_DEPTH 4

#define MAX_TRANS_BUFFER    36
#define MAX_FAX_BUFFER_UL   72
#define FAD_DESCBUF_LEN     MAX_FAX_BUFFER_UL /* for simulation */

#ifdef _SIMULATION_
#define MAX_NTRANS_BUFFER   36
#define MAX_FAX_BUFFER_DL   72
#endif

#define MODEL_RLP   1
#define MODEL_TRANS 2
#ifdef FF_FAX
#define MODEL_FAX   3
#endif

/*==== TYPES ======================================================*/

typedef struct
{
  USHORT *shm_addr[a_faxd+1];
} T_SHARED_MEM;

typedef struct
{
  USHORT timer;
  USHORT delay_OFF_ON;
  USHORT delay_ON_OFF;
  UBYTE  pos;
  UBYTE  current;
  UBYTE  last;
} T_STATUS_BIT;

typedef struct
{
  BOOL   ul_data_pending;
  BOOL   ul_signals_pending;
  BOOL   ul_break_pending;
  UBYTE  overspeed;
  UBYTE  ready_ind_idx;
  BOOL   data_req_rec;  /* flag, if RA_DATA_REQ received */

  UBYTE  ul_sa;
  UBYTE  ul_sb;
  UBYTE  ul_x;
  UBYTE  ul_status;

  T_STATUS_BIT dl_sa;
  T_STATUS_BIT dl_sb;
  T_STATUS_BIT dl_x;

  UBYTE  break_pos;
  USHORT break_len;

#ifndef HO_WORKAROUND
  T_RA_BREAK_IND ra_break_ind;
#endif
  T_FD *dl_pFD;

  T_FRAME_DESC ul_frame_desc;
} T_TRA;

typedef struct
{
  UBYTE const skip_seq_same[8];
  UBYTE const skip_seq_other[8];
} T_SKIP;

#ifdef FF_FAX
typedef struct
{
  BOOL  CMM_flag;

  UBYTE ul_frame_type;
  UBYTE ul_frame_type_last;
  UBYTE train_seq[2];
  UBYTE train_len;
  UBYTE seq_idx;
  UBYTE req_idx;

  T_RIBU_FD *ul_ribu;
  T_FD *ul_pFD;
  T_FD ul_train_FD;

#if defined TRACE_RA_FAX_DL_FRAME_TYPE || defined _SIMULATION_
  UBYTE dl_frame_type_last;
  UBYTE dl_state_last;
#endif

  T_FD *dl_pFD;

  const T_SKIP *skip_seq;
  const UBYTE  *req_seq;

} T_FAX;
#endif /* FF_FAX */

#define RLP_UL_QSIZE 16

typedef struct
{
  BOOL          ul_data_pending;
  BOOL          ul_48_first_half_sent;
  UBYTE         m1;
  T_RIBU        ulq;
  T_FRAME_DESC  ul_frame_desc[RLP_UL_QSIZE];
  T_FRAME_DESC  dl_frame_desc;

#ifdef _SIMULATION_
  UBYTE dl_buf[MAX_FAX_BUFFER_DL]; /* maximum is MAX_FAX_BUFFER_DL */
#endif

#ifdef TRACE_RA_RLP
  ULONG         fcs_error;
#endif
} T_RLP;

typedef struct
{
  UBYTE state;
#ifndef NTRACE
  char *name;
  char *state_name;
#endif
} T_STATE;

typedef struct
{
  T_STATE ker;
  T_SHARED_MEM shm;

  BOOL    activated;
  UBYTE   model;
  UBYTE   nsb;
  UBYTE   ndb;
  UBYTE   user_rate;
  UBYTE   tra_rate;

  USHORT  sync_timer;
  USHORT  cycle_time;

  T_TRA   *tra;
  T_RLP   *rlp;

#ifdef FF_FAX
  T_FAX   *fax;
#endif

  T_RA_DATA_IND       ra_data_ind;
  T_RA_READY_IND      ra_ready_ind[2];
  
#ifdef _SIMULATION_

  T_RIBU_FD *dl_ribu;
  T_FD ul_FD;
  UBYTE ul_buf[MAX_TRANS_BUFFER];

#else

  T_RA_BREAK_IND      ra_break_ind;
  T_RA_DEACTIVATE_CNF ra_deactivate_cnf;

#endif


} T_RA_DATA;

/*==== EXPORT =====================================================*/

#ifdef OPTION_MULTITHREAD
  #define hCommMMI        _ENTITY_PREFIXED(hCommMMI)
  #define hCommRLP        _ENTITY_PREFIXED(hCommRLP)
#ifdef FF_FAX
  #define hCommFAD        _ENTITY_PREFIXED(hCommFAD)
#endif
  #define hCommTRA        _ENTITY_PREFIXED(hCommTRA) /* for trans mode */
#endif

#define ENTITY_DATA ra_data

#ifdef RA_DLL_C

GLOBAL T_RA_DATA *ra_data;

GLOBAL T_HANDLE  ra_handle;
GLOBAL T_HANDLE  hCommMMI = VSI_ERROR;       /* MMI  Communication */
GLOBAL T_HANDLE  hCommTRA = VSI_ERROR;       /* Transp Communication */
GLOBAL T_HANDLE  hCommRLP = VSI_ERROR;       /* RLP  Communication */
#ifdef FF_FAX
GLOBAL T_HANDLE  hCommFAD = VSI_ERROR;       /* FAD  Communication */
#endif

#ifdef HO_WORKAROUND
GLOBAL USHORT _act_d_ra_conf;
#endif

#else /* !RA_DLL_C */

EXTERN T_RA_DATA *ra_data;

EXTERN T_HANDLE  ra_handle;
EXTERN T_HANDLE  hCommMMI;                   /* MMI  Communication */
EXTERN T_HANDLE  hCommTRA;                   /* Transp. Communication */
EXTERN T_HANDLE  hCommRLP;                   /* RLP  Communication */
#ifdef FF_FAX
EXTERN T_HANDLE  hCommFAD;                   /* FAD  Communication */
#endif

#ifdef HO_WORKAROUND
EXTERN  USHORT _act_d_ra_conf;
#endif

#endif /* !RA_DLL_C */

/*
 * function prototypes for process TRA
 */

#ifdef OPTION_MULTITHREAD
#define tra_init                _ENTITY_PREFIXED(tra_init)
#define tra_idle                _ENTITY_PREFIXED(tra_idle)
#define tra_ul_null             _ENTITY_PREFIXED(tra_ul_null)
#define tra_ul_init_l1          _ENTITY_PREFIXED(tra_ul_init_l1)
#define tra_dl_sync_tch_start   _ENTITY_PREFIXED(tra_dl_sync_tch_start)
#define tra_ul_sync_tch_found   _ENTITY_PREFIXED(tra_ul_sync_tch_found)
#define tra_dl_wait_sync_lost   _ENTITY_PREFIXED(tra_dl_wait_sync_lost)
#define tra_dl_wait_for_connect _ENTITY_PREFIXED(tra_dl_wait_for_connect)
#define tra_dl_wait_for_uart    _ENTITY_PREFIXED(tra_dl_wait_for_uart)
#define tra_dl_got_uart         _ENTITY_PREFIXED(tra_dl_got_uart)
#define tra_ul_data_trans       _ENTITY_PREFIXED(tra_ul_data_trans)
#define tra_dl_data_trans       _ENTITY_PREFIXED(tra_dl_data_trans)
#endif

EXTERN void tra_init(UBYTE);
EXTERN void tra_idle(void);
EXTERN void tra_ul_null(void);
EXTERN void tra_ul_init_l1(void);
EXTERN void tra_dl_sync_tch_start(void);
EXTERN void tra_ul_data_trans(void);
EXTERN void tra_ul_sync_tch_found(void);
EXTERN void tra_dl_wait_sync_lost(void);
EXTERN void tra_dl_wait_for_connect(void);
EXTERN void tra_dl_wait_for_uart(void);
EXTERN void tra_dl_got_uart(void);
EXTERN void tra_dl_data_trans(void);

#ifdef FF_FAX
/*
 * function prototypes for process FAX
 */

#ifdef OPTION_MULTITHREAD
#define fax_init                 _ENTITY_PREFIXED(fax_init)
#define fax_idle                 _ENTITY_PREFIXED(fax_idle)
#define fax_ul_null              _ENTITY_PREFIXED(fax_ul_null)
#define fax_ul_init_l1           _ENTITY_PREFIXED(fax_ul_init_l1)
#define fax_dl_sync_tch_start    _ENTITY_PREFIXED(fax_dl_sync_tch_start)
#define fax_ul_sync_tch_found    _ENTITY_PREFIXED(fax_ul_sync_tch_found)
#define fax_dl_wait_sync_lost    _ENTITY_PREFIXED(fax_dl_wait_sync_lost)
#define fax_ul_data_trans        _ENTITY_PREFIXED(fax_ul_data_trans)
#define fax_dl_data_trans        _ENTITY_PREFIXED(fax_dl_data_trans)
#define fax_ul_modify            _ENTITY_PREFIXED(fax_ul_modify)
#endif

EXTERN void fax_init(void);
EXTERN void fax_idle(void);
EXTERN void fax_ul_null(void);
EXTERN void fax_ul_init_l1(void);
EXTERN void fax_dl_sync_tch_start(void);
EXTERN void fax_ul_data_trans(void);
EXTERN void fax_ul_sync_tch_found(void);
EXTERN void fax_dl_wait_sync_lost(void);
EXTERN void fax_dl_data_trans(void);
EXTERN void fax_ul_modify(void);

#endif /* FF_FAX */

/*
 * function prototypes for process RLP
 */

#ifdef OPTION_MULTITHREAD
#define rlp_init                 _ENTITY_PREFIXED(rlp_init)
#define rlp_idle                 _ENTITY_PREFIXED(rlp_idle)
#define rlp_ul_null              _ENTITY_PREFIXED(rlp_ul_null)
#define rlp_ul_init_l1           _ENTITY_PREFIXED(rlp_ul_init_l1)
#define rlp_ul_data_trans        _ENTITY_PREFIXED(rlp_ul_data_trans)
#define rlp_dl_data_trans        _ENTITY_PREFIXED(rlp_dl_data_trans)
#endif

EXTERN void rlp_init(void);
EXTERN void rlp_idle(void);
EXTERN void rlp_ul_null(void);
EXTERN void rlp_ul_init_l1(void);
EXTERN void rlp_ul_data_trans(void);
EXTERN void rlp_dl_data_trans(void);

/*
 * macros for setting/getting the bitpattern values
 * of the control words in the shared memory.
 */

#define shm_get_dsp_value(var)\
  (((*(ra_data->shm.shm_addr[adr_##var]+wof_##var)) & msk_##var) >> pos_##var)

#define shm_set_dsp_value(var,val)\
{ USHORT sv = val;\
  USHORT sc = ra_data->shm.shm_addr[adr_##var][wof_##var];\
  sv <<= pos_##var;\
  sv &= msk_##var;\
  sc &= ~msk_##var;\
  sc |= sv;\
  ra_data->shm.shm_addr[adr_##var][wof_##var] = sc;}

EXTERN U16 shm_set_dsp_buffer(T_FRAME_DESC *data, USHORT *buffer, USHORT offs, USHORT free);
EXTERN U8  shm_set_dsp_buffer_new(T_FD *data, USHORT *buffer, U8 offs, U8 free);

EXTERN U16 shm_get_dsp_buffer(T_FRAME_DESC *data, USHORT *buffer, USHORT bytes_to_read);
EXTERN U8  shm_get_dsp_buffer_new(USHORT *buffer, U8 bytes_to_read, T_FD *pFD);

#ifdef _SIMULATION_
/*
 * for layer 1 simulation only
 *====================================================================
 * Bitoffset for encoding/decoding
 */
#define ENCODE_OFFSET 0

/*
 * Dynamic Configuration Numbers
 */
#define RA_CNF    9
#define RA_DEACT 10

#endif /* _SIMULATION_ */

/*
 * L1 prototypes
 */

EXTERN void l1i_ra_activate_cnf(void);
EXTERN void l1i_ra_data_ind(T_HANDLE);
EXTERN void l1i_ra_modify_cnf(void);
EXTERN void l1i_ra_ready_ind(T_HANDLE, UBYTE);
#ifndef HO_WORKAROUND
EXTERN void l1i_ra_break_ind(void);
#endif

/*
 * DLL functions
 */

EXTERN void dll_init(void);

EXTERN void dll_data_ul
(
  USHORT *_ul_buffer_address,
  USHORT *_d_ra_conf,
  USHORT *_d_ra_act,
  USHORT *_d_ra_test,
  USHORT *_d_ra_statu,
  USHORT *_d_fax
);

EXTERN void dll_data_dl
(
  USHORT *_dl_buffer_address,
  USHORT *_d_ra_act,
  USHORT *_d_ra_statd
);

/*
 * miscellaneous function prototypes
 */
#ifdef OPTION_MULTITHREAD

#define TimeOut                 _ENTITY_PREFIXED(TimeOut)

#endif

EXTERN BOOL TimeOut(USHORT*);

#ifdef _TARGET_
/*lint -e752 : local declarator not referenced */
EXTERN T_FD *fad_rbm_get_next_FrameDesc(void);  /* in entity FAD referenced */
EXTERN T_FD *tra_get_next_FrameDesc(void);      /* in entity L2R referenced */
EXTERN void rlp_rbm_get_next_buffer(T_FRAME_DESC *frameDesc); /* in entity RLP referenced */
#endif

#endif /* RA_H */