Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
384 mikedld 1
 
2
DRV_EXIT     equ -1
3
DRV_COMPAT   equ  4  ;minimal required drivers version
4
DRV_CURRENT  equ  4  ;current drivers model version
5
6
 
7
8
 
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+SLOT_BASE+0xA8],EVENT_NOTIFY
159
	   jz @f
160
           and dword [ebx+SLOT_BASE+0xA8], not EVENT_NOTIFY
161
	   mov edi, [p_ev]
162
	   mov dword [edi], EV_INTR
163
           mov eax, [ebx+SLOT_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
;  ebx= io_control
245
;
246
; retval
247
;  eax= error code
248
249
 
250
srv_handlerEx:
251
           test ebx, ebx
252
           jz .fail
253
           add ebx, new_app_base
254
255
 
256
           cmp [eax+SRV.magic], ' SRV'
257
	   jne .fail
258
259
 
260
	   jne .fail
261
262
 
263
           add [ebx+output], new_app_base
264
265
 
266
           ret
267
.fail:
268
           or eax, -1
269
           ret
270
271
 
272
restore  io_code
273
restore  input
274
restore  inp_size
275
restore  output
276
restore  out_size
277
278
 
279
proc get_service stdcall, sz_name:dword
280
           mov eax, [sz_name]
281
           test eax, eax
282
           jnz @F
283
           ret
284
@@:
285
           mov edx, [srv.fd]
286
@@:
287
           cmp edx, srv.fd-SRV_FD_OFFSET
288
           je .not_load
289
290
 
291
           test eax, eax
292
           je .ok
293
294
 
295
           jmp @B
296
.not_load:
297
           pop ebp
298
           jmp load_driver
299
.ok:
300
           mov eax, edx
301
           ret
302
endp
303
304
 
305
reg_service:
306
.sz_name equ esp+4
307
.handler equ esp+8
308
           mov eax, [.sz_name]
309
	   test eax, eax
310
	   jz .fail
311
312
 
313
	   test ebx, ebx
314
	   jz .fail
315
316
 
317
           call malloc           ;call alloc_service
318
	   test eax, eax
319
	   jz .fail
320
321
 
322
           mov esi, [.sz_name]
323
           mov ecx, 16/4
324
           rep movsd
325
326
 
327
           mov [eax+SRV.size], SRV_SIZE
328
329
 
330
           mov edx, [ebx+SRV.fd]
331
           mov [eax+SRV.fd], edx
332
           mov [eax+SRV.bk], ebx
333
           mov [ebx+SRV.fd], eax
334
           mov [edx+SRV.bk], eax
335
336
 
337
           mov [eax+SRV.srv_proc], ecx
338
           ret 8
339
.fail:
340
	   xor eax, eax
341
           ret 8
342
343
 
344
proc get_proc stdcall, exp:dword, sz_name:dword
345
346
 
347
.next:
348
           mov eax, [edx]
349
           test eax, eax
350
           jz .end
351
352
 
353
           stdcall strncmp, eax, [sz_name], 16
354
           pop edx
355
           test eax, eax
356
           jz .ok
357
358
 
359
           jmp .next
360
.ok:
361
           mov eax, [edx+4]
362
.end:
363
           ret
364
endp
365
366
 
367
proc get_coff_sym stdcall, pSym:dword,count:dword, sz_sym:dword
368
369
 
370
	   stdcall strncmp, [pSym], [sz_sym], 8
371
	   test eax,eax
372
	   jz .ok
373
	   add [pSym], 18
374
	   dec [count]
375
	   jnz @b
376
	   xor eax, eax
377
	   ret
378
.ok:
379
	   mov ebx, [pSym]
380
	   mov eax, [ebx+8]
381
	   ret
382
endp
383
384
 
385
proc get_curr_task
386
           mov eax,[CURRENT_TASK]
387
           shl eax, 8
388
           ret
389
endp
390
391
 
392
proc get_fileinfo stdcall, file_name:dword, info:dword
393
           locals
394
             cmd     dd ?
395
             offset  dd ?
396
                     dd ?
397
             count   dd ?
398
             buff    dd ?
399
                     db ?
400
             name    dd ?
401
           endl
402
403
 
404
           mov ebx, [file_name]
405
           sub ebx, new_app_base
406
           mov ecx, [info]
407
           sub ecx, new_app_base
408
409
 
410
           mov [offset], eax
411
           mov [offset+4], eax
412
           mov [count], eax
413
           mov [buff], ecx
414
           mov byte [buff+4], al
415
           mov [name], ebx
416
417
 
418
           lea ebx, [cmd]
419
           sub ebx, new_app_base
420
           int 0x40
421
           ret
422
endp
423
424
 
425
proc read_file stdcall,file_name:dword, buffer:dword, off:dword,\
426
                                     bytes:dword
427
           locals
428
             cmd     dd ?
429
             offset  dd ?
430
                     dd ?
431
             count   dd ?
432
             buff    dd ?
433
                     db ?
434
             name    dd ?
435
           endl
436
437
 
438
           mov ebx, [file_name]
439
           mov ecx, [off]
440
           mov edx, [bytes]
441
           mov esi, [buffer]
442
           sub ebx, new_app_base
443
           sub esi, new_app_base
444
445
 
446
           mov [offset], ecx
447
           mov [offset+4], eax
448
           mov [count], edx
449
           mov [buff], esi
450
           mov byte [buff+4], al
451
           mov [name], ebx
452
453
 
454
           lea ebx, [cmd]
455
           sub ebx, new_app_base
456
           int 0x40
457
           ret
458
endp
459
460
 
461
;  allocate kernel memory and loads the specified file
462
;
463
; param
464
;  file_name= full path to file
465
;
466
; retval
467
;  eax= file image in kernel memory
468
;  ebx= size of file
469
;
470
; warging
471
;  You mast call kernel_free() to delete each file
472
;  loaded by the load_file() function
473
474
 
475
proc load_file stdcall, file_name:dword
476
           locals
477
             attr       dd ?
478
             flags      dd ?
479
             cr_time    dd ?
480
             cr_date    dd ?
481
             acc_time   dd ?
482
             acc_date   dd ?
483
             mod_time   dd ?
484
             mod_date   dd ?
485
             file_size  dd ?
486
487
 
488
             file2      dd ?
489
           endl
490
491
 
492
           stdcall get_fileinfo, [file_name], eax
493
           test eax, eax
494
           jnz .fail
495
496
 
497
           cmp eax, 1024*1024*16
498
           ja .fail
499
500
 
501
           mov [file], eax
502
503
 
504
           cmp ebx, [file_size]
505
           jne .cleanup
506
507
 
508
           cmp dword [eax], 0x4B43504B
509
           jne .exit
510
           mov ebx, [eax+4]
511
           mov [file_size], ebx
512
           stdcall kernel_alloc, ebx
513
514
 
515
           jz .cleanup
516
517
 
518
           stdcall unpack, [file], eax
519
           stdcall kernel_free, [file]
520
           mov eax, [file2]
521
           mov ebx, [file_size]
522
.exit:
523
           push eax
524
           lea edi, [eax+ebx]     ;cleanup remain space
525
           mov ecx, 4096          ;from file end
526
           and ebx, 4095
527
           sub ecx, ebx
528
           xor eax, eax
529
           cld
530
           rep stosb
531
           mov ebx, [file_size]
532
           pop eax
533
           ret
534
.cleanup:
535
           stdcall kernel_free, [file]
536
.fail:
537
           xor eax, eax
538
           xor ebx, ebx
539
           ret
540
endp
541
542
 
543
proc get_proc_ex stdcall, proc_name:dword, imports:dword
544
545
 
546
           mov edx, [imports]
547
           test edx, edx
548
           jz .end
549
           mov edx, [edx]
550
           test edx, edx
551
           jz .end
552
.next:
553
           mov eax, [edx]
554
           test eax, eax
555
           jz .next_table
556
557
 
558
           stdcall strncmp, eax, [proc_name], 16
559
           pop edx
560
           test eax, eax
561
           jz .ok
562
563
 
564
           jmp .next
565
.next_table:
566
           add [imports], 4
567
           jmp .look_up
568
.ok:
569
           mov eax, [edx+4]
570
           ret
571
.end:
572
           xor eax, eax
573
           ret
574
endp
575
576
 
577
proc fix_coff_symbols stdcall, sec:dword, symbols:dword,\
578
                      sym_count:dword, strings:dword, imports:dword
579
           locals
580
             retval dd ?
581
           endl
582
583
 
584
           mov [retval], 1
585
.fix:
586
           movzx ebx, [edi+CSYM.SectionNumber]
587
           test ebx, ebx
588
           jnz .internal
589
           mov eax, dword [edi+CSYM.Name]
590
           test eax, eax
591
           jnz @F
592
593
 
594
           add edi, [strings]
595
@@:
596
           push edi
597
           stdcall get_proc_ex, edi,[imports]
598
           pop edi
599
600
 
601
           test eax, eax
602
           jnz @F
603
604
 
605
           call sys_msg_board_str
606
           mov esi, edi
607
           call sys_msg_board_str
608
           mov esi, msg_CR
609
           call sys_msg_board_str
610
611
 
612
@@:
613
           mov edi, [symbols]
614
           mov [edi+CSYM.Value], eax
615
           jmp .next
616
.internal:
617
           dec ebx
618
           shl ebx, 3
619
           lea ebx, [ebx+ebx*4]
620
           add ebx, [sec]
621
622
 
623
           add [edi+CSYM.Value], eax
624
.next:
625
           add edi, CSYM_SIZE
626
           mov [symbols], edi
627
           dec [sym_count]
628
           jnz .fix
629
           mov eax, [retval]
630
           ret
631
endp
632
633
 
634
proc fix_coff_relocs stdcall, coff:dword, sec:dword, sym:dword
635
	   locals
636
             n_sec     dd ?
637
	   endl
638
639
 
640
           movzx ebx, [eax+CFH.nSections]
641
           mov [n_sec], ebx
642
.fix_sec:
643
           mov esi, [sec]
644
	   mov edi, [esi+CFS.PtrReloc]
645
           add edi, [coff]
646
647
 
648
           test ecx, ecx
649
           jz .next
650
.next_reloc:
651
	   mov ebx, [edi+CRELOC.SymIndex]
652
	   add ebx,ebx
653
	   lea ebx,[ebx+ebx*8]
654
           add ebx, [sym]
655
656
 
657
658
 
659
           je .dir_32
660
661
 
662
           jne .next_reloc
663
.rel_32:
664
	   mov eax, [edi+CRELOC.VirtualAddress]
665
           add eax, [esi+CFS.VirtualAddress]
666
           sub edx, eax
667
           sub edx, 4
668
           jmp .fix
669
.dir_32:
670
	   mov eax, [edi+CRELOC.VirtualAddress]
671
           add eax, [esi+CFS.VirtualAddress]
672
.fix:
673
           add [eax], edx
674
           add edi, 10
675
           dec ecx
676
           jnz .next_reloc
677
.next:
678
           add [sec], COFF_SECTION_SIZE
679
           dec [n_sec]
680
           jnz .fix_sec
681
.exit:
682
	   ret
683
endp
684
685
 
686
proc load_driver stdcall, driver_name:dword
687
           locals
688
             coff      dd ?
689
             sym       dd ?
690
             strings   dd ?
691
             img_size  dd ?
692
             img_base  dd ?
693
             start     dd ?
694
695
 
696
                       dd ?
697
             file_name rb 14+16+4+1      ; '/rd/1/drivers/.obj'
698
           endl
699
700
 
701
        mov     dword [edx], '/rd/'
702
        mov     dword [edx+4], '1/dr'
703
        mov     dword [edx+8], 'iver'
704
        mov     word [edx+12], 's/'
705
        mov     esi, [driver_name]
706
        lea     edi, [edx+14]
707
        mov     ecx, 16
708
@@:
709
        lodsb
710
        test    al, al
711
        jz      @f
712
        stosb
713
        loop    @b
714
@@:
715
        mov     dword [edi], '.obj'
716
        mov     byte [edi+4], 0
717
           stdcall load_file, edx
718
719
 
720
           jz .exit
721
722
 
723
724
 
725
           xor ebx, ebx
726
727
 
728
@@:
729
           add ebx, [edx+CFS.SizeOfRawData]
730
           add ebx, 15
731
           and ebx, not 15
732
           add edx, COFF_SECTION_SIZE
733
           dec ecx
734
           jnz @B
735
           mov [img_size], ebx
736
737
 
738
           test eax, eax
739
           jz .fail
740
           mov [img_base], eax
741
742
 
743
           xor eax, eax
744
           mov ecx, [img_size]
745
           add ecx, 4095
746
           and ecx, not 4095
747
           shr ecx, 2
748
           cld
749
           rep stosd
750
751
 
752
           movzx ebx, [edx+CFH.nSections]
753
           mov edi, [img_base]
754
           lea eax, [edx+20]
755
@@:
756
           mov [eax+CFS.VirtualAddress], edi
757
           mov esi, [eax+CFS.PtrRawData]
758
           test esi, esi
759
           jnz .copy
760
           add edi, [eax+CFS.SizeOfRawData]
761
           jmp .next
762
.copy:
763
           add esi, edx
764
           mov ecx, [eax+CFS.SizeOfRawData]
765
           cld
766
           rep movsb
767
.next:
768
           add edi, 15
769
           and edi, not 15
770
           add eax, COFF_SECTION_SIZE
771
           dec ebx
772
           jnz @B
773
774
 
775
           add ebx, edx
776
           mov [sym], ebx
777
           mov ecx, [edx+CFH.nSymbols]
778
           add ecx,ecx
779
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
780
           add ecx, [sym]
781
           mov [strings], ecx
782
783
 
784
           mov dword [ebx], kernel_export
785
           mov dword [ebx+4], 0
786
           lea eax, [edx+20]
787
788
 
789
                                     [strings], ebx
790
           test eax, eax
791
           jz .link_fail
792
793
 
794
           add ebx, 20
795
           stdcall fix_coff_relocs, [coff], ebx, [sym]
796
797
 
798
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szVersion
799
           test eax, eax
800
           jz .link_fail
801
802
 
803
           shr eax, 16
804
           cmp eax, DRV_COMPAT
805
           jb .ver_fail
806
807
 
808
           ja .ver_fail
809
810
 
811
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szSTART
812
           mov [start], eax
813
814
 
815
816
 
817
           stdcall ebx, DRV_ENTRY
818
           test eax, eax
819
           jnz .ok
820
821
 
822
           xor eax, eax
823
           ret
824
.ok:
825
           mov ebx, [img_base]
826
           mov [eax+SRV.base], ebx
827
           mov ecx, [start]
828
           mov [eax+SRV.entry], ecx
829
           ret
830
831
 
832
           mov esi, msg_CR
833
           call sys_msg_board_str
834
           mov esi, [driver_name]
835
           call sys_msg_board_str
836
           mov esi, msg_CR
837
           call sys_msg_board_str
838
           mov esi, msg_version
839
           call sys_msg_board_str
840
           mov esi, msg_www
841
           call sys_msg_board_str
842
           jmp .cleanup
843
844
 
845
           mov esi, msg_module
846
           call sys_msg_board_str
847
           mov esi, [driver_name]
848
           call sys_msg_board_str
849
           mov esi, msg_CR
850
           call sys_msg_board_str
851
.cleanup:
852
           stdcall kernel_free,[img_base]
853
.fail:
854
           stdcall kernel_free, [coff]
855
.exit:
856
           xor eax, eax
857
           ret
858
endp
859
860
 
861
proc load_library stdcall, file_name:dword
862
           locals
863
             coff      dd ?
864
             sym       dd ?
865
             strings   dd ?
866
             img_size  dd ?
867
             img_base  dd ?
868
             exports   dd ?
869
           endl
870
871
 
872
873
 
874
           test eax, eax
875
           jz .fail
876
877
 
878
           movzx ecx, [eax+CFH.nSections]
879
           xor ebx, ebx
880
881
 
882
@@:
883
           add ebx, [edx+CFS.SizeOfRawData]
884
           add ebx, 15
885
           and ebx, not 15
886
           add edx, COFF_SECTION_SIZE
887
           dec ecx
888
           jnz @B
889
           mov [img_size], ebx
890
891
 
892
           stdcall user_alloc, [img_size]
893
894
 
895
           jz .fail
896
           mov [img_base], eax
897
898
 
899
           movzx ebx, [edx+CFH.nSections]
900
           mov edi, [img_base]
901
           lea eax, [edx+20]
902
@@:
903
           mov [eax+CFS.VirtualAddress], edi
904
           mov esi, [eax+CFS.PtrRawData]
905
           test esi, esi
906
           jnz .copy
907
           add edi, [eax+CFS.SizeOfRawData]
908
           jmp .next
909
.copy:
910
           add esi, edx
911
           add edi, new_app_base
912
           mov ecx, [eax+CFS.SizeOfRawData]
913
           cld
914
           rep movsb
915
.next:
916
           add edi, 15-new_app_base
917
           and edi, not 15
918
           add eax, COFF_SECTION_SIZE
919
           dec ebx
920
           jnz @B
921
922
 
923
           add ebx, edx
924
           mov [sym], ebx
925
           mov ecx, [edx+CFH.nSymbols]
926
           add ecx,ecx
927
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
928
           add ecx, [sym]
929
           mov [strings], ecx
930
931
 
932
933
 
934
                                     [strings], dword 0
935
           test eax, eax
936
           jnz @F
937
938
 
939
           mov edx, [coff]
940
           movzx ebx, [edx+CFH.nSections]
941
           mov edi, new_app_base
942
           lea eax, [edx+20]
943
@@:
944
           add [eax+CFS.VirtualAddress], edi  ;patch user space offset
945
           add eax, COFF_SECTION_SIZE
946
           dec ebx
947
           jnz @B
948
949
 
950
           stdcall fix_coff_relocs, [coff], edx, [sym]
951
952
 
953
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szEXPORTS
954
           mov [exports], eax
955
956
 
957
           mov eax, [exports]
958
           ret
959
.fail:
960
           xor eax, eax
961
           ret
962
endp
963
964
 
965
proc stop_all_services
966
967
 
968
.next:
969
           cmp edx,  srv.fd-SRV_FD_OFFSET
970
           je .done
971
           cmp [edx+SRV.magic], ' SRV'
972
           jne .next
973
           cmp [edx+SRV.size], SRV_SIZE
974
           jne .next
975
           mov ebx, [edx+SRV.entry]
976
           mov edx, [edx+SRV.fd]
977
           push edx
978
           stdcall ebx, dword -1
979
           pop edx
980
           jmp .next
981
.done:
982
           ret
983
endp
984
985
 
986
;  eax= size
987
;  ebx= pid
988
989
 
990
create_kernel_object:
991
992
 
993
           call malloc
994
           pop ebx
995
           test eax, eax
996
           jz .fail
997
998
 
999
           shl ecx,8
1000
           add ecx, SLOT_BASE+APP_OBJ_OFFSET
1001
1002
 
1003
           cli
1004
           mov edx, [ecx+APPOBJ.fd]
1005
           mov [eax+APPOBJ.fd], edx
1006
           mov [eax+APPOBJ.bk], ecx
1007
           mov [eax+APPOBJ.pid], ebx
1008
1009
 
1010
           mov [edx+APPOBJ.bk], eax
1011
           popfd
1012
.fail:
1013
           ret
1014
1015
 
1016
;  eax= object
1017
1018
 
1019
destroy_kernel_object:
1020
1021
 
1022
           cli
1023
           mov ebx, [eax+APPOBJ.fd]
1024
           mov ecx, [eax+APPOBJ.bk]
1025
           mov [ebx+APPOBJ.bk], ecx
1026
           mov [ecx+APPOBJ.fd], ebx
1027
           popfd
1028
1029
 
1030
           mov [eax], edx
1031
           mov [eax+4], edx
1032
           mov [eax+8], edx
1033
           mov [eax+12], edx
1034
           mov [eax+16], edx
1035
1036
 
1037
           ret
1038
1039
 
1040
 
1041
;szInfinity     db 'INFINITY',0
1042
szHwMouse      db 'ATI2D',0
1043
1044
 
1045
szEXPORTS      db 'EXPORTS',0
1046
szIMPORTS      db 'IMPORTS',0
1047
1048
 
1049
msg_module     db 'in module ',0
1050
msg_version    db 'incompatible driver version',13,10,0
1051
msg_www        db 'please visit www.kolibrios.org',13,10,0
1052
msg_CR         db  13,10,0
1053
1054
 
1055
create_cursor    dd 0
1056
set_hw_cursor    dd 0
1057
hw_restore       dd 0
1058