FreeCalypso > hg > fc-magnetite
view src/g23m-gsm/mm/mm_pei.c @ 638:cab2f315827e
FFS dev.c: added Spansion PL032J to the "generic" table
With the discovery of first GTM900 and then Tango, it now appears that
Openmoko was not the only manuf after all who kept TI's TCS211 firmware
largely intact (as opposed to changing it beyond all recognition like
Compal, Chi-Mei and BenQ did), thus we are now getting new "alien" targets
on which we reuse the original manuf's FFS with IMEI and RF calibration
tables as if it were native. On these targets we use the original
device table for FFS, even though we previously thought that it would
never apply to any target other than dsample, leonardo and gtamodem.
We have previously added Samsung K5L33xxCAM (a new kind of multi-ID device)
to the generic table to support its use in Huawei GTM900-B modules; now
we got news that some slightly older GTM900-B specimen used S71PL032J
instead, so we are now adding PL032J as well.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 30 Jan 2020 17:45:48 +0000 |
parents | 27a4235405c6 |
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 : This module implements the process body interface | for the entity MM of the mobile station. +----------------------------------------------------------------------------- */ #ifndef MM_PEI_C #define MM_PEI_C #define ENTITY_MM /*==== INCLUDES ===================================================*/ #if defined (NEW_FRAME) #include <string.h> #include <stdlib.h> #include <stddef.h> #include "typedefs.h" #include "pcm.h" #include "pconst.cdg" #include "mconst.cdg" #include "message.h" #include "ccdapi.h" #include "vsi.h" #include "custom.h" #include "gsm.h" #include "prim.h" #include "cnf_mm.h" #include "mon_mm.h" #include "pei.h" #include "tok.h" #include "mm.h" #include "mm_em.h" #else #include <string.h> #include <stdlib.h> #include <stddef.h> #include "stddefs.h" #include "pcm.h" #include "pconst.cdg" #include "mconst.cdg" #include "message.h" #include "ccdapi.h" #include "custom.h" #include "gsm.h" #include "prim.h" #include "cnf_mm.h" #include "mon_mm.h" #include "vsi.h" #include "pei.h" #include "tok.h" #include "mm.h" #include "mm_em.h" #endif /*==== TEST =====================================================*/ /*==== EXPORT =====================================================*/ #if defined (NEW_FRAME) #ifdef TI_PS_HCOMM_CHANGE #else GLOBAL T_HANDLE hCommMMI = VSI_ERROR; /* MMI Communication */ GLOBAL T_HANDLE hCommCC = VSI_ERROR; /* CC Communication */ GLOBAL T_HANDLE hCommSS = VSI_ERROR; /* SS Communication */ GLOBAL T_HANDLE hCommSMS = VSI_ERROR; /* SMS Communication */ GLOBAL T_HANDLE hCommSIM = VSI_ERROR; /* SIM Communication */ GLOBAL T_HANDLE hCommDL = VSI_ERROR; /* DL Communication */ GLOBAL T_HANDLE hCommRR = VSI_ERROR; /* RR Communication */ #endif /* TI_PS_HCOMM_CHANGE */ #ifdef GPRS GLOBAL T_HANDLE hCommGMM = VSI_ERROR; /* GMM Communication */ #endif GLOBAL T_HANDLE mm_handle; #else #ifdef TI_PS_HCOMM_CHANGE #else GLOBAL T_VSI_CHANDLE hCommMMI = VSI_ERROR; /* MMI Communication */ GLOBAL T_VSI_CHANDLE hCommCC = VSI_ERROR; /* CC Communication */ GLOBAL T_VSI_CHANDLE hCommSS = VSI_ERROR; /* SS Communication */ GLOBAL T_VSI_CHANDLE hCommSMS = VSI_ERROR; /* SMS Communication */ GLOBAL T_VSI_CHANDLE hCommSIM = VSI_ERROR; /* SIM Communication */ GLOBAL T_VSI_CHANDLE hCommDL = VSI_ERROR; /* DL Communication */ GLOBAL T_VSI_CHANDLE hCommRR = VSI_ERROR; /* RR Communication */ #endif /* TI_PS_HCOMM_CHANGE */ GLOBAL T_VSI_THANDLE mm_act_handle = VSI_ERROR; #endif /* NEW_FRAME */ T_MM_DATA mm_data_base; /*==== PRIVATE ====================================================*/ LOCAL void pei_not_supported (void *); /*==== VARIABLES ==================================================*/ #ifdef _SIMULATION_ LOCAL BOOL first_access = TRUE; #endif /* _SIMULATION_ */ LOCAL T_MONITOR mm_mon; /*==== FUNCTIONS ==================================================*/ #ifdef GPRS LOCAL const T_FUNC mmgmm_table[] = { MAK_FUNC_0 (mm_mmgmm_reg_req , MMGMM_REG_REQ ), /* 0x00 */ MAK_FUNC_0 (mm_mmgmm_nreg_req , MMGMM_NREG_REQ ), /* 0x01 */ MAK_FUNC_0 (mm_mmgmm_net_req , MMGMM_NET_REQ ), /* 0x02 */ MAK_FUNC_0 (mm_mmgmm_plmn_res , MMGMM_PLMN_RES ), /* 0x03 */ MAK_FUNC_0 (mm_mmgmm_plmn_mode_req , MMGMM_PLMN_MODE_REQ ), /* 0x04 */ MAK_FUNC_0 (mm_mmgmm_auth_rej_req , MMGMM_AUTH_REJ_REQ ), /* 0x05 */ MAK_FUNC_0 (mm_mmgmm_cm_establish_res,MMGMM_CM_ESTABLISH_RES), /* 0x06 */ MAK_FUNC_0 (mm_mmgmm_attach_started_req, MMGMM_ATTACH_STARTED_REQ), MAK_FUNC_0 (mm_mmgmm_attach_acc_req, MMGMM_ATTACH_ACC_REQ ), /* 0x08 */ MAK_FUNC_0 (mm_mmgmm_attach_rej_req, MMGMM_ATTACH_REJ_REQ ), /* 0x09 */ MAK_FUNC_0 (mm_mmgmm_detach_started_req, MMGMM_DETACH_STARTED_REQ), MAK_FUNC_0 (mm_mmgmm_start_t3212_req, MMGMM_START_T3212_REQ ), /* 0x0b */ MAK_FUNC_0 (mm_mmgmm_cm_emergency_res,MMGMM_CM_EMERGENCY_RES), /* 0x0c */ MAK_FUNC_0 (mm_mmgmm_allowed_req , MMGMM_ALLOWED_REQ ), /* 0x0d */ MAK_FUNC_0 (pei_not_supported , MMGMM_TRIGGER_REQ ) /* 0x0e */ }; #else LOCAL const T_FUNC mmreg_table[] = { MAK_FUNC_0 (reg_mmr_reg_req , MMR_REG_REQ ), MAK_FUNC_0 (reg_mmr_nreg_req , MMR_NREG_REQ ), MAK_FUNC_0 (reg_mmr_net_req , MMR_NET_REQ ), MAK_FUNC_0 (reg_mmr_plmn_res , MMR_PLMN_RES ), MAK_FUNC_0 (reg_mmr_plmn_mode_req , MMR_PLMN_MODE_REQ ) }; #endif LOCAL const T_FUNC mmcm_table[] = { MAK_FUNC_0 (mm_mmcm_establish_req , MMCM_ESTABLISH_REQ ), /* 0x00 */ MAK_FUNC_S (mm_mmcm_data_req , MMCM_DATA_REQ ), /* 0x01 */ MAK_FUNC_0 (mm_mmcm_release_req , MMCM_RELEASE_REQ ), /* 0x02 */ MAK_FUNC_0 (mm_mmcm_reestablish_req, MMCM_REESTABLISH_REQ ), /* 0x03 */ MAK_FUNC_0 (mm_mmcm_prompt_res , MMCM_PROMPT_RES ), /* 0x04 */ MAK_FUNC_0 (mm_mmcm_prompt_rej , MMCM_PROMPT_REJ ) /* 0x05 */ }; LOCAL const T_FUNC mmss_table[] = { MAK_FUNC_0 (mm_mmss_establish_req , MMSS_ESTABLISH_REQ ), MAK_FUNC_0 (mm_mmss_release_req , MMSS_RELEASE_REQ ), MAK_FUNC_S (mm_mmss_data_req , MMSS_DATA_REQ ) }; LOCAL const T_FUNC mmsms_table[] = { MAK_FUNC_0 (mm_mmsms_establish_req , MMSMS_ESTABLISH_REQ ), MAK_FUNC_0 (mm_mmsms_release_req , MMSMS_RELEASE_REQ ), MAK_FUNC_S (mm_mmsms_data_req , MMSMS_DATA_REQ ) }; LOCAL const T_FUNC sim_table[] = { MAK_FUNC_0 (reg_sim_read_cnf , SIM_READ_CNF ), /* 0x00 */ MAK_FUNC_0 (pei_not_supported , SIM_UPDATE_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_READ_RECORD_CNF ), MAK_FUNC_N (pei_not_supported , 0 ), MAK_FUNC_0 (pei_not_supported , SIM_UPDATE_RECORD_CNF ), MAK_FUNC_N (pei_not_supported , 0 ), MAK_FUNC_N (pei_not_supported , 0 ), MAK_FUNC_N (pei_not_supported , 0 ), MAK_FUNC_0 (pei_not_supported , SIM_INCREMENT_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_VERIFY_PIN_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_CHANGE_PIN_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_DISABLE_PIN_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_ENABLE_PIN_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_UNBLOCK_CNF ), MAK_FUNC_0 (reg_sim_auth_cnf , SIM_AUTHENTICATION_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_MMI_INSERT_IND ), MAK_FUNC_0 (reg_sim_mm_insert_ind , SIM_MM_INSERT_IND ), MAK_FUNC_0 (reg_sim_remove_ind , SIM_REMOVE_IND ), MAK_FUNC_0 (reg_sim_sync_cnf , SIM_SYNC_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_ACTIVATE_CNF ), MAK_FUNC_0 (pei_not_supported , SIM_SMS_INSERT_IND ), /* 0x14 */ MAK_FUNC_0 (pei_not_supported , SIM_TOOLKIT_IND ), /* 0x15 */ MAK_FUNC_0 (pei_not_supported , SIM_TOOLKIT_CNF ), /* 0x16 */ MAK_FUNC_0 (pei_not_supported , SIM_ACTIVATE_IND ), /* 0x17 */ MAK_FUNC_0 (reg_sim_mm_info_ind , SIM_MM_INFO_IND ), /* 0x18 */ MAK_FUNC_0 (pei_not_supported , SIM_ACCESS_CNF ), /* 0x19 */ MAK_FUNC_0 (reg_sim_file_upd_ind , SIM_FILE_UPDATE_IND ) /* 0x1a */ }; #ifdef FF_EM_MODE LOCAL const T_FUNC em_ul_table[] = { MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E00 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E01 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E02 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E03 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E04 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E05 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E06 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E07 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E08 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E09 */ MAK_FUNC_0 (mm_em_dl_event_req , EM_DL_EVENT_REQ ), /* 0x3E0A */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E0B */ MAK_FUNC_0 (mm_em_mm_event_req , EM_MM_EVENT_REQ ) /* 0x3E0C */ }; LOCAL const T_FUNC em_dl_table[] = { MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E00 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E01 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E02 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E03 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E04 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E05 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E06 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E07 */ MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E08 */ MAK_FUNC_N( pei_not_supported , 0 ), /* 0x7E09 */ MAK_FUNC_N( pei_not_supported , 0 ), /* 0x7E0A */ MAK_FUNC_0( pei_not_supported , EM_DATA_IND ), /* 0x7E0B */ }; #endif /* FF_EM_MODE */ LOCAL const T_FUNC rr_table[] = { MAK_FUNC_0 (mm_rr_abort_ind , RR_ABORT_IND ), MAK_FUNC_0 (mm_rr_activate_cnf , RR_ACTIVATE_CNF ), MAK_FUNC_0 (mm_rr_activate_ind , RR_ACTIVATE_IND ), MAK_FUNC_S (for_rr_data_ind , RR_DATA_IND ), MAK_FUNC_0 (mm_rr_establish_cnf , RR_ESTABLISH_CNF ), MAK_FUNC_0 (mm_rr_establish_ind , RR_ESTABLISH_IND ), MAK_FUNC_N (pei_not_supported , 0 ), MAK_FUNC_0 (mm_rr_release_ind , RR_RELEASE_IND ), MAK_FUNC_0 (mm_rr_sync_ind , RR_SYNC_IND ) #if defined (FF_EOTD) AND defined (REL99) , MAK_FUNC_0 (mm_rr_rrlp_start_ind , RR_RRLP_START_IND ), MAK_FUNC_0 (mm_rr_rrlp_stop_ind , RR_RRLP_STOP_IND ) #else , MAK_FUNC_N (pei_not_supported , 0 ), MAK_FUNC_N (pei_not_supported , 0 ) #endif /* (FF_EOTD) AND defined (REL99) */ }; LOCAL const T_FUNC mdl_table[] = { MAK_FUNC_0 (mm_mdl_error_ind , MDL_ERROR_IND ) }; /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : pei_primitive | +--------------------------------------------------------------------+ PURPOSE : Process protocol specific primitive. */ #if defined (NEW_FRAME) LOCAL SHORT pei_primitive (void * ptr) #else GLOBAL T_PEI_RETURN pei_primitive (T_PRIM * prim) #endif { GET_INSTANCE_DATA; #if defined (NEW_FRAME) T_PRIM *prim = ptr; #endif /* * | | | | | * MMREG MMCM MMSS MMSMS EM UPLINK * | | | | | * +---v-----v-----v-----v-----v---+ * | | * | MM | * | | * +---^---------^--------^--------+ * | | | * SIM RR MDL DOWNLINK * | | | * */ TRACE_FUNCTION ("pei_primitive()"); if (prim NEQ NULL) { ULONG opc = prim->custom.opc; USHORT n; const T_FUNC *table; #if defined (NEW_FRAME) VSI_PPM_REC ((T_PRIM_HEADER*)prim, __FILE__, __LINE__); #endif PTRACE_IN (opc); switch (SAP_NR(opc)) { case SAP_NR(MMCM_UL): table = mmcm_table; n = TAB_SIZE ( mmcm_table); break; case SAP_NR(MMSS_UL): table = mmss_table; n = TAB_SIZE ( mmss_table); break; case SAP_NR(MMSMS_UL): table = mmsms_table; n = TAB_SIZE (mmsms_table); break; case SAP_NR(SIM_UL): table = sim_table; n = TAB_SIZE ( sim_table); break; #ifdef FF_EM_MODE case EM_Ul: table = em_ul_table; n = TAB_SIZE (em_ul_table); break; #endif /* FF_EM_MODE */ case SAP_NR(RR_DL): table = rr_table; n = TAB_SIZE ( rr_table); break; case SAP_NR(MDL_UL): table = mdl_table; n = TAB_SIZE ( mdl_table); break; #ifdef GPRS case MMGMM_UL: table = mmgmm_table; n = TAB_SIZE (mmgmm_table); break; #else case SAP_NR(MMREG_UL): table = mmreg_table; n = TAB_SIZE (mmreg_table); break; #endif #ifdef FF_EM_MODE case EM_Dl: table = em_dl_table; n = TAB_SIZE (em_dl_table); break; #endif /* FF_EM_MODE */ default : table = NULL; n = 0; break; } if (table != NULL ) { if (PRIM_NR(opc) < n) { table += PRIM_NR(opc); #ifdef PALLOC_TRANSITION P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0; #ifndef NO_COPY_ROUTING P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER); #endif /* NO_COPY_ROUTING */ #endif /* PALLOC_TRANSITION */ JUMP (table->func) (P2D(prim)); while (ENTITY_DATA->use_stored_entries) { ENTITY_DATA->use_stored_entries = FALSE; mm_use_entry(); } } else { pei_not_supported (P2D(prim)); } return PEI_OK; } #ifdef GSM_ONLY PFREE (P2D(prim)) return PEI_ERROR; #else if (opc & SYS_MASK) vsi_c_primitive (VSI_CALLER prim); else { PFREE (P2D(prim)) return PEI_ERROR; } #endif } return PEI_OK; } #if defined (NEW_FRAME) /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : mm_pei_primitive | +--------------------------------------------------------------------+ PURPOSE : used to restart a stored primitive. */ GLOBAL void mm_pei_primitive (T_PRIM * prim) { pei_primitive (prim); } #endif /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (8410) MODULE : SMS_PEI | | STATE : code ROUTINE : pei_not_supported | +--------------------------------------------------------------------+ PURPOSE : An unsupported primitive is received. */ static void pei_not_supported (void *data) { TRACE_FUNCTION ("pei_not_supported()"); PFREE (data); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : pei_init | +--------------------------------------------------------------------+ PURPOSE : Initialize Protocol Stack Entity */ #if defined (NEW_FRAME) LOCAL SHORT pei_init (T_HANDLE handle) #else GLOBAL T_PEI_RETURN pei_init (void) #endif { #if defined (NEW_FRAME) mm_handle = handle; #endif TRACE_FUNCTION ("pei_init()"); #ifdef TI_PS_HCOMM_CHANGE if (!cl_hcom_all_handles_open()) { return PEI_ERROR; } #else /* for hCommHandles backward compatibility */ if (hCommMMI < VSI_OK) { /* * Open MMI (Layer 4) */ if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommCC < VSI_OK) { if ((hCommCC = vsi_c_open (VSI_CALLER CC_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommSS < VSI_OK) { if ((hCommSS = vsi_c_open (VSI_CALLER SS_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommSMS < VSI_OK) { if ((hCommSMS = vsi_c_open (VSI_CALLER SMS_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommRR < VSI_OK) { if ((hCommRR = vsi_c_open (VSI_CALLER RR_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommDL < VSI_OK) { if ((hCommDL = vsi_c_open (VSI_CALLER DL_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommSIM < VSI_OK) { if ((hCommSIM = vsi_c_open (VSI_CALLER SIM_NAME)) < VSI_OK) return PEI_ERROR; } #endif /* TI_PS_HCOMM_CHANGE */ #ifdef GPRS if (hCommGMM < VSI_OK) { if ((hCommGMM = vsi_c_open (VSI_CALLER GMM_NAME)) < VSI_OK) return PEI_ERROR; } #endif /* * Open Timer Resources */ mm_init_mm_data (); #ifdef FF_EM_MODE em_init_mm_event_trace(); #endif /* FF_EM_MODE */ #if defined (OPTION_TIMER) tim_init_timer (); #endif ccd_init (); return PEI_OK; } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : pei_timeout | +--------------------------------------------------------------------+ PURPOSE : Process timeout */ #if defined (NEW_FRAME) LOCAL SHORT pei_timeout (USHORT index) { GET_INSTANCE_DATA; tim_exec_timeout (index); while (ENTITY_DATA->use_stored_entries) { ENTITY_DATA->use_stored_entries = FALSE; mm_use_entry(); } return PEI_OK; } #else GLOBAL T_PEI_RETURN pei_timeout (T_VSI_THANDLE handle) { /* * Set Timeout Flag according * to timer handle */ if (mm_act_handle NEQ handle) tim_set_timeout_flag (handle, &t_flag); #ifdef OPTION_TIMEOUT_SYNC while (t_flag) { /* * Handle Timeouts */ tim_handle_timeout (&t_flag); } #else vsi_c_awake (VSI_CALLER_SINGLE); #endif while (ENTITY_DATA->use_stored_entries) { ENTITY_DATA->use_stored_entries = FALSE; mm_use_entry(); } return PEI_OK; } #endif #ifdef _SIMULATION_ /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : pei_exit | +--------------------------------------------------------------------+ PURPOSE : Close Resources and terminate */ #if defined (NEW_FRAME) LOCAL SHORT pei_exit (void) #else GLOBAL T_PEI_RETURN pei_exit (void) #endif { TRACE_FUNCTION ("pei_exit()"); /* * clean up communication */ #ifdef TI_PS_HCOMM_CHANGE #else /* for hCommHandles backward compatibility */ vsi_c_close (VSI_CALLER hCommMMI); hCommMMI = VSI_ERROR; vsi_c_close (VSI_CALLER hCommCC); hCommCC = VSI_ERROR; vsi_c_close (VSI_CALLER hCommSS); hCommSS = VSI_ERROR; vsi_c_close (VSI_CALLER hCommSMS); hCommSMS = VSI_ERROR; vsi_c_close (VSI_CALLER hCommRR); hCommRR = VSI_ERROR; vsi_c_close (VSI_CALLER hCommDL); hCommDL = VSI_ERROR; vsi_c_close (VSI_CALLER hCommSIM); hCommSIM = VSI_ERROR; #endif /* TI_PS_HCOMM_CHANGE */ #ifdef GPRS vsi_c_close (VSI_CALLER hCommGMM); hCommGMM = VSI_ERROR; #endif return PEI_OK; } #endif /* _SIMULATION_ */ /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : pei_config | +--------------------------------------------------------------------+ PURPOSE : Dynamic Configuration */ /* Implements Measure#36 */ #if !defined (NCONFIG) LOCAL const KW_DATA kwtab[] = { #ifdef OPTION_TIMER MM_TIMER_SET, TIMER_SET, MM_TIMER_RESET, TIMER_RESET, MM_TIMER_SPEED_UP, TIMER_SPEED_UP, MM_TIMER_SLOW_DOWN, TIMER_SLOW_DOWN, MM_TIMER_SUPPRESS, TIMER_SUPPRESS, #endif MM_T3212_CNT, T3212_CNT, MM_USE_STORED_BCCH, USE_STORED_BCCH, MM_FFS_RESET_EPLMN, FFS_RESET_EPLMN, MM_FFS_READ_EPLMN, FFS_READ_EPLMN, MM_FFS_READ_EPLMN_INIT, FFS_READ_EPLMN_INIT, MM_FFS_WRITE_EPLMN, FFS_WRITE_EPLMN, "", 0 }; #endif /* (NCONFIG) */ GLOBAL const KW_DATA partab[] = { #ifdef OPTION_TIMER T_REG_NAME, T_REGISTRATION, T3210_NAME, T3210, T3211_NAME, T3211, T3212_NAME, T3212, T3213_NAME, T3213, T3220_NAME, T3220, T3230_NAME, T3230, T3240_NAME, T3240, T_HPLMN_NAME, T_HPLMN, #ifdef REL99 T3241_NAME, T3241, #endif #endif "", 0 }; /* Implements Measure#36 */ #if !defined (NCONFIG) #if defined (NEW_FRAME) LOCAL SHORT pei_config (T_PEI_CONFIG inString) #else GLOBAL T_PEI_RETURN pei_config (T_PEI_CONFIG inString, T_PEI_CONFIG outString) #endif { GET_INSTANCE_DATA; { char * s = inString; SHORT valno; SHORT keyno; char * keyw; char * val [10]; #if defined (OPTION_TIMER) BOOL t_man = FALSE; SHORT t_num; LONG t_val; UBYTE t_mod; #endif /* #if defined (OPTION_TIMER) */ TRACE_FUNCTION ("pei_config()"); TRACE_EVENT (s); #if defined TM_SPECIAL if (!strcmp (inString, "RESET_2")) { /* * Hardware Reset */ csf_hardware_reset_2 (); return PEI_OK; } if (!strcmp (inString, "RESET_3")) { /* * Init RF */ csf_hardware_reset_3 (); return PEI_OK; } #endif /* #if defined TM_SPECIAL */ tok_init(s); /* * Parse next keyword and number of variables */ while ((valno = tok_next(&keyw,val)) != TOK_EOCS) { switch ((keyno = tok_key((KW_DATA *)kwtab,keyw))) { case TOK_NOT_FOUND: TRACE_ERROR ("[PEI_CONFIG]: Illegal Keyword"); break; #if defined (OPTION_TIMER) case TIMER_SET: if (valno EQ 2) { t_man = TRUE; t_num = tok_key((KW_DATA *)partab,val[0]); t_mod = TIMER_SET; t_val = atoi(val[1]); if (t_val < 0L) t_val = 0L; } else { TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); } break; case TIMER_RESET: case TIMER_SUPPRESS: if (valno == 1) { t_man = TRUE; /* Timermanipulation */ t_num = tok_key((KW_DATA *)partab,val[0]); t_mod = (UBYTE)keyno; t_val = 0L; } else { TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); } break; case TIMER_SPEED_UP: case TIMER_SLOW_DOWN: if (valno == 2) { t_man = TRUE; t_num = tok_key((KW_DATA *)partab,val[0]); t_mod = (UBYTE)keyno; t_val = atoi(val[1]); if (t_val <= 0L) t_val = 1L; } else { TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); } break; #endif /* #if defined (OPTION_TIMER) */ case T3212_CNT: if (valno == 1) mm_data->t3212_cfg_counter = atoi(val[0]); else { TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); } break; case USE_STORED_BCCH: mm_data->config_use_stored_bcch = TRUE; TRACE_EVENT ("MS uses stored BCCH lists also with test SIM"); break; case FFS_RESET_EPLMN: mm_reset_ffs(); break; case FFS_READ_EPLMN: mm_read_ffs(); mm_display_eplmn(); break; case FFS_READ_EPLMN_INIT: mm_read_ffs_init(); break; case FFS_WRITE_EPLMN: { UBYTE samplelist[18] ={'S','A','M','P','L','E',' ','L','I','S','T',' ','E','P','L','M','N'}; memcpy(mm_data->reg.eqv_plmns.eqv_plmn_list, samplelist, 18); mm_write_eplmn_to_ffs(); } break; default: break; } /* switch */ #if defined (OPTION_TIMER) /* * If timer manipulation */ if (t_man) { t_man = FALSE; /*lint -e644 variable may not have been initialized*/ if (t_num >= 0) tim_config_timer ( (UBYTE) t_num, t_mod, t_val); else { TRACE_ERROR ("[PEI_CONFIG]: Parameter out of Range"); } /*lint +e644 variable may not have been initialized*/ } /* if (t_man) */ #endif /* #if defined (OPTION_TIMER) */ } /* while */ } return PEI_OK; } #endif /* (NCONFIG) */ #if defined (NEW_FRAME) /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : mm_pei_config | +--------------------------------------------------------------------+ PURPOSE : Dynamic Configuration */ /* Implements Measure#36 */ #if !defined (NCONFIG) GLOBAL SHORT mm_pei_config ( char * inString, char * dummy ) { pei_config ( inString ); return PEI_OK; } #endif /* (NCONFIG) */ #endif /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : pei_monitor | +--------------------------------------------------------------------+ PURPOSE : Monitoring of physical Parameters */ #if defined (NEW_FRAME) LOCAL SHORT pei_monitor (void ** monitor) #else GLOBAL T_PEI_RETURN pei_monitor (void ** monitor) #endif { TRACE_FUNCTION ("pei_monitor()"); /* Implements Measure#32: Row 76 */ *monitor = &mm_mon; return PEI_OK; } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : MM_PEI | | STATE : code ROUTINE : pei_create | +--------------------------------------------------------------------+ PURPOSE : Create the Protocol Stack Entity */ #if defined (NEW_FRAME) GLOBAL SHORT mm_pei_create (T_PEI_INFO **info) { static const T_PEI_INFO pei_info = { "MM", { pei_init, #ifdef _SIMULATION_ pei_exit, #else NULL, #endif pei_primitive, pei_timeout, NULL, /* no signal function */ NULL, /* no run function */ /* Implements Measure#36 */ #if defined(NCONFIG) NULL, /* no pei_config function */ #else /* not (NCONFIG) */ pei_config, #endif /* (NCONFIG) */ pei_monitor, }, 1024, /* Stack Size */ 10, /* Queue Entries */ 195, /* Priority */ NUM_OF_MM_TIMERS, /* number of timer */ PASSIVE_BODY|COPY_BY_REF|PRIM_NO_SUSPEND /* flags */ }; TRACE_FUNCTION ("pei_create()"); /* * Close Resources if open */ #ifdef _SIMULATION_ if (first_access) first_access = FALSE; else pei_exit (); #endif /* * Export startup configuration data */ *info = (T_PEI_INFO *)&pei_info; pcm_Init (); return PEI_OK; } #else T_PEI_RETURN pei_create (T_VSI_CNAME * name) { TRACE_FUNCTION ("pei_create()") /* * Close Resources if open */ #ifdef _SIMULATION_ if (first_access) first_access = FALSE; else pei_exit (); #endif /* * Initialize entity data */ *name = MM_NAME; pcm_Init (); return PEI_OK; } #endif #endif