FreeCalypso > hg > fc-tourmaline
view src/nucleus/tc_extr.h @ 275:79cfefc1e2b4
audio mode load: gracefully handle mode files of wrong AEC version
Unfortunately our change of enabling L1_NEW_AEC (which is necessary
in order to bring our Calypso ARM fw into match with the underlying
DSP reality) brings along a change in the audio mode file binary
format and file size - all those new tunable AEC parameters do need
to be stored somewhere, after all. But we already have existing
mode files in the old format, and setting AEC config to garbage when
loading old audio modes (which is what would happen without the
present change) is not an appealing proposition.
The solution implemented in the present change is as follows: the
audio mode loading code checks the file size, and if it differs
from the active version of T_AUDIO_MODE, the T_AUDIO_AEC_CFG structure
is cleared - set to the default (disabled AEC) for the compiled type
of AEC. We got lucky in that this varying T_AUDIO_AEC_CFG structure
sits at the end of T_AUDIO_MODE!
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 30 Jul 2021 02:55:48 +0000 |
parents | 4e78acac3d88 |
children |
line wrap: on
line source
/*************************************************************************/ /* */ /* Copyright Mentor Graphics Corporation 2002 */ /* All Rights Reserved. */ /* */ /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */ /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */ /* SUBJECT TO LICENSE TERMS. */ /* */ /*************************************************************************/ /*************************************************************************/ /* */ /* FILE NAME VERSION */ /* */ /* tc_extr.h Nucleus PLUS 1.14 */ /* */ /* COMPONENT */ /* */ /* TC - Thread Control */ /* */ /* DESCRIPTION */ /* */ /* This file contains function prototypes of all functions */ /* accessible to other components. */ /* */ /* DATA STRUCTURES */ /* */ /* None */ /* */ /* FUNCTIONS */ /* */ /* None */ /* */ /* DEPENDENCIES */ /* */ /* tc_defs.h Thread Control constants */ /* */ /* HISTORY */ /* */ /* DATE REMARKS */ /* */ /* 03-01-1993 Created initial version 1.0 */ /* 04-19-1993 Verified version 1.0 */ /* 03-01-1994 Added validation utility for */ /* error checking functions for */ /* resume service and resume */ /* driver, resulting in */ /* version 1.0a */ /* 03-01-1994 Verified version 1.0a */ /* 03-01-1994 Moved include files outside of */ /* the file #ifndef to allow the */ /* use of actual data structures, */ /* added system protect pseudo */ /* function, added set suspend */ /* protect pseudo function, */ /* added optimization for targets */ /* able to access pointers in a */ /* single instruction, changed */ /* function names due to changes */ /* in file structure, resulting */ /* in version 1.1 */ /* */ /* 03-18-1994 Verified version 1.1 */ /* */ /* 01-24-1996 Corrected a type on line 200: */ /* TCT_Control_Interrupts, */ /* resulting in version 1.1+ */ /* 04-17-1996 updated to version 1.2 */ /* 03-24-1998 Released version 1.3 */ /* 03-26-1999 Released 1.11m (new release */ /* numbering scheme) */ /* 04-17-2002 Released version 1.13m */ /* 11-07-2002 Released version 1.14 */ /*************************************************************************/ #include "tc_defs.h" /* Include TC constants */ /* Check to see if the file has been included already. */ #ifndef TC_EXTR #define TC_EXTR /* Define external reference for the system protection. */ extern TC_PROTECT TCD_System_Protect; extern VOID *TCD_Current_Thread; /* Initialization functions. */ VOID TCI_Initialize(VOID); /* Core error checking functions. */ #ifndef NU_NO_ERROR_CHECKING BOOLEAN TCC_Validate_Resume(OPTION resume_type, NU_TASK *task_ptr); #endif STATUS TCCE_Activate_HISR(NU_HISR *hisr_ptr); STATUS TCCE_Create_Task(NU_TASK *task_ptr, CHAR *name, VOID (*task_entry)(UNSIGNED, VOID *), UNSIGNED argc, VOID *argv, VOID *stack_address, UNSIGNED stack_size, OPTION priority, UNSIGNED time_slice, OPTION preempt, OPTION auto_start); STATUS TCCE_Reset_Task(NU_TASK *task_ptr, UNSIGNED argc, VOID *argv); STATUS TCCE_Create_HISR(NU_HISR *hisr_ptr, CHAR *name, VOID (*hisr_entry)(VOID), OPTION priority, VOID *stack_address, UNSIGNED stack_size); STATUS TCCE_Terminate_Task(NU_TASK *task_ptr); STATUS TCCE_Delete_Task(NU_TASK *task_ptr); STATUS TCCE_Delete_HISR(NU_HISR *hisr_ptr); STATUS TCCE_Resume_Service(NU_TASK *task_ptr); STATUS TCCE_Suspend_Service(NU_TASK *task_ptr); VOID TCCE_Relinquish(VOID); VOID TCCE_Task_Sleep(UNSIGNED ticks); STATUS TCCE_Validate_Resume(OPTION resume_type, NU_TASK *task_ptr); INT TCCE_Suspend_Error(VOID); STATUS TCFE_Task_Information(NU_TASK *task_ptr, CHAR *name, DATA_ELEMENT *status, UNSIGNED *scheduled_count, DATA_ELEMENT *priority, OPTION *preempt, UNSIGNED *time_slice, VOID **stack_base, UNSIGNED *stack_size, UNSIGNED *minimum_stack); /* Supplemental error checking functions. */ OPTION TCSE_Change_Priority(NU_TASK *task_ptr, OPTION new_priority); OPTION TCSE_Change_Preemption(OPTION preempt); UNSIGNED TCSE_Change_Time_Slice(NU_TASK *task_ptr, UNSIGNED time_slice); UNSIGNED TCSE_Control_Signals(UNSIGNED signal_enable_mask); UNSIGNED TCSE_Receive_Signals(VOID); STATUS TCSE_Register_Signal_Handler(VOID (*signal_handler)(UNSIGNED)); STATUS TCSE_Send_Signals(NU_TASK *task_ptr, UNSIGNED signals); /* Core processing functions. */ STATUS TCT_Activate_HISR(NU_HISR *hisr_ptr); STATUS TCC_Create_Task(NU_TASK *task_ptr, CHAR *name, VOID (*task_entry)(UNSIGNED, VOID *), UNSIGNED argc, VOID *argv, VOID *stack_address, UNSIGNED stack_size, OPTION priority, UNSIGNED time_slice, OPTION preempt, OPTION auto_start); STATUS TCC_Reset_Task(NU_TASK *task_ptr, UNSIGNED argc, VOID *argv); STATUS TCC_Create_HISR(NU_HISR *hisr_ptr, CHAR *name, VOID (*hisr_entry)(VOID), OPTION priority, VOID *stack_address, UNSIGNED stack_size); STATUS TCC_Terminate_Task(NU_TASK *task_ptr); STATUS TCC_Delete_Task(NU_TASK *task_ptr); STATUS TCC_Delete_HISR(NU_HISR *hisr_ptr); STATUS TCC_Resume_Task(NU_TASK *task_ptr, OPTION suspend_type); STATUS TCC_Resume_Service(NU_TASK *task_ptr); VOID TCC_Suspend_Task(NU_TASK *task_ptr, OPTION suspend_type, VOID (*cleanup)(VOID *), VOID *information, UNSIGNED timeout); STATUS TCC_Suspend_Service(NU_TASK *task_ptr); VOID TCC_Task_Timeout(NU_TASK *task_ptr); VOID TCC_Task_Sleep(UNSIGNED ticks); VOID TCC_Relinquish(VOID); VOID TCC_Time_Slice(NU_TASK *task_ptr); NU_TASK *TCC_Current_Task_Pointer(VOID); NU_HISR *TCC_Current_HISR_Pointer(VOID); VOID TCC_Dispatch_LISR(INT vector); STATUS TCC_Register_LISR(INT vector, VOID (*new_lisr)(INT), VOID (**old_lisr)(INT)); /* Supplemental functions. */ OPTION TCS_Change_Priority(NU_TASK *task_ptr, OPTION new_priority); OPTION TCS_Change_Preemption(OPTION preempt); UNSIGNED TCS_Change_Time_Slice(NU_TASK *task_ptr, UNSIGNED time_slice); UNSIGNED TCS_Control_Signals(UNSIGNED signal_enable_mask); UNSIGNED TCS_Receive_Signals(VOID); STATUS TCS_Register_Signal_Handler(VOID (*signal_handler)(UNSIGNED)); STATUS TCS_Send_Signals(NU_TASK *task, UNSIGNED signals); /* Information retrieval functions. */ UNSIGNED TCF_Established_Tasks(VOID); UNSIGNED TCF_Established_HISRs(VOID); STATUS TCF_Task_Information(NU_TASK *task, CHAR *name, DATA_ELEMENT *status, UNSIGNED *scheduled_count, OPTION *priority, OPTION *preempt, UNSIGNED *time_slice, VOID **stack_base, UNSIGNED *stack_size, UNSIGNED *minimum_stack); STATUS TCF_HISR_Information(NU_HISR *hisr, CHAR *name, UNSIGNED *scheduled_count, DATA_ELEMENT *priority, VOID **stack_base, UNSIGNED *stack_size, UNSIGNED *minimum_stack); UNSIGNED TCF_Task_Pointers(NU_TASK **pointer_list, UNSIGNED maximum_pointers); UNSIGNED TCF_HISR_Pointers(NU_HISR **pointer_list, UNSIGNED maximum_pointers); /* Target dependent functions. */ UNSIGNED TCT_Check_Stack(VOID); VOID TCT_Schedule(VOID); VOID TCT_Restore_Interrupts(VOID); VOID TCT_Protect(TC_PROTECT *protect); VOID TCT_Unprotect(VOID); VOID TCT_Unprotect_Specific(TC_PROTECT *protect); VOID TCT_Set_Current_Protect(TC_PROTECT *protect); VOID TCT_Control_To_System(VOID); INT TCT_Control_Interrupts(INT new_level); INT TCT_Local_Control_Interrupts(INT new_level); #ifdef NU_ENABLE_STACK_CHECK #define NU_CHECK_STACK() TCT_Check_Stack() #else /* no stack checking */ #define NU_CHECK_STACK() ((void)0) #endif /* NU_ENABLE_STACK_CHECK */ /* Determine if pointers are accessible with a single instruction. If so, just reference the pointer directly. Otherwise, call the assembly service. */ #if NU_POINTER_ACCESS == 1 extern TC_TCB *TCD_Execute_Task; #define TCT_Current_Thread() TCD_Current_Thread #define TCT_Set_Execute_Task(task) TCD_Execute_Task = task #else VOID *TCT_Current_Thread(VOID); VOID TCT_Set_Execute_Task(TC_TCB *task); #endif /* Define pseudo function used by internal components of the system. */ #define TCT_System_Protect() TCT_Protect(&TCD_System_Protect) #define TCT_System_Unprotect() \ TCT_Unprotect_Specific(&TCD_System_Protect) #define TCT_Set_Suspend_Protect(protect) \ ((TC_TCB *) TCD_Current_Thread) -> tc_suspend_protect = \ (TC_PROTECT *) protect #define TCT_Get_Current_Protect() \ ((TC_TCB *) TCD_Current_Thread) -> tc_current_protect #define TCC_Task_Priority(task) ((TC_TCB *) (task)) -> tc_priority #endif