refactor(kernel): rewrite com probe
This commit is contained in:
parent
78340367b8
commit
968f9b03a5
|
@ -18,7 +18,9 @@ UART8250_IIR = 0x2
|
|||
UART8250_FCR = 0x2
|
||||
UART8250_LCR = 0x3
|
||||
UART8250_MCR = 0x4
|
||||
UART8250_MCR_OUT2 = 0x08
|
||||
UART8250_LSR = 0x5
|
||||
UART8250_LSR_THRE = 0x20
|
||||
UART8250_MSR = 0x6
|
||||
UART8250_SCR = 0x7
|
||||
|
||||
|
@ -27,37 +29,47 @@ UART8250_DLL = 0x0
|
|||
UART8250_DLH = 0x1
|
||||
|
||||
com_init:
|
||||
mov ax, COM1
|
||||
push ebx
|
||||
xor cx, cx
|
||||
.loop:
|
||||
inc ch
|
||||
|
||||
; get io address
|
||||
movzx eax, cl
|
||||
shl eax, 1
|
||||
add eax, aComPorts
|
||||
mov bx, [eax]
|
||||
|
||||
mov ax, bx
|
||||
push ecx
|
||||
call com_probe
|
||||
pop ecx
|
||||
or eax, eax
|
||||
jnz @f
|
||||
mov esi, szMsgCom1Found
|
||||
call klog
|
||||
@@:
|
||||
mov ax, COM2
|
||||
call com_probe
|
||||
or eax, eax
|
||||
jnz @f
|
||||
mov esi, szMsgCom2Found
|
||||
call klog
|
||||
@@:
|
||||
mov ax, COM3
|
||||
call com_probe
|
||||
or eax, eax
|
||||
jnz @f
|
||||
mov esi, szMsgCom3Found
|
||||
call klog
|
||||
@@:
|
||||
mov ax, COM4
|
||||
call com_probe
|
||||
or eax, eax
|
||||
jnz @f
|
||||
mov esi, szMsgCom4Found
|
||||
; comX found yeah
|
||||
movzx eax, ch
|
||||
push ecx
|
||||
push eax
|
||||
mov esi, szMsgComFound
|
||||
call klog
|
||||
pop ecx
|
||||
|
||||
; mark comX as active
|
||||
mov al, 1
|
||||
shl al, cl
|
||||
or byte [uComActive], al
|
||||
@@:
|
||||
inc cl
|
||||
cmp cl, NCOM
|
||||
jb .loop
|
||||
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
;; Function: com_probe
|
||||
;;
|
||||
;; In:
|
||||
;; AX - IO port
|
||||
com_probe:
|
||||
mov dx, ax
|
||||
add dx, UART8250_LCR
|
||||
|
@ -66,6 +78,8 @@ com_probe:
|
|||
dec dx
|
||||
out dx, al
|
||||
xor ecx, ecx
|
||||
|
||||
;; wait a little
|
||||
@@:
|
||||
inc ecx
|
||||
cmp ecx, 100
|
||||
|
@ -81,9 +95,29 @@ com_probe:
|
|||
xor eax, eax
|
||||
ret
|
||||
|
||||
;; Function: com_putc
|
||||
;;
|
||||
;; In:
|
||||
;; AL - Char to print
|
||||
;; DX - IO port
|
||||
;;
|
||||
com_putc:
|
||||
add dx, UART8250_LSR
|
||||
push eax
|
||||
@@:
|
||||
in al, dx
|
||||
and al, UART8250_LSR_THRE
|
||||
jnz @b
|
||||
pop eax
|
||||
sub dx, UART8250_LSR
|
||||
out dx, al
|
||||
ret
|
||||
ret
|
||||
|
||||
com_irq1:
|
||||
pusha
|
||||
|
||||
mov esi, szMsgComIRQ
|
||||
call klog
|
||||
popa
|
||||
iret
|
||||
|
||||
|
@ -122,10 +156,16 @@ com_reset:
|
|||
uCom1Lock dd 0
|
||||
uCom2Lock dd 0
|
||||
uComActive db 0
|
||||
szMsgCom1Found db "COM: com1 found", 0
|
||||
szMsgCom2Found db "COM: com2 found", 0
|
||||
szMsgCom3Found db "COM: com3 found", 0
|
||||
szMsgCom4Found db "COM: com4 found", 0
|
||||
|
||||
szMsgComFound db "COM: com%u found", 0
|
||||
szMsgComIRQ db "com irq", 0
|
||||
|
||||
aComPorts:
|
||||
dw COM1
|
||||
dw COM2
|
||||
dw COM3
|
||||
dw COM4
|
||||
.end:
|
||||
|
||||
com_device:
|
||||
db 'com', 0, 0, 0, 0, 0
|
||||
|
|
Loading…
Reference in a new issue