view cdg-hybrid/cdginc/p_rrgrr.val @ 220:0ed36de51973

ABB semaphore protection overhaul The ABB semaphone protection logic that came with TCS211 from TI was broken in several ways: * Some semaphore-protected functions were called from Application_Initialize() context. NU_Obtain_Semaphore() called with NU_SUSPEND fails with NU_INVALID_SUSPEND in this context, but the return value wasn't checked, and NU_Release_Semaphore() would be called unconditionally at the end. The latter call would increment the semaphore count past 1, making the semaphore no longer binary and thus no longer effective for resource protection. The fix is to check the return value from NU_Obtain_Semaphore() and skip the NU_Release_Semaphore() call if the semaphore wasn't properly obtained. * Some SPI hardware manipulation was being done before entering the semaphore- protected critical section. The fix is to reorder the code: first obtain the semaphore, then do everything else. * In the corner case of L1/DSP recovery, l1_abb_power_on() would call some non-semaphore-protected ABB & SPI init functions. The fix is to skip those calls in the case of recovery. * A few additional corner cases existed, all of which are fixed by making ABB semaphore protection 100% consistent for all ABB functions and code paths. There is still one remaining problem of priority inversion: suppose a low- priority task calls an ABB function, and some medium-priority task just happens to preempt right in the middle of that semaphore-protected ABB operation. Then the high-priority SPI task is locked out for a non-deterministic time until that medium-priority task finishes its work and goes back to sleep. This priority inversion problem remains outstanding for now.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Apr 2021 20:55:25 +0000
parents 35f7a1dc9f7d
children
line wrap: on
line source

/*
+--------------------------------------------------------------------------+
| PROJECT : PROTOCOL STACK                                                 |
| FILE    : p_rrgrr.val                                                    |
| SOURCE  : "sap\rrgrr.pdf"                                                |
| LastModified : "2003-11-19"                                              |
| IdAndVersion : "8441.112.03.031"                                         |
| SrcFileTime  : "Thu Nov 29 09:52:28 2007"                                |
| Generated by CCDGEN_2.5.5A on Fri Oct 14 21:41:52 2016                   |
|           !!DO NOT MODIFY!!DO NOT MODIFY!!DO NOT MODIFY!!                |
+--------------------------------------------------------------------------+
*/

/* PRAGMAS
 * PREFIX                 : NONE
 * COMPATIBILITY_DEFINES  : NO (require PREFIX)
 * ALWAYS_ENUM_IN_VAL_FILE: NO
 * ENABLE_GROUP: NO
 * CAPITALIZE_TYPENAME: NO
 */


#ifndef P_RRGRR_VAL
#define P_RRGRR_VAL


#define CDG_ENTER__P_RRGRR_VAL

#define CDG_ENTER__FILENAME _P_RRGRR_VAL
#define CDG_ENTER__P_RRGRR_VAL__FILE_TYPE CDGINC
#define CDG_ENTER__P_RRGRR_VAL__LAST_MODIFIED _2003_11_19
#define CDG_ENTER__P_RRGRR_VAL__ID_AND_VERSION _8441_112_03_031

#define CDG_ENTER__P_RRGRR_VAL__SRC_FILE_TIME _Thu_Nov_29_09_52_28_2007

#include "CDG_ENTER.h"

#undef CDG_ENTER__P_RRGRR_VAL

#undef CDG_ENTER__FILENAME

#include "p_mph.val"   /* Access values independent from the corresponding h-file. */


/*
 * Value constants for VAL_cause
 */
#define GPRS_NOT_SUPPORTED             (0x0)      /* Serving cell does not support GPRS */
#define GPRS_SUPPORTED                 (0x1)      /* Serving cell supports GPRS     */
#define GPRS_CELL_NOT_SUITABLE         (0x2)      /* for GRR-controlled cell reselection */

/*
 * Value constants for VAL_si_to_read
 */
#define UNSPECIFIED_SI                 (0x0)      /* Update of unspecified SI message or SI messages */
#define UPDATE_SI1                     (0x1)      /* Update of SI1 message          */
#define UPDATE_SI2_SI2BIS_OR_SI2TER    (0x2)      /* Update of SI2, SI2 bis or SI2 ter message */
#define UPDATE_SI3_SI4_SI7_OR_SI8      (0x3)      /* Update of SI3, SI4, SI7 or SI8 message */
#define UPDATE_SI9                     (0x4)      /* Update of SI9 message          */
#define COMPLETE_SI                    (0x5)      /* Read complete SI               */
#define UPDATE_SI13                    (0xff)     /* Update or read of SI13         */

/*
 * Value constants for VAL_si1_state
 */
#define SI1_NOT_SEND                   (0x0)      /* SI not send                    */
#define SI1_RECEIVED                   (0x1)      /* SI received                    */
#define SI1_NOT_RECEIVED               (0x2)      /* SI not received                */

/*
 * Value constants for VAL_si3_state
 */
#define SI3_NOT_SEND                   (0x0)      /* SI not send                    */
#define SI3_RECEIVED                   (0x1)      /* SI received                    */
#define SI3_NOT_RECEIVED               (0x2)      /* SI not received                */

/*
 * Value constants for VAL_si13_state
 */
#define SI13_NOT_SEND                  (0x0)      /* SI not send                    */
#define SI13_RECEIVED                  (0x1)      /* SI received                    */
#define SI13_NOT_RECEIVED              (0x2)      /* SI not received                */

/*
 * Value constants for VAL_pg_type
 */
#define RRGRR_IMSI                     (0x0)      /* MS is paged by IMSI            */
#define RRGRR_PTMSI                    (0x1)      /* MS is paged by PTMSI (GPRS TMSI) */

/*
 * Value constants for VAL_rr_est
 */
#define RR_EST_NOT_ALLOWED             (0x0)      /* RR establishment not allowed   */
#define RR_EST_ALLOWED                 (0x1)      /* RR establishment allowed       */

// VALTAB-FF: REL99 
// 
// Value constants for VAL_ecsc
// 
// #define ECS_FORBIDDEN                  (0x0)   /* Early classmark sending forbidden in the cell */
// #define ECS_ALLOWED                    (0x1)   /* Early classmark sending allowed in the cell */

/*
 * Value constants for VAL_susp_req
 */
#define SUSPENSION_REQ_NOT_NEEDED      (0x0)      /* RR need not send GPRS suspension request */
#define SUSPENSION_REQ_NEEDED          (0x1)      /* RR has to send GPRS suspension request */

/*
 * Value constants for VAL_r_bit
 */
#define CHAN_REQ_SENT_ONCE             (0x0)      /* MS has sent channel request only once */
#define CHAN_REQ_SENT_MORE             (0x1)      /* MS has sent channel request twice or more */

/*
 * Value constants for VAL_old_ptmsi
 */
#define RRGRR_PTMSI_INVALID            (0xffffffff)/* P-TMSI or TMSI invalid (see GSM 3.03) */

/*
 * Value constants for VAL_stop_cause
 */
#define CONTENTION_RESOLUTION_FAIL     (0x3)      /* Establishment fails due to contention resolution */
#define DL_ESTABLISHMENT_FAIL          (0x4)      /* Layer 2 establishment failure  */

/*
 * Value constants for VAL_arfcn
 */
#define RRGRR_INVALID_ARFCN            (0xffff)   /* Used to mark a channel number entry as invalid. */

/*
 * Value constants for VAL_sb_flag
 */
#define NO_SB_FOUND                    (0x0)      /* synchronisation burst not found */
#define SB_FOUND                       (0x1)      /* synchronisation burst found    */
#define SB_UNKNOWN                     (0x2)      /* status of synchronisation burst unknown */

/*
 * Value constants for VAL_bsic
 */
#define RRGRR_INVALID_BSIC             (0xff)     /* Used to identify a BSIC entry as invalid */

/*
 * Value constants for VAL_cr_type
 */
#define CR_NEW                         (0x0)      /* RR has to reselect the given cell */
#define CR_COMPLETE                    (0x1)      /* RR has to camp on this cell    */
#define CR_CONT                        (0x2)      /* Continue cell reselection.     */
#define CR_CS                          (0x3)      /* start cell selection process again */
#define CR_NEW_NOT_SYNCED              (0x4)      /* start cr for not syncd cell (ie. PCCO) */
#define CR_SUSPENDED_IDLE              (0x7c)     /* start idle procedures          */
#define CR_REQ_CANDIDATE               (0x7d)     /* inform GRR that is has to start a CR */
#define CR_NORMAL                      (0x7e)     /* Do not abort TBF               */
#define CR_ABNORMAL                    (0x7f)     /* Abort TBF                      */

/*
 * Value constants for VAL_sync_res
 */
#define SYNC_OK                        (0x0)      /* Synchronisation OK             */
#define SYNC_FAILED                    (0x1)      /* Synchronisation failed         */

/*
 * Value constants for VAL_cell_type
 */
#define SYNC_SCELL                     (0x0)      /* Synchronisation to serving cell */
#define SYNC_NCELL                     (0x1)      /* Synchronisation to neighbour cell */

/*
 * Value constants for VAL_pag_mode
 */
#define PAG_MODE_LAST_ONE              (0x0)      /* RR shall use the last page (before pag_Reorg) */
#define PAG_MODE_REORG                 (0x1)      /* RR shall use Paging reorg mode */
#define PAG_MODE_PTM_NP                (0x2)      /* RR shall use the NORMAL paging in packet transfer mode, start only CCCH */
#define PAG_MODE_PIM_NP                (0x3)      /* RR shall start only CCCH with REORG and change to NORMAL paging */
#define PAG_MODE_DEFAULT               (0xff)     /* RR shall use the default paging mode and goes to idle mode */

/*
 * Value constants for VAL_split_pg
 */
#define RRGRR_NO_DRX                   (0x2c0)    /* Non DRX mode                   */

/*
 * Value constants for VAL_rac
 */
#define RRGRR_RAC_INVALID              (0xff)     /* routing area code invalid      */

/*
 * Value constants for VAL_reconn_state
 */
#define RECONN_OK                      (0x0)      /* The reconnection to the 'old' channel was cuessful */
#define RECONN_LOW_FAIL                (0x1)      /* A Lower Layer Failure occured during the reconnection. */

/*
 * Value constants for VAL_reconn_cause
 */
#define RECONN_NORM_EVENT              (0x0)      /* Normal event                   */
#define RECONN_UNSPECIFIED             (0x1)      /* Abnormal release, unspecified  */
#define RECONN_CHN_UNACCEPTABLE        (0x2)      /* Abnormal release, channel unacceptable */
#define RECONN_TIMER_EXPIRED           (0x3)      /* Abnormal release, timer expired */
#define RECONN_NO_ACTIVITY             (0x4)      /* Abnormal release, no activity on the radio path */
#define RECONN_PREEMPTIVE              (0x5)      /* Preemptive release             */
#define RECONN_TA_OUT_OF_RANGE         (0x8)      /* Handover impossible, timing advance out of range */
#define RECONN_CHANNEL_MODE            (0x9)      /* Channel mode unacceptable      */
#define RECONN_FREQ_NOT_IMPL           (0xa)      /* Frequency not implemented      */
#define RECONN_CALL_CLEARED            (0x41)     /* Call already cleared           */
#define RECONN_INCORRECT_SEMANTIC      (0x5f)     /* Semantically incorrect message */
#define RECONN_INVALID_INFO            (0x60)     /* Invalid mandatory information  */
#define RECONN_UNKNWN_MSG_TYPE         (0x61)     /* Message type non-existent or not implemented */
#define RECONN_INCMPTBLE_MSG_TYPE      (0x62)     /* Message type not compatible with protocol state */
#define RECONN_COND_IE_ERROR           (0x64)     /* Conditional IE error           */
#define RECONN_NO_CELL_ALLOC           (0x65)     /* No cell allocation available   */
#define RECONN_PROT_UNSPECIFIED        (0x6f)     /* Protocol error unspecified     */

/*
 * Value constants for VAL_ident_type
 */
#define ID_IMSI                        (0x1)      /* Paged by IMSI                  */
#define ID_TMSI                        (0x4)      /* Paged by TMSI                  */
#define ID_PTMSI                       (0x8)      /* Paged by PTMSI                 */

/*
 * Value constants for VAL_report_type
 */
#define REP_TYPE_1                     (0x0)      /* synchronize to the 6 strongest carriers and provide their BSICs */
#define REP_TYPE_2                     (0x1)      /* synchronize to carriers in decreasing field strength until the BSICs for 6 carriers with allowed NCC are fully decoded */
#define REP_TYPE_3                     (0x2)      /* no synchronization, no BSICs are provided */
#define REP_TYPE_RES                   (0x3)      /* reserved, ignore request for measurement data in this version */

/*
 * Value constants for VAL_xmeas_cause
 */
#define EXT_MEAS_OK                    (0x0)      /* The results of the Extended Measurment procedure are valid. */
#define EXT_MEAS_RESET                 (0x1)      /* GRR has stopped the Extended Measurement procedure */
#define EXT_MEAS_LEAVE_IDLE            (0x2)      /* RR has entered a non-idle state and stopped the Extended Measurement procedure */

/*
 * Value constants for VAL_lac
 */
#define VAL_LAC___DEF                  (0x0)      /* lac                            */
#define RRGRR_LA_INVALID               (0xfffe)   /* la invalid                     */

/*
 * Value constants for VAL_v_stop_ccch
 */
#define DONT_STOP_CCCH                 (0x0)      /* Don't stop CCCH                */
#define STOP_CCCH                      (0x1)      /* Stop CCCH                      */
#define INVALID_MSG                    (0x2)      /* The message was not assigned to MS */
#define TASK_STOP_DUMMY_VALUE          (0x3)      /* Dummy value, only used for GRR internal purposes */

/*
 * Value constants for VAL_rxlev
 */
#define RRGRR_INVALID_RXLEV            (0x80)     /* receive signal strength level not present */

/*
 * Value constants for VAL_idx
 */
#define RRGRR_INVALID_IDX              (0xff)     /* index not present              */

/*
 * Value constants for VAL_state
 */
#define TASK_STATE_PIM                 (0x0)      /* Packet Idle Mode               */
#define TASK_STATE_PAM                 (0x1)      /* Packet Access Mode             */
#define TASK_STATE_PTM                 (0x2)      /* Packet Transfer Mode           */

/*
 * Value constants for VAL_cell_bar_access_2
 */
#define CBA_2_NORMAL                   (0x0)      /* Status for cell reselection is set to normal */
#define CBA_2_BARRED                   (0x1)      /* Status for cell reselection is set to barred */

/*
 * Value constants for VAL_exc_acc
 */
#define EXC_ACC_NORMAL                 (0x0)      /* Status for cell selection and reselection is set to normal */
#define EXC_ACC_LIMITED                (0x1)      /* The MS is only allowed to camp on the cell for limited service */

/*
 * Value constants for VAL_same_ra_as_serving_cell
 */
#define DIFFERENT_RA_AS_SCELL          (0x0)      /* The cell is in a routing area different from the serving cell */
#define SAME_RA_AS_SCELL               (0x1)      /* The cell is in the same routing area as the serving cell */

/*
 * Value constants for VAL_gprs_reselect_offset
 */
#define GPRS_RESEL_OFF_DEFAULT         (0x10)     /* Default value (0 dB)           */
#define GPRS_RESEL_OFF_INVALID         (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_gprs_rxlev_access_min
 */
#define GPRS_RXLEV_ACCESS_MIN_INVALID  (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_gprs_ms_txpwr_max_cch
 */
#define GPRS_MS_TXPWR_MAX_CCH_INVALID  (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_gprs_temporary_offset
 */
#define GPRS_TEMPORARY_OFFSET_INVALID  (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_gprs_penalty_time
 */
#define GPRS_PENALTY_TIME_INVALID      (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_priority_class
 */
#define GPRS_PRIORITY_CLASS_INVALID    (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_hcs_thr
 */
#define GPRS_HCS_THR_INVALID           (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_si13_location
 */
#define SI13_LOC_BCCH_NORM             (0x0)      /* SYSTEM INFORMATION TYPE 13 message is sent on BCCH norm */
#define SI13_LOC_BCCH_EXT              (0x1)      /* SYSTEM INFORMATION TYPE 13 message is sent on BCCH ext */
#define SI13_LOC_INVALID               (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_pbcch_location
 */
#define PBCCH_LOC_INVALID              (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_psi1_repeat_period
 */
#define PSI1_RPT_PRD_INVALID           (0xff)     /* This value is used to indicate the absence of this parameter */

/*
 * Value constants for VAL_nc_mode
 */
#define NC2_NOT_USED                   (0x0)      /* allow cell reselection         */
#define NC2_USED                       (0x1)      /* inhibit cell reselection       */
#define NC_MODE_RESET                  (0x2)      /* NC is reset to default         */

/*
 * Value constants for VAL_meas_cause
 */
#define NC_STOP_MEAS                   (0x0)      /*  Stop the meas report          */
#define NC_START_MEAS                  (0x1)      /* Start Averaging of measurements */
#define NC_REPORT_MEAS                 (0x2)      /* get the meas report from RR    */

/*
 * Value constants for VAL_sync_type
 */
#define SYNC_INITIAL                   (0x0)      /* Sync request for new carrier   */
#define SYNC_RECONFIRM                 (0x1)      /* Reconfirm 10 sec Timer Expired */

/*
 * Value constants for VAL_rep_rate
 */
#define NORMAL_REP_RATE                (0x0)      /* Normal(SACCH)reporting rate    */
#define REDUCED_REP_RATE               (0x1)      /* Reduced reporting rate         */

/*
 * Value constants for Val_inv_bsic
 */
#define INV_BSIC_REPORTING_DISABLED    (0x0)      /* Invalid BSIC reporting not enabled */
#define INV_BSIC_REPORTING_ENABLED     (0x1)      /* Invalid BSIC reporting not enabled */

/*
 * Value constants for Val_scale_ord
 */
#define SCALE_0dB                      (0x0)      /* Scaling by 0dB                 */
#define SCALE_10dB                     (0x1)      /* Scaling by 10dB                */
#define SCALE_AUTO                     (0x2)      /* Automatic scaling              */

// VALTAB-FF: REL99 AND TI_PS_FF_EMR 
// 
// Value constants for Val_nco
// 
// VAL-FF: REL99 AND TI_PS_FF_EMR  
// #define NCO_NC0                        (0x0)   /* Values Item                    */
// VAL-FF: REL99 AND TI_PS_FF_EMR  
// #define NCO_NC1                        (0x1)   /* Values Item                    */
// VAL-FF: REL99 AND TI_PS_FF_EMR  
// #define NCO_NC2                        (0x2)   /* Values Item                    */
// VAL-FF: REL99 AND TI_PS_FF_EMR  
// #define NCO_RESET                      (0x3)   /* Values Item                    */
// VAL-FF: REL99 AND TI_PS_FF_EMR  
// #define NCO_EMPTY                      (0x4)   /* Values Item                    */

/* 
 * enum to UnionController task 
 * CCDGEN:WriteEnum_Count==455
 */
#ifndef __T_ctrl_task__
#define __T_ctrl_task__
typedef enum
{
  RR_TASK_1                      = 0x0,           
  LEAVE_PIM_PBCCH                = 0x1,           
  LEAVE_PAM_PBCCH                = 0x2,           
  LEAVE_PTM_PBCCH                = 0x3            
}T_ctrl_task;
#endif

/*
 * user defined constants
 */
#define RRGRR_MAX_ARFCN_NCELL_SYNC_REQ (0xc)      
#define RRGRR_MAX_ARFCN_EXT_MEAS       (0x40)     
// CONST-FF: !REL99 OR !TI_PS_FF_EMR  
#define RRGRR_MEAS_REP_LIST_SIZE       (0x7)      
#define RRGRR_BA_LIST_SIZE             (0x20)     
#define SIZE_MCC                       (0x3)      
#define SIZE_MNC                       (0x3)      
// CONST-FF: REL99 AND TI_PS_FF_EMR  
// #define RRGRR_MAX_RSLT_NCELL_SYNC_IND  (0xc)   
// CONST-FF: !REL99 OR !TI_PS_FF_EMR  
#define RRGRR_MAX_RSLT_NCELL_SYNC_IND  (0x6)      
// CONST-FF: REL99 AND TI_PS_FF_EMR  
// #define RRGRR_MEAS_REP_LIST_SIZE       (0x21)  
#define MAX_NUM_OF_RTD_VALUES          (0x3)      

#include "CDG_LEAVE.h"


#endif