Subversion Repositories Kolibri OS

Rev

Rev 5201 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
750 victor 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
5565 serge 3
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
750 victor 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
593 mikedld 7
 
750 victor 8
$Revision: 5565 $
593 mikedld 9
 
5201 serge 10
;-----------------------------------------------------------------------------
2434 Serge 11
        pusha
580 mario79 12
 
2434 Serge 13
        mov     eax, [pg_data.pages_free]
580 mario79 14
;   1/32
2434 Serge 15
        shr     eax, 5
580 mario79 16
;   round off up to 8 pages
2434 Serge 17
        shr     eax, 3
18
        shl     eax, 3
580 mario79 19
;   translate pages in butes *4096
2434 Serge 20
        shl     eax, 12
585 mario79 21
;       check a upper size of the cache, no more than 1 Mb on the physical device
2434 Serge 22
        cmp     eax, 1024*1024
23
        jbe     @f
5201 serge 24
 
2434 Serge 25
        mov     eax, 1024*1024
26
        jmp     .continue
5201 serge 27
;--------------------------------------
580 mario79 28
@@:
585 mario79 29
;       check a lower size of the cache, not less than 128 Kb on the physical device
2434 Serge 30
        cmp     eax, 128*1024
5201 serge 31
        jae     .continue
32
 
2434 Serge 33
        mov     eax, 128*1024
5201 serge 34
;--------------------------------------
35
.continue:
36
        push    ecx
37
        mov     ecx, 12
38
        mov     esi, cache_ide0+IDE_CACHE.size
39
        cld
580 mario79 40
@@:
5201 serge 41
        mov     [esi], eax
42
        add     esi, sizeof.IDE_CACHE
43
        loop    @b
44
 
45
        pop     ecx
46
 
2434 Serge 47
        xor     eax, eax
5201 serge 48
        mov     [hdd_appl_data], 1 ;al
2434 Serge 49
        mov     [cd_appl_data], 1
5201 serge 50
;--------------------------------------
51
        test    byte [DRIVE_DATA+1], 0x80
52
        je      @f
3908 Serge 53
 
5201 serge 54
        mov     esi, cache_ide0
2434 Serge 55
        call    get_cache_ide
5201 serge 56
;--------------------------------------
57
@@:
58
        test    byte [DRIVE_DATA+1], 0x20
59
        je      @f
60
 
61
        mov     esi, cache_ide1
62
        call    get_cache_ide
63
;--------------------------------------
64
@@:
3908 Serge 65
        test    byte [DRIVE_DATA+1], 8
5201 serge 66
        je      @f
67
 
2434 Serge 68
        mov     esi, cache_ide2
69
        call    get_cache_ide
5201 serge 70
;--------------------------------------
71
@@:
72
        test    byte [DRIVE_DATA+1], 2
73
        je      @f
74
 
75
        mov     esi, cache_ide3
2434 Serge 76
        call    get_cache_ide
5201 serge 77
;--------------------------------------
78
@@:
79
        test    byte [DRIVE_DATA+6], 0x80
2434 Serge 80
        je      @f
5201 serge 81
 
82
        mov     esi, cache_ide4
2434 Serge 83
        call    get_cache_ide
5201 serge 84
;--------------------------------------
709 diamond 85
@@:
5201 serge 86
        test    byte [DRIVE_DATA+6], 0x20
87
        je      @f
88
 
89
        mov     esi, cache_ide5
90
        call    get_cache_ide
91
;--------------------------------------
92
@@:
93
        test    byte [DRIVE_DATA+6], 8
94
        je      @f
95
 
96
        mov     esi, cache_ide6
97
        call    get_cache_ide
98
;--------------------------------------
99
@@:
100
        test    byte [DRIVE_DATA+6], 2
101
        je      @f
102
 
103
        mov     esi, cache_ide7
104
        call    get_cache_ide
105
;--------------------------------------
106
@@:
107
        test    byte [DRIVE_DATA+11], 0x80
108
        je      @f
109
 
110
        mov     esi, cache_ide8
111
        call    get_cache_ide
112
;--------------------------------------
113
@@:
114
        test    byte [DRIVE_DATA+11], 0x20
115
        je      @f
116
 
117
        mov     esi, cache_ide9
118
        call    get_cache_ide
119
;--------------------------------------
120
@@:
121
        test    byte [DRIVE_DATA+11], 8
122
        je      @f
123
 
124
        mov     esi, cache_ide10
125
        call    get_cache_ide
126
;--------------------------------------
127
@@:
128
        test    byte [DRIVE_DATA+11], 2
129
        je      end_get_cache
130
 
131
        mov     esi, cache_ide11
132
        call    get_cache_ide
133
 
2434 Serge 134
        jmp     end_get_cache
5201 serge 135
;-----------------------------------------------------------------------------
136
get_cache_ide:
137
        and     [esi+IDE_CACHE.search_start], 0
138
        and     [esi+IDE_CACHE.appl_search_start], 0
580 mario79 139
 
2434 Serge 140
        push    ecx
5201 serge 141
;        DEBUGF  1, "K : IDE_CACHE.size %x\n", [esi+IDE_CACHE.size]
142
        stdcall kernel_alloc, [esi+IDE_CACHE.size]
143
        mov     [esi+IDE_CACHE.pointer], eax
2434 Serge 144
        pop     ecx
5201 serge 145
 
2434 Serge 146
        mov     edx, eax
5201 serge 147
        mov     eax, [esi+IDE_CACHE.size]
2434 Serge 148
        shr     eax, 3
5201 serge 149
;        DEBUGF  1, "K : IDE_CACHE.system_data_size %x\n", eax
150
        mov     [esi+IDE_CACHE.system_data_size], eax
2434 Serge 151
        mov     ebx, eax
152
        imul    eax, 7
5201 serge 153
;        DEBUGF  1, "K : IDE_CACHE.appl_data_size %x\n", eax
154
        mov     [esi+IDE_CACHE.appl_data_size], eax
2434 Serge 155
        add     ebx, edx
5201 serge 156
        mov     [esi+IDE_CACHE.data_pointer], ebx
585 mario79 157
 
580 mario79 158
.cd:
2434 Serge 159
        push    ecx
5201 serge 160
        mov     eax, [esi+IDE_CACHE.system_data_size]
2434 Serge 161
        call    calculate_for_cd
5201 serge 162
        add     eax, [esi+IDE_CACHE.pointer]
163
        mov     [esi+IDE_CACHE.system_data], eax
164
        mov     [esi+IDE_CACHE.system_sad_size], ecx
580 mario79 165
 
2434 Serge 166
        push    edi
5201 serge 167
        mov     edi, [esi+IDE_CACHE.pointer]
2434 Serge 168
        call    clear_ide_cache
169
        pop     edi
580 mario79 170
 
5201 serge 171
        mov     eax, [esi+IDE_CACHE.appl_data_size]
2434 Serge 172
        call    calculate_for_cd
5201 serge 173
        add     eax, [esi+IDE_CACHE.data_pointer]
174
        mov     [esi+IDE_CACHE.appl_data], eax
175
        mov     [esi+IDE_CACHE.appl_sad_size], ecx
585 mario79 176
 
2434 Serge 177
        push    edi
5201 serge 178
        mov     edi, [esi+IDE_CACHE.data_pointer]
2434 Serge 179
        call    clear_ide_cache
180
        pop     edi
585 mario79 181
 
2434 Serge 182
        pop     ecx
183
        ret
5201 serge 184
;-----------------------------------------------------------------------------
580 mario79 185
calculate_for_cd:
2434 Serge 186
        push    eax
187
        mov     ebx, eax
188
        shr     eax, 11
189
        shl     eax, 3
190
        sub     ebx, eax
191
        shr     ebx, 11
192
        mov     ecx, ebx
193
        shl     ebx, 11
194
        pop     eax
195
        sub     eax, ebx
196
        dec     ecx
197
        ret
5201 serge 198
;-----------------------------------------------------------------------------
580 mario79 199
clear_ide_cache:
2434 Serge 200
        push    eax
201
        shl     ecx, 1
202
        xor     eax, eax
203
        cld
204
        rep stosd
205
        pop     eax
206
        ret
5201 serge 207
;-----------------------------------------------------------------------------
580 mario79 208
end_get_cache:
2434 Serge 209
        popa