Subversion Repositories Kolibri OS

Rev

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

Rev 414 Rev 416
Line 123... Line 123...
123
   .rate         dd ?
123
   .rate         dd ?
124
   .mode         dd ?
124
   .mode         dd ?
125
   .state        dd ?
125
   .state        dd ?
126
 
126
 
Line -... Line 127...
-
 
127
   .rcvr_buff    dd ?
127
   .rcvr_rp      dd ?
128
   .rcvr_rp      dd ?
128
   .rcvr_wp      dd ?
129
   .rcvr_wp      dd ?
-
 
130
   .rcvr_count   dd ?
129
   .rcvr_cnt     dd ?
131
   .rcvr_top     dd ?
Line 130... Line 132...
130
 
132
 
131
   .xmit_buff    dd ?
133
   .xmit_buff    dd ?
132
   .xmit_rp      dd ?
134
   .xmit_rp      dd ?
133
   .xmit_wp      dd ?
135
   .xmit_wp      dd ?
Line 138... Line 140...
138
virtual at 0
140
virtual at 0
139
  UART UART
141
  UART UART
140
end virtual
142
end virtual
141
 
143
 
Line 142... Line 144...
142
UART_SIZE     equ 16*4
144
UART_SIZE     equ 18*4
Line 143... Line 145...
143
 
145
 
144
struc CONNECTION
146
struc CONNECTION
145
{
147
{
146
   .magic       dd ?   ;'CNCT'
148
   .magic       dd ?   ;'CNCT'
Line 176... Line 178...
176
 
178
 
Line 177... Line 179...
177
           mov eax, [com1]
179
           mov eax, [com1]
178
           mov [eax+UART.base], COM_1_BASE
180
           mov [eax+UART.base], COM_1_BASE
Line 179... Line 181...
179
 
181
 
Line 180... Line 182...
180
           stdcall alloc_kernel_space, 16384
182
           stdcall alloc_kernel_space, 32768
181
 
183
 
-
 
184
           mov edi, [com1]
-
 
185
           mov edx, eax
-
 
186
 
-
 
187
           mov [edi+UART.rcvr_buff], eax
-
 
188
           add eax, 8192
182
           mov edi, [com1]
189
           mov [edi+UART.rcvr_top], eax
183
           mov edx, eax
190
           add eax, 8192
184
           mov [edi+UART.xmit_buff], eax
191
           mov [edi+UART.xmit_buff], eax
Line 185... Line 192...
185
           add eax, 8192
192
           add eax, 8192
Line 201... Line 208...
201
           or eax, PG_SW
208
           or eax, PG_SW
202
           mov [page_tabs+edx*4+4], eax
209
           mov [page_tabs+edx*4+4], eax
203
           mov [page_tabs+edx*4+12], eax
210
           mov [page_tabs+edx*4+12], eax
Line -... Line 211...
-
 
211
 
-
 
212
           call alloc_page
-
 
213
           test eax, eax
-
 
214
           jz .fail
-
 
215
 
-
 
216
           or eax, PG_SW
-
 
217
           mov [page_tabs+edx*4+16], eax
-
 
218
           mov [page_tabs+edx*4+24], eax
-
 
219
 
-
 
220
           call alloc_page
-
 
221
           test eax, eax
-
 
222
           jz .fail
-
 
223
 
-
 
224
           or eax, PG_SW
-
 
225
           mov [page_tabs+edx*4+20], eax
-
 
226
           mov [page_tabs+edx*4+28], eax
204
 
227
 
205
           mov eax, [edi+UART.xmit_buff]
228
           mov eax, [edi+UART.rcvr_buff]
206
           invlpg [eax]
229
           invlpg [eax]
207
           invlpg [eax+0x1000]
230
           invlpg [eax+0x1000]
208
           invlpg [eax+0x2000]
231
           invlpg [eax+0x2000]
-
 
232
           invlpg [eax+0x3000]
-
 
233
           invlpg [eax+0x4000]
-
 
234
           invlpg [eax+0x5000]
-
 
235
           invlpg [eax+0x6000]
Line 209... Line 236...
209
           invlpg [eax+0x3000]
236
           invlpg [eax+0x7000]
210
 
237
 
Line 211... Line 238...
211
           mov eax, edi
238
           mov eax, edi
Line 372... Line 399...
372
           add edx, LSR_REG
399
           add edx, LSR_REG
373
           in al, dx
400
           in al, dx
374
           jmp .clear_IIR
401
           jmp .clear_IIR
375
.done:
402
.done:
376
           mov edi, [esi+UART.xmit_buff]
403
           mov edi, [esi+UART.rcvr_buff]
377
           mov ecx, 8192/4
404
           mov ecx, 8192/4
378
           xor eax, eax
405
           xor eax, eax
379
 
406
 
Line 380... Line 407...
380
           mov [esi+UART.xmit_rp], edi
407
           mov [esi+UART.rcvr_rp], edi
381
           mov [esi+UART.xmit_wp], edi
408
           mov [esi+UART.rcvr_wp], edi
382
           mov [esi+UART.xmit_count], eax
409
           mov [esi+UART.rcvr_count], eax
383
           mov [esi+UART.xmit_free], 8192
-
 
Line 384... Line 410...
384
 
410
 
385
           cld
411
           cld
Line -... Line 412...
-
 
412
           rep stosd
-
 
413
 
Line 386... Line 414...
386
           rep stosd
414
           mov edi, [esi+UART.xmit_buff]
387
 
415
           mov ecx, 8192/4
388
 
416
 
-
 
417
           mov [esi+UART.xmit_rp], edi
Line 389... Line 418...
389
;           mov [esi+UART.rcvr_rp], eax
418
           mov [esi+UART.xmit_wp], edi
-
 
419
           mov [esi+UART.xmit_count], eax
390
;           mov [esi+UART.rcvr_wp], eax
420
           mov [esi+UART.xmit_free], 8192
391
;           mov [esi+UART.rcvr_cnt], eax
421
 
392
 
422
           rep stosd
Line 393... Line 423...
393
           ret
423
           ret               ;eax= 0
Line 683... Line 713...
683
           test eax, eax
713
           test eax, eax
684
           jz .fail
714
           jz .fail
685
 
715
 
Line 686... Line 716...
686
           mov ebx, [esi+8]    ;dst size
716
           mov ebx, [esi+8]    ;dst size
687
           mov ecx, [eax+UART.rcvr_cnt]
717
           mov ecx, [eax+UART.rcvr_count]
688
           cmp ecx, ebx
718
           cmp ecx, ebx
689
           jbe @F
719
           jbe @F
690
           mov ecx, ebx
720
           mov ecx, ebx
691
@@:
721
@@:
692
           mov [edi], ecx      ;bytes read
722
           mov [edi], ecx      ;bytes read
693
           test ecx, ecx
723
           test ecx, ecx
694
           jz .done
724
           jz .done
Line 695... Line 725...
695
 
725
 
Line 696... Line -...
696
           sub [eax+UART.rcvr_cnt], ecx
-
 
697
 
726
           push ecx
698
           push eax
-
 
699
           mov edi, [esi+4]    ;dst
727
 
700
       ;    lea esi, [eax+RCVR_OFFSET]
728
           mov edi, [esi+4]    ;dst
701
           mov ebx, [eax+UART.rcvr_rp]
-
 
702
           cld
-
 
703
@@:
-
 
704
           and ebx, 127
729
           mov esi, [eax+UART.rcvr_rp]
705
           mov al, [esi+ebx]
-
 
706
           stosb
730
           cld
707
           inc ebx
-
 
Line -... Line 731...
-
 
731
           rep movsb
708
           dec ecx
732
           pop ecx
-
 
733
 
-
 
734
           cmp esi, [eax+UART.rcvr_top]
709
           jnz @B
735
           jb @F
-
 
736
           sub esi, 8192
710
 
737
@@:
711
           pop eax
738
           mov [eax+UART.rcvr_rp], esi
712
           mov [eax+UART.rcvr_rp], ebx
739
           sub [eax+UART.rcvr_count], ecx
713
.done:
740
.done:
714
           xor eax, eax
741
           xor eax, eax
715
           rep
742
           ret
Line 716... Line 743...
716
.fail:
743
.fail:
Line 830... Line 857...
830
           ret
857
           ret
831
 
858
 
Line 832... Line 859...
832
align 4
859
align 4
833
isr_recieve:
860
isr_recieve:
-
 
861
           mov esi, [ebx+UART.base]
-
 
862
           add esi, LSR_REG
-
 
863
           mov edi, [ebx+UART.rcvr_wp]
-
 
864
           xor ecx, ecx
-
 
865
           cld
-
 
866
.read:
-
 
867
           mov edx, esi
-
 
868
           in al, dx
-
 
869
           test eax, LSR_DR
-
 
870
           jz .done
-
 
871
 
834
           mov edx, [ebx+UART.base]
872
           mov edx, [ebx+UART.base]
835
           in al, dx
873
           in al, dx
-
 
874
           stosb
-
 
875
           inc ecx
-
 
876
           jmp .read
-
 
877
.done:
-
 
878
           cmp edi, [ebx+UART.rcvr_top]
-
 
879
           jb @F
-
 
880
           sub edi, 8192
-
 
881
@@:
-
 
882
           mov [ebx+UART.rcvr_wp], edi
-
 
883
           add [ebx+UART.rcvr_count], ecx
836
           ret
884
           ret
Line 837... Line 885...
837
 
885
 
838
align 4
886
align 4
839
isr_modem:
887
isr_modem: