1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/*
* Copyright (C) 2009 FAUmachine Team <info@faumachine.org>.
* This program is free software. You can redistribute it and/or modify it
* under the terms of the GNU General Public License, either version 2 of
* the License, or (at your option) any later version. See COPYING.
*/
/*
* Setup the keyboard controller (connected to irq1) so that it produces
* interrupts.
*/
.text
/* keyboard controller is irq1
* io: 0x0060, 0x0064
*/
wait_controller_ready0:
/* fetch status */
inb $0x0064, %al
andb $0x01, %al
jz wait_controller_ready0
ret
.globl setup_controller
setup_controller:
/* setup for read mode */
movb $0x20, %al
outb %al, $0x0064
call wait_controller_ready0
/* read old mode into al */
inb $0x0060, %al
/* setup for write mode (and save old mode in ah) */
movb %al, %ah
movb $0x60, %al
outb %al, $0x0064
wait_controller_ready1:
/* fetch status */
inb $0x0064, %al
andb $0x01, %al
jnz wait_controller_ready1
/* enable interrupts */
orb $0x01, %ah
movb %ah, %al
outb %al, $0x0060
call wait_controller_ready0
/* all done */
movl $str_ready, %edx
call libs_puts
ret
.globl release_comp_irq
release_comp_irq:
/* FIXME that's quite wrong, but will do for now */
pusha
call wait_controller_ready0
inb $0x0060, %al
call libs_printc
call wait_controller_ready0
popa
ret
.data
str_ready:
.ascii "Keyboard controller programmed.\0"
|