FreeCalypso > hg > freecalypso-citrine
diff L1/dyn_dwl_cfile/l1_dyn_dwl_init.c @ 0:75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 09 Jun 2016 00:02:41 +0000 |
parents | |
children | dfc7b0bc468a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/L1/dyn_dwl_cfile/l1_dyn_dwl_init.c Thu Jun 09 00:02:41 2016 +0000 @@ -0,0 +1,279 @@ +/************* Revision Controle System Header ************* + * GSM Layer 1 software + * L1_DYN_DWL_INIT.C + * + * Filename l1_dyn_dwl_init.c + * Copyright 2004 (C) Texas Instruments + * + ************* Revision Controle System Header *************/ +#include "config.h" +#include "l1_confg.h" +#include "sys_types.h" +#include "../../riviera/rv/rv_general.h" +#include "../../nucleus/nucleus.h" +#include "l1_types.h" +#include "l1audio_const.h" +#include "l1audio_cust.h" +#include "l1audio_defty.h" +#include "l1_const.h" +#include "l1tm_defty.h" + +#if (L1_GTT == 1) + #include "l1gtt_const.h" + #include "l1gtt_defty.h" +#endif +#if (L1_DYN_DSP_DWNLD == 1) + #include "l1_dyn_dwl_const.h" + #include "l1_dyn_dwl_defty.h" + #include "l1_dyn_dwl_proto.h" +#endif + +#if (L1_MP3 == 1) + #include "l1mp3_defty.h" +#endif //L1_MP3 +#if (L1_MIDI == 1) + #include "l1midi_defty.h" +#endif +#if (L1_AAC == 1) + #include "l1aac_defty.h" +#endif //L1_AAC + +#include "l1_defty.h" +#include "../../gpf/inc/cust_os.h" +/* #include "nu_main.h" */ +#include "l1audio_signa.h" +#include "l1_varex.h" +#include "l1_macro.h" +#include "l1_trace.h" + +#if (L1_DYN_DSP_DWNLD == 1) +extern T_DYN_DWNLD_MCU_DSP *dyn_dwl_ndb; + +/* reconstructing from disassembly of TCS211 binary object */ + +/* patch ID mapping: + 0 = GPRS + 1 = AMR_SCH + 2 = TTY + 3 = AMR_MMS + 4 = E2 +*/ + +const BOOL primitives_to_patch_matrix[NUM_OF_DYN_DWNLD_PRIMITIVES][MAX_NUM_OF_PATCH_IDS] = { + +/* L1C_STOP_DEDICATED_DONE */ {1, 0, 0, 0, 0}, +/* MMI_GTT_START_REQ (?) */ {0, 0, 1, 0, 0}, +/* MPHC_IMMED_ASSIGN_REQ */ {0, 1, 0, 0, 0}, +/* MMI_MELODY0_E2_START_REQ */ {0, 0, 0, 0, 1}, +/* MMI_MELODY1_E2_START_REQ */ {0, 0, 0, 0, 1}, +/* L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_CON */ {0, 0, 0, 1, 0} + +}; + +const BOOL incompatibility_matrix[MAX_NUM_OF_PATCH_IDS][MAX_NUM_OF_PATCH_IDS] ={ + {0, 1, 1, 0, 0}, + {1, 0, 0, 0, 0}, + {0, 0, 0, 1, 1}, + {0, 0, 1, 0, 1}, + {0, 0, 1, 1, 0}, +}; + +const BOOL semaphore_matrix[MAX_NUM_OF_PATCH_IDS][MAX_NUM_OF_SEMAPHORES] = { + {0, 0, 0, 0, 0, 1}, + {1, 0, 0, 0, 0, 1}, + {0, 1, 0, 0, 0, 1}, + {0, 0, 0, 1, 1, 1}, + {0, 0, 1, 0, 0, 1}, +}; + +UWORD32 dyn_dwnld_address_vect[MAX_NUM_OF_PATCH_IDS]; +UWORD16 dyn_dwnld_crc_vect[MAX_NUM_OF_PATCH_IDS]; +UWORD16 size_vect[MAX_NUM_OF_PATCH_IDS]; + +UWORD8 const *dyn_dwnld_copy_MCU_vect[MAX_NUM_OF_PATCH_IDS]; + +extern const UWORD8 amr_mms_patch_array[]; +extern const UWORD8 amr_sch_patch_array[]; +extern const UWORD8 e2_patch_array[]; +extern const UWORD8 gprs_patch_array[]; +extern const UWORD8 speech_acoustic_patch_array[]; +extern const UWORD8 tty_patch_array[]; + +/*-------------------------------------------------------*/ +/* l1_dyn_dwnld_initialize_var() */ +/*-------------------------------------------------------*/ +/* Parameters : none */ +/* Return : nothing */ +/* Functionality : Initialize Dynamic Download variables */ +/* */ +/*-------------------------------------------------------*/ + +void l1_dyn_dwnld_initialize_var() +{ + UWORD16 i; + + + /* Init Dynamic Download NDB */ + dyn_dwl_ndb=(T_DYN_DWNLD_MCU_DSP *)API_address_dsp2mcu(C_DYN_DWNLD_API_BASE_ADDRESS); +#if (CODE_VERSION == SIMULATION) + { + extern T_DYN_DWNLD_MCU_DSP dyn_dwl_ndb_sim; + dyn_dwl_ndb=&dyn_dwl_ndb_sim; + } +#endif // CODE_VERSION == SIMULATION + + /* Init Dynamic Download DSP background */ + l1s_dsp_com.dsp_ndb_ptr->a_background_tasks[C_BGD_DSP_DYN_DWNLD] = (API)((C_BGD_DSP_DYN_DWNLD<<11) | 0); + l1s_dsp_com.dsp_ndb_ptr->d_background_enable&=(API)(~(1<<C_BGD_DSP_DYN_DWNLD)); + + if(l1s_dsp_com.dsp_ndb_ptr->d_max_background<(C_BGD_DSP_DYN_DWNLD+1)) + l1s_dsp_com.dsp_ndb_ptr->d_max_background=(API)(C_BGD_DSP_DYN_DWNLD+1); + + dyn_dwnld_copy_MCU_vect[0] = gprs_patch_array; + dyn_dwnld_copy_MCU_vect[1] = amr_sch_patch_array; + #if (L1_GTT == 1) + dyn_dwnld_copy_MCU_vect[2] = tty_patch_array; + #endif + #if (MELODY_E2 == 1) + dyn_dwnld_copy_MCU_vect[3] = amr_mms_patch_array; + dyn_dwnld_copy_MCU_vect[4] = e2_patch_array; + #endif + + for(i=0;i<MAX_NUM_OF_PATCH_IDS;i++) + { + if (dyn_dwnld_copy_MCU_vect[i] != 0) + { + l1_set_dyn_dwnld_install_vect(size_vect,dyn_dwnld_address_vect,dyn_dwnld_crc_vect,dyn_dwnld_copy_MCU_vect[i],i); + } + } + + /*---------- Set L1A globals at phone init ----------------------------*/ + l1a.dyn_dwnld.melody0_E2_flag_activated = FALSE; + l1a.dyn_dwnld.melody1_E2_flag_activated = FALSE; + l1a.dyn_dwnld.state = 0; + + + l1a.dyn_dwnld.num_patches_installed = 0; + + l1a.dyn_dwnld.patch_id[0] = 0xFFFF; //omaps00090550 + + /**************************************************/ + + // Compute number of current primitives defined via compilation switch + l1a.dyn_dwnld.num_of_primitives = 2; + #if (L1_GTT == 1) + l1a.dyn_dwnld.num_of_primitives++; + #endif // L1_GTT + #if (MELODY_E2 == 1) + // Two primitives for MELODY E2 + // FreeCalypso: apparently there are 3 in TCS211 + l1a.dyn_dwnld.num_of_primitives += 3; + #endif // MELODY_E2 + + for (i=l1a.dyn_dwnld.num_patches_installed;i<MAX_NUM_OF_PATCH_IDS;i++) + { + l1a.dyn_dwnld.patch_id[i] = 0xFFFF; //omaps00090550 ; + l1a.dyn_dwnld.next_patch_id[i] = 0xFFFF; //omaps00090550 ; + } + for (i=0;i<MAX_NUM_OF_SEMAPHORES;i++) + l1a.dyn_dwnld.semaphore_vect[i] = GREEN; + + + l1a.dyn_dwnld.waiting_patch_fifo.num_of_elem = 0; + for (i=0;i<MAX_NUM_OF_PATCH_IDS;i++) + l1a.dyn_dwnld.waiting_patch_fifo.signal_code_vect[i] = 0; + + /*---------------------------------------------------------------------*/ + + /*---------- Set L1S globals at phone init ----------------------------*/ + + l1s.dyn_dwnld_state=0; + + /*---------------------------------------------------------------------*/ + + + /* Set API ACCESS bit to 16 bits mode */ + /* Bit 5: 0 -> 32 bits mode */ + /* 1 -> 16 bits mode */ + +#if (CODE_VERSION != SIMULATION) + (*(volatile UWORD16 *) 0xFFFFFB0E) |= 0x0020; +#endif // CODE_VERSION != SIMULATION +} + +/*-------------------------------------------------------*/ +/* l1_dyn_dwl_reset() */ +/* */ +/*-------------------------------------------------------*/ +/* Parameters : none */ +/* Return : nothing */ +/* Functionality : Reset Dynamic Download variables */ +/* */ +/*-------------------------------------------------------*/ + +void l1_dyn_dwnld_reset() +{ + UWORD8 indx_loop; + + /* Reset L1A-L1S commands */ + l1a_l1s_com.dyn_dwnld_task.start = FALSE; + l1a_l1s_com.dyn_dwnld_task.stop = FALSE; + + /* Reset L1A-API HISR commands */ + + l1a_apihisr_com.dyn_dwnld.command.restart = FALSE; + l1a_apihisr_com.dyn_dwnld.uninstall_parameters.num_of_elem = 0; + + for (indx_loop = 0 ; indx_loop < MAX_NUM_OF_PATCH_IDS ; indx_loop++ ) + { + l1a_apihisr_com.dyn_dwnld.uninstall_parameters.address[indx_loop] + = 0; + l1a_apihisr_com.dyn_dwnld.copy_parameters.start_MCU_copy_address[indx_loop] + = 0; + l1a_apihisr_com.dyn_dwnld.copy_parameters.address_to_install[indx_loop] + = 0; + l1a_apihisr_com.dyn_dwnld.copy_parameters.size_array[indx_loop] + = 0; + } + + l1a_apihisr_com.dyn_dwnld.copy_parameters.size_of_dwnld_area = 0; + l1a_apihisr_com.dyn_dwnld.copy_parameters.start_of_dwnld_area = 0; + l1a_apihisr_com.dyn_dwnld.copy_parameters.num_of_elem = 0; + + /* Reset global API HISR variable */ + l1_apihisr.dyn_dwnld.state = 0; + l1_apihisr.dyn_dwnld.running = FALSE; + l1_apihisr.dyn_dwnld.uninstall_counter = 0; + l1_apihisr.dyn_dwnld.patch_ids_counter = 0; + l1_apihisr.dyn_dwnld.running_source_pointer = 0; + l1_apihisr.dyn_dwnld.tmp_patch_size = 0; + + /* Reset L1A global FIFO for handling the DELAY (when two or more primitives fall within a dynamic download time frame)*/ + l1a.dyn_dwnld.waiting_patch_fifo.num_of_elem = 0; + for (indx_loop=0;indx_loop<MAX_NUM_OF_PATCH_IDS;indx_loop++) + { + l1a.dyn_dwnld.waiting_patch_fifo.signal_code_vect[indx_loop] = 0; + l1a.dyn_dwnld.next_patch_id[indx_loop] = 0xFFFF; //omaps00090550 ; + } +} + +/*---------------------------------------------------------------------*/ +/* l1_dyn_dwnld_reset_api() */ +/*---------------------------------------------------------------------*/ +/* Parameters : none */ +/* Return : nothing */ +/* Functionality : Reset Dynamic Download API variables */ +/* */ +/*---------------------------------------------------------------------*/ +void l1_dyn_dwnld_reset_api() +{ + dyn_dwl_ndb->d_api_dwl_download_ctrl = (API) 0; + dyn_dwl_ndb->d_api_dwl_error_code = (API) 0; + dyn_dwl_ndb->d_api_dwl_function_address[0] = (API) 0; + dyn_dwl_ndb->d_api_dwl_function_address[1] = (API) 0; + dyn_dwl_ndb->d_api_dwl_crc = (API) 0; + dyn_dwl_ndb->d_api_dwl_size = (API) 0; + dyn_dwl_ndb->d_api_dwl_write_pointer = (API) 0; +} + +#endif // L1_DYN_DSP_DWNLD