FreeCalypso > hg > fc-magnetite
annotate src/ui3/bmi/mmiBlkResources.c @ 632:d968a3216ba0
new tangomdm build target
TCS211/Magnetite built for target leonardo runs just fine on the Tango-based
Caramel board, but a more proper tangomdm build target is preferable in order
to better market these Tango modems to prospective commercial customers. The
only differences are in GPIO and MCSI config:
* MCSI is enabled in the tangomdm build config.
* GPIO 1 is loudspeaker amplifier control on Leonardo, but on Tango platforms
it can be used for anything. On Caramel boards this GPIO should be
configured as an output driving high.
* GPIO 2 needs to be configured as Calypso input on Leonardo, but on Tango
platforms it can be used for anything. On Caramel boards this GPIO should be
configured as an output, either high or low is OK.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 04 Jan 2020 19:27:41 +0000 |
parents | 6a4d9f47793e |
children |
rev | line source |
---|---|
420
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 CONDAT (UK) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 ******************************************************************************** |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 This software product is the property of Condat (UK) Ltd and may not be |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 disclosed to any third party without the express permission of the owner. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 ******************************************************************************** |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 $Project name: Basic MMI |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 $Project code: BMI (6349) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 $Module: PhoneBook |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 $File: MmiBlkResources.c |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 $Revision: 1.0 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 $Author: Condat(UK) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 $Date: 25/10/00 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 ******************************************************************************** |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 Description: |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 This modules provides, in conjunction with the MmiBlkManager module, |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 the resource management facilities for the MMI. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 ******************************************************************************** |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 $History: MmiBlkResources.c |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 25/10/00 Original Condat(UK) BMI version. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 $End |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 Include Files |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 #define ENTITY_MFW |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 /* includes */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 #include <string.h> |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 #include <stdio.h> |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 #include <stdlib.h> |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 #if defined (NEW_FRAME) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 #include "typedefs.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 #include "vsi.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 #include "pei.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 #include "custom.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 #include "gsm.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 #else |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 #include "STDDEFS.H" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 #include "custom.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 #include "gsm.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 #include "vsi.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 #endif |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 // #include <malloc.h> |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 #include "MmiBlkResources.h" |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 Local Structures |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 /* Define the control structures used to implement the block resource |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 manager |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 #define RESOURCE_MANAGER_KEY 0x00BABE02L |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 #define RESOURCE_SEARCH_LIMIT 4 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 typedef struct _tBlkEntry_ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 tBlkId BlkId; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 tBlkHandle BlkHandle; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 } tBlkEntry, *pBlkEntry; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 typedef struct _tBlkControl_ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 long int BlkKey; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 tBlkHandle BlkBase; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 int BlkLength; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 pBlkEntry BlkStartPtr; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 tBlkHandle BlkMinAddress; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 tBlkHandle BlkMaxAddress; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 } tBlkControl, *pBlkControl; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 Private Routines |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 $Function: ValidBlockResource |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 $Description: Verifies that the resource indicated by the handle is a valid |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 resource. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 $Returns: 0 If invalid, non-zero if valid. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 $Arguments: BlkRsrc, handle of resource |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 static int ValidBlockResource( tBlkHandle BlkRsrc ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 pBlkControl BlkControl = (pBlkControl) BlkRsrc; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 /* Check for non-NULL handle |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 if ( BlkControl == NULL ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 return 0; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 /* Check key has been set up correctly |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 return ( BlkControl->BlkKey == RESOURCE_MANAGER_KEY ); |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 Public Routines |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 $Function: mmibr_Initialise |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 $Description: |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 The initialisation routine must be called as part of the startup |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 phase of the system, it will allocate working space for the block |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 handler if required, and will initialise any structures required |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 to maintain the corect operation of the functions. This routine |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 must be called prior to invocation of any other block resource |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 function |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 $Returns: Handle to a resource block, NULL if unsuccessful |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 $Arguments: BlkBase, Base address of the block of data relating |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 to the resource |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 NumEntries, number of entries associated with the resource |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 tBlkHandle mmibr_Initialise( tBlkHandle BlkBase, int NumEntries ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 pBlkControl Blk; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 int i; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 /* As part of the initialisation process, we need to allocate a |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 block of memory in which to store the control information |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 associated with this block resource manager |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 if ( ( Blk = (pBlkControl) ALLOC_MEMORY( sizeof(tBlkControl) ) ) != NULL ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 /* Store the things we know straight off |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 Blk->BlkKey = RESOURCE_MANAGER_KEY; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 Blk->BlkBase = BlkBase; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 Blk->BlkLength = NumEntries; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 Blk->BlkStartPtr = (pBlkEntry) BlkBase; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 /* In order to detect memory allocations, we scan the list |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 of known entries, storing the maximum and minimum addresses |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 in the list. This scan allows us to detect when allocated |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 memory is being returned, since the address will be outside |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 the contiguous memory block we are managing. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 Blk->BlkMinAddress = Blk->BlkMaxAddress = BlkBase; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 for ( i = 0; i < NumEntries; i++ ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 if ( Blk->BlkMaxAddress < Blk->BlkStartPtr[i].BlkHandle ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 Blk->BlkMaxAddress = Blk->BlkStartPtr[i].BlkHandle; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 return Blk; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 $Function: mmibr_ShutDown |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 $Description: |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 The shutdown function can be called to free any allocations set up |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 by the Initialise routine. In a running system this is unlikely to |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 be called unless a catastrophic error has occurred and the system |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 needs to be restarted. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 $Returns: none. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 $Arguments: Pointer to a block resource handle (ie ptr to ptr) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 void mmibr_ShutDown( tBlkHandle *BlkRsrc ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 /* Only allow the resource manager to be shutdown if the provided |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 handle is consistent |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 if ( ValidBlockResource( *BlkRsrc ) ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 free( *BlkRsrc ); |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 *BlkRsrc = NULL; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 $Function: mmibr_Fetch |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 $Description: |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 We will adopt a mechanism where each block of data being provided |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 will need to be returned to the block resource manager when it |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 is no longer being used, this will provide an orthogonal approach |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 when dealing with data coming from either ROM or dynamically |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 allocated memory. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 $Returns: pointer to resource, NULL if unsuccessful |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 $Arguments: BlkRsrc, resource handle created by mmibr_Initialise |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 Id, identifier of the resource to be returned |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 tBlkHandle mmibr_Fetch( tBlkHandle BlkRsrc, tBlkId Id ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 int Start, End, Search; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 tBlkId CurrentId; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 tBlkHandle SearchPtr; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 /* convert the handle and verify it's valid |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 pBlkControl BlkControl = (pBlkControl) BlkRsrc; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 if ( ! ValidBlockResource( BlkRsrc ) ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 return NULL; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 /* When locating a specific entry, we need to search the list of |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 ids for one matching the input value. Since the Ids will be |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 organised as an ordered list, very important that bit, we can |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 perform a simple binary search to locate the items. |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 Start = 0; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 End = BlkControl->BlkLength - 1; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 SearchPtr = NULL; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 do |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 /* grab the entry midway between the current start and end |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 Search = Start + ((End - Start) >> 1); |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 CurrentId = BlkControl->BlkStartPtr[Search].BlkId; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 /* Binary chop the search space |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 if ( CurrentId == Id ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 /* Found a match, grab handle and terminate search |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 SearchPtr = BlkControl->BlkStartPtr[Search].BlkHandle; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 Start = End; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 else if ( CurrentId > Id ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 /* Not got a match, but it's not in the top half so move |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 the End pointer down |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 End = Search; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 else |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 /* Not got a match, but it's not in the bottom half so |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 move the Start pointer up |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 Start = Search; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 /* when we get down to the last three or four entries, just |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 search linearly to solve it, this is generally quicker for |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 a small number of entries than continuing the binary chop |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 if ( ( End - Start ) < RESOURCE_SEARCH_LIMIT ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 { |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 /* search quickly through the possibles |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 for ( Search = Start; Search <= End; Search++ ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 if ( Id == BlkControl->BlkStartPtr[Search].BlkId ) |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 SearchPtr = BlkControl->BlkStartPtr[Search].BlkHandle; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 /* And terminate the binary chop |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 */ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 Start = End; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 } while ( Start != End ); |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 return SearchPtr; |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 } |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 /******************************************************************************* |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 End of File |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 *******************************************************************************/ |
e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 |