view src/cs/layer1/include/l1_tabs.h @ 303:f76436d19a7a default tip

!GPRS config: fix long-standing AT+COPS chance hanging bug There has been a long-standing bug in FreeCalypso going back years: sometimes in the AT command bring-up sequence of an ACI-only MS, the AT+COPS command would produce only a power scan followed by cessation of protocol stack activity (only L1 ADC traces), instead of the expected network search sequence. This behaviour was seen in different FC firmware versions going back to Citrine, and seemed to follow some law of chance, not reliably repeatable. This bug has been tracked down and found to be specific to !GPRS configuration, stemming from our TCS2/TCS3 hybrid and reconstruction of !GPRS support that was bitrotten in TCS3.2/LoCosto version. ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3 version and had to be pulled from TCS2 - but as it turns out, there is a new field in the MMR_REG_REQ primitive that needs to be set correctly, and that psa_mms.c module is the place where this initialization needed to be added.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 08 Jun 2023 08:23:37 +0000
parents 4e78acac3d88
children
line wrap: on
line source

/************* Revision Controle System Header *************
 *                  GSM Layer 1 software 
 * L1_TABS.H
 *
 *        Filename l1_tabs.h
 *  Copyright 2003 (C) Texas Instruments  
 *
 ************* Revision Controle System Header *************/
/***********************************************************
 * Content:
 *   This file contains the miscelaneous ROM tables.
 ***********************************************************/

#ifdef L1_ASYNC_C
  /*-----------------------------------------------------------------*/
  /* Idle Tasks info. (Paging position, extended Paging position...) */
  /*-----------------------------------------------------------------*/
  /* REM:                                                            */
  /* The "working area" field gives the starting position of an area */
  /* it will be used for neighbour:  - FB search,                    */
  /*                                 - SB reading,                   */
  /* The value given for each parameter set takes into account the   */
  /* size of the "FB search" task and the CBCH task.                 */                                 
  /*-----------------------------------------------------------------*/
  //  NP or EP task size: 1 + 4 + 1 = 6.
  //  BCCHS task size: 1 + 4 + 1 = 6.
  //  FB task size: 1 + 12 + 1 = 14.    --+-- FB + SB task take 15 TDMA (pipeline overlay).
  //  SB task size: 1 + 2 + 1 = 4.      --+
  //  CNF, SB task size: 1 + 2 + 1 = 4.
  //  BC (Broad. Channel): 1 + 4 + 1 = 6     
   
  const T_IDLE_TASK_INFO IDLE_INFO_NCOMB[(MAX_AG_BLKS_RES_NCOMB+1) * (MAX_PG_BLOC_INDEX_NCOMB+1)] =
  // BS_CCCH_SDCCH_COMB = False, BCCH not combined.
  { 
    // BS_AG_BLKS_RES = 0.
    // -------------------
    // Paging, Ext Paging
    {  CCCH_0,     CCCH_2  },  // Paging Block Index = 0.
    {  CCCH_1,     CCCH_3  },  // Paging Block Index = 1.
    {  CCCH_2,     CCCH_4  },  // Paging Block Index = 2.
    {  CCCH_3,     CCCH_5  },  // Paging Block Index = 3.
    {  CCCH_4,     CCCH_6  },  // Paging Block Index = 4.
    {  CCCH_5,     CCCH_7  },  // Paging Block Index = 5.
    {  CCCH_6,     CCCH_8  },  // Paging Block Index = 6.
    {  CCCH_7,     CCCH_0  },  // Paging Block Index = 7.
    {  CCCH_8,     CCCH_1  },  // Paging Block Index = 8.

    // BS_AG_BLKS_RES = 1.
    // -------------------
    // Paging, Ext Paging
    {  CCCH_1,     CCCH_3  },  // Paging Block Index = 0.
    {  CCCH_2,     CCCH_4  },  // Paging Block Index = 1.
    {  CCCH_3,     CCCH_5  },  // Paging Block Index = 2.
    {  CCCH_4,     CCCH_6  },  // Paging Block Index = 3.
    {  CCCH_5,     CCCH_7  },  // Paging Block Index = 4.
    {  CCCH_6,     CCCH_8  },  // Paging Block Index = 5.
    {  CCCH_7,     CCCH_1  },  // Paging Block Index = 6.
    {  CCCH_8,     CCCH_2  },  // Paging Block Index = 7.
    {  NULL,       NULL    },  // Paging Block Index = 8.

    // BS_AG_BLKS_RES = 2.
    // -------------------
    // Paging, Ext Paging
    {  CCCH_2,     CCCH_4  },  // Paging Block Index = 0.
    {  CCCH_3,     CCCH_5  },  // Paging Block Index = 1.
    {  CCCH_4,     CCCH_6  },  // Paging Block Index = 2.
    {  CCCH_5,     CCCH_7  },  // Paging Block Index = 3.
    {  CCCH_6,     CCCH_8  },  // Paging Block Index = 4.
    {  CCCH_7,     CCCH_2  },  // Paging Block Index = 5.
    {  CCCH_8,     CCCH_3  },  // Paging Block Index = 6.
    {  NULL,       NULL    },  // Paging Block Index = 7.
    {  NULL,       NULL    },  // Paging Block Index = 8.

    // BS_AG_BLKS_RES = 3.
    // -------------------
    // Paging, Ext Paging, 
    {  CCCH_3,     CCCH_5  },  // Paging Block Index = 0.
    {  CCCH_4,     CCCH_6  },  // Paging Block Index = 1.
    {  CCCH_5,     CCCH_7  },  // Paging Block Index = 2.
    {  CCCH_6,     CCCH_8  },  // Paging Block Index = 3.
    {  CCCH_7,     CCCH_3  },  // Paging Block Index = 4.
    {  CCCH_8,     CCCH_4  },  // Paging Block Index = 5.
    {  NULL,       NULL    },  // Paging Block Index = 6.
    {  NULL,       NULL    },  // Paging Block Index = 7.
    {  NULL,       NULL    },  // Paging Block Index = 8.

    // BS_AG_BLKS_RES = 4.
    // -------------------
    // Paging, Ext Paging
    {  CCCH_4,     CCCH_6  },  // Paging Block Index = 0.
    {  CCCH_5,     CCCH_7  },  // Paging Block Index = 1.
    {  CCCH_6,     CCCH_8  },  // Paging Block Index = 2.
    {  CCCH_7,     CCCH_4  },  // Paging Block Index = 3.
    {  CCCH_8,     CCCH_5  },  // Paging Block Index = 4.
    {  NULL,       NULL    },  // Paging Block Index = 5.
    {  NULL,       NULL    },  // Paging Block Index = 6.
    {  NULL,       NULL    },  // Paging Block Index = 7.
    {  NULL,       NULL    },  // Paging Block Index = 8.

    // BS_AG_BLKS_RES = 5.
    // -------------------
    // Paging, Ext Paging
    {  CCCH_5,     CCCH_7  },  // Paging Block Index = 0.
    {  CCCH_6,     CCCH_8  },  // Paging Block Index = 1.
    {  CCCH_7,     CCCH_5  },  // Paging Block Index = 2.
    {  CCCH_8,     CCCH_6  },  // Paging Block Index = 3.
    {  NULL,       NULL    },  // Paging Block Index = 4.
    {  NULL,       NULL    },  // Paging Block Index = 5.
    {  NULL,       NULL    },  // Paging Block Index = 6.
    {  NULL,       NULL    },  // Paging Block Index = 7.
    {  NULL,       NULL    },  // Paging Block Index = 8.

    // BS_AG_BLKS_RES = 6.
    // -------------------
    // Paging, Ext Paging, 
    {  CCCH_6,     CCCH_8  },  // Paging Block Index = 0.
    {  CCCH_7,     CCCH_6  },  // Paging Block Index = 1.
    {  CCCH_8,     CCCH_7  },  // Paging Block Index = 2.
    {  NULL,       NULL    },  // Paging Block Index = 3.
    {  NULL,       NULL    },  // Paging Block Index = 4.
    {  NULL,       NULL    },  // Paging Block Index = 5.
    {  NULL,       NULL    },  // Paging Block Index = 6.
    {  NULL,       NULL    },  // Paging Block Index = 7.
    {  NULL,       NULL    },  // Paging Block Index = 8.

    // BS_AG_BLKS_RES = 7.
    // -------------------
    // Paging, Ext Paging
    {  CCCH_7,     CCCH_7  },  // Paging Block Index = 0.
    {  CCCH_8,     CCCH_8  },  // Paging Block Index = 1.
    {  NULL,       NULL    },  // Paging Block Index = 2.
    {  NULL,       NULL    },  // Paging Block Index = 3.
    {  NULL,       NULL    },  // Paging Block Index = 4.
    {  NULL,       NULL    },  // Paging Block Index = 5.
    {  NULL,       NULL    },  // Paging Block Index = 6.
    {  NULL,       NULL    },  // Paging Block Index = 7.
    {  NULL,       NULL    }   // Paging Block Index = 8.
  };

  const T_IDLE_TASK_INFO IDLE_INFO_COMB[(MAX_AG_BLKS_RES_COMB+1) * (MAX_PG_BLOC_INDEX_COMB+1)] =
  // BS_CCCH_SDCCH_COMB = TRUE, BCCH combined.
  { 
    // BS_AG_BLKS_RES = 0.
    // -------------------
    // Paging, Ext Paging, offset, working_area
    {  CCCH_0,     CCCH_2  },  // Paging Block Index = 0.
    {  CCCH_1,     CCCH_0  },  // Paging Block Index = 1.
    {  CCCH_2,     CCCH_1  },  // Paging Block Index = 2.

    // BS_AG_BLKS_RES = 1.
    // -------------------
    // Paging, Ext Paging, offset, working_area
    {  CCCH_1,     CCCH_1  },  // Paging Block Index = 0.
    {  CCCH_2,     CCCH_2  },  // Paging Block Index = 1.
    {  NULL,       NULL    },  // Paging Block Index = 2.

    // BS_AG_BLKS_RES = 2.
    // -------------------
    // Paging, Ext Paging, offset, working_area
    {  CCCH_2,     CCCH_2  },  // Paging Block Index = 0.
    {  NULL,       NULL    },  // Paging Block Index = 1.
    {  NULL,       NULL    }   // Paging Block Index = 2.
  };

    
  /*-------------------------------------*/
  /* Table giving the number of Paging   */
  /* blocks in a MF51.                   */
  /* (called "N div BS_PA_MFRMS" in      */
  /* GSM05.02, Page 21).                 */
  /*-------------------------------------*/

  // BS_CCCH_SDCCH_COMB = False, BCCH not combined.
  const UWORD8 NBPCH_IN_MF51_NCOMB[(MAX_AG_BLKS_RES_NCOMB+1)] =
  {
    9,    // BS_AG_BLKS_RES = 0. 
    8,    // BS_AG_BLKS_RES = 1. 
    7,    // BS_AG_BLKS_RES = 2. 
    6,    // BS_AG_BLKS_RES = 3. 
    5,    // BS_AG_BLKS_RES = 4. 
    4,    // BS_AG_BLKS_RES = 5. 
    3,    // BS_AG_BLKS_RES = 6. 
    2     // BS_AG_BLKS_RES = 7. 
  };    

  // BS_CCCH_SDCCH_COMB = True, BCCH combined.
  const UWORD8 NBPCH_IN_MF51_COMB[(MAX_AG_BLKS_RES_COMB+1)] =
  {
    3,    // BS_AG_BLKS_RES = 0. 
    2,    // BS_AG_BLKS_RES = 1. 
    1     // BS_AG_BLKS_RES = 2. 
  };    

  // Initial value for Downlink Signalling failure Counter (DSC).
  const UWORD8 DSC_INIT_VALUE[MAX_BS_PA_MFRMS-1] =
  {
    45,   // BS_PA_MFRMS = 2.
    30,   // BS_PA_MFRMS = 3.
    23,   // BS_PA_MFRMS = 4.
    18,   // BS_PA_MFRMS = 5.
    15,   // BS_PA_MFRMS = 6.
    13,   // BS_PA_MFRMS = 7.
    11,   // BS_PA_MFRMS = 8.
    10    // BS_PA_MFRMS = 9.
  };

  // REM: 2nd block of SDCCH is always at the same position as the first block
  //      but 1 mf51 later.
  // REM: monitoring during SDCCH used a fixe area (FB51/SB51/SBCNF51 tasks).
  //      Here is given the area starting position. This position is chosen
  //      to allow the equations for SBCNF51 occurence as it is in the l1s
  //      scheduler (the area do not overlap the end of 102 multiframe 
  //      structure).
  // Table for SDCCH description, Down Link & Up link, Not combined case.
   const T_SDCCH_DESC SDCCH_DESC_NCOMB[8] =
  {
    //  "dl_D" , "dl_A"  , "ul_D"  , "ul_A".        , "monit. area"
    {  51 - 12 , 32 - 12 , 15 - 12 ,  47 - 12       ,  70 - 12     }, // SDCCH, D0
    {  55 - 12 , 36 - 12 , 19 - 12 ,  51 - 12       ,  74 - 12     }, // SDCCH, D1
    {  59 - 12 , 40 - 12 , 23 - 12 ,  55 - 12       ,  78 - 12     }, // SDCCH, D2
    {  12 - 12 , 44 - 12 , 27 - 12 ,  59 - 12       ,  82 - 12     }, // SDCCH, D3
    {  16 - 12 , 83 - 12 , 31 - 12 ,  98 - 12       ,  35 - 12     }, // SDCCH, D4
    {  20 - 12 , 87 - 12 , 35 - 12 , 102 - 12       ,  39 - 12     }, // SDCCH, D5
    {  24 - 12 , 91 - 12 , 39 - 12 ,   4 - 12 + 102 ,  43 - 12     }, // SDCCH, D6
    {  28 - 12 , 95 - 12 , 43 - 12 ,   8 - 12 + 102 ,  47 - 12     }  // SDCCH, D7
  };  

  // REM: monitoring during SDCCH used a fixe area (FB51/SB51/SBCNF51 tasks).
  //      Here is given the area starting position. This position is chosen
  //      to allow the equations for SBCNF51 occurence as it is in the l1s
  //      scheduler (the area do not overlap the end of 102 multiframe 
  //      structure).
  // Table for SDCCH description, Down Link & Up link, Combined case.
  const T_SDCCH_DESC SDCCH_DESC_COMB[4] =
  {
    // "dl_D"  , "dl_A"  , "ul_D"  , "ul_A".       , "monit. area"
    {  73 - 37 , 42 - 37 , 37 - 37 , 57 - 37       ,  92 - 37     }, // SDCCH, D0
    {  77 - 37 , 46 - 37 , 41 - 37 , 61 - 37       ,  96 - 37     }, // SDCCH, D1
    {  83 - 37 , 93 - 37 , 47 - 37 , 6  - 37 + 102 ,  51 - 37     }, // SDCCH, D2
    {  87 - 37 , 97 - 37 , 51 - 37 , 10 - 37 + 102 ,  55 - 37     }  // SDCCH, D3
  };                                                               

  // Table for HOPPING SEQUENCE GENERATION ALGORITHM.
  const UWORD8 RNTABLE[114] =
  {
     48,  98,  63,   1,  36,  95,  78, 102,  94,  73,
      0,  64,  25,  81,  76,  59, 124,  23, 104, 100,
    101,  47, 118,  85,  18,  56,  96,  86,  54,   2,
     80,  34, 127,  13,   6,  89,  57, 103,  12,  74,
     55, 111,  75,  38, 109,  71, 112,  29,  11,  88,
     87,  19,   3,  68, 110,  26,  33,  31,   8,  45,
     82,  58,  40, 107,  32,   5, 106,  92,  62,  67,
     77, 108, 122,  37,  60,  66, 121,  42,  51, 126,
    117, 114,   4,  90,  43,  52,  53, 113, 120,  72,
     16,  49,   7,  79, 119,  61,  22,  84,   9,  97,
     91,  15,  21,  24,  46,  39,  93, 105,  65,  70,
    125,  99,  17, 123
  };


  // Table giving the RACH slot positions when COMBINED.
  // Rem: all is shifted left by 1 to map the position of the possible "contoles".
  const UWORD8 COMBINED_RA_DISTRIB[51] =
  { 
    0, 0, 0, 
    1, 1, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    0, 0, 0, 0, 0, 0, 0, 0,
    1, 1, 
    0, 0, 0, 0, 0
  };

#if !L1_GPRS
  const T_TASK_MFTAB  TASK_ROM_MFTAB[NBR_DL_L1S_TASKS] =
  {
    { BLOC_HWTEST,   BLOC_HWTEST_SIZE   },  // HWTEST 
    { BLOC_ADC    ,  BLOC_ADC_SIZE      },  // ADC in CS_MODE0
    { NULL,          0                  },  // DEDIC   (not meaningfull)
    { BLOC_RAACC,    BLOC_RAACC_SIZE    },  // RAACC                 
    { NULL,          0                  },  // RAHO    (not meaningfull)             
    { NULL,          0                  },  // NSYNC   (not meaningfull)             
    { BLOC_FBNEW,    BLOC_FBNEW_SIZE    },  // FBNEW 
    { BLOC_SBCONF,   BLOC_SBCONF_SIZE   },  // SBCONF 
    { BLOC_SB2,      BLOC_SB2_SIZE      },  // SB2 
    { BLOC_FB26,     BLOC_FB26_SIZE     },  // FB26               
    { BLOC_SB26,     BLOC_SB26_SIZE     },  // SB26
    { BLOC_SBCNF26,  BLOC_SBCNF26_SIZE  },  // SBCNF26
    { BLOC_FB51,     BLOC_FB51_SIZE     },  // FB51               
    { BLOC_SB51,     BLOC_SB51_SIZE     },  // SB51               
    { BLOC_SBCNF51,  BLOC_SBCNF51_SIZE  },  // SBCNF51               
    { BLOC_BCCHN,    BLOC_BCCHN_SIZE    },  // BCCHN   
    { BLOC_ALLC,     S_RECT4_SIZE       },  // ALLC
    { BLOC_EBCCHS,   S_RECT4_SIZE       },  // EBCCHS 
    { BLOC_NBCCHS,   S_RECT4_SIZE       },  // NBCCHS 
    { BLOC_SMSCB,    BLOC_SMSCB_SIZE    },  // SMSCB
    { BLOC_NP,       S_RECT4_SIZE       },  // NP  
    { BLOC_EP,       S_RECT4_SIZE       },  // EP  
    { BLOC_ADL,      S_RECT4_SIZE       },  // ADL
    { BLOC_AUL,      S_RECT4_SIZE       },  // AUL                 
    { BLOC_DDL,      S_RECT4_SIZE       },  // DDL
    { BLOC_DUL,      S_RECT4_SIZE       },  // DUL     
    { BLOC_TCHD,     BLOC_TCHT_SIZE     },  // TCHD
    { BLOC_TCHA,     BLOC_TCHA_SIZE     },  // TCHA
    { BLOC_TCHTF,    BLOC_TCHT_SIZE     },  // TCHTF
    { BLOC_TCHTH,    BLOC_TCHT_SIZE     },  // TCHTH
    { BLOC_BCCHN_TOP,BLOC_BCCHN_TOP_SIZE},  // BCCHN_TOP  
    { BLOC_SYNCHRO,  BLOC_SYNCHRO_SIZE  }   // SYNCHRO
  };

  const UWORD8 DSP_TASK_CODE[NBR_DL_L1S_TASKS] =
  {
    CHECKSUM_DSP_TASK,// HWTEST 
    0,                // DEDIC (not meaningfull)
    0,                // ADC   (not meaningfull)
    RACH_DSP_TASK,    // RAACC     
    RACH_DSP_TASK,    // RAHO
    0,                // NSYNC (not meaningfull)
    FB_DSP_TASK,      // FBNEW    
    SB_DSP_TASK,      // SBCONF
    SB_DSP_TASK,      // SB2     
    TCH_FB_DSP_TASK,  // FB26               
    TCH_SB_DSP_TASK,  // SB26               
    TCH_SB_DSP_TASK,  // SBCNF26               
    FB_DSP_TASK,      // FB51               
    SB_DSP_TASK,      // SB51               
    SB_DSP_TASK,      // SBCNF51               
    NBN_DSP_TASK,     // BCCHN         
    ALLC_DSP_TASK,    // ALLC      
    NBS_DSP_TASK,     // EBCCHS       
    NBS_DSP_TASK,     // NBCCHS       
    DDL_DSP_TASK,     // Temporary (BUG IN SIMULATOR)  CB_DSP_TASK,    // SMSCB
    NP_DSP_TASK,      // NP        
    EP_DSP_TASK,      // EP        
    ADL_DSP_TASK,     // ADL     
    AUL_DSP_TASK,     // AUL     
    DDL_DSP_TASK,     // DDL     
    DUL_DSP_TASK,     // DUL     
    TCHD_DSP_TASK,    // TCHD 
    TCHA_DSP_TASK,    // TCHA
    TCHT_DSP_TASK,    // TCHTF
    TCHT_DSP_TASK,    // TCHTH
    NBN_DSP_TASK,     // BCCHN_TOP == BCCHN
    0,                // SYNCHRO (not meaningfull)
  };                
#else
  const T_TASK_MFTAB  TASK_ROM_MFTAB[NBR_DL_L1S_TASKS] =
  {
    { BLOC_HWTEST,       BLOC_HWTEST_SIZE  },       // HWTEST 
    { BLOC_ADC,          BLOC_ADC_SIZE     },       // ADC in CS_MODE0
    { NULL,              0                 },       // DEDIC   (not meaningfull)
    { BLOC_RAACC,        BLOC_RAACC_SIZE   },       // RAACC                 
    { NULL,              0                 },       // RAHO    (not meaningfull)
    { NULL,              0                 },       // NSYNC   (not meaningfull)             
    { BLOC_POLL ,        BLOC_POLL_SIZE    },       // POLL
    { BLOC_PRACH,        BLOC_PRACH_SIZE   },       // PRACH  
    { BLOC_ITMEAS,       BLOC_ITMEAS_SIZE  },       // ITMEAS 
    { BLOC_FBNEW,        BLOC_FBNEW_SIZE   },       // FBNEW 
    { BLOC_SBCONF,       BLOC_SBCONF_SIZE  },       // SBCONF 
    { BLOC_SB2,          BLOC_SB2_SIZE     },       // SB2 
    { BLOC_PTCCH,        BLOC_PTCCH_SIZE   },       // PTCCH  
    { BLOC_FB26,         BLOC_FB26_SIZE    },       // FB26               
    { BLOC_SB26,         BLOC_SB26_SIZE    },       // SB26
    { BLOC_SBCNF26,      BLOC_SBCNF26_SIZE },       // SBCNF26
    { BLOC_FB51,         BLOC_FB51_SIZE    },       // FB51               
    { BLOC_SB51,         BLOC_SB51_SIZE    },       // SB51               
    { BLOC_SBCNF51,      BLOC_SBCNF51_SIZE },       // SBCNF51
    { BLOC_PDTCH,        BLOC_PDTCH_SIZE   },       // PDTCH   
    { BLOC_BCCHN,        BLOC_BCCHN_SIZE   },       // BCCHN   
    { BLOC_ALLC,         S_RECT4_SIZE      },       // ALLC
    { BLOC_EBCCHS,       S_RECT4_SIZE      },       // EBCCHS 
    { BLOC_NBCCHS,       S_RECT4_SIZE      },       // NBCCHS 
    { BLOC_ADL,          S_RECT4_SIZE      },       // ADL
    { BLOC_AUL,          S_RECT4_SIZE      },       // AUL                 
    { BLOC_DDL,          S_RECT4_SIZE      },       // DDL
    { BLOC_DUL,          S_RECT4_SIZE      },       // DUL     
    { BLOC_TCHD,         BLOC_TCHT_SIZE    },       // TCHD
    { BLOC_TCHA,         BLOC_TCHA_SIZE    },       // TCHA
    { BLOC_TCHTF,        BLOC_TCHT_SIZE    },       // TCHTF
    { BLOC_TCHTH,        BLOC_TCHT_SIZE    },       // TCHTH
    { BLOC_PALLC,        BLOC_PCCCH_SIZE   },       // PALLC
    { BLOC_SMSCB,        BLOC_SMSCB_SIZE   },       // SMSCB
    { BLOC_PBCCHS,       BLOC_PBCCHS_SIZE  },       // PBCCHS
    { BLOC_PNP,          BLOC_PCCCH_SIZE   },       // PNP
    { BLOC_PEP,          BLOC_PCCCH_SIZE   },       // PEP
    { BLOC_SINGLE,       BLOC_SINGLE_SIZE  },       // SINGLE        
    { BLOC_PBCCHN_TRAN,  BLOC_PBCCHN_TRAN_SIZE },   // PBCCHN_TRAN   
    { BLOC_PBCCHN_IDLE,  BLOC_PBCCHN_IDLE_SIZE },   // PBCCHN_IDLE   
    { BLOC_BCCHN_TRAN,   BLOC_BCCHN_TRAN_SIZE },    // BCCHN_TRAN  
    { BLOC_NP,           S_RECT4_SIZE      },       // NP  
    { BLOC_EP,           S_RECT4_SIZE      },       // EP  
    { BLOC_BCCHN_TOP,    BLOC_BCCHN_TOP_SIZE},      // BCCHN_TOP  
    { BLOC_SYNCHRO,      BLOC_SYNCHRO_SIZE }        // SYNCHRO
  };

  const UWORD8 DSP_TASK_CODE[NBR_DL_L1S_TASKS] =
  {
    CHECKSUM_DSP_TASK,// HWTEST 
    0,                // ADC   (not meaningfull)
    0,                // DEDIC (not meaningfull)
    RACH_DSP_TASK,    // RAACC     
    RACH_DSP_TASK,    // RAHO
    0,                // NSYNC  (not meaningfull)
    0,                // POLL   (not meaningfull)
    0,                // PRACH  (not meaningfull)
    0,                // ITMEAS 
    FB_DSP_TASK,      // FBNEW    
    SB_DSP_TASK,      // SBCONF
    SB_DSP_TASK,      // SB2     
    PTCCHU_DSP_TASK,  // PTCCH  
    TCH_FB_DSP_TASK,  // FB26               
    TCH_SB_DSP_TASK,  // SB26               
    TCH_SB_DSP_TASK,  // SBCNF26               
    FB_DSP_TASK,      // FB51               
    SB_DSP_TASK,      // SB51               
    SB_DSP_TASK,      // SBCNF51               
    0,                // PDTCH  (not meaningfull)
    NBN_DSP_TASK,     // BCCHN         
    ALLC_DSP_TASK,    // ALLC      
    NBS_DSP_TASK,     // EBCCHS       
    NBS_DSP_TASK,     // NBCCHS       
    ADL_DSP_TASK,     // ADL     
    AUL_DSP_TASK,     // AUL     
    DDL_DSP_TASK,     // DDL     
    DUL_DSP_TASK,     // DUL     
    TCHD_DSP_TASK,    // TCHD 
    TCHA_DSP_TASK,    // TCHA
    TCHT_DSP_TASK,    // TCHTF
    TCHT_DSP_TASK,    // TCHTH
    0,                // PALLC  (not meaningfull)
    DDL_DSP_TASK,     // Temporary (BUG IN SIMULATOR)  CB_DSP_TASK,    // SMSCB
    DDL_DSP_TASK,     // PBCCHS (In order to allow PBCCHS running in CS or Idle mode, we have to specify a valid DSP task in order to request a PBCCHS with the GSM scheduler)
    0,                // PNP    (not meaningfull)
    0,                // PEP    (not meaningfull)
    0,                // SINGLE (not meaningfull) 
    0,                // PBCCHN_TRAN (not meaningfull)    
    DDL_DSP_TASK,     // PBCCHN_IDLE (only for GSM scheduler the task used is the same as SMSCB task)
    NBN_DSP_TASK,     // BCCHN_TRAN == BCCHN
    NP_DSP_TASK,      // NP        
    EP_DSP_TASK,      // EP        
    NBN_DSP_TASK,     // BCCHN_TOP == BCCHN
    0                 // SYNCHRO (not meaningfull)
  };                

#endif

  const UWORD8 REPORTING_PERIOD[] =
  {
    255,            // INVALID_CHANNEL -> invalid reporting period
    104,            // TCH_F              
    104,            // TCH_H              
    102,            // SDCCH_4            
    102             // SDCCH_8            
  }; 
  
  const UWORD8 TOA_PERIOD_LEN[] =
  {
    0,              // CS_MODE0 not used for histogram filling       
    12,             // CS_MODE histogram length            
    12,             // I_MODE histogram length            
    12,             // CON_EST_MODE1 histogram length  
   144,             // CON_EST_MODE2 histogram length      
    36,             // DEDIC_MODE (Full rate) histogram length        
    42              // DEDIC_MODE (Half rate) histogram length        
    #if L1_GPRS
      ,16           // PACKET TRANSFER MODE histogram length
    #endif
  }; 
  
 // #if (STD == GSM) 
    const UWORD8 MIN_TXPWR_GSM[] =
    {
      0,  // unused.
      0,  // Power class = 1, unused for GSM900
      2,  // Power class = 2.
      3,  // Power class = 3.
      5,  // Power class = 4.
      7   // Power class = 5.
    };
 // #elif (STD == PCS1900)
    const UWORD8 MIN_TXPWR_PCS[] =
    {
      0,  // unused.
      0,  // Power class = 1.
      3,  // Power class = 2.
     30   // Power class = 3.
    };
 // #elif (STD == DCS1800)
    const UWORD8 MIN_TXPWR_DCS[] =
    {
      0,  // unused.
      0,  // Power class = 1.
      3,  // Power class = 2.
     29   // Power class = 3.
    };

     const UWORD8 MIN_TXPWR_GSM850[] =
    {
      0,  // unused.
      0,  // Power class = 1, unused for GSM900
      2,  // Power class = 2.
      3,  // Power class = 3.
      5,  // Power class = 4.
      7   // Power class = 5.
    };

//  #elif (STD == DUAL)
 //   const UWORD8 MIN_TXPWR_GSM[] =
 //  {
 //     0,  // unused.
 //     0,  // Power class = 1, unused for GSM900
 //     2,  // Power class = 2.
 //     3,  // Power class = 3.
 //     5,  // Power class = 4.
 //     7   // Power class = 5.
 //   };
 //   const UWORD8 MIN_TXPWR_DCS[] =
 //   {
 //     0,  // unused.
 //     0,  // Power class = 1.
 //     3,  // Power class = 2.
 //    29   // Power class = 3.
 //   };
//  #endif

const UWORD8 GAUG_VS_PAGING_RATE[] =
{
  4,   // bs_pa_mfrms = 2, 1 gauging every 4 Paging blocs
  3,   // bs_pa_mfrms = 3, 1 gauging every 3 Paging blocs
  2,   // bs_pa_mfrms = 4, 1 gauging every 2 Paging blocs
  1,   // bs_pa_mfrms = 5, 1 gauging every 1 Paging bloc
  1,   // bs_pa_mfrms = 6, 1 gauging every 1 Paging bloc
  1,   // bs_pa_mfrms = 7, 1 gauging every 1 Paging bloc
  1,   // bs_pa_mfrms = 8, 1 gauging every 1 Paging bloc
  1    // bs_pa_mfrms = 9, 1 gauging every 1 Paging bloc
};   
  
#else
  extern T_IDLE_TASK_INFO IDLE_INFO_COMB[(MAX_AG_BLKS_RES_COMB+1) * (MAX_PG_BLOC_INDEX_COMB+1)];
  extern T_IDLE_TASK_INFO IDLE_INFO_NCOMB[(MAX_AG_BLKS_RES_NCOMB+1) * (MAX_PG_BLOC_INDEX_NCOMB+1)];
  extern UWORD8           NBPCH_IN_MF51_NCOMB[(MAX_AG_BLKS_RES_NCOMB+1)];
  extern UWORD8           NBPCH_IN_MF51_COMB[(MAX_AG_BLKS_RES_COMB+1)];
  extern UWORD8           DSC_INIT_VALUE[MAX_BS_PA_MFRMS-2];
  extern T_SDCCH_DESC     SDCCH_DESC_NCOMB[];
  extern T_SDCCH_DESC     SDCCH_DESC_COMB[];
  extern UWORD8           RNTABLE[114];
  extern UWORD8           COMBINED_RA_DISTRIB[51];
  extern T_TASK_MFTAB     TASK_ROM_MFTAB[NBR_DL_L1S_TASKS];
  extern UWORD8           DSP_TASK_CODE[NBR_DL_L1S_TASKS];
  extern UWORD8           REPORTING_PERIOD[];
  extern UWORD8           TOA_PERIOD_LEN[];
  extern UWORD8           MIN_TXPWR_GSM[];
  extern UWORD8           MIN_TXPWR_DCS[];
  extern UWORD8           MIN_TXPWR_PCS[];
  extern UWORD8           MIN_TXPWR_GSM850[];
  extern UWORD8           GAUG_VS_PAGING_RATE[];
#endif