Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1506 → Rev 1507

/kernel/trunk/generic/include/ipc/irq.h
42,6 → 42,7
CMD_MEM_WRITE_8,
CMD_PORT_READ_1,
CMD_PORT_WRITE_1,
CMD_IA64_GETCHAR,
CMD_LAST
} irq_cmd_type;
 
/kernel/trunk/generic/src/ipc/irq.c
48,6 → 48,7
#include <ipc/irq.h>
#include <atomic.h>
#include <syscall/copy.h>
#include <console/console.h>
 
typedef struct {
SPINLOCK_DECLARE(lock);
103,6 → 104,11
outb((long)code->cmds[i].addr, code->cmds[i].value);
break;
#endif
#if defined(ia64)
case CMD_IA64_GETCHAR:
IPC_SET_ARG2(call->data, _getc(&ski_uconsole));
break;
#endif
default:
break;
}
/kernel/trunk/arch/ia64/include/interrupt.h
33,7 → 33,8
#include <arch/types.h>
#include <arch/register.h>
 
#define IRQ_COUNT 1 /* TODO */
#define IRQ_COUNT 257 /* 256 NOT suppotred IRQS*//* TODO */
#define IRQ_KBD 256 /* One simulated interrupt for ski simulator keyboard*/
 
/** External Interrupt vectors. */
#define INTERRUPT_TIMER 0
119,6 → 120,7
extern void universal_handler(__u64 vector, istate_t *istate);
extern void nop_handler(__u64 vector, istate_t *istate);
extern void external_interrupt(__u64 vector, istate_t *istate);
extern void virtual_interrupt(__u64 irq, void *param);
extern void disabled_fp_register(__u64 vector, istate_t *istate);
 
 
/kernel/trunk/arch/ia64/include/ski/ski.h
30,6 → 30,7
#define __SKI_H__
 
#include <arch/types.h>
#include <console/console.h>
 
#define SKI_INIT_CONSOLE 20
#define SKI_GETCHAR 21
36,6 → 37,10
#define SKI_PUTCHAR 31
 
extern void ski_init_console(void);
extern void ski_set_console_sysinfo(void);
extern void poll_keyboard(void);
 
extern chardev_t ski_uconsole;
extern int kbd_uspace;
 
#endif
/kernel/trunk/arch/ia64/include/arch.h
31,4 → 31,6
 
#define LOADED_PROG_STACK_PAGES_NO 2
 
#include <arch/ski/ski.h>
 
#endif
/kernel/trunk/arch/ia64/src/ia64.c
72,6 → 72,7
 
void arch_post_mm_init(void)
{
ski_set_console_sysinfo();
}
 
void arch_pre_smp_init(void)
/kernel/trunk/arch/ia64/src/ski/ski.c
29,9 → 29,13
#include <arch/ski/ski.h>
#include <console/console.h>
#include <console/chardev.h>
#include <arch/interrupt.h>
#include <sysinfo/sysinfo.h>
 
static chardev_t ski_console;
chardev_t ski_console;
chardev_t ski_uconsole;
static bool kb_disable;
int kbd_uspace=0;
 
static void ski_putchar(chardev_t *d, const char ch);
static __s32 ski_getchar(void);
111,8 → 115,17
ch = ski_getchar();
if(ch == '\r')
ch = '\n';
if (ch)
chardev_push_character(&ski_console, ch);
if (ch){
if(kbd_uspace){
chardev_push_character(&ski_uconsole, ch);
virtual_interrupt(IRQ_KBD,NULL);
}
else {
chardev_push_character(&ski_console, ch);
 
}
}
}
 
/* Called from getc(). */
152,6 → 165,19
);
 
chardev_initialize("ski_console", &ski_console, &ski_ops);
chardev_initialize("ski_uconsole", &ski_uconsole, &ski_ops);
stdin = &ski_console;
stdout = &ski_console;
 
}
/** Setup console sysinfo (i.e. Keyboard IRQ)
*
* Because sysinfo neads memory allocation/dealocation
* this functions should be called separetely from init.
*
*/
void ski_set_console_sysinfo(void)
{
sysinfo_set_item_val("kbd",NULL,true);
sysinfo_set_item_val("kbd.irq",NULL,IRQ_KBD);
}
/kernel/trunk/arch/ia64/src/interrupt.c
44,6 → 44,8
#include <print.h>
#include <proc/scheduler.h>
#include <ipc/sysipc.h>
#include <ipc/irq.h>
#include <ipc/ipc.h>
 
 
#define VECTORS_64_BUNDLE 20
53,6 → 55,7
 
#define BUNDLE_SIZE 16
 
 
char *vector_names_64_bundle[VECTORS_64_BUNDLE] = {
"VHPT Translation vector",
"Instruction TLB vector",
134,13 → 137,13
putchar('\n');
printf("Interrupted context dump:\n");
printf("ar.bsp=%p\tar.bspstore=%p\n", istate->ar_bsp, istate->ar_bspstore);
printf("ar.rnat=%#llx\tar.rsc=%$llx\n", istate->ar_rnat, istate->ar_rsc);
printf("ar.ifs=%#llx\tar.pfs=%#llx\n", istate->ar_ifs, istate->ar_pfs);
printf("cr.isr=%#llx\tcr.ipsr=%#llx\t\n", istate->cr_isr.value, istate->cr_ipsr);
printf("ar.rnat=%#018llx\tar.rsc=%#018llx\n", istate->ar_rnat, istate->ar_rsc);
printf("ar.ifs=%#018llx\tar.pfs=%#018llx\n", istate->ar_ifs, istate->ar_pfs);
printf("cr.isr=%#018llx\tcr.ipsr=%#018llx\t\n", istate->cr_isr.value, istate->cr_ipsr);
printf("cr.iip=%#llx, #%d\t(%s)\n", istate->cr_iip, istate->cr_isr.ei, iip ? iip : "?");
printf("cr.iipa=%#llx\t(%s)\n", istate->cr_iipa, iipa ? iipa : "?");
printf("cr.ifa=%#llx\t(%s)\n", istate->cr_ifa, ifa ? ifa : "?");
printf("cr.iip=%#018llx, #%d\t(%s)\n", istate->cr_iip, istate->cr_isr.ei, iip);
printf("cr.iipa=%#018llx\t(%s)\n", istate->cr_iipa, iipa);
printf("cr.ifa=%#018llx\t(%s)\n", istate->cr_ifa, ifa);
}
 
void general_exception(__u64 vector, istate_t *istate)
242,9 → 245,28
}
}
 
void virtual_interrupt(__u64 irq,void *param)
{
switch(irq) {
case IRQ_KBD:
if(kbd_uspace) ipc_irq_send_notif(irq);
break;
default:
panic("\nUnhandled Virtual Interrupt request %d\n", irq);
break;
}
}
 
/* Reregister irq to be IPC-ready */
void irq_ipc_bind_arch(__native irq)
{
if(irq==IRQ_KBD) {
kbd_uspace=1;
return;
}
panic("not implemented\n");
/* TODO */
}