FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/nucleus/dms.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 /* dms.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 supplemental routines for the Dynamic */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
25 /* Memory 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 /* DMS_Allocate_Aligned_Memory Allocate an aligned memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
34 /* block from a dynamic */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
35 /* memory pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
36 /* DEPENDENCIES */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
37 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
38 /* cs_extr.h Common Service functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
39 /* tc_extr.h Thread Control functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
40 /* dm_extr.h Partition functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
41 /* hi_extr.h History functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
42 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
43 /* HISTORY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
44 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
45 /* DATE REMARKS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
46 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
47 /* 01-15-1999 Created initial revision */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
48 /* 03-26-1999 Released 1.11m (new release */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
49 /* numbering scheme) */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
50 /* 04-17-2002 Released version 1.13m */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
51 /* 11-07-2002 Released version 1.14 */ | 
| 
 
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 #define NU_SOURCE_FILE | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
54 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
55 #include "cs_extr.h" /* Common service functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
56 #include "tc_extr.h" /* Thread control functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
57 #include "dm_extr.h" /* Dynamic memory functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
58 #include "hi_extr.h" /* History functions */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
59 #include "profiler.h" /* ProView interface */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
60 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
61 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
62 /* Define external inner-component global data references. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
63 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
64 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
65 /* Define internal component function prototypes. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
66 VOID DMC_Cleanup(VOID *information); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
67 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
68 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
69 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
70 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
71 /* FUNCTION */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
72 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
73 /* DMS_Allocate_Aligned_Memory */ | 
| 
 
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 /* DESCRIPTION */ | 
| 
 
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 /* This function allocates memory from the specified dynamic memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
78 /* pool. If dynamic memory is currently available, this function */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
79 /* is completed immediately. Otherwise, if there is not enough */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
80 /* memory currently available, task suspension is possible. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
81 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
82 /* CALLED BY */ | 
| 
 
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 /* Application */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
85 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
86 /* CALLS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
87 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
88 /* CSC_Place_On_List Place on suspend list */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
89 /* [HIC_Make_History_Entry] Make entry in history log */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
90 /* TCC_Suspend_Task Suspend calling task */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
91 /* TCC_Task_Priority Pickup task priority */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
92 /* [TCT_Check_Stack] Stack checking function */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
93 /* TCT_Current_Thread Pickup current thread pointer*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
94 /* TCT_Protect Protect memory pool */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
95 /* TCT_Set_Suspend_Protect Save suspend protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
96 /* TCT_System_Protect Protect system structures */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
97 /* TCT_Unprotect Release protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
98 /* TCT_Unprotect_Specific Release specific protection */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
99 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
100 /* INPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
101 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
102 /* pool_ptr Memory pool pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
103 /* return_pointer Pointer to the destination */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
104 /* memory pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
105 /* size Number of bytes requested */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
106 /* alignment Required alignment of */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
107 /* destination memory pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
108 /* suspend Suspension option if full */ | 
| 
 
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 /* OUTPUTS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
111 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
112 /* NU_SUCCESS If service is successful */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
113 /* NU_NO_MEMORY Memory not available */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
114 /* NU_TIMEOUT If timeout on service */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
115 /* NU_POOL_DELETED If memory pool deleted */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
116 /* during suspension */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
117 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
118 /* HISTORY */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
119 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
120 /* NAME DATE REMARKS */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
121 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
122 /* T. Larsen 01-15-1999 Created initial revision */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
123 /* R. Baum 06-06-2002 Fixed problem with DM_OVERHEAD */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
124 /* allocation. Added Proview */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
125 /* support. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
126 /* */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
127 /*************************************************************************/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
128 STATUS DMS_Allocate_Aligned_Memory(NU_MEMORY_POOL *pool_ptr, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
129 VOID **return_pointer, UNSIGNED size, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
130 UNSIGNED alignment, UNSIGNED suspend) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
131 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
132 R1 DM_PCB *pool; /* Pool control block ptr */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
133 R2 DM_SUSPEND *suspend_ptr; /* Pointer to suspend block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
134 DM_SUSPEND suspend_block; /* Allocate suspension block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
135 R4 DM_HEADER *memory_ptr; /* Pointer to memory */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
136 R3 DM_HEADER *new_ptr; /* New split block pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
137 UNSIGNED free_size; /* Size of block found */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
138 TC_TCB *task; /* Task pointer */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
139 STATUS status; /* Completion status */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
140 UNSIGNED address; /* Address of start of block */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
141 UNSIGNED split_size; /* Bytes for front split */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
142 UNSIGNED next_aligned; /* Next aligned block addr */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
143 NU_SUPERV_USER_VARIABLES | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
144 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
145 /* Switch to supervisor mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
146 NU_SUPERVISOR_MODE(); | 
| 
 
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 /* Move input pool pointer into internal pointer. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
149 pool = (DM_PCB *) pool_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
150 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
151 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
152 #ifdef NU_ENABLE_STACK_CHECK | 
| 
 
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 /* Call stack checking function to check for an overflow condition. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
155 TCT_Check_Stack(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
156 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
157 #endif | 
| 
 
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 #ifdef NU_ENABLE_HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
160 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
161 /* 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
 | 
162 log. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
163 HIC_Make_History_Entry(NU_ALLOCATE_ALIGNED_ID, (UNSIGNED) pool, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
164 (UNSIGNED) return_pointer, (UNSIGNED) size); | 
| 
 
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 #endif | 
| 
 
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 /* Initialize the status as successful. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
169 status = NU_SUCCESS; | 
| 
 
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 /* 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
 | 
172 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
 | 
173 minimum size. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
174 if (size < pool -> dm_min_allocation) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
175 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
176 /* Change size to the minimum allocation. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
177 size = pool -> dm_min_allocation; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
178 else | 
| 
 
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 /* Insure that size is a multiple of the UNSIGNED size. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
181 size = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
182 ((size + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * sizeof(UNSIGNED); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
183 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
184 /* Adjust the requested alignment to one evenly divisible by the number of | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
185 bytes in an UNSIGNED data element. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
186 alignment = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
187 ((alignment + sizeof(UNSIGNED) - 1)/sizeof(UNSIGNED)) * sizeof(UNSIGNED); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
188 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
189 /* Protect against simultaneous access to the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
190 TCT_Protect(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
191 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
192 /* 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
 | 
193 satisfies the request. Note that blocks are merged during the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
194 deallocation function. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
195 memory_ptr = pool -> dm_search_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
196 do | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
197 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
198 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
199 /* 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
 | 
200 if (memory_ptr -> dm_memory_free) | 
| 
 
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 /* Calculate the free block size. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
203 free_size = (((BYTE_PTR) (memory_ptr -> dm_next_memory)) - | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
204 ((BYTE_PTR) memory_ptr)) - DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
205 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
206 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
207 /* There are no free bytes available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
208 free_size = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
209 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
210 /* Free block may be large enough, now check alignment */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
211 if (free_size >= size) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
212 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
213 address = ((UNSIGNED)(memory_ptr)) + DM_OVERHEAD; | 
| 
 
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 /* Is this free block, minus the overhead, already aligned? */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
216 if (address % alignment != 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 /* Not aligned, can the free block be split in front? */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
219 next_aligned = address + (alignment - 1); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
220 next_aligned /= alignment; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
221 next_aligned *= alignment; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
222 split_size = next_aligned - address; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
223 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
224 /* Is space from start of block to aligned location large enough | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
225 to contain 2 DM_OVERHEAD plus pool -> dm_min_allocation? */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
226 if (split_size < ((2 * DM_OVERHEAD) + pool -> dm_min_allocation)) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
227 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
228 /* No, so try to make space for overhead and dm_min_allocation */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
229 next_aligned = address + (2 * DM_OVERHEAD) + | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
230 (pool -> dm_min_allocation) + (alignment - 1); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
231 next_aligned /= alignment; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
232 next_aligned *= alignment; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
233 split_size = next_aligned - address; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
234 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
235 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
236 /* Adjust free_size for result of front split */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
237 if (free_size > split_size) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
238 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
239 free_size -= split_size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
240 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
241 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
242 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
243 /* Can't adjust block beginning, so keep searching */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
244 free_size = 0; | 
| 
 
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 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
247 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
248 /* Determine if the search should continue. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
249 if (free_size < size) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
250 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
251 /* Large enough block has not been found. Move the search | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
252 pointer to the next block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
253 memory_ptr = memory_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
254 } while((free_size < size) && (memory_ptr != pool -> dm_search_ptr)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
255 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
256 /* Determine if the memory is available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
257 if (free_size >= size) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
258 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
259 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
260 /* A block that satisfies the request has been found. */ | 
| 
 
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 /* Is a front split required? The front split will represent the chunk | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
263 of memory that goes from the last pointer to the aligned address. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
264 if(address % alignment != 0) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
265 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
266 /* Not aligned, front split the block, leaving an allocated block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
267 new_ptr = (DM_HEADER*)(((UNSIGNED)(memory_ptr)) + split_size); | 
| 
 
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 /* Mark the new block as free. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
270 new_ptr -> dm_memory_free = NU_TRUE; | 
| 
 
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 /* Put the pool pointer into the new block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
273 new_ptr -> dm_memory_pool = pool; | 
| 
 
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 /* Build the necessary pointers. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
276 new_ptr -> dm_previous_memory = memory_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
277 new_ptr -> dm_next_memory = memory_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
278 (new_ptr -> dm_next_memory) -> dm_previous_memory = new_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
279 memory_ptr -> dm_next_memory = new_ptr; | 
| 
 
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 /* Decrement the available byte count by one DM_OVERHEAD. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
282 pool -> dm_available = pool -> dm_available - DM_OVERHEAD; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
283 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
284 /* Point to new aligned free block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
285 memory_ptr = new_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
286 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
287 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
288 /* Determine if the remaining block needs to be tail split. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
289 if (free_size >= (size + DM_OVERHEAD + pool -> dm_min_allocation)) | 
| 
 
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 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
292 /* Yes, split the block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
293 new_ptr = (DM_HEADER *) (((BYTE_PTR) memory_ptr) + size + | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
294 DM_OVERHEAD); | 
| 
 
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 /* Mark the new block as free. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
297 new_ptr -> dm_memory_free = NU_TRUE; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
298 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
299 /* Put the pool pointer into the new block. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
300 new_ptr -> dm_memory_pool = pool; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
301 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
302 /* Build the necessary pointers. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
303 new_ptr -> dm_previous_memory = memory_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
304 new_ptr -> dm_next_memory = memory_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
305 (new_ptr -> dm_next_memory) -> dm_previous_memory = new_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
306 memory_ptr -> dm_next_memory = new_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
307 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
308 /* Decrement the available byte count. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
309 pool -> dm_available = pool -> dm_available - size - DM_OVERHEAD; | 
| 
 
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 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
312 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
313 /* Decrement the entire free size from the available bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
314 count. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
315 pool -> dm_available = pool -> dm_available - free_size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
316 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
317 /* Mark the allocated block as not available. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
318 memory_ptr -> dm_memory_free = NU_FALSE; | 
| 
 
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 /* Should the search pointer be moved? */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
321 if (pool -> dm_search_ptr == memory_ptr) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
322 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
323 /* Move the search pointer to the next free memory slot. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
324 pool -> dm_search_ptr = memory_ptr -> dm_next_memory; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
325 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
326 /* Return a memory address to the caller. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
327 *return_pointer = (VOID *) (((BYTE_PTR) memory_ptr) + DM_OVERHEAD); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
328 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
329 _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_OK); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
330 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
331 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
332 else | 
| 
 
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 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
335 /* Enough dynamic memory is not available. Determine if suspension is | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
336 required. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
337 if (suspend) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
338 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
339 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
340 /* Suspension is selected. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
341 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
342 /* Increment the number of tasks waiting. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
343 pool -> dm_tasks_waiting++; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
344 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
345 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
346 _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_WAIT); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
347 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
348 /* Setup the suspend block and suspend the calling task. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
349 suspend_ptr = &suspend_block; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
350 suspend_ptr -> dm_memory_pool = pool; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
351 suspend_ptr -> dm_request_size = size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
352 suspend_ptr -> dm_suspend_link.cs_next = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
353 suspend_ptr -> dm_suspend_link.cs_previous = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
354 task = (TC_TCB *) TCT_Current_Thread(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
355 suspend_ptr -> dm_suspended_task = task; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
356 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
357 /* Determine if priority or FIFO suspension is associated with the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
358 memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
359 if (pool -> dm_fifo_suspend) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
360 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
361 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
362 /* FIFO suspension is required. Link the suspend block into | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
363 the list of suspended tasks on this memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
364 CSC_Place_On_List((CS_NODE **) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
365 &(pool -> dm_suspension_list), | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
366 &(suspend_ptr -> dm_suspend_link)); | 
| 
 
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 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
369 { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
370 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
371 /* 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
 | 
372 can be placed in the appropriate place. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
373 suspend_ptr -> dm_suspend_link.cs_priority = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
374 TCC_Task_Priority(task); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
375 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
376 CSC_Priority_Place_On_List((CS_NODE **) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
377 &(pool -> dm_suspension_list), | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
378 &(suspend_ptr -> dm_suspend_link)); | 
| 
 
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 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
381 /* Protect against system access. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
382 TCT_System_Protect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
383 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
384 /* Save the list protection in preparation for suspension. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
385 TCT_Set_Suspend_Protect(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
386 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
387 /* Release protection of dynamic memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
388 TCT_Unprotect_Specific(&(pool -> dm_protect)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
389 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
390 /* Finally, suspend the calling task. Note that the suspension call | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
391 automatically clears the system protection. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
392 TCC_Suspend_Task((NU_TASK *) task, NU_MEMORY_SUSPEND, | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
393 DMC_Cleanup, suspend_ptr, suspend); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
394 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
395 /* Pickup the return status. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
396 status = suspend_ptr -> dm_return_status; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
397 *return_pointer = suspend_ptr -> dm_return_pointer; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
398 } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
399 else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
400 { | 
| 
 
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 /* No suspension requested. Simply return an error status. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
403 status = NU_NO_MEMORY; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
404 *return_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
405 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
406 _RTProf_DumpMemoryPool(RT_PROF_ALLOCATE_MEMORY,pool,RT_PROF_FAIL); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
407 #endif /*INCLUDE_PROVIEW*/ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
408 } | 
| 
 
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 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
411 /* Release protection of the memory pool. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
412 TCT_Unprotect(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
413 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
414 /* Return to user mode */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
415 NU_USER_MODE(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
416 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
417 /* Return the completion status. */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
418 return(status); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
419 } | 
| 
 
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 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
422 | 
| 
 
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 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
425 | 
