Files
RockOS/kernel/drivers/ps2/ps2_stubs.S

87 lines
1.2 KiB
ArmAsm

#include "drivers/ps2/ps2.h"
.code32
.global ps2_wait_input_empty
.global ps2_wait_output_full
.global ps2_write_command
.global ps2_read_data
.global ps2_write_data
.global ps2_flush_output_buffer
.extern io_wait
# helpers
ps2_wait_input_empty: #(void) -> void
push %ebp
mov %esp, %ebp
1:
inb $PS2_STATUS, %al
andb $0x02, %al
jnz 1b
leave
ret
ps2_wait_output_full: #(void) -> void
push %ebp
mov %esp, %ebp
1:
inb $PS2_STATUS, %al
andb $0x01, %al
jz 1b
leave
ret
ps2_write_command: #(uint8_t command) -> void
push %ebp
mov %esp, %ebp
call ps2_wait_input_empty
xor %eax, %eax
movb 8(%ebp), %al
outb %al, $PS2_COMMAND
leave
ret
ps2_read_data: #(void) -> uint8_t
push %ebp
mov %esp, %ebp
call ps2_wait_output_full
xor %eax, %eax
inb $PS2_DATA, %al
leave
ret
ps2_write_data: #(uint8_t) -> void
push %ebp
mov %esp, %ebp
call ps2_wait_input_empty
xor %eax, %eax
movb 8(%ebp), %al
outb %al, $PS2_DATA
leave
ret
ps2_flush_output_buffer: #(void) -> void
push %ebp
mov %esp, %ebp
1:
inb $PS2_STATUS, %al
andb $0x01, %al
jz 2f
inb $PS2_DATA, %al
jmp 1b
2:
leave
ret