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