FreeCalypso > hg > fc-tourmaline
view src/ui/bmi/mmiSettings.h @ 220:0ed36de51973
ABB semaphore protection overhaul
The ABB semaphone protection logic that came with TCS211 from TI
was broken in several ways:
* Some semaphore-protected functions were called from Application_Initialize()
context. NU_Obtain_Semaphore() called with NU_SUSPEND fails with
NU_INVALID_SUSPEND in this context, but the return value wasn't checked,
and NU_Release_Semaphore() would be called unconditionally at the end.
The latter call would increment the semaphore count past 1, making the
semaphore no longer binary and thus no longer effective for resource
protection. The fix is to check the return value from NU_Obtain_Semaphore()
and skip the NU_Release_Semaphore() call if the semaphore wasn't properly
obtained.
* Some SPI hardware manipulation was being done before entering the semaphore-
protected critical section. The fix is to reorder the code: first obtain
the semaphore, then do everything else.
* In the corner case of L1/DSP recovery, l1_abb_power_on() would call some
non-semaphore-protected ABB & SPI init functions. The fix is to skip those
calls in the case of recovery.
* A few additional corner cases existed, all of which are fixed by making
ABB semaphore protection 100% consistent for all ABB functions and code paths.
There is still one remaining problem of priority inversion: suppose a low-
priority task calls an ABB function, and some medium-priority task just happens
to preempt right in the middle of that semaphore-protected ABB operation. Then
the high-priority SPI task is locked out for a non-deterministic time until
that medium-priority task finishes its work and goes back to sleep. This
priority inversion problem remains outstanding for now.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Apr 2021 20:55:25 +0000 |
parents | 88229017434c |
children |
line wrap: on
line source
#ifndef _DEF_MMI_SETTINGS_H_ #define _DEF_MMI_SETTINGS_H_ /******************************************************************************* CONDAT (UK) ******************************************************************************** This software product is the property of Condat (UK) Ltd and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: Basic MMI $Project code: BMI (6349) $Module: Settings $File: MmiSettings.h Jul 28, 2004 REF: CRR 20899 xkundadu Description: No identification for user whether 'Any-key-Answer' is On/Off Solution: Added the function settingsFocusCurSelAnyKeyAns prototype. $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description: ******************************************************************************** Oct 30, 2006 ER:OMAPS00091029 x0039928(sumanth) Bootup time measurement May 04, 2005 REF: CRR 30285 x0021334 Description: SMS Status Request in idle and dedicated mode (using Menu) setting does not work Solution: status of sms status request is read and focus is set accrodingly. March 2, 2005 REF: CRR 11536 x0018858 Description: Reply path not supported while sending a reply. Solution: Added menu option for the reply path. Jul 22,2004 CRR:20896 xrashmic - SASKEN Description: The current time format is not highlighted Fix: Instead of providing the submenu directly we call a function where we set the menu and also higlight the previously selected menu item Jul 29, 2004 REF = CRR 20898 xkundadu Description: No identification for user whether 'Auto-Answer' is On/Off Solution: Added the function settingsFocusCurSelAutoAns prototype. Issue Number : SPR#12822 on 31/03/04 by v vadiraj ******************************************************************************* Required Include Files *******************************************************************************/ /* PROTOTYPES */ // Jul 29, 2004 REF = CRR 20898 xkundadu // Added the function settingsFocusCurSelAutoAns() prototype. void settingsFocusCurSelAutoAns(void); // Jul 28, 2004 REF: CRR 20899 xkundadu // Added the function settingsFocusCurSelAnyKeyAns() prototype. void settingsFocusCurSelAnyKeyAns(void); T_MFW settingsRecReportControl(UBYTE ReportStatus); int settingsGetStatus(int flagBit); int settingsSilentModeOff (void); int settingsSilentModeOn (void); int settingsKeyPadLockOn (void); int settingsKeyPadLockOff (void); int settingsAutoRedialOn (MfwMnu* m, MfwMnuItem* i); int settingsAutoRedialOff (MfwMnu* m, MfwMnuItem* i); int settingsAutoAnswerOn (MfwMnu* m, MfwMnuItem* i); int settingsAutoAnswerOff (MfwMnu* m, MfwMnuItem* i); int settingsAnyKeyAnswerOn (MfwMnu* m, MfwMnuItem* i); int settingsAnyKeyAnswerOff (MfwMnu* m, MfwMnuItem* i); int factoryReset (MfwMnu* m, MfwMnuItem* i); int settingsVoiceMail (MfwMnu* m, MfwMnuItem* i); int settingsScNumber (MfwMnu* m, MfwMnuItem* i); int SmsValidityPeriod (MfwMnu* m, MfwMnuItem* i); int SmsStatusReportRequest(MfwMnu* m, MfwMnuItem* i); /* Marcus: Issue 1170: 30/09/2002 */ //March 2, 2005 REF: CRR 11536 x0018858 int SmsReplyPathRequest(MfwMnu* m, MfwMnuItem* i); /*Added function declaration for setting reply path*/ void settingsInit (void); void settingsExit (void); /* GW Added as external to initialise FFS data when FFS file does not exist*/ void setUserSettings2Default (void); void settingsShowStateAnykeyAnswer (void); void settingsShowStateAutoAnswer (void); void settingsShowStateAutoRedial(void); void settingsShowStateCBDisable(void); void settingsSetStatus( unsigned int statusId, int setOrClear ); /*x0039928 - Lint warning fix */ // change by Sasken (VVADIRAJ) on March 31th 2004 // Issue Number : MMI-SPR-12822 void settingsFocusNwIconCurSel(void); //Jul 22,2004 CRR:20896 xrashmic - SASKEN void settingsFocusTimeFormatCurSel(void); // May 04, 2005 REF: CRR 30285 x0021334 void settingsSmsStatusReportCurSel(void); int menuBootTimeMsmt(MfwMnu* m, MfwMnuItem* i); /*OMAPS00091029 x0039928(sumanth)*/ #ifdef NEPTUNE_BOARD #ifdef MMI_POWER_MANAGEMENT_TEST /* Used to select the power Management */ void mmi_PowerManagement(void); /* Used to select the power management Duration */ int mmi_PMDuration(MfwMnu* m, MfwMnuItem* i); #endif #endif #define SET_SETTING (1) #define CLEAR_SETTING (0) #endif