Subversion Repositories Kolibri OS

Rev

Rev 5201 | Go to most recent revision | 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
580 mario79 8
;**************************************************************************
9
;
10
;   [cache_ide[X]_pointer]
11
;   or [cache_ide[X]_data_pointer]  first entry in cache list
12
;
13
;            +0   - lba sector
14
;            +4   - state of cache sector
15
;                   0 = empty
16
;                   1 = used for read  ( same as in hd )
17
;                   2 = used for write ( differs from hd )
18
;
19
;  [cache_ide[X]_system_data]
20
;  or [cache_ide[x]_appl_data] - cache entries
21
;
22
;**************************************************************************
593 mikedld 23
 
750 victor 24
$Revision: 5565 $
593 mikedld 25
 
580 mario79 26
align 4
585 mario79 27
find_empty_slot_CD_cache:
28
;-----------------------------------------------------------
29
; find empty or read slot, flush cache if next 10% is used by write
30
; output : edi = cache slot
31
;-----------------------------------------------------------
32
.search_again:
3555 Serge 33
        call    cd_calculate_cache_3
585 mario79 34
.search_for_empty:
3555 Serge 35
        inc     edi
36
        call    cd_calculate_cache_4
37
        jbe     .inside_cache
2434 Serge 38
        mov     edi, 1
585 mario79 39
.inside_cache:
3555 Serge 40
        call    cd_calculate_cache_5
41
        ret
585 mario79 42
;--------------------------------------------------------------------
43
clear_CD_cache:
5201 serge 44
        DEBUGF  1, 'K : clear_CD_cache\n'
3555 Serge 45
        pusha
5201 serge 46
 
47
        mov     esi, [cdpos]
48
        dec     esi
49
        imul    esi, sizeof.IDE_CACHE
50
        add     esi, cache_ide0
51
 
2434 Serge 52
        xor     eax, eax
5201 serge 53
 
54
        mov     [esi+IDE_CACHE.search_start], eax
55
        mov     ecx, [esi+IDE_CACHE.system_sad_size]
56
        mov     edi, [esi+IDE_CACHE.pointer]
3555 Serge 57
        call    .clear
5201 serge 58
 
59
        mov     [esi+IDE_CACHE.appl_search_start], eax
60
        mov     ecx, [esi+IDE_CACHE.appl_sad_size]
61
        mov     edi, [esi+IDE_CACHE.data_pointer]
3555 Serge 62
        call    .clear
5201 serge 63
 
3555 Serge 64
        popa
65
        ret
5201 serge 66
;--------------------------------------
585 mario79 67
.clear:
2434 Serge 68
        shl     ecx, 1
3555 Serge 69
        cld
70
        rep stosd
71
        ret
585 mario79 72
;--------------------------------------------------------------------
73
align 4
74
cd_calculate_cache:
5201 serge 75
; 1 - IDE0 ... 12 - IDE11
76
        push    eax
77
 
78
        mov     eax, [cdpos]
79
        dec     eax
80
        imul    eax, sizeof.IDE_CACHE
81
        add     eax, cache_ide0
82
 
2434 Serge 83
        cmp     [cd_appl_data], 0
5201 serge 84
        jne     @f
85
 
86
        mov     ecx, [eax+IDE_CACHE.system_sad_size]
87
        mov     esi, [eax+IDE_CACHE.pointer]
88
        pop     eax
3555 Serge 89
        ret
5201 serge 90
;--------------------------------------
91
@@:
92
        mov     ecx, [eax+IDE_CACHE.appl_sad_size]
93
        mov     esi, [eax+IDE_CACHE.data_pointer]
94
        pop     eax
3555 Serge 95
        ret
585 mario79 96
;--------------------------------------------------------------------
97
align 4
98
cd_calculate_cache_1:
5201 serge 99
; 1 - IDE0 ... 12 - IDE11
100
        push    eax
101
 
102
        mov     eax, [cdpos]
103
        dec     eax
104
        imul    eax, sizeof.IDE_CACHE
105
        add     eax, cache_ide0
106
 
2434 Serge 107
        cmp     [cd_appl_data], 0
5201 serge 108
        jne     @f
109
 
110
        mov     esi, [eax+IDE_CACHE.pointer]
111
        pop     eax
3555 Serge 112
        ret
5201 serge 113
;--------------------------------------
114
@@:
115
        mov     esi, [eax+IDE_CACHE.data_pointer]
116
        pop     eax
3555 Serge 117
        ret
585 mario79 118
;--------------------------------------------------------------------
119
align 4
120
cd_calculate_cache_2:
5201 serge 121
; 1 - IDE0 ... 12 - IDE11
122
        mov     eax, [cdpos]
123
        dec     eax
124
        imul    eax, sizeof.IDE_CACHE
125
        add     eax, cache_ide0
126
 
2434 Serge 127
        cmp     [cd_appl_data], 0
5201 serge 128
        jne     @f
129
 
130
        mov     eax, [eax+IDE_CACHE.system_data]
3555 Serge 131
        ret
5201 serge 132
;--------------------------------------
133
@@:
134
        mov     eax, [eax+IDE_CACHE.appl_data]
3555 Serge 135
        ret
585 mario79 136
;--------------------------------------------------------------------
137
align 4
138
cd_calculate_cache_3:
5201 serge 139
; 1 - IDE0 ... 12 - IDE11
140
        push    eax
585 mario79 141
 
5201 serge 142
        mov     eax, [cdpos]
143
        dec     eax
144
        imul    eax, sizeof.IDE_CACHE
145
        add     eax, cache_ide0
146
 
2434 Serge 147
        cmp     [cd_appl_data], 0
5201 serge 148
        jne     @f
149
 
150
        mov     edi, [eax+IDE_CACHE.search_start]
151
        pop     eax
3555 Serge 152
        ret
5201 serge 153
;--------------------------------------
154
@@:
155
        mov     edi, [eax+IDE_CACHE.appl_search_start]
156
        pop     eax
3555 Serge 157
        ret
585 mario79 158
;--------------------------------------------------------------------
159
align 4
160
cd_calculate_cache_4:
5201 serge 161
; 1 - IDE0 ... 12 - IDE11
162
        push    eax
163
 
164
        mov     eax, [cdpos]
165
        dec     eax
166
        imul    eax, sizeof.IDE_CACHE
167
        add     eax, cache_ide0
168
 
2434 Serge 169
        cmp     [cd_appl_data], 0
5201 serge 170
        jne     @f
171
 
172
        cmp     edi, [eax+IDE_CACHE.system_sad_size]
173
        pop     eax
3555 Serge 174
        ret
5201 serge 175
;--------------------------------------
176
@@:
177
        cmp     edi, [eax+IDE_CACHE.appl_sad_size]
178
        pop     eax
3555 Serge 179
        ret
585 mario79 180
;--------------------------------------------------------------------
181
align 4
182
cd_calculate_cache_5:
5201 serge 183
; 1 - IDE0 ... 12 - IDE11
184
        push    eax
185
 
186
        mov     eax, [cdpos]
187
        dec     eax
188
        imul    eax, sizeof.IDE_CACHE
189
        add     eax, cache_ide0
190
 
2434 Serge 191
        cmp     [cd_appl_data], 0
5201 serge 192
        jne     @f
193
 
194
        mov     [eax+IDE_CACHE.search_start], edi
195
        pop     eax
3555 Serge 196
        ret
5201 serge 197
;--------------------------------------
198
@@:
199
        mov     [eax+IDE_CACHE.appl_search_start], edi
200
        pop     eax
3555 Serge 201
        ret
585 mario79 202
;--------------------------------------------------------------------