FreeCalypso > hg > fc-selenite
annotate src/nucleus/pmc.c @ 74:d076885a0669
src/nucleus/gcc: initial import from Citrine
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Fri, 20 Jul 2018 05:40:33 +0000 | 
| parents | 0f80e1e4dce4 | 
| children | 
| rev | line source | 
|---|---|
| 
7
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
1 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
2 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
3 /* Copyright Mentor Graphics Corporation 2002 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
4 /* All Rights Reserved. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
5 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
6 /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
7 /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
8 /* SUBJECT TO LICENSE TERMS. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
9 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
10 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
11 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
12 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
13 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
14 /* FILE NAME VERSION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
15 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
16 /* pmc.c Nucleus PLUS 1.14 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
17 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
18 /* COMPONENT */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
19 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
20 /* PM - Partition Memory Management */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
21 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
22 /* DESCRIPTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
23 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
24 /* This file contains the core routines for the Partition Memory */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
25 /* Management component. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
26 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
27 /* DATA STRUCTURES */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
28 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
29 /* None */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
30 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
31 /* FUNCTIONS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
32 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
33 /* PMC_Create_Partition_Pool Create a Partition Pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
34 /* PMC_Delete_Partition_Pool Delete a Partition Pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
35 /* PMC_Allocate_Partition Allocate a partition from a */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
36 /* pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
37 /* PMC_Deallocate_Partition Deallocate a partition from */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
38 /* a pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
39 /* PMC_Cleanup Cleanup on timeout or a */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
40 /* terminate condition */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
41 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
42 /* DEPENDENCIES */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
43 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
44 /* cs_extr.h Common Service functions */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
45 /* tc_extr.h Thread Control functions */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
46 /* pm_extr.h Partition functions */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
47 /* hi_extr.h History functions */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
48 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
49 /* HISTORY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
50 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
51 /* DATE REMARKS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
52 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
53 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
54 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
55 /* 08-09-1993 Corrected pointer retrieval */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
56 /* loop, resulting in version 1.0a */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
57 /* 08-09-1993 Verified version 1.0a */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
58 /* 03-01-1994 Moved non-core functions into */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
59 /* supplemental files, changed */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
60 /* function interfaces to match */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
61 /* those in prototype, added */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
62 /* register options, changed */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
63 /* protection logic to reduce */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
64 /* overhead, resulting in */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
65 /* version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
66 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
67 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
68 /* 04-17-1996 updated to version 1.2 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
69 /* 03-24-1998 Released version 1.3 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
70 /* 03-26-1999 Released 1.11m (new release */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
71 /* numbering scheme) */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
72 /* 04-17-2002 Released version 1.13m */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
73 /* 11-07-2002 Released version 1.14 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
74 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
75 #define NU_SOURCE_FILE | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
76 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
77 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
78 #include "cs_extr.h" /* Common service functions */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
79 #include "tc_extr.h" /* Thread control functions */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
80 #include "pm_extr.h" /* Partition functions */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
81 #include "hi_extr.h" /* History functions */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
82 #include "profiler.h" /* ProView interface */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
83 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
84 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
85 /* Define external inner-component global data references. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
86 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
87 extern CS_NODE *PMD_Created_Pools_List; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
88 extern UNSIGNED PMD_Total_Pools; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
89 extern TC_PROTECT PMD_List_Protect; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
90 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
91 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
92 /* Define internal component function prototypes. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
93 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
94 VOID PMC_Cleanup(VOID *information); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
95 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
96 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
97 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
98 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
99 /* FUNCTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
100 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
101 /* PMC_Create_Partition_Pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
102 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
103 /* DESCRIPTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
104 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
105 /* This function creates a memory partition pool and then places it */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
106 /* on the list of created partition pools. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
107 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
108 /* CALLED BY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
109 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
110 /* Application */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
111 /* PMCE_Create_Partition_Pool Error checking shell */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
112 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
113 /* CALLS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
114 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
115 /* CSC_Place_On_List Add node to linked-list */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
116 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
117 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
118 /* TCT_Protect Data structure protect */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
119 /* TCT_Unprotect Un-protect data structure */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
120 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
121 /* INPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
122 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
123 /* pool_ptr Partition pool control block */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
124 /* pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
125 /* name Partition pool name */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
126 /* start_address Starting address of the pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
127 /* pool_size Number of bytes in the pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
128 /* partition_size Number of bytes in each */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
129 /* partition of the pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
130 /* suspend_type Suspension type */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
131 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
132 /* OUTPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
133 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
134 /* NU_SUCCESS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
135 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
136 /* HISTORY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
137 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
138 /* DATE REMARKS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
139 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
140 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
141 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
142 /* 03-01-1994 Changed function interfaces to */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
143 /* match those in prototype, */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
144 /* added register options, */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
145 /* resulting in version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
146 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
147 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
148 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
149 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
150 STATUS PMC_Create_Partition_Pool(NU_PARTITION_POOL *pool_ptr, CHAR *name, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
151 VOID *start_address, UNSIGNED pool_size, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
152 UNSIGNED partition_size, OPTION suspend_type) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
153 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
154 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
155 R1 PM_PCB *pool; /* Pool control block ptr */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
156 INT i; /* Working index variable */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
157 BYTE_PTR pointer; /* Working byte pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
158 PM_HEADER *header_ptr; /* Partition block header ptr*/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
159 NU_SUPERV_USER_VARIABLES | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
160 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
161 /* Switch to supervisor mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
162 NU_SUPERVISOR_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
163 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
164 /* Move input pool pointer into internal pointer. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
165 pool = (PM_PCB *) pool_ptr; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
166 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
167 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
168 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
169 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
170 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
171 TCT_Check_Stack(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
172 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
173 #endif | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
174 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
175 #ifdef NU_ENABLE_HISTORY | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
176 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
177 /* Make an entry that corresponds to this function in the system history | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
178 log. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
179 HIC_Make_History_Entry(NU_CREATE_PARTITION_POOL_ID, (UNSIGNED) pool, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
180 (UNSIGNED) name, (UNSIGNED) start_address); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
181 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
182 #endif | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
183 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
184 /* First, clear the partition pool ID just in case it is an old | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
185 pool control block. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
186 pool -> pm_id = 0; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
187 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
188 /* Fill in the partition pool name. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
189 for (i = 0; i < NU_MAX_NAME; i++) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
190 pool -> pm_name[i] = name[i]; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
191 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
192 /* Save the starting address and size parameters in the partition control | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
193 block. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
194 pool -> pm_start_address = start_address; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
195 pool -> pm_pool_size = pool_size; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
196 pool -> pm_partition_size = partition_size; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
197 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
198 /* Setup the partition pool suspension type. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
199 if (suspend_type == NU_FIFO) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
200 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
201 /* FIFO suspension is selected, setup the flag accordingly. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
202 pool -> pm_fifo_suspend = NU_TRUE; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
203 else | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
204 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
205 /* Priority suspension is selected. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
206 pool -> pm_fifo_suspend = NU_FALSE; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
207 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
208 /* Clear the suspension list pointer. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
209 pool -> pm_suspension_list = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
210 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
211 /* Clear the number of tasks waiting on the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
212 pool -> pm_tasks_waiting = 0; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
213 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
214 /* Initialize link pointers. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
215 pool -> pm_created.cs_previous = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
216 pool -> pm_created.cs_next = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
217 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
218 /* Initialize the partition parameters. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
219 pool -> pm_available = 0; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
220 pool -> pm_allocated = 0; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
221 pool -> pm_available_list = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
222 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
223 /* Convert the supplied partition size into something that is evenly | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
224 divisible by the sizeof an UNSIGNED data element. This insures | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
225 UNSIGNED alignment. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
226 partition_size = | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
227 ((partition_size + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
228 sizeof(UNSIGNED); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
229 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
230 /* Loop to build and link as many partitions as possible from within the | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
231 specified memory area. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
232 pointer = (BYTE_PTR) start_address; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
233 while (pool_size >= (PM_OVERHEAD + partition_size)) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
234 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
235 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
236 /* There is room for another partition. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
237 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
238 /* Cast the current pointer variable to a header pointer. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
239 header_ptr = (PM_HEADER *) pointer; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
240 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
241 /* Now, build a header and link it into the partition pool | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
242 available list- at the front. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
243 header_ptr -> pm_partition_pool = pool; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
244 header_ptr -> pm_next_available = pool -> pm_available_list; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
245 pool -> pm_available_list = header_ptr; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
246 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
247 /* Increment the number of partitions available in the pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
248 pool -> pm_available++; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
249 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
250 /* Decrement the number of bytes remaining in the pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
251 pool_size = pool_size - (PM_OVERHEAD + partition_size); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
252 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
253 /* Increment the working pointer to the next partition position. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
254 pointer = pointer + (PM_OVERHEAD + partition_size); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
255 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
256 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
257 /* Protect against access to the list of created partition pools. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
258 TCT_Protect(&PMD_List_Protect); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
259 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
260 /* At this point the partition pool is completely built. The ID can | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
261 now be set and it can be linked into the created partition pool list. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
262 pool -> pm_id = PM_PARTITION_ID; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
263 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
264 /* Link the partition pool into the list of created partition pools and | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
265 increment the total number of pools in the system. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
266 CSC_Place_On_List(&PMD_Created_Pools_List, &(pool -> pm_created)); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
267 PMD_Total_Pools++; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
268 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
269 #ifdef INCLUDE_PROVIEW | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
270 _RTProf_DumpPartitionPool(RT_PROF_CREATE_PARTITION_POOL,pool,RT_PROF_OK); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
271 #endif /* INCLUDE_PROVIEW */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
272 /* Release protection against access to the list of created partition | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
273 pools. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
274 TCT_Unprotect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
275 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
276 /* Return to user mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
277 NU_USER_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
278 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
279 /* Return successful completion. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
280 return(NU_SUCCESS); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
281 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
282 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
283 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
284 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
285 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
286 /* FUNCTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
287 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
288 /* PMC_Delete_Partition_Pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
289 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
290 /* DESCRIPTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
291 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
292 /* This function deletes a memory partition pool and removes it from*/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
293 /* the list of created partition pools. All tasks suspended on the */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
294 /* partition pool are resumed with the appropriate error status. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
295 /* Note that this function does not free any memory associated with */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
296 /* either the pool area or the pool control block. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
297 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
298 /* CALLED BY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
299 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
300 /* Application */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
301 /* PMCE_Delete_Partition_Pool Error checking shell */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
302 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
303 /* CALLS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
304 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
305 /* CSC_Remove_From_List Remove node from list */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
306 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
307 /* TCC_Resume_Task Resume a suspended task */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
308 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
309 /* TCT_Control_To_System Transfer control to system */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
310 /* TCT_Protect Protect created list */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
311 /* TCT_Set_Current_Protect Modify current protection */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
312 /* TCT_System_Protect Setup system protection */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
313 /* TCT_System_Unprotect Release system protection */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
314 /* TCT_Unprotect Release protection */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
315 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
316 /* INPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
317 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
318 /* pool_ptr Partition pool control block */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
319 /* pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
320 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
321 /* OUTPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
322 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
323 /* NU_SUCCESS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
324 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
325 /* HISTORY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
326 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
327 /* DATE REMARKS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
328 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
329 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
330 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
331 /* 03-01-1994 Changed function interfaces to */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
332 /* match those in prototype, */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
333 /* added register options, changed */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
334 /* protection logic to reduce */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
335 /* overhead, resulting in */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
336 /* version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
337 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
338 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
339 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
340 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
341 STATUS PMC_Delete_Partition_Pool(NU_PARTITION_POOL *pool_ptr) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
342 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
343 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
344 R1 PM_PCB *pool; /* Pool control block ptr */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
345 PM_SUSPEND *suspend_ptr; /* Suspend block pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
346 PM_SUSPEND *next_ptr; /* Next suspend block */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
347 STATUS preempt; /* Status for resume call */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
348 NU_SUPERV_USER_VARIABLES | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
349 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
350 /* Switch to supervisor mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
351 NU_SUPERVISOR_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
352 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
353 /* Move input pool pointer into internal pointer. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
354 pool = (PM_PCB *) pool_ptr; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
355 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
356 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
357 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
358 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
359 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
360 TCT_Check_Stack(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
361 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
362 #endif | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
363 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
364 #ifdef NU_ENABLE_HISTORY | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
365 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
366 /* Make an entry that corresponds to this function in the system history | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
367 log. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
368 HIC_Make_History_Entry(NU_DELETE_PARTITION_POOL_ID, (UNSIGNED) pool, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
369 (UNSIGNED) 0, (UNSIGNED) 0); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
370 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
371 #endif | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
372 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
373 /* Protect against simultaneous access to the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
374 TCT_System_Protect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
375 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
376 #ifdef INCLUDE_PROVIEW | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
377 _RTProf_DumpPartitionPool(RT_PROF_DELETE_PARTITION_POOL,pool,RT_PROF_OK); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
378 #endif /* INCLUDE_PROVIEW */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
379 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
380 /* Clear the partition pool ID. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
381 pool -> pm_id = 0; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
382 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
383 /* Release protection. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
384 TCT_Unprotect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
385 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
386 /* Protect against access to the list of created partition pools. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
387 TCT_Protect(&PMD_List_Protect); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
388 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
389 /* Remove the partition pool from the list of created partition pools. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
390 CSC_Remove_From_List(&PMD_Created_Pools_List, &(pool -> pm_created)); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
391 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
392 /* Decrement the total number of created partition pools. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
393 PMD_Total_Pools--; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
394 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
395 /* Pickup the suspended task pointer list. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
396 suspend_ptr = pool -> pm_suspension_list; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
397 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
398 /* Walk the chain task(s) currently suspended on the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
399 preempt = 0; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
400 while (suspend_ptr) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
401 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
402 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
403 /* Protect against system access. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
404 TCT_System_Protect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
405 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
406 /* Resume the suspended task. Insure that the status returned is | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
407 NU_POOL_DELETED. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
408 suspend_ptr -> pm_return_pointer = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
409 suspend_ptr -> pm_return_status = NU_POOL_DELETED; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
410 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
411 /* Point to the next suspend structure in the link. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
412 next_ptr = (PM_SUSPEND *) (suspend_ptr -> pm_suspend_link.cs_next); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
413 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
414 /* Resume the specified task. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
415 preempt = preempt | | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
416 TCC_Resume_Task((NU_TASK *) suspend_ptr -> pm_suspended_task, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
417 NU_PARTITION_SUSPEND); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
418 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
419 /* Determine if the next is the same as the current pointer. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
420 if (next_ptr == pool -> pm_suspension_list) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
421 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
422 /* Clear the suspension pointer to signal the end of the list | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
423 traversal. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
424 suspend_ptr = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
425 else | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
426 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
427 /* Move the next pointer into the suspend block pointer. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
428 suspend_ptr = next_ptr; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
429 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
430 /* Modify current protection. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
431 TCT_Set_Current_Protect(&PMD_List_Protect); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
432 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
433 /* Clear the system protection. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
434 TCT_System_Unprotect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
435 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
436 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
437 /* Determine if preemption needs to occur. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
438 if (preempt) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
439 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
440 /* Transfer control to system to facilitate preemption. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
441 TCT_Control_To_System(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
442 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
443 /* Release protection against access to the list of created partition | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
444 pools. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
445 TCT_Unprotect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
446 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
447 /* Return to user mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
448 NU_USER_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
449 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
450 /* Return a successful completion. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
451 return(NU_SUCCESS); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
452 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
453 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
454 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
455 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
456 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
457 /* FUNCTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
458 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
459 /* PMC_Allocate_Partition */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
460 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
461 /* DESCRIPTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
462 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
463 /* This function allocates a memory partition from the specified */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
464 /* memory partition pool. If a memory partition is currently */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
465 /* available, this function is completed immediately. Otherwise, */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
466 /* if there are no partitions currently available, suspension is */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
467 /* possible. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
468 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
469 /* CALLED BY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
470 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
471 /* Application */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
472 /* PMCE_Allocate_Partition Error checking shell */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
473 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
474 /* CALLS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
475 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
476 /* CSC_Place_On_List Place on suspend list */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
477 /* CSC_Priority_Place_On_List Place on priority list */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
478 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
479 /* TCC_Suspend_Task Suspend calling task */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
480 /* TCC_Task_Priority Pickup task's priority */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
481 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
482 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
483 /* TCT_System_Protect Protect partition pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
484 /* TCT_Unprotect Release protection */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
485 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
486 /* INPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
487 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
488 /* pool_ptr Memory partition pool pointer*/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
489 /* return_pointer Pointer to the destination */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
490 /* memory pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
491 /* suspend Suspension option if full */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
492 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
493 /* OUTPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
494 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
495 /* NU_SUCCESS If service is successful */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
496 /* NU_NO_PARTITION No partitions are available */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
497 /* NU_TIMEOUT If timeout on service */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
498 /* NU_POOL_DELETED If partition pool deleted */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
499 /* during suspension */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
500 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
501 /* HISTORY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
502 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
503 /* DATE REMARKS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
504 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
505 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
506 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
507 /* 03-01-1994 Changed function interfaces to */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
508 /* match those in prototype, */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
509 /* added register options, changed */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
510 /* protection logic to reduce */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
511 /* overhead, resulting in */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
512 /* version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
513 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
514 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
515 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
516 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
517 STATUS PMC_Allocate_Partition(NU_PARTITION_POOL *pool_ptr, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
518 VOID **return_pointer, UNSIGNED suspend) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
519 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
520 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
521 R1 PM_PCB *pool; /* Pool control block ptr */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
522 R2 PM_SUSPEND *suspend_ptr; /* Suspend block pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
523 PM_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
524 R3 PM_HEADER *partition_ptr; /* Pointer to partition */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
525 TC_TCB *task; /* Task pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
526 STATUS status; /* Completion status */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
527 NU_SUPERV_USER_VARIABLES | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
528 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
529 /* Switch to supervisor mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
530 NU_SUPERVISOR_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
531 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
532 /* Move input pool pointer into internal pointer. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
533 pool = (PM_PCB *) pool_ptr; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
534 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
535 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
536 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
537 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
538 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
539 TCT_Check_Stack(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
540 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
541 #endif | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
542 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
543 #ifdef NU_ENABLE_HISTORY | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
544 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
545 /* Make an entry that corresponds to this function in the system history | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
546 log. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
547 HIC_Make_History_Entry(NU_ALLOCATE_PARTITION_ID, (UNSIGNED) pool, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
548 (UNSIGNED) return_pointer, (UNSIGNED) suspend); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
549 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
550 #endif | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
551 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
552 /* Initialize the status as successful. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
553 status = NU_SUCCESS; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
554 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
555 /* Protect against simultaneous access to the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
556 TCT_System_Protect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
557 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
558 /* Determine if there is an available memory partition. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
559 if (pool -> pm_available) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
560 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
561 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
562 /* Partition available. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
563 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
564 /* Decrement the available count. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
565 pool -> pm_available--; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
566 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
567 /* Increment the allocated count. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
568 pool -> pm_allocated++; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
569 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
570 /* Unlink the first memory partition and return the pointer to the | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
571 caller. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
572 partition_ptr = pool -> pm_available_list; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
573 pool -> pm_available_list = partition_ptr -> pm_next_available; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
574 partition_ptr -> pm_next_available = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
575 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
576 /* Return a memory address to the caller. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
577 *return_pointer = (VOID *) (((BYTE_PTR) partition_ptr) + PM_OVERHEAD); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
578 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
579 #ifdef INCLUDE_PROVIEW | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
580 _RTProf_DumpPartitionPool(RT_PROF_ALLOCATE_PARTITION,pool,RT_PROF_OK); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
581 #endif /* INCLUDE_PROVIEW */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
582 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
583 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
584 else | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
585 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
586 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
587 /* A partition is not available. Determine if suspension is | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
588 required. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
589 if (suspend) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
590 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
591 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
592 /* Suspension is selected. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
593 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
594 /* Increment the number of tasks waiting. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
595 pool -> pm_tasks_waiting++; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
596 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
597 #ifdef INCLUDE_PROVIEW | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
598 _RTProf_DumpPartitionPool(RT_PROF_ALLOCATE_PARTITION,pool,RT_PROF_WAIT); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
599 #endif /* INCLUDE_PROVIEW */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
600 /* Setup the suspend block and suspend the calling task. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
601 suspend_ptr = &suspend_block; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
602 suspend_ptr -> pm_partition_pool = pool; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
603 suspend_ptr -> pm_suspend_link.cs_next = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
604 suspend_ptr -> pm_suspend_link.cs_previous = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
605 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
606 suspend_ptr -> pm_suspended_task = task; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
607 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
608 /* Determine if priority or FIFO suspension is associated with the | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
609 partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
610 if (pool -> pm_fifo_suspend) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
611 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
612 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
613 /* FIFO suspension is required. Link the suspend block into | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
614 the list of suspended tasks on this partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
615 CSC_Place_On_List((CS_NODE **) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
616 &(pool -> pm_suspension_list), | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
617 &(suspend_ptr -> pm_suspend_link)); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
618 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
619 else | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
620 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
621 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
622 /* Get the priority of the current thread so the suspend block | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
623 can be placed in the appropriate place. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
624 suspend_ptr -> pm_suspend_link.cs_priority = | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
625 TCC_Task_Priority(task); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
626 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
627 CSC_Priority_Place_On_List((CS_NODE **) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
628 &(pool -> pm_suspension_list), | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
629 &(suspend_ptr -> pm_suspend_link)); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
630 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
631 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
632 /* Finally, suspend the calling task. Note that the suspension call | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
633 automatically clears the protection on the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
634 TCC_Suspend_Task((NU_TASK *) task, NU_PARTITION_SUSPEND, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
635 PMC_Cleanup, suspend_ptr, suspend); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
636 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
637 /* Pickup the return status. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
638 status = suspend_ptr -> pm_return_status; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
639 *return_pointer = suspend_ptr -> pm_return_pointer; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
640 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
641 else | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
642 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
643 /* No suspension requested. Simply return an error status. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
644 status = NU_NO_PARTITION; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
645 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
646 #ifdef INCLUDE_PROVIEW | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
647 _RTProf_DumpPartitionPool(RT_PROF_ALLOCATE_PARTITION,pool,RT_PROF_FAIL); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
648 #endif /* INCLUDE_PROVIEW */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
649 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
650 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
651 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
652 /* Release protection of the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
653 TCT_Unprotect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
654 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
655 /* Return to user mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
656 NU_USER_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
657 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
658 /* Return the completion status. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
659 return(status); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
660 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
661 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
662 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
663 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
664 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
665 /* FUNCTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
666 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
667 /* PMC_Deallocate_Partition */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
668 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
669 /* DESCRIPTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
670 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
671 /* This function deallocates a previously allocated partition. If */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
672 /* there is a task waiting for a partition, the partition is simply */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
673 /* given to the waiting task and the waiting task is resumed. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
674 /* Otherwise, the partition is returned to the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
675 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
676 /* CALLED BY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
677 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
678 /* Application */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
679 /* PMCE_Deallocate_Partition Error checking shell */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
680 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
681 /* CALLS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
682 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
683 /* CSC_Remove_From_List Remove from suspend list */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
684 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
685 /* TCC_Resume_Task Resume a suspended task */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
686 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
687 /* TCT_Control_To_System Transfer control to system */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
688 /* TCT_System_Protect Protect partition pool */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
689 /* TCT_Unprotect Release protection */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
690 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
691 /* INPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
692 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
693 /* partition Pointer to partition memory */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
694 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
695 /* OUTPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
696 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
697 /* NU_SUCCESS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
698 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
699 /* HISTORY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
700 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
701 /* DATE REMARKS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
702 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
703 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
704 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
705 /* 03-01-1994 Added register options, changed */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
706 /* protection logic to reduce */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
707 /* overhead, resulting in */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
708 /* version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
709 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
710 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
711 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
712 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
713 STATUS PMC_Deallocate_Partition(VOID *partition) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
714 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
715 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
716 R1 PM_PCB *pool; /* Pool pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
717 R3 PM_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
718 R2 PM_HEADER *header_ptr; /* Pointer to partition hdr */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
719 STATUS preempt; /* Preemption flag */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
720 STATUS status; /* Completion status */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
721 NU_SUPERV_USER_VARIABLES | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
722 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
723 /* Switch to supervisor mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
724 NU_SUPERVISOR_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
725 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
726 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
727 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
728 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
729 TCT_Check_Stack(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
730 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
731 #endif | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
732 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
733 #ifdef NU_ENABLE_HISTORY | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
734 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
735 /* Make an entry that corresponds to this function in the system history | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
736 log. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
737 HIC_Make_History_Entry(NU_DEALLOCATE_PARTITION_ID, (UNSIGNED) partition, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
738 (UNSIGNED) 0, (UNSIGNED) 0); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
739 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
740 #endif | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
741 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
742 /* Initialize the status as successful. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
743 status = NU_SUCCESS; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
744 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
745 /* Pickup the associated pool's pointer. It is inside the header of | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
746 each partition. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
747 header_ptr = (PM_HEADER *) (((BYTE_PTR) partition) - PM_OVERHEAD); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
748 pool = header_ptr -> pm_partition_pool; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
749 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
750 /* Protect against simultaneous access to the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
751 TCT_System_Protect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
752 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
753 /* Determine if another task is waiting for a partition from the pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
754 if (pool -> pm_tasks_waiting) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
755 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
756 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
757 /* Yes, another task is waiting for a partition from the pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
758 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
759 /* Decrement the number of tasks waiting counter. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
760 pool -> pm_tasks_waiting--; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
761 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
762 #ifdef INCLUDE_PROVIEW | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
763 _RTProf_DumpPartitionPool(RT_PROF_DEALLOCATE_PARTITION,pool,RT_PROF_OK); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
764 #endif /* INCLUDE_PROVIEW */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
765 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
766 /* Remove the first suspended block from the list. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
767 suspend_ptr = pool -> pm_suspension_list; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
768 CSC_Remove_From_List((CS_NODE **) &(pool -> pm_suspension_list), | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
769 &(suspend_ptr -> pm_suspend_link)); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
770 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
771 /* Setup the appropriate return value. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
772 suspend_ptr -> pm_return_status = NU_SUCCESS; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
773 suspend_ptr -> pm_return_pointer = partition; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
774 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
775 /* Resume the suspended task. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
776 preempt = | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
777 TCC_Resume_Task((NU_TASK *) suspend_ptr -> pm_suspended_task, | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
778 NU_PARTITION_SUSPEND); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
779 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
780 /* Determine if a preempt condition is present. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
781 if (preempt) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
782 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
783 /* Transfer control to the system if the resumed task function | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
784 detects a preemption condition. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
785 TCT_Control_To_System(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
786 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
787 else | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
788 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
789 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
790 /* Increment the available partitions counter. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
791 pool -> pm_available++; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
792 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
793 /* Decrement the allocated partitions counter. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
794 pool -> pm_allocated--; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
795 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
796 /* Place the partition back on the available list. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
797 header_ptr -> pm_next_available = pool -> pm_available_list; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
798 pool -> pm_available_list = header_ptr; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
799 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
800 #ifdef INCLUDE_PROVIEW | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
801 _RTProf_DumpPartitionPool(RT_PROF_DEALLOCATE_PARTITION,pool,RT_PROF_OK); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
802 #endif /* INCLUDE_PROVIEW */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
803 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
804 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
805 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
806 /* Release protection of the partition pool. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
807 TCT_Unprotect(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
808 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
809 /* Return to user mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
810 NU_USER_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
811 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
812 /* Return the completion status. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
813 return(status); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
814 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
815 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
816 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
817 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
818 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
819 /* FUNCTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
820 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
821 /* PMC_Cleanup */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
822 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
823 /* DESCRIPTION */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
824 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
825 /* This function is responsible for removing a suspension block */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
826 /* from a partition pool. It is not called unless a timeout or */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
827 /* a task terminate is in progress. Note that protection is */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
828 /* already in effect - the same protection at suspension time. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
829 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
830 /* CALLED BY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
831 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
832 /* TCC_Timeout Task timeout */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
833 /* TCC_Terminate Task terminate */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
834 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
835 /* CALLS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
836 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
837 /* CSC_Remove_From_List Remove suspend block from */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
838 /* the suspension list */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
839 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
840 /* INPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
841 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
842 /* information Pointer to suspend block */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
843 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
844 /* OUTPUTS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
845 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
846 /* None */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
847 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
848 /* HISTORY */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
849 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
850 /* DATE REMARKS */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
851 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
852 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
853 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
854 /* */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
855 /*************************************************************************/ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
856 VOID PMC_Cleanup(VOID *information) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
857 { | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
858 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
859 PM_SUSPEND *suspend_ptr; /* Suspension block pointer */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
860 NU_SUPERV_USER_VARIABLES | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
861 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
862 /* Switch to supervisor mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
863 NU_SUPERVISOR_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
864 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
865 /* Use the information pointer as a suspend pointer. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
866 suspend_ptr = (PM_SUSPEND *) information; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
867 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
868 /* By default, indicate that the service timed-out. It really does not | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
869 matter if this function is called from a terminate request since | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
870 the task does not resume. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
871 suspend_ptr -> pm_return_status = NU_TIMEOUT; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
872 suspend_ptr -> pm_return_pointer = NU_NULL; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
873 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
874 /* Decrement the number of tasks waiting counter. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
875 (suspend_ptr -> pm_partition_pool) -> pm_tasks_waiting--; | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
876 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
877 /* Unlink the suspend block from the suspension list. */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
878 CSC_Remove_From_List((CS_NODE **) | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
879 &((suspend_ptr -> pm_partition_pool) -> pm_suspension_list), | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
880 &(suspend_ptr -> pm_suspend_link)); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
881 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
882 /* Return to user mode */ | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
883 NU_USER_MODE(); | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
884 } | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
885 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
886 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
887 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
888 | 
| 
 
0f80e1e4dce4
src/nucleus: library C code import from FreeNucleus package
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
889 | 
