view cdg-hybrid/cdginc/p_mmcm.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_mmcm.val                                                     |
| SOURCE  : "sap\mmcm.pdf"                                                 |
| LastModified : "2004-02-12"                                              |
| IdAndVersion : "6147.104.97.103"                                         |
| SrcFileTime  : "Thu Nov 29 09:45:56 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                 : MMCM
 * COMPATIBILITY_DEFINES  : NO
 * ALWAYS_ENUM_IN_VAL_FILE: NO
 * ENABLE_GROUP: NO
 * CAPITALIZE_TYPENAME: NO
 */


#ifndef P_MMCM_VAL
#define P_MMCM_VAL


#define CDG_ENTER__P_MMCM_VAL

#define CDG_ENTER__FILENAME _P_MMCM_VAL
#define CDG_ENTER__P_MMCM_VAL__FILE_TYPE CDGINC
#define CDG_ENTER__P_MMCM_VAL__LAST_MODIFIED _2004_02_12
#define CDG_ENTER__P_MMCM_VAL__ID_AND_VERSION _6147_104_97_103

#define CDG_ENTER__P_MMCM_VAL__SRC_FILE_TIME _Thu_Nov_29_09_45_56_2007

#include "CDG_ENTER.h"

#undef CDG_ENTER__P_MMCM_VAL

#undef CDG_ENTER__FILENAME


/*
 * Value constants for VAL_ch_mode
 */
#define MMCM_CHM_SIG_ONLY              (0x0)      /* signalling only                */
#define MMCM_CHM_SPEECH                (0x1)      /* speech full rate or half rate version 1 */
#define MMCM_CHM_SPEECH_V2             (0x21)     /* speech full rate or half rate version 2 */
#define MMCM_CHM_SPEECH_V3             (0x41)     /* speech full rate or half rate version 3 */
#define MMCM_CHM_DATA_9_6              (0x3)      /* data 9.6 kBit/s                */
#define MMCM_CHM_DATA_4_8              (0xb)      /* data 4.8 kBit/s                */
#define MMCM_CHM_DATA_2_4              (0x13)     /* data 2.4 kBit/s                */
#define MMCM_CHM_DATA_14_4             (0xf)      /* data 2.4 kBit/s                */

/*
 * Value constants for VAL_ch_type
 */
#define MMCM_CH_SDCCH                  (0x0)      /* SDCCH channel                  */
#define MMCM_CH_TCH_F                  (0x1)      /* TCH Fullrate                   */
#define MMCM_CH_TCH_H                  (0x2)      /* TCH Halfrate                   */

/*
 * Value constants for VAL_estcs
 */
#define MMCM_ESTCS_SERV_REQ_MM         (0x400)    /* service requested by MM (Location updating or detach) */
#define MMCM_ESTCS_EMERGE              (0x4a0)    /* emergency call                 */
#define MMCM_ESTCS_CAL_REEST           (0x4c0)    /* call reestablishment           */
#define MMCM_ESTCS_MOB_ORIG_SPCH       (0x4e0)    /* mobile originated speech call by CC */
#define MMCM_ESTCS_MOB_ORIG_DATA       (0x4e1)    /* mobile originated data call by CC */
#define MMCM_ESTCS_MOB_ORIG_DATA_HR_SUFF (0x4e2)  /* mobile originated data call by CC, halfrate channel sufficient */

/*
 * Value constants for VAL_cause
 */
#define MMCM_MMCS_IMSI_IN_HLR          (0x402)    /* IMSI unknown in HLR            */
#define MMCM_MMCS_ILLEGAL_MS           (0x403)    /* Illegal MS                     */
#define MMCM_MMCS_IMSI_IN_VLR          (0x404)    /* IMSI unknown in VLR            */
#define MMCM_MMCS_IMEI_NOT_ACCEPTED    (0x405)    /* IMEI not accepted              */
#define MMCM_MMCS_ILLEGAL_ME           (0x406)    /* Illegal ME                     */
#define MMCM_MMCS_PLMN_NOT_ALLOWED     (0x40b)    /* PLMN not allowed               */
#define MMCM_MMCS_LA_NOT_ALLOWED       (0x40c)    /* Location Area not allowed      */
#define MMCM_MMCS_ROAMING_NOT_ALLOWED  (0x40d)    /* Roaming not allowed in this location area */
#define MMCM_MMCS_NETWORK_FAILURE      (0x411)    /* Network failure                */
#define MMCM_MMCS_CONGESTION           (0x416)    /* Congestion                     */
#define MMCM_MMCS_SERVICE_NOT_SUPPORTED (0x420)   /* Service option not supported   */
#define MMCM_MMCS_SERVICE_NOT_SUBSCRIBED (0x421)  /* Requested service option not subscribed */
#define MMCM_MMCS_SERVICE_ORDER        (0x422)    /* Service option temporarily out of order */
#define MMCM_MMCS_IDENTIFIY            (0x426)    /* Call cannot be identified      */
#define MMCM_MMCS_RETRY_IN_NEW_CELL    (0x430)    /* retry upon entry into a new cell (mapped 0x0430..0x043f -> 0x0430) */
#define MMCM_MMCS_INCORRECT_MESSAGE    (0x45f)    /* Semantically incorrect message */
#define MMCM_MMCS_INVALID_MAND_MESSAGE (0x460)    /* Invalid mandatory information  */
#define MMCM_MMCS_MESSAGE_TYPE_NOT_IMPLEM (0x461) /* Message type non-existent or not implemented */
#define MMCM_MMCS_MESSAGE_TYPE_INCOMPAT (0x462)   /* Message type not compatible with the protocol state */
#define MMCM_MMCS_IE_NOT_IMPLEM        (0x463)    /* Information element non-existent or not implemented */
#define MMCM_MMCS_CONDITIONAL_IE       (0x464)    /* Conditional IE error           */
#define MMCM_MMCS_MESSAGE_INCOMPAT     (0x465)    /* Message not compatible with the protocol state */
#define MMCM_MMCS_UNSPECIFIED          (0x46f)    /* Protocol error, unspecified    */
#define MMCM_MMCS_SUCCESS              (0xc400)   /* No error, successful operation (MM) */
#define MMCM_MMCS_NO_REGISTRATION      (0xc480)   /* MS is not registered or deregistration started */
#define MMCM_MMCS_TIMER_RECOVERY       (0xc481)   /* time-out in MM during establishment */
#define MMCM_MMCS_NO_REESTABLISH       (0xc482)   /* Cell does not support call reestablishment */
#define MMCM_MMCS_INT_PREEM            (0xc483)   /* Preemptive release, e.g. MO-MT clash in MM */
#define MMCM_MMCS_PLMN_NOT_IDLE_MODE   (0xc484)   /* reject, not in idle mode (MMR_PLMN_IND) */
#define MMCM_MMCS_AUTHENTICATION_REJECTED (0xc488)/* AUTHENTICATION REJECT received */
#define MMCM_MMCS_SIM_REMOVED          (0xc489)   /* A valid SIM is not present     */
#define MMCM_MMCS_INT_NOT_PRESENT      (0xc4ff)   /* No error cause (MM)            */

/*
 * Value constants for VAL_ti
 */
#define MMCM_VAL_TI___7                (0x7)      /* reserved                       */
#define MMCM_VAL_TI___F                (0xf)      /* reserved                       */

/*
 * Value constants for VAL_org_entity
 */
#define MMCM_ORG_ENTITY_CC             (0x0)      /* originating entity is CC       */
#define MMCM_ORG_ENTITY_SS             (0x1)      /* originating entity is SS       */
#define MMCM_ORG_ENTITY_SMS            (0x2)      /* originating entity is SMS      */

/*
 * user defined constants
 */
#define MMCM_MM_CAUSE                  (0x4)      
#define MMCM_TI_BERLIN                 (0x1)      

#include "CDG_LEAVE.h"


#endif