Subversion Repositories Kolibri OS

Rev

Rev 237 | Rev 278 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
164 serge 1
 
227 serge 2
DRV_EXIT     equ -1
3
DRV_COMPAT   equ  1  ;minimal required drivers version
4
DRV_CURRENT  equ  1  ;current drivers model version
5
214 serge 6
 
227 serge 7
8
 
164 serge 9
proc attach_int_handler stdcall, irq:dword, handler:dword
10
11
 
12
	 test ebx, ebx
13
	 jz .err
14
	 mov eax, [handler]
15
	 test eax, eax
16
	 jz .err
17
	 mov [irq_tab+ebx*4], eax
18
         stdcall enable_irq, [irq]
19
	 ret
20
.err:
21
	 xor eax, eax
22
	 ret
23
endp
24
25
 
26
proc  detach_int_handler
27
28
 
29
endp
30
31
 
32
proc enable_irq stdcall, irq_line:dword
33
           mov ebx, [irq_line]
34
           mov edx, 0x21
35
           cmp ebx, 8
36
           jb @F
37
           mov edx, 0xA1
38
           sub ebx,8
39
@@:
40
           in al,dx
41
           btr eax, ebx
42
           out dx, al
43
           ret
44
endp
45
46
 
47
;; proc irq_serv
48
49
 
50
51
 
52
	   push eax
53
	   mov eax, 1
54
	   jmp .main
55
align 4
56
.irq_2:
57
	   push eax
58
	   mov eax, 2
59
	   jmp .main
60
align 4
61
.irq_3:
62
	   push eax
63
	   mov eax, 3
64
	   jmp .main
65
align 4
66
.irq_4:
67
	   push eax
68
	   mov eax, 4
69
	   jmp .main
70
align 4
71
.irq_5:
72
	   push eax
73
	   mov eax, 5
74
	   jmp .main
75
align 4
76
.irq_6:
77
	   push eax
78
	   mov eax, 6
79
	   jmp .main
80
align 4
81
.irq_7:
82
	   push eax
83
	   mov eax, 7
84
	   jmp .main
85
align 4
86
.irq_8:
87
	   push eax
88
	   mov eax, 8
89
	   jmp .main
90
align 4
91
.irq_9:
92
	   push eax
93
	   mov eax, 9
94
	   jmp .main
95
align 4
96
.irq_10:
97
	   push eax
98
	   mov eax, 10
99
	   jmp .main
100
align 4
101
.irq_11:
102
	   push eax
103
	   mov eax, 11
104
	   jmp .main
105
align 4
106
.irq_12:
107
	   push eax
108
	   mov eax, 12
109
	   jmp .main
110
align 4
111
.irq_13:
112
	   push eax
113
	   mov eax, 13
114
	   jmp .main
115
align 4
116
.irq_14:
117
	   push eax
118
	   mov eax, 14
119
	   jmp .main
120
align 4
121
.irq_15:
122
	   push eax
123
	   mov eax, 15
124
	   jmp .main
125
126
 
127
.main:
128
	   save_ring3_context
129
	   mov	 bx, os_data
130
	   mov	 ds, bx
131
	   mov	 es, bx
132
133
 
134
	   test ebx, ebx
135
	   jz .exit
136
137
 
138
139
 
140
	   restore_ring3_context
141
142
 
143
	   mov al, 0x20
144
           jb @f
145
	   out 0xa0, al
146
@@:
147
           out 0x20, al
148
149
 
150
	   iret
151
152
 
153
proc get_notify stdcall, p_ev:dword
154
155
 
156
           mov ebx,[CURRENT_TASK]
157
           shl ebx,8
158
           test dword [ebx+PROC_BASE+0xA8],EVENT_NOTIFY
159
	   jz @f
160
           and dword [ebx+PROC_BASE+0xA8], not EVENT_NOTIFY
161
	   mov edi, [p_ev]
162
	   mov dword [edi], EV_INTR
163
           mov eax, [ebx+PROC_BASE+APPDATA.event]
164
	   mov dword [edi+4], eax
165
	   ret
166
@@:
167
	   call change_task
168
	   jmp .wait
169
endp
170
171
 
172
proc pci_read32 stdcall, bus:dword, devfn:dword, reg:dword
173
	   xor eax, eax
174
	   xor ebx, ebx
175
	   mov ah, byte [bus]
176
           mov al, 6
177
	   mov bh, byte [devfn]
178
	   mov bl, byte [reg]
179
	   call pci_read_reg
180
	   ret
181
endp
182
183
 
184
proc pci_read8 stdcall, bus:dword, devfn:dword, reg:dword
185
	   xor eax, eax
186
	   xor ebx, ebx
187
	   mov ah, byte [bus]
188
           mov al, 4
189
	   mov bh, byte [devfn]
190
	   mov bl, byte [reg]
191
	   call pci_read_reg
192
	   ret
193
endp
194
195
 
196
proc pci_write8 stdcall, bus:dword, devfn:dword, reg:dword, val:dword
197
	   xor eax, eax
198
	   xor ebx, ebx
199
	   mov ah, byte [bus]
200
           mov al, 8
201
	   mov bh, byte [devfn]
202
	   mov bl, byte [reg]
203
           mov ecx, [val]
204
           call pci_write_reg
205
	   ret
206
endp
207
208
 
209
io_code    equ  IOCTL.io_code
210
input      equ  IOCTL.input
211
inp_size   equ  IOCTL.inp_size
212
output     equ  IOCTL.output
213
out_size   equ  IOCTL.out_size
214
215
 
216
 
217
proc srv_handler stdcall, ioctl:dword
218
           mov esi, [ioctl]
219
           test esi, esi
220
           jz .err
221
222
 
223
           cmp [edi+SRV.magic], ' SRV'
224
	   jne .fail
225
226
 
227
	   jne .fail
228
229
 
230
           ret
231
.fail:
232
           xor eax, eax
233
           not eax
234
           mov [esi+output], eax
235
           mov [esi+out_size], 4
236
           ret
237
.err:
238
           xor eax, eax
239
           not eax
240
           ret
241
endp
242
243
 
244
proc srv_handlerEx stdcall, ioctl:dword
245
           mov esi, [ioctl]
246
           test esi, esi
247
           jz .err
248
           add esi, new_app_base
249
250
 
251
           cmp [edi+SRV.magic], ' SRV'
252
	   jne .fail
253
254
 
255
	   jne .fail
256
257
 
258
           add [esi+output], new_app_base
259
260
 
261
           ret
262
.fail:
263
           xor eax, eax
264
           not eax
265
           mov [esi+output], eax
266
           mov [esi+out_size], 4
267
           ret
268
.err:
269
           xor eax, eax
270
           not eax
271
           ret
272
endp
273
274
 
275
restore  io_code
276
restore  input
277
restore  inp_size
278
restore  output
279
restore  out_size
280
281
 
282
proc get_service stdcall, sz_name:dword
283
	   locals
284
	     srv_ptr  dd ?
285
	     counter  dd ?
286
           endl
188 serge 287
164 serge 288
 
188 serge 289
           test eax, eax
290
           jnz @F
291
           ret
292
@@:
164 serge 293
           mov [srv_ptr], srv_tab
188 serge 294
           mov [counter], 16
295
@@:
296
           stdcall strncmp, [srv_ptr], [sz_name], 16
297
           test eax, eax
298
           je .ok
299
164 serge 300
 
188 serge 301
           dec [counter]
302
           jnz @B
303
.not_load:
164 serge 304
           stdcall find_service, [sz_name]
305
           test eax, eax
306
           jnz @F
188 serge 307
           ret
308
@@:
164 serge 309
           stdcall load_driver, eax
188 serge 310
           ret
311
.ok:
164 serge 312
           mov eax, [srv_ptr]
188 serge 313
           ret
314
endp
164 serge 315
316
 
317
proc find_service stdcall ,sz_name:dword
318
319
 
320
	   test eax, eax
321
	   jz .fail
322
323
 
324
@@:
325
           mov eax, [esi]
326
           test eax, eax
327
           jz .fail
328
           push esi
329
           stdcall strncmp, eax, [sz_name], 16
330
           pop esi
331
           test eax, eax
332
           je .ok
333
334
 
335
           jmp @B
336
.ok:
337
           mov eax, [esi+4]
338
           ret
339
.fail:
340
           xor eax, eax
341
           ret
342
endp
343
344
 
345
proc reg_service stdcall, sz_name:dword, handler:dword
346
	   locals
347
	     srv dd ?
348
	   endl
349
350
 
351
	   test eax, eax
352
	   jz .fail
353
354
 
355
	   test ebx, ebx
356
	   jz .fail
357
358
 
359
	   test eax, eax
360
	   jz .fail
361
362
 
363
	   mov edi, eax
364
	   mov esi, [sz_name]
365
	   mov ecx, 16
366
	   rep movsb
367
368
 
369
	   mov [edi+SRV.magic], ' SRV'
370
	   mov [edi+SRV.size], SRV_SIZE
371
	   mov ebx, [handler]
372
	   mov [edi+SRV.srv_proc], ebx
373
           mov eax, [srv]
374
	   ret
375
.fail:
376
	   xor eax, eax
377
	   ret
378
endp
379
380
 
381
proc get_proc stdcall, exp:dword, sz_name:dword
382
383
 
384
.next:
385
           mov eax, [edx]
386
           test eax, eax
387
           jz .end
388
389
 
390
           stdcall strncmp, eax, [sz_name], 16
391
           pop edx
392
           test eax, eax
393
           jz .ok
394
395
 
396
           jmp .next
397
.ok:
398
           mov eax, [edx+4]
399
.end:
400
           ret
401
endp
402
403
 
404
proc get_coff_sym stdcall, pSym:dword,count:dword, sz_sym:dword
405
406
 
407
	   stdcall strncmp, [pSym], [sz_sym], 8
408
	   test eax,eax
409
	   jz .ok
410
	   add [pSym], 18
411
	   dec [count]
412
	   jnz @b
413
	   xor eax, eax
414
	   ret
415
.ok:
416
	   mov ebx, [pSym]
417
	   mov eax, [ebx+8]
418
	   ret
419
endp
420
421
 
422
proc get_curr_task
188 serge 423
           mov eax,[CURRENT_TASK]
424
           shl eax, 8
425
           ret
426
endp
427
164 serge 428
 
188 serge 429
proc get_fileinfo stdcall, file_name:dword, info:dword
430
           locals
431
             cmd     dd ?
432
             offset  dd ?
433
                     dd ?
434
             count   dd ?
435
             buff    dd ?
436
                     db ?
437
             name    dd ?
438
           endl
439
164 serge 440
 
188 serge 441
           mov ebx, [file_name]
442
           sub ebx, new_app_base
443
           mov ecx, [info]
444
           sub ecx, new_app_base
445
164 serge 446
 
188 serge 447
           mov [offset], eax
448
           mov [offset+4], eax
449
           mov [count], eax
450
           mov [buff], ecx
451
           mov byte [buff+4], al
452
           mov [name], ebx
453
164 serge 454
 
188 serge 455
           lea ebx, [cmd]
456
           sub ebx, new_app_base
457
           int 0x40
458
           ret
459
endp
460
164 serge 461
 
188 serge 462
proc read_file stdcall,file_name:dword, buffer:dword, off:dword,\
463
                                     bytes:dword
464
           locals
465
             cmd     dd ?
466
             offset  dd ?
467
                     dd ?
468
             count   dd ?
469
             buff    dd ?
470
                     db ?
471
             name    dd ?
472
           endl
473
164 serge 474
 
188 serge 475
           mov ebx, [file_name]
476
           mov ecx, [off]
477
           mov edx, [bytes]
478
           mov esi, [buffer]
479
           sub ebx, new_app_base
480
           sub esi, new_app_base
481
164 serge 482
 
188 serge 483
           mov [offset], ecx
484
           mov [offset+4], eax
485
           mov [count], edx
486
           mov [buff], esi
487
           mov byte [buff+4], al
488
           mov [name], ebx
489
490
 
491
           lea ebx, [cmd]
492
           sub ebx, new_app_base
493
           int 0x40
494
           ret
495
endp
496
497
 
498
proc load_file stdcall, file_name:dword
499
           locals
500
             attr       dd ?
501
             flags      dd ?
502
             cr_time    dd ?
503
             cr_date    dd ?
504
             acc_time   dd ?
505
             acc_date   dd ?
506
             mod_time   dd ?
507
             mod_date   dd ?
508
             file_size  dd ?
509
510
 
511
             file2      dd ?
211 serge 512
           endl
188 serge 513
514
 
515
           stdcall get_fileinfo, [file_name], eax
516
           test eax, eax
164 serge 517
           jnz .fail
188 serge 518
164 serge 519
 
206 serge 520
           cmp eax, 1024*1024*16
237 serge 521
           ja .fail
522
206 serge 523
 
188 serge 524
           mov [file], eax
525
164 serge 526
 
188 serge 527
           cmp ebx, [file_size]
528
           jne .cleanup
529
211 serge 530
 
188 serge 531
           cmp dword [eax], 0x4B43504B
211 serge 532
           jne .exit
533
           mov ebx, [eax+4]
237 serge 534
           mov [file_size], ebx
535
           stdcall kernel_alloc, ebx
536
211 serge 537
 
538
           jz .cleanup
539
540
 
541
           stdcall unpack, [file], eax
542
           stdcall kernel_free, [file]
543
           mov eax, [file2]
544
           mov ebx, [file_size]
237 serge 545
.exit:
211 serge 546
           push eax
269 serge 547
           lea edi, [eax+ebx]     ;cleanup remain space
548
           mov ecx, ebx          ;from file end
549
           add ecx, 4095
550
           and ecx, not 4095
551
           sub ecx, ebx
552
           xor eax, eax
553
           cld
554
           rep stosb
555
           pop eax
556
           ret
188 serge 557
.cleanup:
558
           stdcall kernel_free, [file]
559
.fail:
560
           xor eax, eax
561
           xor ebx, ebx
237 serge 562
           ret
188 serge 563
endp
564
164 serge 565
 
188 serge 566
proc get_proc_ex stdcall, proc_name:dword, imports:dword
567
568
 
569
           mov edx, [imports]
570
           test edx, edx
198 serge 571
           jz .end
572
           mov edx, [edx]
188 serge 573
           test edx, edx
574
           jz .end
575
.next:
576
           mov eax, [edx]
577
           test eax, eax
164 serge 578
           jz .next_table
188 serge 579
164 serge 580
 
188 serge 581
           stdcall strncmp, eax, [proc_name], 16
582
           pop edx
583
           test eax, eax
584
           jz .ok
585
164 serge 586
 
188 serge 587
           jmp .next
588
.next_table:
589
           add [imports], 4
590
           jmp .look_up
591
.ok:
592
           mov eax, [edx+4]
593
           ret
594
.end:
595
           xor eax, eax
596
           ret
597
endp
598
164 serge 599
 
188 serge 600
proc fix_coff_symbols stdcall, sec:dword, symbols:dword,\
601
                      sym_count:dword, strings:dword, imports:dword
602
           locals
603
             retval dd ?
604
           endl
605
164 serge 606
 
188 serge 607
           mov [retval], 1
608
.fix:
609
           movzx ebx, [edi+CSYM.SectionNumber]
610
           test ebx, ebx
611
           jnz .internal
612
           mov eax, dword [edi+CSYM.Name]
613
           test eax, eax
614
           jnz @F
615
164 serge 616
 
188 serge 617
           add edi, [strings]
618
@@:
619
           push edi
620
           stdcall get_proc_ex, edi,[imports]
621
           pop edi
622
164 serge 623
 
188 serge 624
           test eax, eax
625
           jnz @F
626
164 serge 627
 
188 serge 628
           call sys_msg_board_str
629
           mov esi, edi
630
           call sys_msg_board_str
631
           mov esi, msg_CR
632
           call sys_msg_board_str
633
164 serge 634
 
188 serge 635
@@:
636
           mov edi, [symbols]
637
           mov [edi+CSYM.Value], eax
638
           jmp .next
639
.internal:
640
           dec ebx
641
           shl ebx, 3
642
           lea ebx, [ebx+ebx*4]
643
           add ebx, [sec]
644
645
 
646
           add [edi+CSYM.Value], eax
647
.next:
648
           add edi, CSYM_SIZE
649
           mov [symbols], edi
650
           dec [sym_count]
651
           jnz .fix
652
           mov eax, [retval]
653
           ret
654
endp
164 serge 655
656
 
657
proc fix_coff_relocs stdcall, coff:dword, sec:dword, sym:dword
188 serge 658
	   locals
164 serge 659
             n_sec     dd ?
188 serge 660
	   endl
164 serge 661
662
 
188 serge 663
           movzx ebx, [eax+CFH.nSections]
664
           mov [n_sec], ebx
665
.fix_sec:
666
           mov esi, [sec]
667
	   mov edi, [esi+CFS.PtrReloc]
164 serge 668
           add edi, [coff]
188 serge 669
164 serge 670
 
188 serge 671
           test ecx, ecx
672
           jz .next
673
.next_reloc:
674
	   mov ebx, [edi+CRELOC.SymIndex]
164 serge 675
	   add ebx,ebx
676
	   lea ebx,[ebx+ebx*8]
677
           add ebx, [sym]
188 serge 678
164 serge 679
 
188 serge 680
164 serge 681
 
188 serge 682
           je .dir_32
683
164 serge 684
 
188 serge 685
           jne .next_reloc
686
.rel_32:
687
	   mov eax, [edi+CRELOC.VirtualAddress]
164 serge 688
           add eax, [esi+CFS.VirtualAddress]
188 serge 689
           sub edx, eax
690
           sub edx, 4
691
           jmp .fix
692
.dir_32:
693
	   mov eax, [edi+CRELOC.VirtualAddress]
694
           add eax, [esi+CFS.VirtualAddress]
695
.fix:
696
           add [eax], edx
697
           add edi, 10
698
           dec ecx
699
           jnz .next_reloc
700
.next:
701
           add [sec], COFF_SECTION_SIZE
206 serge 702
           dec [n_sec]
188 serge 703
           jnz .fix_sec
704
.exit:
164 serge 705
	   ret
706
endp
707
708
 
188 serge 709
proc load_driver stdcall, file_name:dword
710
           locals
711
             coff      dd ?
712
             sym       dd ?
713
             strings   dd ?
714
             img_size  dd ?
715
             img_base  dd ?
716
             start     dd ?
717
718
 
719
                       dd ?
720
           endl
721
722
 
723
214 serge 724
 
188 serge 725
           jz .exit
227 serge 726
188 serge 727
 
728
729
 
730
           xor ebx, ebx
731
732
 
733
@@:
734
           add ebx, [edx+CFS.SizeOfRawData]
735
           add ebx, 15
736
           and ebx, not 15
737
           add edx, COFF_SECTION_SIZE
206 serge 738
           dec ecx
188 serge 739
           jnz @B
740
           mov [img_size], ebx
741
742
 
743
           test eax, eax
744
           jz .fail
745
           mov [img_base], eax
746
747
 
748
           xor eax, eax
749
           mov ecx, [img_size]
750
           add ecx, 4095
751
           and ecx, not 4095
752
           shr ecx, 2
753
           cld
754
           rep stosd
755
756
 
757
           movzx ebx, [edx+CFH.nSections]
758
           mov edi, [img_base]
759
           lea eax, [edx+20]
760
@@:
761
           mov [eax+CFS.VirtualAddress], edi
762
           mov esi, [eax+CFS.PtrRawData]
763
           test esi, esi
764
           jnz .copy
765
           add edi, [eax+CFS.SizeOfRawData]
766
           jmp .next
767
.copy:
768
           add esi, edx
769
           mov ecx, [eax+CFS.SizeOfRawData]
770
           cld
771
           rep movsb
772
.next:
773
           add edi, 15
774
           and edi, not 15
775
           add eax, COFF_SECTION_SIZE
206 serge 776
           dec ebx
188 serge 777
           jnz @B
778
779
 
780
           add ebx, edx
781
           mov [sym], ebx
782
           mov ecx, [edx+CFH.nSymbols]
783
           add ecx,ecx
784
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
785
           add ecx, [sym]
786
           mov [strings], ecx
787
788
 
789
           mov dword [ebx], kernel_export
790
           mov dword [ebx+4], 0
791
           lea eax, [edx+20]
792
793
 
794
                                     [strings], ebx
795
           test eax, eax
796
           jz .link_fail
227 serge 797
188 serge 798
 
799
           add ebx, 20
800
           stdcall fix_coff_relocs, [coff], ebx, [sym]
801
802
 
803
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szVersion
227 serge 804
           test eax, eax
805
           jz .link_fail
806
807
 
808
           shr eax, 16
809
           cmp eax, DRV_COMPAT
810
           jb .ver_fail
811
812
 
813
           ja .ver_fail
814
815
 
816
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szSTART
188 serge 817
           mov [start], eax
818
819
 
820
821
 
822
           stdcall ebx, DRV_ENTRY
214 serge 823
           test eax, eax
188 serge 824
           jnz .ok
825
826
 
827
           xor eax, eax
828
           ret
829
.ok:
830
           mov ebx, [img_base]
831
           mov [eax+SRV.base], ebx
832
           mov ecx, [start]
214 serge 833
           mov [eax+SRV.entry], ecx
834
           ret
188 serge 835
227 serge 836
 
837
           mov esi, msg_CR
838
           call sys_msg_board_str
839
           mov esi, [file_name]
840
           call sys_msg_board_str
841
           mov esi, msg_CR
842
           call sys_msg_board_str
843
           mov esi, msg_version
844
           call sys_msg_board_str
845
           mov esi, msg_www
846
           call sys_msg_board_str
847
           jmp .cleanup
848
849
 
850
           mov esi, msg_module
851
           call sys_msg_board_str
852
           mov esi, [file_name]
853
           call sys_msg_board_str
854
           mov esi, msg_CR
855
           call sys_msg_board_str
856
.cleanup:
857
           stdcall kernel_free,[img_base]
858
.fail:
188 serge 859
           stdcall kernel_free, [coff]
227 serge 860
.exit:
861
           xor eax, eax
188 serge 862
           ret
863
endp
164 serge 864
865
 
198 serge 866
proc load_library stdcall, file_name:dword
867
           locals
868
             coff      dd ?
869
             sym       dd ?
870
             strings   dd ?
871
             img_size  dd ?
872
             img_base  dd ?
873
             exports   dd ?
874
           endl
875
876
 
877
878
 
879
           test eax, eax
880
           jz .fail
881
882
 
883
           movzx ecx, [eax+CFH.nSections]
884
           xor ebx, ebx
885
886
 
887
@@:
888
           add ebx, [edx+CFS.SizeOfRawData]
889
           add ebx, 15
890
           and ebx, not 15
891
           add edx, COFF_SECTION_SIZE
206 serge 892
           dec ecx
198 serge 893
           jnz @B
894
           mov [img_size], ebx
895
896
 
897
           stdcall user_alloc, [img_size]
898
899
 
900
           jz .fail
901
           mov [img_base], eax
902
903
 
904
           movzx ebx, [edx+CFH.nSections]
905
           mov edi, [img_base]
906
           lea eax, [edx+20]
907
@@:
908
           mov [eax+CFS.VirtualAddress], edi
909
           mov esi, [eax+CFS.PtrRawData]
910
           test esi, esi
911
           jnz .copy
912
           add edi, [eax+CFS.SizeOfRawData]
913
           jmp .next
914
.copy:
915
           add esi, edx
916
           add edi, new_app_base
917
           mov ecx, [eax+CFS.SizeOfRawData]
918
           cld
919
           rep movsb
920
.next:
921
           add edi, 15-new_app_base
922
           and edi, not 15
923
           add eax, COFF_SECTION_SIZE
206 serge 924
           dec ebx
198 serge 925
           jnz @B
926
927
 
928
           add ebx, edx
929
           mov [sym], ebx
930
           mov ecx, [edx+CFH.nSymbols]
931
           add ecx,ecx
932
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
933
           add ecx, [sym]
934
           mov [strings], ecx
935
936
 
937
938
 
939
                                     [strings], dword 0
940
           test eax, eax
941
           jnz @F
942
943
 
944
           mov edx, [coff]
945
           movzx ebx, [edx+CFH.nSections]
946
           mov edi, new_app_base
947
           lea eax, [edx+20]
948
@@:
949
           add [eax+CFS.VirtualAddress], edi  ;patch user space offset
950
           add eax, COFF_SECTION_SIZE
206 serge 951
           dec ebx
198 serge 952
           jnz @B
953
954
 
955
           stdcall fix_coff_relocs, [coff], edx, [sym]
956
957
 
958
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szEXPORTS
959
           mov [exports], eax
960
961
 
962
           mov eax, [exports]
963
           ret
964
.fail:
965
           xor eax, eax
966
           ret
967
endp
968
969
 
214 serge 970
proc stop_all_services
971
           not [srv_map]
227 serge 972
.next:
214 serge 973
           bsf eax, [srv_map]
974
           jnz .find
975
           ret
976
.find:
977
           btr [srv_map], eax
978
           shl eax,0x02
979
           lea eax,[srv_tab+eax+eax*8]   ;srv_tab+eax*36
980
           cmp [eax+SRV.magic], ' SRV'
227 serge 981
           jne .next
982
           cmp [eax+SRV.size], SRV_SIZE
983
           jne .next
984
           mov ebx, [eax+SRV.entry]
214 serge 985
           stdcall ebx, dword -1
986
           jmp .next
987
endp
988
198 serge 989
 
214 serge 990
 
202 diamond 991
drv_infinity   db '/rd/1/drivers/infinity.obj', 0
992
drv_hw_mouse   db '/rd/1/drivers/ati2d.obj',0
227 serge 993
164 serge 994
 
995
szInfinity     db 'INFINITY',0
996
szHwMouse      db 'HWCURSOR',0
227 serge 997
164 serge 998
 
999
szEXPORTS      db 'EXPORTS',0
1000
szIMPORTS      db 'IMPORTS',0
1001
1002
 
188 serge 1003
msg_module     db 'in module ',0
1004
msg_version    db 'incompatible driver version',13,10,0
227 serge 1005
msg_www        db 'please visit www.kolibrios.org',13,10,0
1006
msg_CR         db  13,10,0
188 serge 1007
1008
 
214 serge 1009
create_cursor    dd 0
227 serge 1010
set_hw_cursor    dd 0
214 serge 1011
hw_restore       dd 0
221 serge 1012
214 serge 1013
 
164 serge 1014
services:
1015
           dd szSound,    drv_sound
1016
           dd szInfinity, drv_infinity
1017
           dd szHwMouse,  drv_hw_mouse
227 serge 1018
           dd 0
164 serge 1019