Subversion Repositories Kolibri OS

Rev

Rev 1376 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1376 Rev 2382
Line 3... Line 3...
3
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2009. 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: 1376 $
8
$Revision: 2382 $
9
 
9
 
Line 10... Line 10...
10
 
10
 
11
DRV_COMPAT   equ  5  ;minimal required drivers version
11
DRV_COMPAT   equ  5  ;minimal required drivers version
Line 12... Line -...
12
DRV_CURRENT  equ  5  ;current drivers model version
-
 
13
 
-
 
14
DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT
-
 
15
PID_KERNEL  equ 1    ;os_idle thread
-
 
16
 
-
 
17
align 4
-
 
18
proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword
-
 
19
 
-
 
20
         push ebx
-
 
21
 
-
 
22
         mov  ebx, [irq]                   ;irq num
-
 
23
         test ebx, ebx
-
 
24
         jz   .err
-
 
25
         cmp  ebx, 15                      ; hidnplayr says: we only have 16 IRQ's
-
 
26
         ja   .err
-
 
27
         mov  eax, [handler]
-
 
28
         test eax, eax
-
 
29
         jz   .err
-
 
30
         cmp  [irq_owner + 4 * ebx], 0
-
 
31
         je   @f
-
 
32
 
-
 
33
         mov  ecx, [irq_rights + 4 * ebx]  ; Rights : 0 - full access, 1 - read only, 2 - forbidden
-
 
34
         test ecx, ecx
-
 
35
         jnz  .err
-
 
36
 
-
 
37
@@:
-
 
38
         mov  [irq_tab+ebx*4], eax
-
 
39
 
-
 
40
         mov  eax, [access_rights]
-
 
41
         mov  [irq_rights + 4 * ebx], eax
-
 
42
 
-
 
43
         mov  [irq_owner + 4 * ebx], PID_KERNEL  ; all handlers belong to a kernel
-
 
44
 
-
 
45
         stdcall enable_irq, [irq]
-
 
46
         pop ebx
-
 
47
         mov eax, 1
-
 
48
         ret
-
 
49
.err:
-
 
50
         pop ebx
-
 
51
         xor eax, eax
-
 
52
         ret
-
 
53
endp
-
 
54
 
-
 
55
uglobal
-
 
56
 
-
 
57
	irq_rights	 rd	 16
-
 
58
 
-
 
59
endg
-
 
60
 
-
 
61
proc get_int_handler stdcall, irq:dword
-
 
62
 
-
 
63
	mov	eax, [irq]
-
 
64
 
-
 
65
	cmp	[irq_rights + 4 * eax], dword 1
-
 
66
	ja	.err
-
 
67
 
-
 
68
	mov	eax, [irq_tab + 4 * eax]
-
 
69
	ret
-
 
70
 
-
 
71
     .err:
-
 
72
	xor	eax, eax
-
 
73
	ret
-
 
74
 
-
 
75
endp
-
 
76
 
-
 
77
align 4
-
 
78
proc  detach_int_handler
-
 
79
 
-
 
80
	   ret
-
 
81
endp
-
 
82
 
-
 
83
align 4
-
 
84
proc enable_irq stdcall, irq_line:dword
-
 
85
	   mov ebx, [irq_line]
-
 
86
	   mov edx, 0x21
-
 
87
	   cmp ebx, 8
-
 
88
	   jb @F
-
 
89
	   mov edx, 0xA1
-
 
90
	   sub ebx,8
-
 
91
@@:
-
 
92
	   in al,dx
-
 
93
	   btr eax, ebx
-
 
94
	   out dx, al
-
 
95
	   ret
-
 
96
endp
-
 
97
 
-
 
98
align 16
-
 
99
;; proc irq_serv
-
 
100
 
-
 
101
irq_serv:
-
 
102
 
-
 
103
.irq_1:
-
 
104
	   push 1
-
 
105
	   jmp .main
-
 
106
align 4
-
 
107
.irq_2:
-
 
108
	   push 2
-
 
109
	   jmp .main
-
 
110
align 4
-
 
111
.irq_3:
-
 
112
	   push 3
-
 
113
	   jmp .main
-
 
114
align 4
-
 
115
.irq_4:
-
 
116
	   push 4
-
 
117
	   jmp .main
-
 
118
align 4
-
 
119
.irq_5:
-
 
120
	   push 5
-
 
121
	   jmp .main
-
 
122
; align 4
-
 
123
; .irq_6:
-
 
124
;	   push 6
-
 
125
;	   jmp .main
-
 
126
align 4
-
 
127
.irq_7:
-
 
128
	   push 7
-
 
129
	   jmp .main
-
 
130
align 4
-
 
131
.irq_8:
-
 
132
	   push 8
-
 
133
	   jmp .main
-
 
134
align 4
-
 
135
.irq_9:
-
 
136
	   push 9
-
 
137
	   jmp .main
-
 
138
align 4
-
 
139
.irq_10:
-
 
140
	   push 10
-
 
141
	   jmp .main
-
 
142
align 4
-
 
143
.irq_11:
-
 
144
	   push 11
-
 
145
	   jmp .main
-
 
146
align 4
-
 
147
.irq_12:
-
 
148
	   push 12
-
 
149
	   jmp .main
-
 
150
; align 4
-
 
151
; .irq_13:
-
 
152
;	   push 13
-
 
153
;	   jmp .main
-
 
154
; align 4
-
 
155
; .irq_14:
-
 
156
;	   push 14
-
 
157
;	   jmp .main
-
 
158
; align 4
-
 
159
; .irq_15:
-
 
160
;	   push 15
-
 
161
;	   jmp .main
-
 
162
 
-
 
163
align 16
-
 
164
.main:
-
 
Line 165... Line -...
165
	   save_ring3_context
-
 
166
	   mov	 eax, [esp + 32]
-
 
167
	   mov	 bx, app_data  ;os_data
-
 
168
	   mov	 ds, bx
-
 
169
	   mov	 es, bx
-
 
170
 
-
 
171
	   cmp	 [v86_irqhooks+eax*8], 0
-
 
172
	   jnz	 v86_irq
-
 
173
 
-
 
174
	   mov ebx, [irq_tab+eax*4]
-
 
175
	   test ebx, ebx
-
 
176
	   jz .exit
-
 
177
 
-
 
178
	   call ebx
-
 
179
	   mov	[check_idle_semaphore],5
-
 
180
 
-
 
181
.exit:
-
 
182
 
-
 
183
	   cmp dword [esp + 32], 8
-
 
184
	   mov al, 0x20
-
 
185
	   jb @f
-
 
186
	   out 0xa0, al
-
 
187
@@:
-
 
Line 188... Line 12...
188
	   out 0x20, al
12
DRV_CURRENT  equ  6  ;current drivers model version
189
 
13
 
Line 190... Line 14...
190
	   restore_ring3_context
14
DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT
Line 210... Line 34...
210
	   jmp .wait
34
        jmp     .wait
211
endp
35
endp
Line 212... Line 36...
212
 
36
 
213
align 4
37
align 4
214
proc pci_read32 stdcall, bus:dword, devfn:dword, reg:dword
38
proc pci_read32 stdcall, bus:dword, devfn:dword, reg:dword
215
	   push ebx edx
39
        push    ebx
216
	   xor eax, eax
40
        xor     eax, eax
217
	   xor ebx, ebx
41
        xor     ebx, ebx
218
	   mov ah, byte [bus]
42
        mov     ah, byte [bus]
219
	   mov al, 6
43
        mov     al, 6
220
	   mov bh, byte [devfn]
44
        mov     bh, byte [devfn]
221
	   mov bl, byte [reg]
45
        mov     bl, byte [reg]
222
	   call pci_read_reg
46
        call    pci_read_reg
223
	   pop edx ebx
47
        pop     ebx
224
	   ret
48
        ret
Line 225... Line 49...
225
endp
49
endp
226
 
50
 
227
align 4
51
align 4
228
proc pci_read16 stdcall, bus:dword, devfn:dword, reg:dword
52
proc pci_read16 stdcall, bus:dword, devfn:dword, reg:dword
229
	   push ebx edx
53
        push    ebx
230
	   xor eax, eax
54
        xor     eax, eax
231
	   xor ebx, ebx
55
        xor     ebx, ebx
232
	   mov ah, byte [bus]
56
        mov     ah, byte [bus]
233
	   mov al, 5
57
        mov     al, 5
234
	   mov bh, byte [devfn]
58
        mov     bh, byte [devfn]
235
	   mov bl, byte [reg]
59
        mov     bl, byte [reg]
236
	   call pci_read_reg
60
        call    pci_read_reg
237
	   pop edx ebx
61
        pop     ebx
Line 238... Line 62...
238
	   ret
62
        ret
239
endp
63
endp
240
 
64
 
241
align 4
65
align 4
242
proc pci_read8 stdcall, bus:dword, devfn:dword, reg:dword
66
proc pci_read8 stdcall, bus:dword, devfn:dword, reg:dword
243
	   push ebx edx
67
        push    ebx
244
	   xor eax, eax
68
        xor     eax, eax
245
	   xor ebx, ebx
69
        xor     ebx, ebx
246
	   mov ah, byte [bus]
70
        mov     ah, byte [bus]
247
	   mov al, 4
71
        mov     al, 4
248
	   mov bh, byte [devfn]
72
        mov     bh, byte [devfn]
249
	   mov bl, byte [reg]
73
        mov     bl, byte [reg]
250
	   call pci_read_reg
74
        call    pci_read_reg
Line 251... Line 75...
251
	   pop edx ebx
75
        pop     ebx
252
	   ret
76
        ret
253
endp
77
endp
254
 
78
 
255
align 4
79
align 4
256
proc pci_write8 stdcall, bus:dword, devfn:dword, reg:dword, val:dword
80
proc pci_write8 stdcall, bus:dword, devfn:dword, reg:dword, val:dword
257
	   push ebx edx
81
        push    ebx
258
	   xor eax, eax
82
        xor     eax, eax
259
	   xor ebx, ebx
83
        xor     ebx, ebx
260
	   mov ah, byte [bus]
84
        mov     ah, byte [bus]
261
	   mov al, 8
85
        mov     al, 8
262
	   mov bh, byte [devfn]
86
        mov     bh, byte [devfn]
263
	   mov bl, byte [reg]
87
        mov     bl, byte [reg]
264
	   mov ecx, [val]
88
        mov     ecx, [val]
Line 265... Line 89...
265
	   call pci_write_reg
89
        call    pci_write_reg
266
	   pop edx ebx
90
        pop     ebx
267
	   ret
91
        ret
268
endp
92
endp
269
 
93
 
270
align 4
94
align 4
271
proc pci_write16 stdcall, bus:dword, devfn:dword, reg:dword, val:dword
95
proc pci_write16 stdcall, bus:dword, devfn:dword, reg:dword, val:dword
272
	   push ebx edx
96
        push    ebx
273
	   xor eax, eax
97
        xor     eax, eax
274
	   xor ebx, ebx
98
        xor     ebx, ebx
275
	   mov ah, byte [bus]
99
        mov     ah, byte [bus]
276
	   mov al, 9
100
        mov     al, 9
277
	   mov bh, byte [devfn]
101
        mov     bh, byte [devfn]
278
	   mov bl, byte [reg]
102
        mov     bl, byte [reg]
Line 279... Line 103...
279
	   mov ecx, [val]
103
        mov     ecx, [val]
280
	   call pci_write_reg
104
        call    pci_write_reg
281
	   pop edx ebx
105
        pop     ebx
282
	   ret
106
        ret
283
endp
107
endp
284
 
108
 
285
align 4
109
align 4
286
proc pci_write32 stdcall, bus:dword, devfn:dword, reg:dword, val:dword
110
proc pci_write32 stdcall, bus:dword, devfn:dword, reg:dword, val:dword
287
	   push ebx edx
111
        push    ebx
288
	   xor eax, eax
112
        xor     eax, eax
289
	   xor ebx, ebx
113
        xor     ebx, ebx
290
	   mov ah, byte [bus]
114
        mov     ah, byte [bus]
291
	   mov al, 10
115
        mov     al, 10
292
	   mov bh, byte [devfn]
116
        mov     bh, byte [devfn]
Line 293... Line 117...
293
	   mov bl, byte [reg]
117
        mov     bl, byte [reg]
294
	   mov ecx, [val]
118
        mov     ecx, [val]
Line 542... Line 366...
542
	   mov [buff], esi
366
        mov     [buff], esi
543
	   mov byte [buff+4], al
367
        mov     byte [buff+4], al
544
	   mov [name], ebx
368
        mov     [name], ebx
Line 545... Line 369...
545
 
369
 
546
	   pushad
-
 
547
	   push eax
370
        pushad
548
	   lea eax, [cmd]
371
        lea     ebx, [cmd]
549
	   call file_system_lfn
-
 
550
	   pop eax
372
        call    file_system_lfn
551
	   popad
373
        popad
552
	   ret
374
        ret
Line 553... Line 375...
553
endp
375
endp
Line 595... Line 417...
595
	   cmp eax, 1024*1024*16
417
        cmp     eax, 1024*1024*16
596
	   ja .fail
418
        ja      .fail
Line 597... Line 419...
597
 
419
 
598
	   stdcall kernel_alloc, [file_size]
420
        stdcall kernel_alloc, [file_size]
-
 
421
        mov     [file], eax
-
 
422
        test    eax, eax
Line 599... Line 423...
599
	   mov [file], eax
423
        jz      .fail
600
 
424
 
601
	   stdcall read_file, [file_name], eax, dword 0, [file_size]
425
        stdcall read_file, [file_name], eax, dword 0, [file_size]
Line 795... Line 619...
795
	   jnz .fix_sec
619
        jnz     .fix_sec
796
.exit:
620
.exit:
797
	   ret
621
        ret
798
endp
622
endp
Line -... Line 623...
-
 
623
 
799
 
624
align 4
800
proc rebase_coff stdcall uses ebx esi, coff:dword, sym:dword, \
625
proc rebase_coff stdcall uses ebx esi, coff:dword, sym:dword, \
801
	delta:dword
626
        delta:dword
802
	   locals
627
           locals
803
	     n_sec     dd ?
628
             n_sec     dd ?
Line 1618... Line 1443...
1618
	   mov [eax+12], edx
1443
        mov     [eax+12], edx
1619
	   mov [eax+16], edx
1444
        mov     [eax+16], edx
Line 1620... Line 1445...
1620
 
1445
 
1621
	   call free	       ;release object memory
1446
        call    free           ;release object memory
1622
	   ret
-
 
1623
 
-
 
1624
 
-
 
1625
 
-
 
1626
if 0
-
 
1627
 
-
 
1628
irq:
-
 
1629
 
-
 
1630
.irq0:
-
 
1631
	   pusfd
-
 
1632
	   pushad
-
 
1633
	   push IRQ_0
-
 
1634
	   jmp .master
-
 
1635
.irq_1:
-
 
1636
	   pusfd
-
 
1637
	   pushad
-
 
1638
	   push IRQ_1
-
 
1639
	   jmp .master
-
 
1640
 
-
 
1641
.master:
-
 
1642
	   mov ax, app_data
-
 
1643
	   mov ds, eax
-
 
1644
	   mov es, eax
-
 
1645
	   mov ebx, [esp+4]  ;IRQ_xx
-
 
1646
	   mov eax, [irq_handlers+ebx+4]
-
 
1647
	   call intr_handler
-
 
1648
	   mov ecx, [esp+4]
-
 
1649
	   cmp [irq_actids+ecx*4], 0
-
 
1650
	   je @F
-
 
1651
	   in al, 0x21
-
 
1652
	   bts eax, ecx
-
 
1653
	   out 0x21, al
-
 
1654
	   mov al, 0x20
-
 
1655
	   out 0x20, al
-
 
1656
	   jmp .restart
-
 
1657
 
-
 
1658
.slave:
-
 
1659
	   mov ax, app_data
-
 
1660
	   mov ds, eax
-
 
1661
	   mov es, eax
-
 
1662
	   mov ebx, [esp+4]  ;IRQ_xx
-
 
1663
	   mov eax, [irq_handlers+ebx+4]
-
 
1664
	   call intr_handler
-
 
1665
	   mov ecx, [esp+4]
-
 
1666
	   sub ecx, 8
-
 
1667
	   cmp [irq_actids+ecx*4], 0
-
 
1668
	   je @F
-
 
1669
	   in al, 0xA1
-
 
1670
	   bts eax, ecx
-
 
1671
	   out 0xA1, al
-
 
1672
	   mov al, 0x20
-
 
1673
	   out 0xA0, al
-
 
1674
	   out 0x20, al
-
 
1675
.restart:
-
 
1676
	   mov ebx, [next_slot]
-
 
1677
	   test ebx, ebx
-
 
1678
	   jz @F
-
 
1679
	   mov [next_task],0
-
 
1680
	   mov esi, [prev_slot]
-
 
1681
	   call do_change_task
-
 
1682
	   add esp, 4
-
 
1683
	   iretd
-
 
1684
 
-
 
1685
end if
-
 
1686
-
 
1687
-
 
1688
-