FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/nucleus/dmc.c @ 214:bdfdea886bea
gsm-fw/services/ffs: ffs_env.c and ffstrace.c compile
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> | 
|---|---|
| date | Mon, 06 Jan 2014 04:43:21 +0000 | 
| parents | afceeeb2cba1 | 
| children | 
| rev | line source | 
|---|---|
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
3 /* Copyright Mentor Graphics Corporation 2002 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
4 /* All Rights Reserved. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
5 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
6 /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
7 /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
8 /* SUBJECT TO LICENSE TERMS. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
9 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
10 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
11 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
12 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
13 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
14 /* FILE NAME VERSION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
15 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
16 /* dmc.c Nucleus PLUS 1.14 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
17 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
18 /* COMPONENT */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
19 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
20 /* DM - Dynamic Memory Management */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
21 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
22 /* DESCRIPTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
23 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
24 /* This file contains the core routines for the Dynamic Memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
25 /* Management component. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
26 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
27 /* DATA STRUCTURES */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
28 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
29 /* None */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
30 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
31 /* FUNCTIONS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
32 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
33 /* DMC_Create_Memory_Pool Create a dynamic memory pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
34 /* DMC_Delete_Memory_Pool Delete a dynamic memory pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
35 /* DMC_Allocate_Memory Allocate a memory block from */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
36 /* a dynamic memory pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
37 /* DMC_Deallocate_Memory Deallocate a memory block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
38 /* from a dynamic memory pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
39 /* DMC_Cleanup Cleanup on timeout or a */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
40 /* terminate condition */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
41 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
42 /* DEPENDENCIES */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
43 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
44 /* cs_extr.h Common Service functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
45 /* tc_extr.h Thread Control functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
46 /* dm_extr.h Partition functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
47 /* hi_extr.h History functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
48 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
49 /* HISTORY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
50 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
51 /* DATE REMARKS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
52 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
53 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
54 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
55 /* 08-09-1993 Corrected pointer retrieval */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
56 /* loop, resulting in version 1.0a */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
57 /* 08-09-1993 Verified version 1.0a */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
58 /* 03-01-1994 Moved non-core functions into */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
59 /* supplemental files, changed */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
60 /* function interfaces to match */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
61 /* those in prototype, added */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
62 /* register options, changed */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
63 /* protection logic to reduce */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
64 /* overhead, resulting in */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
65 /* version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
66 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
67 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
68 /* 04-17-1996 updated to version 1.2 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
69 /* 03-24-1998 Released version 1.3. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
70 /* 03-26-1999 Released 1.11m (new release */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
71 /* numbering scheme) */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
72 /* 04-17-2002 Released version 1.13m */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
73 /* 11-07-2002 Released version 1.14 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
74 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
75 #define NU_SOURCE_FILE | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
76 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
77 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
78 #include "cs_extr.h" /* Common service functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
79 #include "tc_extr.h" /* Thread control functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
80 #include "dm_extr.h" /* Dynamic memory functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
81 #include "hi_extr.h" /* History functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
82 #include "profiler.h" /* ProView interface */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
83 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
84 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
85 /* Define external inner-component global data references. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
86 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
87 extern CS_NODE *DMD_Created_Pools_List; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
88 extern UNSIGNED DMD_Total_Pools; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
89 extern TC_PROTECT DMD_List_Protect; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
90 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
91 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
92 /* Define internal component function prototypes. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
93 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
94 VOID DMC_Cleanup(VOID *information); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
95 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
96 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
97 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
98 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
99 /* FUNCTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
100 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
101 /* DMC_Create_Memory_Pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
102 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
103 /* DESCRIPTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
104 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
105 /* This function creates a dynamic memory pool and then places it */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
106 /* on the list of created dynamic memory pools. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
107 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
108 /* CALLED BY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
109 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
110 /* Application */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
111 /* DMCE_Create_Memory_Pool Error checking shell */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
112 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
113 /* CALLS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
114 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
115 /* CSC_Place_On_List Add node to linked-list */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
116 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
117 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
118 /* TCT_Protect Data structure protect */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
119 /* TCT_Unprotect Un-protect data structure */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
120 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
121 /* INPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
122 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
123 /* pool_ptr Memory pool control block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
124 /* pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
125 /* name Memory pool name */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
126 /* start_address Starting address of the pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
127 /* pool_size Number of bytes in the pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
128 /* min_allocation Minimum allocation size */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
129 /* suspend_type Suspension type */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
130 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
131 /* OUTPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
132 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
133 /* NU_SUCCESS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
134 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
135 /* HISTORY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
136 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
137 /* DATE REMARKS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
138 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
139 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
140 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
141 /* 03-01-1994 Changed function interfaces to */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
142 /* match those in prototype, */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
143 /* added register options, */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
144 /* resulting in version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
145 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
146 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
147 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
148 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
149 STATUS DMC_Create_Memory_Pool(NU_MEMORY_POOL *pool_ptr, CHAR *name, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
150 VOID *start_address, UNSIGNED pool_size, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
151 UNSIGNED min_allocation, OPTION suspend_type) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
152 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
153 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
154 R1 DM_PCB *pool; /* Pool control block ptr */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
155 INT i; /* Working index variable */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
156 DM_HEADER *header_ptr; /* Partition block header ptr*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
157 NU_SUPERV_USER_VARIABLES | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
158 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
159 /* Switch to supervisor mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
160 NU_SUPERVISOR_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
161 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
162 /* Move input pool pointer into internal pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
163 pool = (DM_PCB *) pool_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
164 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
165 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
166 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
167 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
168 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
169 TCT_Check_Stack(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
170 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
171 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
172 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
173 #ifdef NU_ENABLE_HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
174 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
175 /* Make an entry that corresponds to this function in the system history | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
176 log. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
177 HIC_Make_History_Entry(NU_CREATE_MEMORY_POOL_ID, (UNSIGNED) pool, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
178 (UNSIGNED) start_address, (UNSIGNED) pool_size); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
179 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
180 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
181 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
182 /* First, clear the partition pool ID just in case it is an old | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
183 pool control block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
184 pool -> dm_id = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
185 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
186 /* Fill in the partition pool name. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
187 for (i = 0; i < NU_MAX_NAME; i++) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
188 pool -> dm_name[i] = name[i]; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
189 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
190 /* Convert the pool's size into something that is evenly divisible by | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
191 the sizeof an UNSIGNED data element. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
192 pool_size = (pool_size/sizeof(UNSIGNED)) * sizeof(UNSIGNED); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
193 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
194 /* Save the starting address and size parameters in the dynamic memory | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
195 control block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
196 pool -> dm_start_address = start_address; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
197 pool -> dm_pool_size = pool_size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
198 pool -> dm_min_allocation = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
199 ((min_allocation + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
200 sizeof(UNSIGNED); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
201 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
202 /* Setup the dynamic memory pool suspension type. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
203 if (suspend_type == NU_FIFO) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
204 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
205 /* FIFO suspension is selected, setup the flag accordingly. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
206 pool -> dm_fifo_suspend = NU_TRUE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
207 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
208 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
209 /* Priority suspension is selected. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
210 pool -> dm_fifo_suspend = NU_FALSE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
211 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
212 /* Clear the suspension list pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
213 pool -> dm_suspension_list = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
214 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
215 /* Clear the number of tasks waiting on the dynamic memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
216 pool -> dm_tasks_waiting = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
217 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
218 /* Initialize link pointers. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
219 pool -> dm_created.cs_previous = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
220 pool -> dm_created.cs_next = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
221 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
222 /* Build a single block that has all of the memory. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
223 header_ptr = (DM_HEADER *) start_address; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
224 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
225 /* Initialize the memory parameters. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
226 pool -> dm_available = pool_size - (2 * DM_OVERHEAD); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
227 pool -> dm_memory_list = header_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
228 pool -> dm_search_ptr = header_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
229 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
230 /* Build the block header. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
231 header_ptr -> dm_memory_pool = pool; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
232 header_ptr -> dm_memory_free = NU_TRUE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
233 header_ptr -> dm_next_memory = (DM_HEADER *) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
234 (((BYTE_PTR) header_ptr) + pool -> dm_available + DM_OVERHEAD); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
235 header_ptr -> dm_previous_memory = header_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
236 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
237 /* Build the small trailer block that prevents block merging when the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
238 pool wraps around. Note that the list is circular so searching can | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
239 wrap across the physical end of the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
240 header_ptr = header_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
241 header_ptr -> dm_next_memory = (DM_HEADER *) start_address; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
242 header_ptr -> dm_previous_memory = (DM_HEADER *) start_address; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
243 header_ptr -> dm_memory_pool = pool; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
244 header_ptr -> dm_memory_free = NU_FALSE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
245 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
246 /* Initialize the protection structure. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
247 pool -> dm_protect.tc_tcb_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
248 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
249 /* Protect against access to the list of created memory pools. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
250 TCT_Protect(&DMD_List_Protect); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
251 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
252 /* At this point the dynamic memory pool is completely built. The ID can | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
253 now be set and it can be linked into the created dynamic memory | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
254 pool list. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
255 pool -> dm_id = DM_DYNAMIC_ID; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
256 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
257 /* Link the memory pool into the list of created memory pools and | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
258 increment the total number of pools in the system. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
259 CSC_Place_On_List(&DMD_Created_Pools_List, &(pool -> dm_created)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
260 DMD_Total_Pools++; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
261 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
262 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
263 _RTProf_DumpMemoryPool(RT_PROF_CREATE_MEMORY_POOL,pool,RT_PROF_OK); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
264 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
265 /* Release protection against access to the list of created memory | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
266 pools. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
267 TCT_Unprotect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
268 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
269 /* Return to user mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
270 NU_USER_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
271 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
272 /* Return successful completion. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
273 return(NU_SUCCESS); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
274 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
275 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
276 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
277 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
278 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
279 /* FUNCTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
280 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
281 /* DMC_Delete_Memory_Pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
282 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
283 /* DESCRIPTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
284 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
285 /* This function deletes a dynamic memory pool and removes it from */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
286 /* the list of created memory pools. All tasks suspended on the */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
287 /* memory pool are resumed with the appropriate error status. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
288 /* Note that this function does not free any memory associated with */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
289 /* either the pool area or the pool control block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
290 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
291 /* CALLED BY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
292 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
293 /* Application */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
294 /* DMCE_Delete_Memory_Pool Error checking shell */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
295 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
296 /* CALLS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
297 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
298 /* CSC_Remove_From_List Remove node from list */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
299 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
300 /* TCC_Resume_Task Resume a suspended task */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
301 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
302 /* TCT_Control_To_System Transfer control to system */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
303 /* TCT_Protect Protect created list */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
304 /* TCT_Set_Current_Protect Modify current protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
305 /* TCT_System_Protect Setup system protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
306 /* TCT_System_Unprotect Release system protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
307 /* TCT_Unprotect Release protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
308 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
309 /* INPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
310 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
311 /* pool_ptr Memory pool control block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
312 /* pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
313 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
314 /* OUTPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
315 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
316 /* NU_SUCCESS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
317 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
318 /* HISTORY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
319 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
320 /* DATE REMARKS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
321 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
322 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
323 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
324 /* 03-01-1994 Changed function interfaces to */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
325 /* match those in prototype, */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
326 /* added register options, changed */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
327 /* protection logic to reduce */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
328 /* overhead, resulting in */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
329 /* version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
330 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
331 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
332 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
333 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
334 STATUS DMC_Delete_Memory_Pool(NU_MEMORY_POOL *pool_ptr) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
335 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
336 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
337 R1 DM_PCB *pool; /* Pool control block ptr */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
338 DM_SUSPEND *suspend_ptr; /* Suspend block pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
339 DM_SUSPEND *next_ptr; /* Next suspend block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
340 STATUS preempt; /* Status for resume call */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
341 NU_SUPERV_USER_VARIABLES | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
342 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
343 /* Switch to supervisor mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
344 NU_SUPERVISOR_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
345 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
346 /* Move input pool pointer into internal pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
347 pool = (DM_PCB *) pool_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
348 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
349 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
350 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
351 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
352 TCT_Check_Stack(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
353 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
354 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
355 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
356 #ifdef NU_ENABLE_HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
357 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
358 /* Make an entry that corresponds to this function in the system history | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
359 log. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
360 HIC_Make_History_Entry(NU_DELETE_MEMORY_POOL_ID, (UNSIGNED) pool, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
361 (UNSIGNED) 0, (UNSIGNED) 0); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
362 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
363 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
364 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
365 /* Protect against simultaneous access to the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
366 TCT_Protect(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
367 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
368 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
369 _RTProf_DumpMemoryPool(RT_PROF_DELETE_MEMORY_POOL,pool,RT_PROF_OK); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
370 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
371 /* Clear the memory pool ID. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
372 pool -> dm_id = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
373 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
374 /* Release protection. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
375 TCT_Unprotect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
376 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
377 /* Protect against access to the list of created memory pools. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
378 TCT_Protect(&DMD_List_Protect); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
379 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
380 /* Remove the memory pool from the list of created memory pools. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
381 CSC_Remove_From_List(&DMD_Created_Pools_List, &(pool -> dm_created)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
382 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
383 /* Decrement the total number of created memory pools. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
384 DMD_Total_Pools--; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
385 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
386 /* Pickup the suspended task pointer list. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
387 suspend_ptr = pool -> dm_suspension_list; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
388 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
389 /* Walk the chain task(s) currently suspended on the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
390 preempt = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
391 while (suspend_ptr) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
392 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
393 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
394 /* Protect against system access. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
395 TCT_System_Protect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
396 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
397 /* Resume the suspended task. Insure that the status returned is | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
398 NU_POOL_DELETED. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
399 suspend_ptr -> dm_return_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
400 suspend_ptr -> dm_return_status = NU_POOL_DELETED; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
401 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
402 /* Point to the next suspend structure in the link. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
403 next_ptr = (DM_SUSPEND *) (suspend_ptr -> dm_suspend_link.cs_next); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
404 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
405 /* Resume the specified task. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
406 preempt = preempt | | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
407 TCC_Resume_Task((NU_TASK *) suspend_ptr -> dm_suspended_task, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
408 NU_MEMORY_SUSPEND); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
409 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
410 /* Determine if the next is the same as the current pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
411 if (next_ptr == pool -> dm_suspension_list) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
412 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
413 /* Clear the suspension pointer to signal the end of the list | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
414 traversal. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
415 suspend_ptr = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
416 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
417 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
418 /* Move the next pointer into the suspend block pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
419 suspend_ptr = next_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
420 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
421 /* Modify current protection. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
422 TCT_Set_Current_Protect(&DMD_List_Protect); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
423 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
424 /* Clear the system protection. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
425 TCT_System_Unprotect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
426 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
427 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
428 /* Determine if preemption needs to occur. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
429 if (preempt) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
430 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
431 /* Transfer control to system to facilitate preemption. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
432 TCT_Control_To_System(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
433 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
434 /* Release protection against access to the list of created memory | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
435 pools. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
436 TCT_Unprotect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
437 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
438 /* Return to user mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
439 NU_USER_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
440 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
441 /* Return a successful completion. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
442 return(NU_SUCCESS); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
443 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
444 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
445 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
446 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
447 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
448 /* FUNCTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
449 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
450 /* DMC_Allocate_Memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
451 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
452 /* DESCRIPTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
453 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
454 /* This function allocates memory from the specified dynamic memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
455 /* pool. If dynamic memory is currently available, this function */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
456 /* is completed immediately. Otherwise, if there is not enough */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
457 /* memory currently available, task suspension is possible. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
458 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
459 /* CALLED BY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
460 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
461 /* Application */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
462 /* DMCE_Allocate_Memory Error checking shell */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
463 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
464 /* CALLS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
465 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
466 /* CSC_Place_On_List Place on suspend list */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
467 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
468 /* TCC_Suspend_Task Suspend calling task */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
469 /* TCC_Task_Priority Pickup task priority */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
470 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
471 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
472 /* TCT_Protect Protect memory pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
473 /* TCT_Set_Suspend_Protect Save suspend protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
474 /* TCT_System_Protect Protect system structures */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
475 /* TCT_Unprotect Release protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
476 /* TCT_Unprotect_Specific Release specific protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
477 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
478 /* INPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
479 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
480 /* pool_ptr Memory pool pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
481 /* return_pointer Pointer to the destination */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
482 /* memory pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
483 /* size Number of bytes requested */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
484 /* suspend Suspension option if full */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
485 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
486 /* OUTPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
487 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
488 /* NU_SUCCESS If service is successful */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
489 /* NU_NO_MEMORY Memory not available */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
490 /* NU_TIMEOUT If timeout on service */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
491 /* NU_POOL_DELETED If memory pool deleted */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
492 /* during suspension */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
493 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
494 /* HISTORY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
495 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
496 /* DATE REMARKS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
497 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
498 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
499 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
500 /* 03-01-1994 Changed function interfaces to */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
501 /* match those in prototype, */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
502 /* added register options, changed */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
503 /* protection logic to reduce */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
504 /* overhead, resulting in */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
505 /* version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
506 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
507 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
508 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
509 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
510 STATUS DMC_Allocate_Memory(NU_MEMORY_POOL *pool_ptr, VOID **return_pointer, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
511 UNSIGNED size, UNSIGNED suspend) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
512 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
513 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
514 R1 DM_PCB *pool; /* Pool control block ptr */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
515 R2 DM_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
516 DM_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
517 R4 DM_HEADER *memory_ptr; /* Pointer to memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
518 R3 DM_HEADER *new_ptr; /* New split block pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
519 UNSIGNED free_size; /* Size of block found */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
520 TC_TCB *task; /* Task pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
521 STATUS status; /* Completion status */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
522 NU_SUPERV_USER_VARIABLES | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
523 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
524 /* Switch to supervisor mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
525 NU_SUPERVISOR_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
526 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
527 /* Move input pool pointer into internal pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
528 pool = (DM_PCB *) pool_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
529 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
530 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
531 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
532 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
533 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
534 TCT_Check_Stack(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
535 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
536 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
537 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
538 #ifdef NU_ENABLE_HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
539 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
540 /* Make an entry that corresponds to this function in the system history | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
541 log. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
542 HIC_Make_History_Entry(NU_ALLOCATE_MEMORY_ID, (UNSIGNED) pool, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
543 (UNSIGNED) return_pointer, (UNSIGNED) size); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
544 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
545 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
546 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
547 /* Initialize the status as successful. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
548 status = NU_SUCCESS; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
549 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
550 /* Adjust the request to a size evenly divisible by the number of bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
551 in an UNSIGNED data element. Also, check to make sure it is of the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
552 minimum size. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
553 if (size < pool -> dm_min_allocation) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
554 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
555 /* Change size to the minimum allocation. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
556 size = pool -> dm_min_allocation; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
557 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
558 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
559 /* Insure that size is a multiple of the UNSIGNED size. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
560 size = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
561 ((size + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * sizeof(UNSIGNED); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
562 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
563 /* Protect against simultaneous access to the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
564 TCT_Protect(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
565 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
566 /* Search the memory list for the first available block of memory that | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
567 satisfies the request. Note that blocks are merged during the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
568 deallocation function. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
569 memory_ptr = pool -> dm_search_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
570 do | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
571 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
572 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
573 /* Determine if the block is free and if it can satisfy the request. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
574 if (memory_ptr -> dm_memory_free) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
575 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
576 /* Calculate the free block size. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
577 free_size = (((BYTE_PTR) (memory_ptr -> dm_next_memory)) - | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
578 ((BYTE_PTR) memory_ptr)) - DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
579 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
580 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
581 /* There are no free bytes available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
582 free_size = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
583 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
584 /* Determine if the search should continue. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
585 if (free_size < size) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
586 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
587 /* Large enough block has not been found. Move the search | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
588 pointer to the next block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
589 memory_ptr = memory_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
590 } while((free_size < size) && (memory_ptr != pool -> dm_search_ptr)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
591 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
592 /* Determine if the memory is available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
593 if (free_size >= size) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
594 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
595 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
596 /* A block that satisfies the request has been found. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
597 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
598 /* Determine if the block needs to be split. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
599 if (free_size >= (size + DM_OVERHEAD + pool -> dm_min_allocation)) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
600 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
601 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
602 /* Yes, split the block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
603 new_ptr = (DM_HEADER *) (((BYTE_PTR) memory_ptr) + size + | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
604 DM_OVERHEAD); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
605 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
606 /* Mark the new block as free. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
607 new_ptr -> dm_memory_free = NU_TRUE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
608 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
609 /* Put the pool pointer into the new block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
610 new_ptr -> dm_memory_pool = pool; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
611 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
612 /* Build the necessary pointers. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
613 new_ptr -> dm_previous_memory = memory_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
614 new_ptr -> dm_next_memory = memory_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
615 (new_ptr -> dm_next_memory) -> dm_previous_memory = new_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
616 memory_ptr -> dm_next_memory = new_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
617 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
618 /* Decrement the available byte count. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
619 pool -> dm_available = pool -> dm_available - size - DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
620 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
621 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
622 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
623 /* Decrement the entire free size from the available bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
624 count. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
625 pool -> dm_available = pool -> dm_available - free_size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
626 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
627 /* Mark the allocated block as not available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
628 memory_ptr -> dm_memory_free = NU_FALSE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
629 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
630 /* Should the search pointer be moved? */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
631 if (pool -> dm_search_ptr == memory_ptr) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
632 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
633 /* Move the search pointer to the next free memory slot. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
634 pool -> dm_search_ptr = memory_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
635 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
636 /* Return a memory address to the caller. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
637 *return_pointer = (VOID *) (((BYTE_PTR) memory_ptr) + DM_OVERHEAD); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
638 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
639 _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_OK); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
640 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
641 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
642 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
643 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
644 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
645 /* Enough dynamic memory is not available. Determine if suspension is | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
646 required. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
647 if (suspend) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
648 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
649 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
650 /* Suspension is selected. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
651 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
652 /* Increment the number of tasks waiting. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
653 pool -> dm_tasks_waiting++; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
654 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
655 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
656 _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_WAIT); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
657 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
658 /* Setup the suspend block and suspend the calling task. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
659 suspend_ptr = &suspend_block; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
660 suspend_ptr -> dm_memory_pool = pool; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
661 suspend_ptr -> dm_request_size = size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
662 suspend_ptr -> dm_suspend_link.cs_next = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
663 suspend_ptr -> dm_suspend_link.cs_previous = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
664 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
665 suspend_ptr -> dm_suspended_task = task; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
666 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
667 /* Determine if priority or FIFO suspension is associated with the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
668 memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
669 if (pool -> dm_fifo_suspend) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
670 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
671 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
672 /* FIFO suspension is required. Link the suspend block into | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
673 the list of suspended tasks on this memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
674 CSC_Place_On_List((CS_NODE **) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
675 &(pool -> dm_suspension_list), | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
676 &(suspend_ptr -> dm_suspend_link)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
677 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
678 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
679 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
680 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
681 /* Get the priority of the current thread so the suspend block | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
682 can be placed in the appropriate place. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
683 suspend_ptr -> dm_suspend_link.cs_priority = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
684 TCC_Task_Priority(task); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
685 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
686 CSC_Priority_Place_On_List((CS_NODE **) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
687 &(pool -> dm_suspension_list), | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
688 &(suspend_ptr -> dm_suspend_link)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
689 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
690 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
691 /* Protect against system access. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
692 TCT_System_Protect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
693 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
694 /* Save the list protection in preparation for suspension. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
695 TCT_Set_Suspend_Protect(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
696 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
697 /* Release protection of dynamic memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
698 TCT_Unprotect_Specific(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
699 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
700 /* Finally, suspend the calling task. Note that the suspension call | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
701 automatically clears the system protection. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
702 TCC_Suspend_Task((NU_TASK *) task, NU_MEMORY_SUSPEND, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
703 DMC_Cleanup, suspend_ptr, suspend); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
704 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
705 /* Pickup the return status. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
706 status = suspend_ptr -> dm_return_status; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
707 *return_pointer = suspend_ptr -> dm_return_pointer; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
708 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
709 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
710 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
711 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
712 /* No suspension requested. Simply return an error status. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
713 status = NU_NO_MEMORY; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
714 *return_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
715 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
716 _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_FAIL); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
717 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
718 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
719 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
720 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
721 /* Release protection of the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
722 TCT_Unprotect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
723 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
724 /* Return to user mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
725 NU_USER_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
726 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
727 /* Return the completion status. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
728 return(status); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
729 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
730 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
731 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
732 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
733 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
734 /* FUNCTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
735 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
736 /* DMC_Deallocate_Memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
737 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
738 /* DESCRIPTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
739 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
740 /* This function deallocates a previously allocated dynamic memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
741 /* block. The deallocated dynamic memory block is merged with any */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
742 /* adjacent neighbors. This insures that there are no consecutive */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
743 /* blocks of free memory in the pool (makes the search easier!). */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
744 /* If there is a task waiting for dynamic memory, a determination */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
745 /* of whether or not the request can now be satisfied is made after */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
746 /* the deallocation is complete. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
747 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
748 /* CALLED BY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
749 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
750 /* Application */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
751 /* DMCE_Deallocate_Memory Error checking shell */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
752 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
753 /* CALLS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
754 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
755 /* CSC_Remove_From_List Remove from suspend list */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
756 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
757 /* TCC_Resume_Task Resume a suspended task */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
758 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
759 /* TCT_Control_To_System Transfer control to system */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
760 /* TCT_Set_Current_Protect Set current protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
761 /* TCT_System_Protect Protect system structures */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
762 /* TCT_System_Unprotect Release system protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
763 /* TCT_Protect Protect dynamic memory pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
764 /* TCT_Unprotect Release protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
765 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
766 /* INPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
767 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
768 /* memory Pointer to dynamic memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
769 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
770 /* OUTPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
771 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
772 /* NU_SUCCESS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
773 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
774 /* HISTORY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
775 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
776 /* DATE REMARKS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
777 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
778 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
779 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
780 /* 03-01-1994 Added register options, changed */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
781 /* protection logic to reduce */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
782 /* overhead, resulting in */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
783 /* version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
784 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
785 /* 03-18-1994 Verified version 1.1 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
786 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
787 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
788 STATUS DMC_Deallocate_Memory(VOID *memory) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
789 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
790 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
791 R1 DM_PCB *pool; /* Pool pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
792 R3 DM_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
793 R2 DM_HEADER *header_ptr; /* Pointer to memory hdr */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
794 R4 DM_HEADER *new_ptr; /* New memory block pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
795 UNSIGNED size; /* Suspended task request */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
796 UNSIGNED free_size; /* Amount of free bytes */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
797 STATUS preempt; /* Preemption flag */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
798 STATUS status; /* Completion status */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
799 NU_SUPERV_USER_VARIABLES | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
800 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
801 /* Switch to supervisor mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
802 NU_SUPERVISOR_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
803 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
804 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
805 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
806 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
807 TCT_Check_Stack(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
808 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
809 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
810 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
811 #ifdef NU_ENABLE_HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
812 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
813 /* Make an entry that corresponds to this function in the system history | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
814 log. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
815 HIC_Make_History_Entry(NU_DEALLOCATE_MEMORY_ID, (UNSIGNED) memory, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
816 (UNSIGNED) 0, (UNSIGNED) 0); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
817 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
818 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
819 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
820 /* Initialize the status as successful. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
821 status = NU_SUCCESS; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
822 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
823 /* Pickup the associated pool's pointer. It is inside the header of | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
824 each memory. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
825 header_ptr = (DM_HEADER *) (((BYTE_PTR) memory) - DM_OVERHEAD); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
826 pool = header_ptr -> dm_memory_pool; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
827 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
828 /* Protect against simultaneous access to the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
829 TCT_Protect(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
830 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
831 /* Mark the memory as available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
832 header_ptr -> dm_memory_free = NU_TRUE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
833 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
834 /* Adjust the available number of bytes. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
835 pool -> dm_available = pool -> dm_available + | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
836 (((BYTE_PTR) (header_ptr -> dm_next_memory)) - | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
837 ((BYTE_PTR) header_ptr)) - DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
838 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
839 /* Determine if the block can be merged with the previous neighbor. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
840 if ((header_ptr -> dm_previous_memory) -> dm_memory_free) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
841 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
842 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
843 /* Adjust the available number of bytes. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
844 pool -> dm_available = pool -> dm_available + DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
845 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
846 /* Yes, merge block with previous neighbor. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
847 (header_ptr -> dm_previous_memory) -> dm_next_memory = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
848 header_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
849 (header_ptr -> dm_next_memory) -> dm_previous_memory = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
850 header_ptr -> dm_previous_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
851 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
852 /* Move header pointer to previous. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
853 header_ptr = header_ptr -> dm_previous_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
854 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
855 /* Adjust the search pointer to the new merged block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
856 pool -> dm_search_ptr = header_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
857 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
858 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
859 /* Determine if the block can be merged with the next neighbor. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
860 if ((header_ptr -> dm_next_memory) -> dm_memory_free) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
861 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
862 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
863 /* Adjust the available number of bytes. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
864 pool -> dm_available = pool -> dm_available + DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
865 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
866 /* Yes, merge block with next neighbor. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
867 new_ptr = header_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
868 (new_ptr -> dm_next_memory) -> dm_previous_memory = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
869 header_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
870 header_ptr -> dm_next_memory = new_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
871 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
872 /* Adjust the search pointer to the new merged block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
873 pool -> dm_search_ptr = header_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
874 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
875 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
876 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
877 _RTProf_DumpMemoryPool(RT_PROF_DEALLOCATE_MEMORY,pool,RT_PROF_OK); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
878 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
879 /* Determine if another task is waiting for memory from the pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
880 suspend_ptr = pool -> dm_suspension_list; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
881 preempt = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
882 while (suspend_ptr) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
883 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
884 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
885 /* Yes, another task is waiting for memory from the pool. Search | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
886 the pool in the same manner as the memory allocation function. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
887 size = suspend_ptr -> dm_request_size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
888 header_ptr = pool -> dm_search_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
889 do | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
890 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
891 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
892 /* Determine if the block is free and if it can satisfy the request | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
893 of the first task waiting. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
894 if (header_ptr -> dm_memory_free) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
895 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
896 /* Calculate the free block size. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
897 free_size = (((BYTE_PTR) (header_ptr -> dm_next_memory)) - | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
898 ((BYTE_PTR) header_ptr)) - DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
899 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
900 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
901 /* There are no free bytes available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
902 free_size = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
903 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
904 /* Determine if the search should continue. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
905 if (free_size < size) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
906 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
907 /* Large enough block has not been found. Move the search | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
908 pointer to the next block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
909 header_ptr = header_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
910 } while((free_size < size) && (header_ptr != pool -> dm_search_ptr)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
911 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
912 /* Determine if the memory is available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
913 if (free_size >= size) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
914 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
915 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
916 /* A block that satisfies the request has been found. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
917 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
918 /* Determine if the block needs to be split. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
919 if (free_size >= (size + DM_OVERHEAD + pool -> dm_min_allocation)) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
920 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
921 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
922 /* Yes, split the block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
923 new_ptr = (DM_HEADER *) (((BYTE_PTR) header_ptr) + size + | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
924 DM_OVERHEAD); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
925 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
926 /* Mark the new block as free. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
927 new_ptr -> dm_memory_free = NU_TRUE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
928 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
929 /* Put the pool pointer into the new block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
930 new_ptr -> dm_memory_pool = pool; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
931 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
932 /* Build the necessary pointers. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
933 new_ptr -> dm_previous_memory = header_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
934 new_ptr -> dm_next_memory = header_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
935 (new_ptr -> dm_next_memory) -> dm_previous_memory = new_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
936 header_ptr -> dm_next_memory = new_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
937 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
938 /* Decrement the available byte count. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
939 pool -> dm_available = pool -> dm_available - | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
940 size - DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
941 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
942 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
943 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
944 /* Decrement the entire free size from the available bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
945 count. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
946 pool -> dm_available = pool -> dm_available - free_size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
947 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
948 /* Mark the allocated block as not available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
949 header_ptr -> dm_memory_free = NU_FALSE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
950 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
951 /* Should the search pointer be moved? */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
952 if (pool -> dm_search_ptr == header_ptr) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
953 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
954 /* Move the search pointer to the next free memory slot. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
955 pool -> dm_search_ptr = header_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
956 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
957 /* Decrement the number of tasks waiting counter. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
958 pool -> dm_tasks_waiting--; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
959 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
960 /* Remove the first suspended block from the list. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
961 CSC_Remove_From_List((CS_NODE **) &(pool -> dm_suspension_list), | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
962 &(suspend_ptr -> dm_suspend_link)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
963 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
964 /* Setup the appropriate return value. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
965 suspend_ptr -> dm_return_status = NU_SUCCESS; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
966 suspend_ptr -> dm_return_pointer = (VOID *) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
967 (((BYTE_PTR) header_ptr) + DM_OVERHEAD); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
968 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
969 /* Setup system protect while task is being resumed. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
970 TCT_System_Protect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
971 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
972 /* Resume the suspended task. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
973 preempt = preempt | | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
974 TCC_Resume_Task((NU_TASK *) suspend_ptr -> dm_suspended_task, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
975 NU_MEMORY_SUSPEND); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
976 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
977 /* Switch back to the pool protection. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
978 TCT_Set_Current_Protect(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
979 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
980 /* Release system protection. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
981 TCT_System_Unprotect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
982 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
983 /* Pickup the next suspension pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
984 suspend_ptr = pool -> dm_suspension_list; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
985 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
986 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
987 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
988 /* Not enough memory for suspended task. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
989 suspend_ptr = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
990 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
991 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
992 /* Determine if a preempt condition is present. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
993 if (preempt) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
994 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
995 /* Transfer control to the system if the resumed task function | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
996 detects a preemption condition. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
997 TCT_Control_To_System(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
998 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
999 /* Release protection of the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1000 TCT_Unprotect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1001 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1002 /* Return to user mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1003 NU_USER_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1004 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1005 /* Return the completion status. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1006 return(status); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1007 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1008 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1009 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1010 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1011 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1012 /* FUNCTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1013 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1014 /* DMC_Cleanup */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1015 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1016 /* DESCRIPTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1017 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1018 /* This function is responsible for removing a suspension block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1019 /* from a memory pool. It is not called unless a timeout or */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1020 /* a task terminate is in progress. Note that protection is */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1021 /* already in effect - the same protection at suspension time. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1022 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1023 /* CALLED BY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1024 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1025 /* TCC_Timeout Task timeout */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1026 /* TCC_Terminate Task terminate */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1027 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1028 /* CALLS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1029 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1030 /* CSC_Remove_From_List Remove suspend block from */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1031 /* the suspension list */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1032 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1033 /* INPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1034 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1035 /* information Pointer to suspend block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1036 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1037 /* OUTPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1038 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1039 /* None */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1040 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1041 /* HISTORY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1042 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1043 /* DATE REMARKS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1044 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1045 /* 03-01-1993 Created initial version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1046 /* 04-19-1993 Verified version 1.0 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1047 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1048 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1049 VOID DMC_Cleanup(VOID *information) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1050 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1051 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1052 DM_SUSPEND *suspend_ptr; /* Suspension block pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1053 NU_SUPERV_USER_VARIABLES | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1054 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1055 /* Switch to supervisor mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1056 NU_SUPERVISOR_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1057 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1058 /* Use the information pointer as a suspend pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1059 suspend_ptr = (DM_SUSPEND *) information; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1060 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1061 /* By default, indicate that the service timed-out. It really does not | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1062 matter if this function is called from a terminate request since | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1063 the task does not resume. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1064 suspend_ptr -> dm_return_status = NU_TIMEOUT; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1065 suspend_ptr -> dm_return_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1066 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1067 /* Decrement the number of tasks waiting counter. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1068 (suspend_ptr -> dm_memory_pool) -> dm_tasks_waiting--; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1069 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1070 /* Unlink the suspend block from the suspension list. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1071 CSC_Remove_From_List((CS_NODE **) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1072 &((suspend_ptr -> dm_memory_pool) -> dm_suspension_list), | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1073 &(suspend_ptr -> dm_suspend_link)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1074 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1075 /* Return to user mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1076 NU_USER_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1077 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1078 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1079 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1080 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1081 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1082 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1083 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1084 | 
