FreeCalypso > hg > fc-tourmaline
view src/nucleus/tc_extr.h @ 51:04aaa5622fa7
disable deep sleep when Iota LEDB is on
TI's Iota chip docs say that CLK13M must be running in order for
LEDB to work, and practical experience on Mot C139 which uses
Iota LEDB for its keypad backlight concurs: if Calypso enters
deep sleep while the keypad backlight is turned on, the light
flickers visibly as the chipset goes into and out of deep sleep.
TI's original L1 sleep manager code had logic to disable deep sleep
when LT_Status() returns nonzero, but that function only works
for B-Sample and C-Sample LT, always returns 0 on BOARD 41 - no
check of Iota LEDB status anywhere. Change this code for our
current hardware: disable deep sleep when Iota LEDB has been
turned on through LLS.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 19 Oct 2020 05:11:29 +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