Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 566 → Rev 567

/kernel/trunk/tools/config.py
188,7 → 188,8
kw = {}
if defopt:
kw['default-item'] = choices[defopt][0]
res,data = self.calldlg('--extra-label',button[1],
res,data = self.calldlg('--ok-label','Change',
'--extra-label',button[1],
'--extra-button',
'--menu',text,height,width,
str(len(choices)),*args,**kw)
/kernel/trunk/arch/mips32/include/drivers/keyboard.h
37,6 → 37,6
 
extern void keyboard_init(void);
extern void keyboard(void);
extern void keyboard_poll(void);
 
 
#endif
/kernel/trunk/arch/mips32/include/drivers/arc.h
177,7 → 177,7
long (*open)(void); /* ... */
long (*close)(__u32 fileid);
long (*read)(__u32 fileid,void *buf,__u32 n,__u32 *cnt);
long (*getreadstatus)();
long (*getreadstatus)(__u32 fileid);
long (*write)(__u32 fileid, void *buf,__u32 n,__u32 *cnt);
long (*seek)(void); /* ... */
/* 30 */
212,5 → 212,5
extern int arc_enabled(void);
extern void arc_putchar(char ch);
extern void arc_print_devices(void);
 
extern int arc_getchar(void);
#endif
/kernel/trunk/arch/mips32/src/interrupt.c
125,6 → 125,7
/* clear timer interrupt & set new */
cp0_compare_write(cp0_count_read() + cp0_compare_value);
clock();
keyboard_poll();
break;
}
}
/kernel/trunk/arch/mips32/src/drivers/keyboard.c
35,21 → 35,37
#include <synch/spinlock.h>
#include <synch/waitq.h>
#include <typedefs.h>
#include <arch/drivers/arc.h>
 
static void keyboard_enable(void);
static void keyboard_disable(void);
static void arc_kb_disable(void);
static void arc_kb_enable(void);
 
static chardev_t kbrd;
static chardev_operations_t ops = {
 
static chardev_operations_t arc_ops = {
.resume = arc_kb_enable,
.suspend = arc_kb_disable
};
 
static chardev_operations_t msim_ops = {
.resume = keyboard_enable,
.suspend = keyboard_disable
};
 
static int arc_kb_enabled;
 
/** Initialize keyboard subsystem. */
void keyboard_init(void)
{
cp0_unmask_int(KEYBOARD_IRQ);
chardev_initialize(&kbrd, &ops);
if (arc_enabled()) {
chardev_initialize(&kbrd, &arc_ops);
arc_kb_enabled = 1;
} else {
cp0_unmask_int(KEYBOARD_IRQ);
chardev_initialize(&kbrd, &msim_ops);
}
stdin = &kbrd;
}
 
73,3 → 89,27
{
cp0_mask_int(KEYBOARD_IRQ);
}
 
/*****************************/
/* Arc keyboard */
 
void keyboard_poll(void)
{
int ch;
 
if (!arc_enabled() || !arc_kb_enabled)
return;
while ((ch = arc_getchar()) != -1)
chardev_push_character(&kbrd, ch);
}
 
static void arc_kb_enable(void)
{
arc_kb_enabled = 1;
}
 
/* Called from getc(). */
static void arc_kb_disable(void)
{
arc_kb_enabled = 0;
}
/kernel/trunk/arch/mips32/src/drivers/arc.c
183,3 → 183,22
interrupts_restore(ipl);
}
 
/** Try to get character, return character or -1 if not available */
int arc_getchar(void)
{
char ch;
__u32 count;
long result;
 
if (arc_entry->getreadstatus(0))
return -1;
result = arc_entry->read(0, &ch, 1, &count);
if (result || count!=1) {
cpu_halt();
return -1;
}
if (ch == '\r')
return '\n';
return ch;
}