Changeset ac0cb2a in mainline


Ignore:
Timestamp:
2005-12-08T00:29:53Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
944b15c
Parents:
9d5e23c
Message:

Added simple support for arc keyboards on mips.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • arch/mips32/include/drivers/arc.h

    r9d5e23c rac0cb2a  
    178178        long (*close)(__u32 fileid);
    179179        long (*read)(__u32 fileid,void *buf,__u32 n,__u32 *cnt);
    180         long (*getreadstatus)();
     180        long (*getreadstatus)(__u32 fileid);
    181181        long (*write)(__u32 fileid, void *buf,__u32 n,__u32 *cnt);
    182182        long (*seek)(void); /* ... */
     
    213213extern void arc_putchar(char ch);
    214214extern void arc_print_devices(void);
    215 
     215extern int arc_getchar(void);
    216216#endif
  • arch/mips32/include/drivers/keyboard.h

    r9d5e23c rac0cb2a  
    3838extern void keyboard_init(void);
    3939extern void keyboard(void);
    40 
     40extern void keyboard_poll(void);
    4141
    4242#endif
  • arch/mips32/src/drivers/arc.c

    r9d5e23c rac0cb2a  
    184184       
    185185}
     186
     187/** Try to get character, return character or -1 if not available */
     188int arc_getchar(void)
     189{
     190        char ch;
     191        __u32 count;
     192        long result;
     193
     194        if (arc_entry->getreadstatus(0))
     195                return -1;
     196        result = arc_entry->read(0, &ch, 1, &count);
     197        if (result || count!=1) {
     198                cpu_halt();
     199                return -1;
     200        }
     201        if (ch == '\r')
     202                return '\n';
     203        return ch;
     204}
  • arch/mips32/src/drivers/keyboard.c

    r9d5e23c rac0cb2a  
    3636#include <synch/waitq.h>
    3737#include <typedefs.h>
     38#include <arch/drivers/arc.h>
    3839
    3940static void keyboard_enable(void);
    4041static void keyboard_disable(void);
     42static void arc_kb_disable(void);
     43static void arc_kb_enable(void);
    4144
    4245static chardev_t kbrd;
    43 static chardev_operations_t ops = {
     46
     47static chardev_operations_t arc_ops = {
     48        .resume = arc_kb_enable,
     49        .suspend = arc_kb_disable
     50};
     51
     52static chardev_operations_t msim_ops = {
    4453        .resume = keyboard_enable,
    4554        .suspend = keyboard_disable
    4655};
    4756
     57static int arc_kb_enabled;
     58
    4859/** Initialize keyboard subsystem. */
    4960void keyboard_init(void)
    5061{
    51         cp0_unmask_int(KEYBOARD_IRQ);
    52         chardev_initialize(&kbrd, &ops);
     62        if (arc_enabled()) {
     63                chardev_initialize(&kbrd, &arc_ops);
     64                arc_kb_enabled = 1;
     65        } else {
     66                cp0_unmask_int(KEYBOARD_IRQ);
     67                chardev_initialize(&kbrd, &msim_ops);
     68        }
    5369        stdin = &kbrd;
    5470}
     
    7490        cp0_mask_int(KEYBOARD_IRQ);
    7591}
     92
     93/*****************************/
     94/* Arc keyboard */
     95
     96void keyboard_poll(void)
     97{
     98        int ch;
     99
     100        if (!arc_enabled() || !arc_kb_enabled)
     101                return;
     102        while ((ch = arc_getchar()) != -1)
     103                chardev_push_character(&kbrd, ch);             
     104}
     105
     106static void arc_kb_enable(void)
     107{
     108        arc_kb_enabled = 1;
     109}
     110
     111/* Called from getc(). */
     112static void arc_kb_disable(void)
     113{
     114        arc_kb_enabled = 0;
     115}
  • arch/mips32/src/interrupt.c

    r9d5e23c rac0cb2a  
    126126                                        cp0_compare_write(cp0_count_read() + cp0_compare_value);
    127127                                        clock();
     128                                        keyboard_poll();
    128129                                        break;
    129130                        }
  • tools/config.py

    r9d5e23c rac0cb2a  
    189189        if defopt:
    190190            kw['default-item'] = choices[defopt][0]
    191         res,data = self.calldlg('--extra-label',button[1],
     191        res,data = self.calldlg('--ok-label','Change',
     192                                '--extra-label',button[1],
    192193                                '--extra-button',
    193194                                '--menu',text,height,width,
Note: See TracChangeset for help on using the changeset viewer.