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 | - |