Rev 837 | Rev 841 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 837 | Rev 839 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 837 $ |
8 | $Revision: 839 $ |
9 | 9 | ||
10 | 10 | ||
Line 87... | Line 87... | ||
87 | mov [op+list_fd], 0 |
87 | mov [op+list_fd], 0 |
88 | mov [op+list_bk], 0 |
88 | mov [op+list_bk], 0 |
89 | } |
89 | } |
Line 90... | Line 90... | ||
90 | 90 | ||
91 | align 4 |
91 | align 4 |
Line 92... | Line 92... | ||
92 | proc init_kernel_heap |
92 | init_kernel_heap: |
93 | 93 | ||
94 | mov ecx, 64/4 |
94 | mov ecx, 64/4 |
95 | mov edi, mem_block_list |
95 | mov edi, mem_block_list |
Line 100... | Line 100... | ||
100 | mov ecx, 512/4 |
100 | mov ecx, 512/4 |
101 | mov edi, mem_block_map |
101 | mov edi, mem_block_map |
102 | not eax |
102 | not eax |
103 | rep stosd |
103 | rep stosd |
Line -... | Line 104... | ||
- | 104 | ||
- | 105 | stdcall alloc_pages, dword 32 |
|
- | 106 | add eax, OS_BASE |
|
104 | 107 | ||
105 | mov [mem_block_start], mem_block_map |
108 | mov [mem_block_start], mem_block_map |
106 | mov [mem_block_end], mem_block_map+512 |
109 | mov [mem_block_end], mem_block_map+512 |
Line 107... | Line 110... | ||
107 | mov [mem_block_arr], HEAP_BASE |
110 | mov [mem_block_arr], eax |
108 | 111 | ||
109 | mov eax, mem_used.fd-MEM_LIST_OFFSET |
112 | mov ebx, mem_used.fd-MEM_LIST_OFFSET |
- | 113 | mov [mem_used.fd], ebx |
|
- | 114 | mov [mem_used.bk], ebx |
|
- | 115 | ||
- | 116 | xor edx, edx |
|
- | 117 | ||
- | 118 | mov [eax+block_next], edx |
|
- | 119 | mov [eax+block_prev], edx |
|
- | 120 | mov [eax+list_fd], edx |
|
- | 121 | mov [eax+list_bk], edx |
|
- | 122 | mov [eax+block_base], HEAP_BASE |
|
Line 110... | Line -... | ||
110 | mov [mem_used.fd], eax |
- | |
111 | mov [mem_used.bk], eax |
- | |
112 | - | ||
113 | stdcall alloc_pages, dword 32 |
- | |
114 | mov ecx, 32 |
- | |
115 | mov edx, eax |
- | |
116 | mov edi, HEAP_BASE |
- | |
117 | .l1: |
- | |
118 | stdcall map_page,edi,edx,PG_SW |
- | |
119 | add edi, 0x1000 |
- | |
120 | add edx, 0x1000 |
- | |
121 | dec ecx |
- | |
122 | jnz .l1 |
- | |
123 | - | ||
124 | mov edi, HEAP_BASE |
- | |
125 | mov ebx, HEAP_BASE+MEM_BLOCK_SIZE |
- | |
126 | xor eax, eax |
- | |
127 | mov [edi+block_next], ebx |
- | |
128 | mov [edi+block_prev], eax |
123 | mov [eax+block_size], page_tabs-HEAP_BASE |
129 | mov [edi+list_fd], eax |
- | |
130 | mov [edi+list_bk], eax |
- | |
131 | mov [edi+block_base], HEAP_BASE |
- | |
132 | mov [edi+block_size], 4096*MEM_BLOCK_SIZE |
- | |
133 | mov [edi+block_flags], USED_BLOCK |
- | |
134 | - | ||
135 | mov [ebx+block_next], eax |
- | |
136 | mov [ebx+block_prev], eax |
- | |
137 | mov [ebx+list_fd], eax |
- | |
138 | mov [ebx+list_bk], eax |
- | |
139 | mov [ebx+block_base], HEAP_BASE+4096*MEM_BLOCK_SIZE |
- | |
140 | - | ||
141 | mov ecx, [MEM_AMOUNT] |
124 | mov [eax+block_flags], FREE_BLOCK |
142 | sub ecx, (HEAP_BASE - OS_BASE + 4096*MEM_BLOCK_SIZE) |
- | |
143 | mov [heap_size], ecx |
- | |
Line 144... | Line 125... | ||
144 | mov [heap_free], ecx |
125 | |
145 | mov [ebx+block_size], ecx |
126 | mov [heap_size], page_tabs-HEAP_BASE |
Line 146... | Line 127... | ||
146 | mov [ebx+block_flags], FREE_BLOCK |
127 | mov [heap_free], page_tabs-HEAP_BASE |
147 | 128 | ||
148 | mov [mem_block_mask], eax |
129 | mov [mem_block_mask], edx |
149 | mov [mem_block_mask+4],0x80000000 |
130 | mov [mem_block_mask+4],0x80000000 |
150 | 131 | ||
151 | mov [mem_block_list+63*4], ebx |
132 | mov [mem_block_list+63*4], eax |
152 | mov byte [mem_block_map], 0xFC |
- | |
Line 153... | Line 133... | ||
153 | and [heap_mutex], 0 |
133 | mov byte [mem_block_map], 0xFE |
154 | mov [heap_blocks], 4095 |
134 | and [heap_mutex], 0 |
155 | mov [free_blocks], 4095 |
135 | mov [heap_blocks], 4096 |
156 | ret |
136 | mov [free_blocks], 4096 |
Line 327... | Line 307... | ||
327 | mov eax, [edi+block_size] |
307 | mov eax, [edi+block_size] |
328 | cmp eax, [size] |
308 | cmp eax, [size] |
329 | je .m_eq_size |
309 | je .m_eq_size |
Line 330... | Line 310... | ||
330 | 310 | ||
331 | call alloc_mem_block |
311 | call alloc_mem_block |
332 | and eax, eax |
312 | test eax, eax |
Line 333... | Line 313... | ||
333 | jz .error |
313 | jz .error |
Line 334... | Line 314... | ||
334 | 314 | ||
335 | mov esi, eax ;esi - splitted block |
315 | mov esi, eax ;esi - splitted block |
336 | 316 | ||
337 | mov [esi+block_next], edi |
317 | mov [esi+block_next], edi |
338 | mov eax, [edi+block_prev] |
318 | mov eax, [edi+block_prev] |
339 | mov [esi+block_prev], eax |
319 | mov [esi+block_prev], eax |
340 | mov [edi+block_prev], esi |
320 | mov [edi+block_prev], esi |
341 | mov [esi+list_fd], 0 |
321 | mov [esi+list_fd], 0 |
342 | mov [esi+list_bk], 0 |
322 | mov [esi+list_bk], 0 |
343 | and eax, eax |
323 | test eax, eax |
344 | jz @f |
324 | jz @f |
345 | mov [eax+block_next], esi |
325 | mov [eax+block_next], esi |