FreeCalypso > hg > fc-tourmaline
view src/ui/bmi/mmiLists.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 | 9c079f8f71a0 |
children |
line wrap: on
line source
#ifndef _DEF_MMI_LISTS_H_ #define _DEF_MMI_LISTS_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: MMI $File: MmiLists.h $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description: This provides the root mofule for the basic MMI ******************************************************************************** $History: MmiLists.h May 18, 2006 REF: DRT OMAPS00076438 xdeepadh Description: Scrolling not implemented in Imageviewer Solution: The support for scrolling has been provided. May 03, 2006 REF: DRT OMAPS00076439 xdeepadh Description: Image viewer back not working Solution: The Preview List will be repopulated, when the list window is resumed. Dec 22, 2005 REF: ENH xdeepadh Description: Image Viewer Application Solution: Implemeted the Image Viewer to view the jpeg images xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 Using the MenuSelect Key for requesting the help info in STK menu. March 01, 2005 REF: ENH 29313 Deepa M.D Isolating colour build related changes from MMI LITE flag. The proper Feature flag COLORDISPLAY was used for all color related changes. $End *******************************************************************************/ #include "mfw_mnu.h" //for mfwMnuAttr #define LISTS_SCROLL_UP 0 #define LISTS_SCROLL_DOWN 1 #define LISTS_FAIL 0 #define LISTS_OK 1 #define LISTS_MAX_ITEMS 10 #define SNAPSHOT_SIZE_2 2 #define SNAPSHOT_SIZE_4 4 #define SNAPSHOT_SIZE_6 6 #define LISTS_REASON_NULL 0 #define LISTS_REASON_SELECT 1 #define LISTS_REASON_BACK 2 #define LISTS_REASON_TIMEOUT 3 #define LISTS_REASON_CLEAR 4 #define LISTS_REASON_SCROLL 5 #define LISTS_REASON_HANGUP 6 #define LISTS_REASON_SEND 7 #define LISTS_REASON_CALL 8 // Dec 22, 2005 REF: ENH xdeepadh -Imageviewer #define LISTS_REASON_SCROLL_UP 9 #define LISTS_REASON_SCROLL_DOWN 10 #define LISTS_REASON_RESUME 11 #define LISTS_REASON_SUSPEND 12 #define LISTS_REASON_VISIBLE 13 #define LISTS_REASON_DRAWCOMPLETE 14 /*Event which can be sent to list window*/ #define E_LIST_DESTROY 3 /*SPR 2132, destroy window*/ typedef enum { E_START_MELODY, #ifdef FF_MMI_RINGTONE /* Events for Ring tone handling */ E_STOP_MELODY, E_SUSPEND_MELODY, E_VISIBLE_MELODY #else E_STOP_MELODY /*a0393213 warnings removal- trailing comma is nonstandard*/ #endif } e_melody_events; typedef struct { MfwHnd win; MfwMnuAttr *Attr; /* Menu attributes */ MfwMnuItem *List; /* List menu text strings. */ UBYTE ListLength; /* Number of entries in list menu. */ UBYTE ListPosition; /* True cursor position in list menu. */ UBYTE CursorPosition; /* Cursor position in list snapshot. */ UBYTE SnapshotSize; /* Number of list entries to view. */ U8 Font; /* List menu font. */ BOOL Strings; /* TRUE = string display; FALSE = IDs */ int LeftSoftKey; /* Left softkey text. */ int RightSoftKey; /* Right softkey text. */ MfwEvt KeyEvents; /* Keyboard events to be handled. */ UBYTE Reason; /* User defined exit reason. */ UBYTE autoDestroy; UBYTE selectKey; //xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 //March 01, 2005 REF: ENH 29313 Deepa M.D // Isolating colour build related changes from MMI LITE flag. // The proper Feature flag COLORDISPLAY was used for all color //related changes. #ifdef COLOURDISPLAY U32 listCol; #else U8 listCol;/*SPR 2686*/ #endif MfwHnd mfw_iv_handle; int lineHeight; BOOL block_keys; } ListMenuData; typedef void (*ListCbFunc)(T_MFW_HND * Parent, ListMenuData * ListData); typedef struct { T_MMI_CONTROL mmi_control; T_MFW_HND winLists; SHORT id; T_MFW_HND Parent; T_MFW_HND kbdLists; T_MFW_HND kbdLists_long; T_MFW_HND MenuLists; MfwMnuAttr MenuListsAttr; ListCbFunc Callback; UBYTE ExitReason; ListMenuData MenuData; } ListWinInfo; typedef struct { T_MMI_CONTROL mmi_control; T_MFW_HND winLists; SHORT id; T_MFW_HND Parent; T_MFW_HND kbdLists; T_MFW_HND kbdLists_long; T_MFW_HND MenuLists; MfwMnuAttr MenuListsAttr; ListCbFunc Callback; UBYTE ExitReason; ListMenuData *MenuData; } ListIconsWinInfo; /* PROTOTYPES */ T_MFW listDisplayListMenu (MfwHnd Parent, ListMenuData *Data, ListCbFunc cbFunc, int inUnicode); T_MFW listIconsDisplayListMenu (MfwHnd Parent, ListMenuData *Data, ListCbFunc cbFunc,int inUnicode); void listsIconsDestroy(T_MFW_HND win); void listsDestroy(T_MFW_HND win); #endif /* _DEF_MMI_LISTS_H_ */