Subversion Repositories Kolibri OS

Rev

Rev 227 | Rev 269 | 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
           ret
188 serge 547
.cleanup:
548
           stdcall kernel_free, [file]
549
.fail:
550
           xor eax, eax
551
           xor ebx, ebx
237 serge 552
           ret
188 serge 553
endp
554
164 serge 555
 
188 serge 556
proc get_proc_ex stdcall, proc_name:dword, imports:dword
557
558
 
559
           mov edx, [imports]
560
           test edx, edx
198 serge 561
           jz .end
562
           mov edx, [edx]
188 serge 563
           test edx, edx
564
           jz .end
565
.next:
566
           mov eax, [edx]
567
           test eax, eax
164 serge 568
           jz .next_table
188 serge 569
164 serge 570
 
188 serge 571
           stdcall strncmp, eax, [proc_name], 16
572
           pop edx
573
           test eax, eax
574
           jz .ok
575
164 serge 576
 
188 serge 577
           jmp .next
578
.next_table:
579
           add [imports], 4
580
           jmp .look_up
581
.ok:
582
           mov eax, [edx+4]
583
           ret
584
.end:
585
           xor eax, eax
586
           ret
587
endp
588
164 serge 589
 
188 serge 590
proc fix_coff_symbols stdcall, sec:dword, symbols:dword,\
591
                      sym_count:dword, strings:dword, imports:dword
592
           locals
593
             retval dd ?
594
           endl
595
164 serge 596
 
188 serge 597
           mov [retval], 1
598
.fix:
599
           movzx ebx, [edi+CSYM.SectionNumber]
600
           test ebx, ebx
601
           jnz .internal
602
           mov eax, dword [edi+CSYM.Name]
603
           test eax, eax
604
           jnz @F
605
164 serge 606
 
188 serge 607
           add edi, [strings]
608
@@:
609
           push edi
610
           stdcall get_proc_ex, edi,[imports]
611
           pop edi
612
164 serge 613
 
188 serge 614
           test eax, eax
615
           jnz @F
616
164 serge 617
 
188 serge 618
           call sys_msg_board_str
619
           mov esi, edi
620
           call sys_msg_board_str
621
           mov esi, msg_CR
622
           call sys_msg_board_str
623
164 serge 624
 
188 serge 625
@@:
626
           mov edi, [symbols]
627
           mov [edi+CSYM.Value], eax
628
           jmp .next
629
.internal:
630
           dec ebx
631
           shl ebx, 3
632
           lea ebx, [ebx+ebx*4]
633
           add ebx, [sec]
634
635
 
636
           add [edi+CSYM.Value], eax
637
.next:
638
           add edi, CSYM_SIZE
639
           mov [symbols], edi
640
           dec [sym_count]
641
           jnz .fix
642
           mov eax, [retval]
643
           ret
644
endp
164 serge 645
646
 
647
proc fix_coff_relocs stdcall, coff:dword, sec:dword, sym:dword
188 serge 648
	   locals
164 serge 649
             n_sec     dd ?
188 serge 650
	   endl
164 serge 651
652
 
188 serge 653
           movzx ebx, [eax+CFH.nSections]
654
           mov [n_sec], ebx
655
.fix_sec:
656
           mov esi, [sec]
657
	   mov edi, [esi+CFS.PtrReloc]
164 serge 658
           add edi, [coff]
188 serge 659
164 serge 660
 
188 serge 661
           test ecx, ecx
662
           jz .next
663
.next_reloc:
664
	   mov ebx, [edi+CRELOC.SymIndex]
164 serge 665
	   add ebx,ebx
666
	   lea ebx,[ebx+ebx*8]
667
           add ebx, [sym]
188 serge 668
164 serge 669
 
188 serge 670
164 serge 671
 
188 serge 672
           je .dir_32
673
164 serge 674
 
188 serge 675
           jne .next_reloc
676
.rel_32:
677
	   mov eax, [edi+CRELOC.VirtualAddress]
164 serge 678
           add eax, [esi+CFS.VirtualAddress]
188 serge 679
           sub edx, eax
680
           sub edx, 4
681
           jmp .fix
682
.dir_32:
683
	   mov eax, [edi+CRELOC.VirtualAddress]
684
           add eax, [esi+CFS.VirtualAddress]
685
.fix:
686
           add [eax], edx
687
           add edi, 10
688
           dec ecx
689
           jnz .next_reloc
690
.next:
691
           add [sec], COFF_SECTION_SIZE
206 serge 692
           dec [n_sec]
188 serge 693
           jnz .fix_sec
694
.exit:
164 serge 695
	   ret
696
endp
697
698
 
188 serge 699
proc load_driver stdcall, file_name:dword
700
           locals
701
             coff      dd ?
702
             sym       dd ?
703
             strings   dd ?
704
             img_size  dd ?
705
             img_base  dd ?
706
             start     dd ?
707
708
 
709
                       dd ?
710
           endl
711
712
 
713
214 serge 714
 
188 serge 715
           jz .exit
227 serge 716
188 serge 717
 
718
719
 
720
           xor ebx, ebx
721
722
 
723
@@:
724
           add ebx, [edx+CFS.SizeOfRawData]
725
           add ebx, 15
726
           and ebx, not 15
727
           add edx, COFF_SECTION_SIZE
206 serge 728
           dec ecx
188 serge 729
           jnz @B
730
           mov [img_size], ebx
731
732
 
733
           test eax, eax
734
           jz .fail
735
           mov [img_base], eax
736
737
 
738
           xor eax, eax
739
           mov ecx, [img_size]
740
           add ecx, 4095
741
           and ecx, not 4095
742
           shr ecx, 2
743
           cld
744
           rep stosd
745
746
 
747
           movzx ebx, [edx+CFH.nSections]
748
           mov edi, [img_base]
749
           lea eax, [edx+20]
750
@@:
751
           mov [eax+CFS.VirtualAddress], edi
752
           mov esi, [eax+CFS.PtrRawData]
753
           test esi, esi
754
           jnz .copy
755
           add edi, [eax+CFS.SizeOfRawData]
756
           jmp .next
757
.copy:
758
           add esi, edx
759
           mov ecx, [eax+CFS.SizeOfRawData]
760
           cld
761
           rep movsb
762
.next:
763
           add edi, 15
764
           and edi, not 15
765
           add eax, COFF_SECTION_SIZE
206 serge 766
           dec ebx
188 serge 767
           jnz @B
768
769
 
770
           add ebx, edx
771
           mov [sym], ebx
772
           mov ecx, [edx+CFH.nSymbols]
773
           add ecx,ecx
774
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
775
           add ecx, [sym]
776
           mov [strings], ecx
777
778
 
779
           mov dword [ebx], kernel_export
780
           mov dword [ebx+4], 0
781
           lea eax, [edx+20]
782
783
 
784
                                     [strings], ebx
785
           test eax, eax
786
           jz .link_fail
227 serge 787
188 serge 788
 
789
           add ebx, 20
790
           stdcall fix_coff_relocs, [coff], ebx, [sym]
791
792
 
793
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szVersion
227 serge 794
           test eax, eax
795
           jz .link_fail
796
797
 
798
           shr eax, 16
799
           cmp eax, DRV_COMPAT
800
           jb .ver_fail
801
802
 
803
           ja .ver_fail
804
805
 
806
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szSTART
188 serge 807
           mov [start], eax
808
809
 
810
811
 
812
           stdcall ebx, DRV_ENTRY
214 serge 813
           test eax, eax
188 serge 814
           jnz .ok
815
816
 
817
           xor eax, eax
818
           ret
819
.ok:
820
           mov ebx, [img_base]
821
           mov [eax+SRV.base], ebx
822
           mov ecx, [start]
214 serge 823
           mov [eax+SRV.entry], ecx
824
           ret
188 serge 825
227 serge 826
 
827
           mov esi, msg_CR
828
           call sys_msg_board_str
829
           mov esi, [file_name]
830
           call sys_msg_board_str
831
           mov esi, msg_CR
832
           call sys_msg_board_str
833
           mov esi, msg_version
834
           call sys_msg_board_str
835
           mov esi, msg_www
836
           call sys_msg_board_str
837
           jmp .cleanup
838
839
 
840
           mov esi, msg_module
841
           call sys_msg_board_str
842
           mov esi, [file_name]
843
           call sys_msg_board_str
844
           mov esi, msg_CR
845
           call sys_msg_board_str
846
.cleanup:
847
           stdcall kernel_free,[img_base]
848
.fail:
188 serge 849
           stdcall kernel_free, [coff]
227 serge 850
.exit:
851
           xor eax, eax
188 serge 852
           ret
853
endp
164 serge 854
855
 
198 serge 856
proc load_library stdcall, file_name:dword
857
           locals
858
             coff      dd ?
859
             sym       dd ?
860
             strings   dd ?
861
             img_size  dd ?
862
             img_base  dd ?
863
             exports   dd ?
864
           endl
865
866
 
867
868
 
869
           test eax, eax
870
           jz .fail
871
872
 
873
           movzx ecx, [eax+CFH.nSections]
874
           xor ebx, ebx
875
876
 
877
@@:
878
           add ebx, [edx+CFS.SizeOfRawData]
879
           add ebx, 15
880
           and ebx, not 15
881
           add edx, COFF_SECTION_SIZE
206 serge 882
           dec ecx
198 serge 883
           jnz @B
884
           mov [img_size], ebx
885
886
 
887
           stdcall user_alloc, [img_size]
888
889
 
890
           jz .fail
891
           mov [img_base], eax
892
893
 
894
           movzx ebx, [edx+CFH.nSections]
895
           mov edi, [img_base]
896
           lea eax, [edx+20]
897
@@:
898
           mov [eax+CFS.VirtualAddress], edi
899
           mov esi, [eax+CFS.PtrRawData]
900
           test esi, esi
901
           jnz .copy
902
           add edi, [eax+CFS.SizeOfRawData]
903
           jmp .next
904
.copy:
905
           add esi, edx
906
           add edi, new_app_base
907
           mov ecx, [eax+CFS.SizeOfRawData]
908
           cld
909
           rep movsb
910
.next:
911
           add edi, 15-new_app_base
912
           and edi, not 15
913
           add eax, COFF_SECTION_SIZE
206 serge 914
           dec ebx
198 serge 915
           jnz @B
916
917
 
918
           add ebx, edx
919
           mov [sym], ebx
920
           mov ecx, [edx+CFH.nSymbols]
921
           add ecx,ecx
922
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
923
           add ecx, [sym]
924
           mov [strings], ecx
925
926
 
927
928
 
929
                                     [strings], dword 0
930
           test eax, eax
931
           jnz @F
932
933
 
934
           mov edx, [coff]
935
           movzx ebx, [edx+CFH.nSections]
936
           mov edi, new_app_base
937
           lea eax, [edx+20]
938
@@:
939
           add [eax+CFS.VirtualAddress], edi  ;patch user space offset
940
           add eax, COFF_SECTION_SIZE
206 serge 941
           dec ebx
198 serge 942
           jnz @B
943
944
 
945
           stdcall fix_coff_relocs, [coff], edx, [sym]
946
947
 
948
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szEXPORTS
949
           mov [exports], eax
950
951
 
952
           mov eax, [exports]
953
           ret
954
.fail:
955
           xor eax, eax
956
           ret
957
endp
958
959
 
214 serge 960
proc stop_all_services
961
           not [srv_map]
227 serge 962
.next:
214 serge 963
           bsf eax, [srv_map]
964
           jnz .find
965
           ret
966
.find:
967
           btr [srv_map], eax
968
           shl eax,0x02
969
           lea eax,[srv_tab+eax+eax*8]   ;srv_tab+eax*36
970
           cmp [eax+SRV.magic], ' SRV'
227 serge 971
           jne .next
972
           cmp [eax+SRV.size], SRV_SIZE
973
           jne .next
974
           mov ebx, [eax+SRV.entry]
214 serge 975
           stdcall ebx, dword -1
976
           jmp .next
977
endp
978
198 serge 979
 
214 serge 980
 
202 diamond 981
drv_infinity   db '/rd/1/drivers/infinity.obj', 0
982
drv_hw_mouse   db '/rd/1/drivers/ati2d.obj',0
227 serge 983
164 serge 984
 
985
szInfinity     db 'INFINITY',0
986
szHwMouse      db 'HWCURSOR',0
227 serge 987
164 serge 988
 
989
szEXPORTS      db 'EXPORTS',0
990
szIMPORTS      db 'IMPORTS',0
991
992
 
188 serge 993
msg_module     db 'in module ',0
994
msg_version    db 'incompatible driver version',13,10,0
227 serge 995
msg_www        db 'please visit www.kolibrios.org',13,10,0
996
msg_CR         db  13,10,0
188 serge 997
998
 
214 serge 999
create_cursor    dd 0
227 serge 1000
set_hw_cursor    dd 0
214 serge 1001
hw_restore       dd 0
221 serge 1002
214 serge 1003
 
164 serge 1004
services:
1005
           dd szSound,    drv_sound
1006
           dd szInfinity, drv_infinity
1007
           dd szHwMouse,  drv_hw_mouse
227 serge 1008
           dd 0
164 serge 1009