Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1473 → Rev 1474

/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();
}