FreeCalypso > hg > fc-tourmaline
view src/g23m-gprs/grr/grr_pei.c @ 268:f2e52cab0a73
abb_inth.c: check all interrupt causes, not just one
The original code used if - else if - else if etc constructs, thus
the first detected interrupt was the only one handled. However,
Iota ITSTATREG is a clear-on-read register, thus if we only handle
the first detected interrupt and skip checking the others, then the
other interrupts will be lost, if more than one interrupt happened
to occur in one ABB interrupt handling cycle - a form of rare race
condition. Change the code to check all interrupts that were read
in this cycle.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 13 Jun 2021 18:17:53 +0000 |
parents | fa8dc04885d8 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GPRS (8441) | Modul : GRR +----------------------------------------------------------------------------- | 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 GPRS Radio Resource Management (GRR) | | Exported functions: | | pei_create - Create the Protocol Stack Entity | pei_init - Initialize Protocol Stack Entity | pei_primitive - Process Primitive | pei_timeout - Process Timeout | pei_exit - Close resources and terminate | pei_run - Process Primitive | pei_config - Dynamic Configuration | pei_monitor - Monitoring of physical Parameters |+----------------------------------------------------------------------------- */ #define GRR_PEI_C #define ENTITY_GRR /*==== INCLUDES =============================================================*/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stddef.h> /* to get definition of offsetof(), for MAK_FUNC_S */ #include "typedefs.h" /* to get Condat data types */ #include "vsi.h" /* to get a lot of macros */ #include "macdef.h" #include "gprs.h" #include "custom.h" /*FMM*/ /*set FF_EM_MODE compile switch for SIMULATION and define WAP_NAME*/ #include "gsm.h" /* to get a lot of macros */ #include "ccdapi.h" /* to get CCD API */ #include "cnf_grr.h" /* to get cnf-definitions */ #include "mon_grr.h" /* to get mon-definitions */ #include "prim.h" /* to get the definitions of used SAP and directions */ #include "message.h" #include "tok.h" #include "pcm.h" #include "grr.h" /* to get the global entity definitions */ #include "grr_f.h" #include "grr_gfpp.h" #include "grr_measp.h" #include "grr_csp.h" #include "grr_pgp.h" #include "grr_psip.h" #include "grr_tcp.h" #ifdef _SIMULATION_ #include "grr_meass.h" /* to get definition of meas_init() */ #endif /* #ifdef _SIMULATION_ */ #include "grr_cpapp.h" #include "grr_css.h" #include "grr_ctrlp.h" #include "grr_em.h" /*for Engineering mode*/ /*==== DEFINITIONS ==========================================================*/ #define GRR_TSTR_ILLEGAL_KEYW 0 #define GRR_TSTR_OK 1 /*==== TYPES ================================================================*/ /*==== GLOBAL VARS ==========================================================*/ /*==== LOCAL VARS ===========================================================*/ /* * Function is needed for grr_table[]. */ LOCAL SHORT pei_signal (ULONG opc, void *data); static BOOL first_access = TRUE; static T_MONITOR grr_mon; /* * Jumptables to primitive handler functions. One table per SAP. * * Use MAK_FUNC_0 for primitives which contains no SDU. * Use MAK_FUNC_S for primitives which contains a SDU. */ /* * Function is needed for grr_table[]. This declaration can be removed * as soon as this function is no more called (i.e. all primitives are * handled). */ LOCAL void primitive_not_supported (void *data); static const T_FUNC gmmrr_table[] = { MAK_FUNC_0(ctrl_gmmrr_assign_req, GMMRR_ASSIGN_REQ), MAK_FUNC_0(ctrl_gmmrr_enable_req, GMMRR_ENABLE_REQ), MAK_FUNC_0(ctrl_gmmrr_disable_req, GMMRR_DISABLE_REQ), MAK_FUNC_0(ctrl_gmmrr_ready_req, GMMRR_READY_REQ), MAK_FUNC_0(ctrl_gmmrr_standby_req, GMMRR_STANDBY_REQ), MAK_FUNC_0(ctrl_gmmrr_cs_page_res, GMMRR_CS_PAGE_RES), MAK_FUNC_0(ctrl_gmmrr_suspend_req, GMMRR_SUSPEND_REQ), MAK_FUNC_0(ctrl_gmmrr_resume_req, GMMRR_RESUME_REQ), MAK_FUNC_N(primitive_not_supported, 0), MAK_FUNC_N(primitive_not_supported, 0), MAK_FUNC_0(ctrl_gmmrr_attach_started_req, GMMRR_ATTACH_STARTED_REQ), MAK_FUNC_0(ctrl_gmmrr_attach_finished_req, GMMRR_ATTACH_FINISHED_REQ), MAK_FUNC_0(ctrl_gmmrr_cell_res, GMMRR_CELL_RES) }; static const T_FUNC cgrlc_table[] = { MAK_FUNC_0(tc_cgrlc_tbf_rel_ind, CGRLC_TBF_REL_IND), MAK_FUNC_0(tc_cgrlc_ul_tbf_ind, CGRLC_UL_TBF_IND), MAK_FUNC_0(gfp_cgrlc_data_ind, CGRLC_DATA_IND), MAK_FUNC_0(tc_cgrlc_ctrl_msg_sent_ind, CGRLC_CTRL_MSG_SENT_IND), MAK_FUNC_0(tc_cgrlc_starting_time_ind, CGRLC_STARTING_TIME_IND), MAK_FUNC_0(tc_cgrlc_t3192_started_ind, CGRLC_T3192_STARTED_IND), MAK_FUNC_0(tc_cgrlc_cont_res_done_ind, CGRLC_CONT_RES_DONE_IND), MAK_FUNC_0(tc_cgrlc_ta_value_ind, CGRLC_TA_VALUE_IND), MAK_FUNC_N(primitive_not_supported, 0), MAK_FUNC_N(primitive_not_supported, 0), MAK_FUNC_N(primitive_not_supported, 0), MAK_FUNC_0(ctrl_cgrlc_standby_state_ind, CGRLC_STANDBY_STATE_IND), MAK_FUNC_0(ctrl_cgrlc_ready_state_ind, CGRLC_READY_STATE_IND), MAK_FUNC_0(grr_cgrlc_pwr_ctrl_cnf, CGRLC_PWR_CTRL_CNF), MAK_FUNC_0(tc_cgrlc_test_mode_ind, CGRLC_TEST_MODE_IND) }; /* according to l1p_sign.h */ static const T_FUNC mphp_table[] = { MAK_FUNC_N(primitive_not_supported, 0), /*0*/ MAK_FUNC_N(primitive_not_supported, 0), /*1*/ MAK_FUNC_0(gfp_mphp_single_block_con, MPHP_SINGLE_BLOCK_CON), /*2*/ MAK_FUNC_N(primitive_not_supported, 0), /*3*/ MAK_FUNC_0(gfp_mphp_stop_single_block_con, MPHP_STOP_SINGLE_BLOCK_CON), /*4*/ MAK_FUNC_N(primitive_not_supported, 0), /*5*/ MAK_FUNC_N(primitive_not_supported, 0), /*6*/ MAK_FUNC_0(gfp_mphp_assignment_con, MPHP_ASSIGNMENT_CON), /*7*/ MAK_FUNC_N(primitive_not_supported, 0), /*8*/ MAK_FUNC_0(gfp_mphp_tbf_release_con, MPHP_TBF_RELEASE_CON), /*9*/ MAK_FUNC_N(primitive_not_supported, 0), /*10*/ MAK_FUNC_0(gfp_mphp_repeat_ul_fixed_alloc_con, MPHP_REPEAT_UL_FIXED_ALLOC_CON), /*11*/ MAK_FUNC_N(primitive_not_supported, 0), /*12*/ MAK_FUNC_0(gfp_mphp_pdch_release_con, MPHP_PDCH_RELEASE_CON), /*13*/ MAK_FUNC_N(primitive_not_supported, 0), /*14*/ MAK_FUNC_0(gfp_mphp_timing_advance_con, MPHP_TIMING_ADVANCE_CON), /*15*/ MAK_FUNC_N(primitive_not_supported, 0), /*16*/ MAK_FUNC_0(gfp_mphp_update_psi_param_con, MPHP_UPDATE_PSI_PARAM_CON), /*17*/ MAK_FUNC_N(primitive_not_supported, 0), /*18*/ MAK_FUNC_0(gfp_mphp_ra_con, MPHP_RA_CON), /*19*/ MAK_FUNC_N(primitive_not_supported, 0), /*20*/ MAK_FUNC_0(gfp_mphp_ra_stop_con, MPHP_RA_STOP_CON), /*21*/ MAK_FUNC_N(primitive_not_supported, 0), /*22*/ MAK_FUNC_0(gfp_mphp_polling_ind, MPHP_POLLING_IND), /*23*/ MAK_FUNC_N(primitive_not_supported, 0), /*24*/ MAK_FUNC_N(primitive_not_supported, 0), /*25*/ MAK_FUNC_N(primitive_not_supported, 0), /*26*/ MAK_FUNC_0(gfp_mphp_stop_pccch_con, MPHP_STOP_PCCCH_CON), /*27*/ MAK_FUNC_N(primitive_not_supported, 0), /*28*/ MAK_FUNC_N(primitive_not_supported, 0), /*29*/ MAK_FUNC_0(gfp_mphp_scell_pbcch_stop_con, MPHP_SCELL_PBCCH_STOP_CON), /*30*/ MAK_FUNC_N(primitive_not_supported, 0), /*31*/ MAK_FUNC_N(primitive_not_supported, 0), /*32*/ MAK_FUNC_0(gfp_mphp_cr_meas_stop_con, MPHP_CR_MEAS_STOP_CON), /*33*/ MAK_FUNC_N(primitive_not_supported, 0), /*34*/ MAK_FUNC_N(primitive_not_supported, 0), /*35*/ MAK_FUNC_0(gfp_mphp_int_meas_stop_con, MPHP_INT_MEAS_STOP_CON), /*36*/ MAK_FUNC_N(primitive_not_supported, 0), /*37*/ MAK_FUNC_N(primitive_not_supported, 0), /*38*/ MAK_FUNC_0(gfp_mphp_ncell_pbcch_stop_con, MPHP_NCELL_PBCCH_STOP_CON), /*39*/ MAK_FUNC_0(gfp_mphp_data_ind, MPHP_DATA_IND), /*40*/ MAK_FUNC_0(gfp_mphp_cr_meas_ind, MPHP_CR_MEAS_IND), /*41*/ MAK_FUNC_0(gfp_mphp_int_meas_ind, MPHP_INT_MEAS_IND), /*42*/ MAK_FUNC_0(gfp_mphp_tint_meas_ind, MPHP_TINT_MEAS_IND), /*43*/ MAK_FUNC_0(gfp_mphp_ncell_pbcch_ind, MPHP_NCELL_PBCCH_IND), /*44*/ MAK_FUNC_N(primitive_not_supported, 0), /*45*/ MAK_FUNC_0(gfp_mphp_tcr_meas_ind, MPHP_TCR_MEAS_IND) /*46*/ }; static const T_FUNC rrgrr_table[] = { MAK_FUNC_0(ctrl_rrgrr_gprs_si13_ind, RRGRR_GPRS_SI13_IND), /* 0 */ MAK_FUNC_N(primitive_not_supported, 0), /* 1: NOT USED */ MAK_FUNC_0(ctrl_rrgrr_packet_paging_ind, RRGRR_PACKET_PAGING_IND), /* 2 */ MAK_FUNC_0(ctrl_rrgrr_ia_ind, RRGRR_IA_IND), /* 3 */ MAK_FUNC_0(ctrl_rrgrr_iaext_ind, RRGRR_IAEXT_IND), /* 4 */ MAK_FUNC_0(ctrl_rrgrr_assignment_rej_ind, RRGRR_ASSIGNMENT_REJ_IND), /* 5 */ MAK_FUNC_0(ctrl_rrgrr_data_ind, RRGRR_DATA_IND), /* 6 */ MAK_FUNC_N(primitive_not_supported, RRGRR_RESUMED_TBF_CNF), /* 7 */ MAK_FUNC_0(ctrl_rrgrr_ia_downlink_ind, RRGRR_IA_DOWNLINK_IND), /* 8 */ MAK_FUNC_0(ctrl_rrgrr_stop_task_cnf, RRGRR_STOP_TASK_CNF), /* 9 */ MAK_FUNC_0(ctrl_rrgrr_ext_meas_cnf, RRGRR_EXT_MEAS_CNF), /* A */ MAK_FUNC_N(primitive_not_supported, 0), /* B */ MAK_FUNC_N(primitive_not_supported, 0), /* C */ MAK_FUNC_0(ctrl_rrgrr_rr_est_ind, RRGRR_RR_EST_IND), /* D */ MAK_FUNC_N(primitive_not_supported, 0), /* E */ MAK_FUNC_N(primitive_not_supported, 0), /* F: NOT USED */ MAK_FUNC_0(ctrl_rrgrr_suspend_dcch_cnf, RRGRR_SUSPEND_DCCH_CNF), /* 10 */ MAK_FUNC_0(ctrl_rrgrr_reconnect_dcch_cnf, RRGRR_RECONNECT_DCCH_CNF), /* 11 */ MAK_FUNC_0(ctrl_rrgrr_stop_dcch_ind, RRGRR_STOP_DCCH_IND), /* 12 */ MAK_FUNC_0(ctrl_rrgrr_cr_ind, RRGRR_CR_IND), /* 13 */ MAK_FUNC_N(primitive_not_supported, 0), /* 14: NOT USED */ MAK_FUNC_0(ctrl_rrgrr_check_bsic_ind, RRGRR_NCELL_SYNC_IND), /* 15 */ MAK_FUNC_0(ctrl_rrgrr_sync_ind, RRGRR_SYNC_IND), /* 16 */ MAK_FUNC_0(ctrl_rrgrr_meas_rep_cnf, RRGRR_MEAS_REP_CNF), /* 17 */ MAK_FUNC_N(primitive_not_supported, 0), /* 18: NOT USED */ MAK_FUNC_0(ctrl_rrgrr_ms_id_ind, RRGRR_MS_ID_IND), /* 19 */ MAK_FUNC_0(primitive_not_supported, RRGRR_START_TASK_CNF) /* 1A */ #if defined (REL99) AND defined (TI_PS_FF_EMR) , MAK_FUNC_0(ctrl_rrgrr_si2quater_ind, RRGRR_SI2QUATER_IND) /* 1B */ #endif }; static const T_FUNC tb_table[] = { MAK_FUNC_0(meas_tb_rxlev_sc_req, TB_RXLEV_SC_REQ) /*0*/ }; #ifdef FF_EM_MODE static const T_FUNC em_ul_table[] = { MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x00 */ MAK_FUNC_0(grr_em_sc_gprs_info_req, EM_SC_GPRS_INFO_REQ ), /* 0x01 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x02 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x03 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x04 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x05 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x06 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x07 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x08 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x09 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x0A */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x0B */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x0C */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x0D */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x0E */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x0F */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x10 */ MAK_FUNC_0(grr_em_pco_trace_req, EM_PCO_TRACE_REQ ), /* 0x11*/ /*PCO output*/ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x12 */ MAK_FUNC_0(grr_em_fmm_sc_gprs_info_req, EM_FMM_SC_GPRS_INFO_REQ), /* 0x13 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x14 */ MAK_FUNC_N(primitive_not_supported, 0 ), /* 0x15 */ MAK_FUNC_0(grr_em_fmm_tbf_info_req, EM_FMM_TBF_INFO_REQ ) /* 0x16 */ }; #endif /* FF_EM_MODE */ /*==== END DIAGNOSTICS ======================================================*/ /*==== PRIVATE FUNCTIONS ====================================================*/ /* +------------------------------------------------------------------------------ | Function : primitive_not_supported +------------------------------------------------------------------------------ | Description : This function handles unsupported primitives. | | Parameters : - | | Return : - | +------------------------------------------------------------------------------ */ LOCAL void primitive_not_supported (void *data) { TRACE_FUNCTION ("primitive_not_supported"); PFREE (data); } /*==== PUBLIC FUNCTIONS =====================================================*/ /* +------------------------------------------------------------------------------ | Function : pei_primitive +------------------------------------------------------------------------------ | Description : This function is called by the frame when a primitive is | received and needs to be processed. | | | | | GRR GMMRR UPLINK | | | | +------v-----------v-------+ | | | | | GRR <--RRGRR-- | | | | +--------------^------- ---+ | | | L1 DOWNLINK | | | | | Parameters : prim - Pointer to the received primitive | | Return : PEI_OK - function succeeded | PEI_ERROR - function failed | +------------------------------------------------------------------------------ */ LOCAL SHORT pei_primitive (void * primptr) { TRACE_FUNCTION ("pei_primitive"); if (primptr NEQ NULL) { T_PRIM *prim = (T_PRIM *)primptr; ULONG opc = prim->custom.opc; USHORT n; const T_FUNC *table; PTRACE_IN (opc); /* * This must be called for Partition Pool supervision. Will be replaced * by another macro some time. */ VSI_PPM_REC (&prim->custom, __FILE__, __LINE__); switch (SAP_NR(opc)) { case MPHP_DL: table = mphp_table; n = TAB_SIZE (mphp_table); break; case TB_DL: table = tb_table; n = TAB_SIZE (tb_table); break; case SAP_NR(CGRLC_DL): table = cgrlc_table; n = TAB_SIZE (cgrlc_table); break; case GMMRR_UL: table = gmmrr_table; n = TAB_SIZE (gmmrr_table); break; case RRGRR_DL: table = rrgrr_table; n = TAB_SIZE (rrgrr_table); break; #ifdef FF_EM_MODE case EM_Ul: table = em_ul_table; n = TAB_SIZE (em_ul_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)); } else { primitive_not_supported (P2D(prim)); } return PEI_OK; } } return PEI_OK; } /* +------------------------------------------------------------------------------ | Function : pei_init +------------------------------------------------------------------------------ | Description : This function is called by the frame. It is used to initialise | the entitiy. | | Parameters : handle - task handle | | Return : PEI_OK - entity initialised | PEI_ERROR - entity not (yet) initialised | +------------------------------------------------------------------------------ */ LOCAL SHORT pei_init (T_HANDLE handle) { TRACE_FUNCTION ("pei_init"); /* * Initialize task handle */ GRR_handle = handle; /* * Open communication channels */ if (hCommGRR < VSI_OK) { if ((hCommGRR = vsi_c_open (VSI_CALLER GRR_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommGMM < VSI_OK) { if ((hCommGMM = vsi_c_open (VSI_CALLER GMM_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommGRLC < VSI_OK) { if ((hCommGRLC = vsi_c_open (VSI_CALLER GRLC_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 (hCommL1 < VSI_OK) { if ((hCommL1 = vsi_c_open (VSI_CALLER L1_NAME)) < VSI_OK) return PEI_ERROR; } if (hCommPL < VSI_OK) { if ((hCommPL = vsi_c_open (VSI_CALLER PL_NAME)) < VSI_OK) return PEI_ERROR; } #ifdef FF_WAP /*FFM*/ if (hCommWAP < VSI_OK) { if ((hCommWAP = vsi_c_open (VSI_CALLER WAP_NAME)) < VSI_OK) return PEI_ERROR; } #endif /* * call function pcm_Init to be sure that the global variable std * is set before the initialisation of the GRR services takes place */ pcm_Init(); /* * Initialize entity data (call init function of every service) */ grr_init(); /* { PALLOC (tst_test_hw_req, TST_TEST_HW_REQ); PSEND (hCommL1, tst_test_hw_req); }*/ return (PEI_OK); } /* +------------------------------------------------------------------------------ | Function : pei_timeout +------------------------------------------------------------------------------ | Description : This function is called by the frame when a timer has expired. | | Parameters : index - timer index | | Return : PEI_OK - timeout processed | PEI_ERROR - timeout not processed | +------------------------------------------------------------------------------ */ LOCAL SHORT pei_timeout (USHORT index) { TRACE_FUNCTION ("pei_timeout"); /* * Process timeout */ switch (index) /* SZML-GLBL/007 */ { case T3134: ctrl_t3134(); break; case T3158: cs_t3158(); break; case T3162: tc_t3162(); break; case T3168: tc_t3168(); break; case T3170: tc_t3170(); break; case T3172_1: tc_t3172(T3172_1); break; /* case T3172_2: tc_t3172(T3172_2); break; */ /* case T3172_3: tc_t3172(T3172_3); break; */ /* case T3172_4: tc_t3172(T3172_4); break; */ /* case T3172_5: tc_t3172(T3172_5); break; */ /* case T3172_6: tc_t3172(T3172_6); break; */ /* case T3172_7: tc_t3172(T3172_7); break; */ case T3174: ctrl_t3174(); break; case T3176: ctrl_t3176(); break; case T3178: meas_t3178(); break; case T3186: tc_t3186(); break; case T_60_SEC: psi_t_60_sec(); break; case T_30_SEC: psi_t_30_sec(); break; case T_10_SEC: psi_t_10_sec(); break; case T_IM_SYNC: meas_t_im_sync(); break; case T15_SEC_CC: /* no action required when timer expires!! */ break; case T_TRANS_NON_DRX: grr_handle_non_drx_period( TRANSFER_NDRX, FALSE ); break; case T_NC2_NON_DRX: grr_handle_non_drx_period( NC2_NDRX, FALSE ); break; case T_COMP_PSI: psi_complete_psi_read_failed(); break; case T_RESELECT: cs_t_reselect(); break; #ifdef REL99 case T_POLL_TIMER: ctrl_t_poll_timer(); break; #endif default: TRACE_EVENT_P1( "Unknown Timeout: %d", index ); break; } return PEI_OK; } /* +------------------------------------------------------------------------------ | Function : pei_signal +------------------------------------------------------------------------------ | Description : This function is called by the frame when a signal has been | received. | | Parameters : opc - signal operation code | *data - pointer to primitive | | Return : PEI_OK - signal processed | PEI_ERROR - signal not processed | +------------------------------------------------------------------------------ */ LOCAL SHORT pei_signal (ULONG opc, void *data) { TRACE_FUNCTION ("pei_signal"); /* * Process signal */ TRACE_EVENT_P1( "Unknown Signal: %08X", opc ); return(PEI_OK); } /* +------------------------------------------------------------------------------ | Function : pei_exit +------------------------------------------------------------------------------ | Description : This function is called by the frame when the entity is | terminated. All open resources are freed. | | Parameters : - | | Return : PEI_OK - exit sucessful | PEI_ERROR - exit not sueccessful | +------------------------------------------------------------------------------ */ LOCAL SHORT pei_exit (void) { TRACE_FUNCTION ("pei_exit"); /* * Close communication channels */ vsi_c_close (VSI_CALLER hCommGRR); hCommGRR = VSI_ERROR; vsi_c_close (VSI_CALLER hCommGMM); hCommGMM = VSI_ERROR; vsi_c_close (VSI_CALLER hCommRR); hCommRR = VSI_ERROR; vsi_c_close (VSI_CALLER hCommGRLC); hCommGRLC = VSI_ERROR; vsi_c_close (VSI_CALLER hCommL1); hCommL1 = VSI_ERROR; vsi_c_close (VSI_CALLER hCommPL); hCommPL = VSI_ERROR; ccd_exit(); #ifdef FF_WAP /*FFM*/ vsi_c_close (VSI_CALLER hCommWAP); hCommWAP = VSI_ERROR; #endif return PEI_OK; } /* +------------------------------------------------------------------------------ | Function : pei_run +------------------------------------------------------------------------------ | Description : This function is called by the frame when entering the main | loop. This fucntion is only required in the active variant. | | This function is not used. | | Parameters : handle - Communication handle | | Return : PEI_OK - sucessful | PEI_ERROR - not successful | +------------------------------------------------------------------------------ */ LOCAL SHORT pei_run (T_HANDLE TaskHandle, T_HANDLE ComHandle ) { return PEI_OK; } /* +------------------------------------------------------------------------------ | Function : pei_config +------------------------------------------------------------------------------ | Description : This function is called by the frame when a primitive is | received indicating dynamic configuration. | | This function is not used in this entity. | | Parameters : handle - Communication handle | | Return : PEI_OK - sucessful | PEI_ERROR - not successful | +------------------------------------------------------------------------------ */ #if !defined (NCONFIG) LOCAL const KW_DATA kwtab[] = { GRR_STR_IM_INIT, GRR_NUM_IM_INIT, GRR_STR_TBF_CCCH, GRR_NUM_TBF_CCCH, GRR_STR_NO_TBF_CCCH, GRR_NUM_NO_TBF_CCCH, #if !defined (NTRACE) GRR_STR_CRP_TRACE, GRR_NUM_CRP_TRACE, GRR_STR_IM_TRACE, GRR_NUM_IM_TRACE, #endif /* #if !defined (NTRACE) */ #ifdef _SIMULATION_ GRR_STR_RES_RANDOM, GRR_NUM_RES_RANDOM, GRR_STR_STD, GRR_NUM_STD, GRR_STR_NC2, GRR_NUM_NC2, #endif /* #ifdef _SIMULATION_ */ "", 0 }; #endif /* #if !defined (NCONFIG) */ LOCAL SHORT pei_config (char *inString) { #if !defined (NCONFIG) char * s = inString; char * keyw; char * val [10]; TRACE_FUNCTION( "pei_config" ); TRACE_EVENT_P1( "[PEI_CONFIG]: %s", inString ); tok_init(s); /* * Parse next keyword and number of variables */ while ((tok_next(&keyw,val)) != TOK_EOCS) { UBYTE ncomment = GRR_TSTR_OK; switch ((tok_key((KW_DATA *)kwtab,keyw))) { case GRR_NUM_IM_INIT: meas_init( ( UBYTE )atoi( val[0] ) ); break; case GRR_NUM_TBF_CCCH: grr_data->ms.tbf_mon_ccch = TRUE; /* Allowed */ break; case GRR_NUM_NO_TBF_CCCH: grr_data->ms.tbf_mon_ccch = FALSE; /* Not allowed */ break; #if !defined (NTRACE) case GRR_NUM_CRP_TRACE: grr_data->cs.v_crp_trace = atoi( val[0] ); break; case GRR_NUM_IM_TRACE: grr_data->meas_im.n_im_trace = atoi( val[0] ); break; #endif /* #if !defined (NTRACE) */ #ifdef _SIMULATION_ case GRR_NUM_RES_RANDOM: grr_data->tc.res_random = atoi( val[0] ); TRACE_EVENT_P1("grr_data->tc.res_random is %d",atoi( val[0])); break; case GRR_NUM_STD: std = atoi( val[0] ); #ifdef TI_PS_FF_QUAD_BAND_SUPPORT if ( std EQ 33) { pcm_Init (); { rr_csf_check_rfcap (TRUE); } } #endif TRACE_EVENT_P1("std is %d",atoi( val[0])); break; case GRR_NUM_NC2: grr_data->nc2_on = atoi( val[0] ); break; #endif default: ncomment = GRR_TSTR_ILLEGAL_KEYW; break; } TRACE_EVENT_P2( "[PEI_CONFIG]: %s -> %s", keyw, ncomment EQ GRR_TSTR_OK ? "OK" : "Illegal Keyword" ); } #endif /* #if !defined (NCONFIG) */ return PEI_OK; } /* +------------------------------------------------------------------------------ | Function : pei_config +------------------------------------------------------------------------------ | Description : This function is called by the frame in case sudden entity | specific data is requested (e.g. entity Version). | | Parameters : out_monitor - return the address of the data to be | monitoredCommunication handle | | Return : PEI_OK - sucessful (address in out_monitor is valid) | PEI_ERROR - not successful | +------------------------------------------------------------------------------ */ LOCAL SHORT pei_monitor (void ** out_monitor) { TRACE_FUNCTION ("pei_monitor"); grr_mon.version = "GRR 1.0"; *out_monitor = &grr_mon; return PEI_OK; } /* +------------------------------------------------------------------------------ | Function : pei_create +------------------------------------------------------------------------------ | Description : This function is called by the frame when the process is | created. | | Parameters : out_name - Pointer to the buffer in which to locate | the name of this entity | | Return : PEI_OK - entity created successfuly | PEI_ERROR - entity could not be created | +------------------------------------------------------------------------------ */ GLOBAL SHORT pei_create (T_PEI_INFO **info) { static T_PEI_INFO pei_info = { "GRR", /* name */ { /* pei-table */ pei_init, pei_exit, pei_primitive, pei_timeout, pei_signal, pei_run, pei_config, pei_monitor }, 2560, /* stack size increased for omaps00149330 */ PEI_PRIM_QUEUE_SIZE, /* queue entries */ 204, /* priority (1->low, 255->high) */ TIMER_COUNT, /* number of timers */ #ifdef _TARGET_ PASSIVE_BODY|COPY_BY_REF|TRC_NO_SUSPEND|INT_DATA_TASK|PRIM_NO_SUSPEND #else PASSIVE_BODY|COPY_BY_REF #endif }; TRACE_FUNCTION ("pei_create"); /* * Close Resources if open */ if (first_access) first_access = FALSE; else pei_exit(); /* * Export startup configuration data */ *info = &pei_info; return PEI_OK; } /*==== END OF FILE ==========================================================*/