26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
|
/** @addtogroup ppc32 |
/** @addtogroup ppc32 |
* @{ |
*/ |
/** @file |
40,6 → 40,7 |
#include <sysinfo/sysinfo.h> |
#include <interrupt.h> |
#include <stdarg.h> |
#include <ddi/device.h> |
|
#define CUDA_IRQ 10 |
#define SPECIAL '?' |
204,32 → 205,9 |
} |
|
|
/* Called from getc(). */ |
static void cuda_resume(chardev_t *d) |
{ |
} |
|
|
/* Called from getc(). */ |
static void cuda_suspend(chardev_t *d) |
{ |
} |
|
|
static char key_read(chardev_t *d) |
{ |
char ch; |
|
ch = 0; |
return ch; |
} |
|
|
static chardev_t kbrd; |
static chardev_operations_t ops = { |
.suspend = cuda_suspend, |
.resume = cuda_resume, |
.read = key_read |
static indev_t kbrd; |
static indev_operations_t ops = { |
.poll = NULL |
}; |
|
|
251,11 → 229,11 |
static void cuda_irq_handler(irq_t *irq) |
{ |
int scan_code = cuda_get_scancode(); |
|
|
if (scan_code != -1) { |
uint8_t scancode = (uint8_t) scan_code; |
if ((scancode & 0x80) != 0x80) |
chardev_push_character(&kbrd, lchars[scancode & 0x7f]); |
indev_push_character(&kbrd, lchars[scancode & 0x7f]); |
} |
} |
|
264,15 → 242,15 |
return IRQ_ACCEPT; |
} |
|
void cuda_init(devno_t devno, uintptr_t base, size_t size) |
void cuda_init(uintptr_t base, size_t size) |
{ |
cuda = (uint8_t *) hw_map(base, size); |
|
chardev_initialize("cuda_kbd", &kbrd, &ops); |
indev_initialize("cuda_kbd", &kbrd, &ops); |
stdin = &kbrd; |
|
irq_initialize(&cuda_irq); |
cuda_irq.devno = devno; |
cuda_irq.devno = device_assign_devno(); |
cuda_irq.inr = CUDA_IRQ; |
cuda_irq.claim = cuda_claim; |
cuda_irq.handler = cuda_irq_handler; |
281,7 → 259,6 |
pic_enable_interrupt(CUDA_IRQ); |
|
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.devno", NULL, devno); |
sysinfo_set_item_val("kbd.inr", NULL, CUDA_IRQ); |
sysinfo_set_item_val("kbd.address.virtual", NULL, base); |
} |