/kernel/trunk/genarch/include/i8042/i8042.h |
---|
46,5 → 46,7 |
extern void i8042_init(void); |
extern void i8042_poll(void); |
extern void i8042_grab(void); |
extern void i8042_release(void); |
#endif |
/kernel/trunk/genarch/src/i8042/i8042.c |
---|
267,18 → 267,35 |
static void i8042_interrupt(int n, istate_t *istate); |
static void i8042_wait(void); |
/** Initialize i8042. */ |
void i8042_init(void) |
static iroutine oldvector; |
/** Initialize keyboard and service interrupts using kernel routine */ |
void i8042_grab(void) |
{ |
int i; |
exc_register(VECTOR_KBD, "i8042_interrupt", (iroutine) i8042_interrupt); |
oldvector = exc_register(VECTOR_KBD, "i8042_interrupt", (iroutine) i8042_interrupt); |
i8042_wait(); |
i8042_command_write(i8042_SET_COMMAND); |
i8042_wait(); |
i8042_data_write(i8042_COMMAND); |
i8042_wait(); |
} |
/** Resume the former interrupt vector */ |
void i8042_release(void) |
{ |
if (oldvector) |
exc_register(VECTOR_KBD, "user_interrupt", oldvector); |
} |
/** Initialize i8042. */ |
void i8042_init(void) |
{ |
int i; |
i8042_grab(); |
/* Prevent user from accidentaly releasing calling i8042_resume |
* and disabling keyboard |
*/ |
oldvector = NULL; |
trap_virtual_enable_irqs(1<<IRQ_KBD); |
chardev_initialize("i8042_kbd", &kbrd, &ops); |
stdin = &kbrd; |
/kernel/trunk/generic/include/console/console.h |
---|
40,4 → 40,7 |
extern count_t gets(chardev_t *chardev, char *buf, size_t buflen); |
extern void putchar(char c); |
extern void arch_grab_console(void); |
extern void arch_release_console(void); |
#endif /* __CHARDEV_H__ */ |
/kernel/trunk/generic/include/syscall/syscall.h |
---|
58,6 → 58,7 |
SYS_PREEMPT_CONTROL, |
SYS_SYSINFO_VALID, |
SYS_SYSINFO_VALUE, |
SYS_DEBUG_ENABLE_CONSOLE, |
SYSCALL_END |
} syscall_t; |
/kernel/trunk/generic/src/console/cmd.c |
---|
37,6 → 37,7 |
*/ |
#include <console/cmd.h> |
#include <console/console.h> |
#include <console/kconsole.h> |
#include <print.h> |
#include <panic.h> |
73,6 → 74,14 |
.argc = 0 |
}; |
static int cmd_continue(cmd_arg_t *argv); |
static cmd_info_t continue_info = { |
.name = "continue", |
.description ="Return console back to userspace", |
.func = cmd_continue, |
.argc = 0 |
}; |
/** Data and methods for 'description' command. */ |
static int cmd_desc(cmd_arg_t *argv); |
static void desc_help(void); |
332,6 → 341,7 |
&call1_info, |
&call2_info, |
&call3_info, |
&continue_info, |
&cpus_info, |
&desc_info, |
&exit_info, |
699,3 → 709,15 |
version_print(); |
return 1; |
} |
/** Command for returning console back to userspace. |
* |
* @param argv Ignored. |
* |
* return Always 1. |
*/ |
int cmd_continue(cmd_arg_t *argv) |
{ |
arch_release_console(); |
return 1; |
} |
/kernel/trunk/generic/src/syscall/syscall.c |
---|
46,6 → 46,7 |
#include <security/cap.h> |
#include <syscall/copy.h> |
#include <sysinfo/sysinfo.h> |
#include <console/console.h> |
/** Print using kernel facility |
* |
78,6 → 79,13 |
return count; |
} |
/** Tell kernel to get keyboard/console access again */ |
static __native sys_debug_enable_console(void) |
{ |
arch_grab_console(); |
return 0; |
} |
/** Dispatch system call */ |
__native syscall_handler(__native a1, __native a2, __native a3, |
__native a4, __native id) |
130,5 → 138,8 |
/* Sysinfo syscalls */ |
sys_sysinfo_valid, |
sys_sysinfo_value |
sys_sysinfo_value, |
/* Debug calls */ |
sys_debug_enable_console |
}; |
/kernel/trunk/arch/sparc64/src/sparc64.c |
---|
32,6 → 32,7 |
#include <arch/console.h> |
#include <arch/drivers/tick.h> |
#include <proc/thread.h> |
#include <console/console.h> |
void arch_pre_mm_init(void) |
{ |
74,3 → 75,16 |
void calibrate_delay_loop(void) |
{ |
} |
/** Acquire console back for kernel |
* |
*/ |
void arch_grab_console(void) |
{ |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
} |
/kernel/trunk/arch/ia64/src/ia64.c |
---|
114,3 → 114,16 |
{ |
return 0; |
} |
/** Acquire console back for kernel |
* |
*/ |
void arch_grab_console(void) |
{ |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
} |
/kernel/trunk/arch/ppc32/src/ppc32.c |
---|
34,6 → 34,7 |
#include <genarch/fb/fb.h> |
#include <userspace.h> |
#include <proc/uarg.h> |
#include <console/console.h> |
bootinfo_t bootinfo; |
91,3 → 92,16 |
for (;;) |
; |
} |
/** Acquire console back for kernel |
* |
*/ |
void arch_grab_console(void) |
{ |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
} |
/kernel/trunk/arch/amd64/src/amd64.c |
---|
50,6 → 50,7 |
#include <arch/syscall.h> |
#include <arch/debugger.h> |
#include <syscall/syscall.h> |
#include <console/console.h> |
/** Disable I/O on non-privileged levels |
185,3 → 186,18 |
write_msr(AMD_MSR_FS, addr); |
return 0; |
} |
/** Acquire console back for kernel |
* |
*/ |
void arch_grab_console(void) |
{ |
i8042_grab(); |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
i8042_release(); |
} |
/kernel/trunk/arch/ppc64/src/ppc64.c |
---|
33,6 → 33,7 |
#include <genarch/fb/fb.h> |
#include <userspace.h> |
#include <proc/uarg.h> |
#include <console/console.h> |
bootinfo_t bootinfo; |
89,3 → 90,16 |
for (;;) |
; |
} |
/** Acquire console back for kernel |
* |
*/ |
void arch_grab_console(void) |
{ |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
} |
/kernel/trunk/arch/mips32/include/drivers/msim.h |
---|
37,5 → 37,7 |
#define MSIM_KBD_IRQ 2 |
void msim_console(void); |
void msim_kbd_release(void); |
void msim_kbd_grab(void); |
#endif |
/kernel/trunk/arch/mips32/src/console.c |
---|
42,3 → 42,18 |
msim_console(); |
} |
} |
/** Acquire console back for kernel |
* |
*/ |
void arch_grab_console(void) |
{ |
msim_kbd_grab(); |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
msim_kbd_release(); |
} |
/kernel/trunk/arch/mips32/src/mips32.c |
---|
171,3 → 171,4 |
{ |
return 0; |
} |
/kernel/trunk/arch/mips32/src/drivers/msim.c |
---|
108,3 → 108,13 |
stdin = &console; |
stdout = &console; |
} |
static iroutine oldvector; |
void msim_kbd_grab(void) |
{ |
oldvector = int_register(MSIM_KBD_IRQ, "msim_kbd", msim_interrupt); |
} |
void msim_kbd_release(void) |
{ |
int_register(MSIM_KBD_IRQ, "user_interrupt", oldvector); |
} |
/kernel/trunk/arch/ia32/src/ia32.c |
---|
54,6 → 54,7 |
#include <arch/debugger.h> |
#include <proc/thread.h> |
#include <syscall/syscall.h> |
#include <console/console.h> |
void arch_pre_mm_init(void) |
{ |
132,3 → 133,18 |
return 0; |
} |
/** Acquire console back for kernel |
* |
*/ |
void arch_grab_console(void) |
{ |
i8042_grab(); |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
i8042_release(); |
} |