Changeset 9be360ee in mainline


Ignore:
Timestamp:
2011-06-11T22:06:47Z (13 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4f3f9659
Parents:
56ad818
Message:

Allow keyboard server to handle more than one driver at the same time.

Location:
uspace/srv/hid/kbd
Files:
1 deleted
24 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/kbd/Makefile

    r56ad818 r9be360ee  
    5252        port/adb.c \
    5353        port/chardev.c \
    54         port/dummy.c \
    5554        port/gxemul.c \
    5655        port/msim.c \
  • uspace/srv/hid/kbd/ctl/apple.c

    r56ad818 r9be360ee  
    11/*
    2  * Copyright (c) 2010 Jiri Svoboda
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4242#include <kbd_port.h>
    4343
    44 static void apple_ctl_parse_scancode(int scancode);
    45 static int apple_ctl_init(kbd_port_ops_t *kbd_port);
    46 static void apple_ctl_set_ind(unsigned mods);
     44static void apple_ctl_parse_scancode(int);
     45static int apple_ctl_init(kbd_dev_t *);
     46static void apple_ctl_set_ind(unsigned);
    4747
    4848kbd_ctl_ops_t apple_ctl = {
     
    5454#define KBD_KEY_RELEASE         0x80
    5555
     56static kbd_dev_t *kbd_dev;
     57
    5658static int scanmap[];
    5759
    58 static int apple_ctl_init(kbd_port_ops_t *kbd_port)
     60static int apple_ctl_init(kbd_dev_t *kdev)
    5961{
    60         (void) kbd_port;
     62        kbd_dev = kdev;
    6163        return 0;
    6264}
     
    7981        key = scanmap[scancode];
    8082        if (key != 0)
    81                 kbd_push_ev(type, key);
     83                kbd_push_ev(kbd_dev, type, key);
    8284}
    8385
  • uspace/srv/hid/kbd/ctl/gxe_fb.c

    r56ad818 r9be360ee  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4444#include <stroke.h>
    4545
    46 static void gxe_fb_ctl_parse_scancode(int scancode);
    47 static int gxe_fb_ctl_init(kbd_port_ops_t *kbd_port);
    48 static void gxe_fb_ctl_set_ind(unsigned mods);
     46static void gxe_fb_ctl_parse_scancode(int);
     47static int gxe_fb_ctl_init(kbd_dev_t *);
     48static void gxe_fb_ctl_set_ind(unsigned);
    4949
    5050kbd_ctl_ops_t gxe_fb_ctl = {
     
    5353        .set_ind = gxe_fb_ctl_set_ind
    5454};
     55
     56static kbd_dev_t *kbd_dev;
    5557
    5658/** Scancode parser */
     
    218220};
    219221
    220 static int gxe_fb_ctl_init(kbd_port_ops_t *kbd_port)
     222static int gxe_fb_ctl_init(kbd_dev_t *kdev)
    221223{
    222         (void) kbd_port;
     224        kbd_dev = kdev;
    223225        ds = 0;
    224226
     
    233235        ds = gsp_step(&sp, ds, scancode, &mods, &key);
    234236        if (key != 0) {
    235                 stroke_sim(mods, key);
     237                stroke_sim(kbd_dev, mods, key);
    236238        }
    237239}
  • uspace/srv/hid/kbd/ctl/pc.c

    r56ad818 r9be360ee  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4343#include <gsp.h>
    4444
    45 static void pc_ctl_parse_scancode(int scancode);
    46 static int pc_ctl_init(kbd_port_ops_t *kbd_port);
    47 static void pc_ctl_set_ind(unsigned mods);
     45static void pc_ctl_parse_scancode(int);
     46static int pc_ctl_init(kbd_dev_t *);
     47static void pc_ctl_set_ind(unsigned);
    4848
    4949kbd_ctl_ops_t pc_ctl = {
     
    7474
    7575static enum dec_state ds;
    76 static kbd_port_ops_t *kbd_port;
     76static kbd_dev_t *kbd_dev;
    7777
    7878static int scanmap_simple[] = {
     
    208208};
    209209
    210 static int pc_ctl_init(kbd_port_ops_t *kbd_p)
     210static int pc_ctl_init(kbd_dev_t *kdev)
    211211{
    212         kbd_port = kbd_p;
     212        kbd_dev = kdev;
    213213        ds = ds_s;
    214214        return 0;
     
    262262        key = map[scancode];
    263263        if (key != 0)
    264                 kbd_push_ev(type, key);
     264                kbd_push_ev(kbd_dev, type, key);
    265265}
    266266
     
    277277                b = b | LI_SCROLL;
    278278
    279         (*kbd_port->write)(KBD_CMD_SET_LEDS);
    280         (*kbd_port->write)(b);
     279        (*kbd_dev->port_ops->write)(KBD_CMD_SET_LEDS);
     280        (*kbd_dev->port_ops->write)(b);
    281281}
    282282
  • uspace/srv/hid/kbd/ctl/stty.c

    r56ad818 r9be360ee  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4343#include <stroke.h>
    4444
    45 static void stty_ctl_parse_scancode(int scancode);
    46 static int stty_ctl_init(kbd_port_ops_t *kbd_port);
    47 static void stty_ctl_set_ind(unsigned mods);
     45static void stty_ctl_parse_scancode(int);
     46static int stty_ctl_init(kbd_dev_t *);
     47static void stty_ctl_set_ind(unsigned);
    4848
    4949kbd_ctl_ops_t stty_ctl = {
     
    5252        .set_ind = stty_ctl_set_ind
    5353};
     54
     55static kbd_dev_t *kbd_dev;
    5456
    5557/** Scancode parser */
     
    217219};
    218220
    219 static int stty_ctl_init(kbd_port_ops_t *kbd_port)
     221static int stty_ctl_init(kbd_dev_t *kdev)
    220222{
    221         (void) kbd_port;
     223        kbd_dev = kdev;
    222224        ds = 0;
    223225
     
    232234        ds = gsp_step(&sp, ds, scancode, &mods, &key);
    233235        if (key != 0) {
    234                 stroke_sim(mods, key);
     236                stroke_sim(kbd_dev, mods, key);
    235237        }
    236238}
  • uspace/srv/hid/kbd/ctl/sun.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2006 Jakub Jermar
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    4243#include <kbd_port.h>
    4344
    44 static void sun_ctl_parse_scancode(int scancode);
    45 static int sun_ctl_init(kbd_port_ops_t *kbd_port);
    46 static void sun_ctl_set_ind(unsigned mods);
     45static void sun_ctl_parse_scancode(int);
     46static int sun_ctl_init(kbd_dev_t *);
     47static void sun_ctl_set_ind(unsigned);
    4748
    4849kbd_ctl_ops_t sun_ctl = {
     
    5253};
    5354
     55static kbd_dev_t *kbd_dev;
     56
    5457#define KBD_KEY_RELEASE         0x80
    5558#define KBD_ALL_KEYS_UP         0x7f
     
    5760static int scanmap_simple[];
    5861
    59 static int sun_ctl_init(kbd_port_ops_t *kbd_port)
     62static int sun_ctl_init(kbd_dev_t *kdev)
    6063{
     64        kbd_dev = kdev;
    6165        return 0;
    6266}
     
    8286        key = scanmap_simple[scancode];
    8387        if (key != 0)
    84                 kbd_push_ev(type, key);
     88                kbd_push_ev(kbd_dev, type, key);
    8589}
    8690
  • uspace/srv/hid/kbd/genarch/stroke.c

    r56ad818 r9be360ee  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5252
    5353/** Simulate keystroke using sequences of key presses and releases. */
    54 void stroke_sim(unsigned mod, unsigned key)
     54void stroke_sim(kbd_dev_t *kdev, unsigned mod, unsigned key)
    5555{
    5656        int i;
     
    6060        while (mods_keys[i][0] != 0) {
    6161                if (mod & mods_keys[i][0]) {
    62                         kbd_push_ev(KEY_PRESS, mods_keys[i][1]);
     62                        kbd_push_ev(kdev, KEY_PRESS, mods_keys[i][1]);
    6363                }
    6464                ++i;
     
    6767        /* Simulate key press and release. */
    6868        if (key != 0) {
    69                 kbd_push_ev(KEY_PRESS, key);
    70                 kbd_push_ev(KEY_RELEASE, key);
     69                kbd_push_ev(kdev, KEY_PRESS, key);
     70                kbd_push_ev(kdev, KEY_RELEASE, key);
    7171        }
    7272
     
    7575        while (mods_keys[i][0] != 0) {
    7676                if (mod & mods_keys[i][0]) {
    77                         kbd_push_ev(KEY_RELEASE, mods_keys[i][1]);
     77                        kbd_push_ev(kdev, KEY_RELEASE, mods_keys[i][1]);
    7878                }
    7979                ++i;
  • uspace/srv/hid/kbd/generic/kbd.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2006 Josef Cejka
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    3637 */
    3738
     39#include <adt/list.h>
    3840#include <ipc/services.h>
    3941#include <ipc/kbd.h>
     
    6365#define NAMESPACE  "hid_in"
    6466
     67static void kbd_devs_yield(void);
     68static void kbd_devs_reclaim(void);
     69
    6570int client_phone = -1;
    6671
     
    7176static unsigned lock_keys;
    7277
    73 static kbd_port_ops_t *kbd_port;
    74 static kbd_ctl_ops_t *kbd_ctl;
     78/** List of keyboard devices */
     79static link_t kbd_devs;
    7580
    7681bool irc_service = false;
     
    8792static int active_layout = 0;
    8893
    89 void kbd_push_scancode(int scancode)
     94void kbd_push_scancode(kbd_dev_t *kdev, int scancode)
    9095{
    9196/*      printf("scancode: 0x%x\n", scancode);*/
    92         (*kbd_ctl->parse_scancode)(scancode);
    93 }
    94 
    95 void kbd_push_ev(int type, unsigned int key)
     97        (*kdev->ctl_ops->parse_scancode)(scancode);
     98}
     99
     100void kbd_push_ev(kbd_dev_t *kdev, int type, unsigned int key)
    96101{
    97102        kbd_event_t ev;
     
    133138
    134139                        /* Update keyboard lock indicator lights. */
    135                         (*kbd_ctl->set_ind)(mods);
     140                        (*kdev->ctl_ops->set_ind)(mods);
    136141                } else {
    137142                        lock_keys = lock_keys & ~mod_mask;
     
    204209                        break;
    205210                case KBD_YIELD:
    206                         (*kbd_port->yield)();
     211                        kbd_devs_yield();
    207212                        retval = 0;
    208213                        break;
    209214                case KBD_RECLAIM:
    210                         (*kbd_port->reclaim)();
     215                        kbd_devs_reclaim();
    211216                        retval = 0;
    212217                        break;
     
    218223}
    219224
    220 static void kbd_select_drivers(kbd_port_ops_t **port, kbd_ctl_ops_t **ctl)
    221 {
     225/** Add new keyboard device. */
     226static void kbd_add_dev(kbd_port_ops_t *port, kbd_ctl_ops_t *ctl)
     227{
     228        kbd_dev_t *kdev;
     229
     230        kdev = malloc(sizeof(kbd_dev_t));
     231        if (kdev == NULL) {
     232                printf(NAME ": Failed adding keyboard device. Out of memory.\n");
     233                return;
     234        }
     235
     236        link_initialize(&kdev->kbd_devs);
     237        kdev->port_ops = port;
     238        kdev->ctl_ops = ctl;
     239
     240        /* Initialize port driver. */
     241        if ((*kdev->port_ops->init)(kdev) != 0)
     242                goto fail;
     243
     244        /* Initialize controller driver. */
     245        if ((*kdev->ctl_ops->init)(kdev) != 0) {
     246                /* XXX Uninit port */
     247                goto fail;
     248        }
     249
     250        list_append(&kdev->kbd_devs, &kbd_devs);
     251        return;
     252fail:
     253        free(kdev);
     254}
     255
     256/** Add legacy drivers/devices. */
     257static void kbd_add_legacy_devs(void)
     258{
     259        /*
     260         * Need to add these drivers based on config unless we can probe
     261         * them automatically.
     262         */
    222263#if defined(UARCH_amd64)
    223         *port = &chardev_port;
    224         *ctl = &pc_ctl;
    225 #elif defined(UARCH_arm32) && defined(MACHINE_gta02)
    226         *port = &chardev_port;
    227         *ctl = &stty_ctl;
    228 #elif defined(UARCH_arm32) && defined(MACHINE_testarm)
    229         *port = &gxemul_port;
    230         #ifdef CONFIG_FB
    231                 *ctl = &gxe_fb_ctl;
    232         #else
    233                 *ctl = &stty_ctl;
    234         #endif
    235 #elif defined(UARCH_arm32) && defined(MACHINE_integratorcp)
    236         *port = &pl050_port;
    237         *ctl = &pc_ctl;
    238 #elif defined(UARCH_ia32)
    239         *port = &chardev_port;
    240         *ctl = &pc_ctl;
    241 #elif defined(MACHINE_i460GX)
    242         *port = &chardev_port;
    243         *ctl = &pc_ctl;
    244 #elif defined(MACHINE_ski)
    245         *port = &ski_port;
    246         *ctl = &stty_ctl;
    247 #elif defined(MACHINE_msim)
    248         *port = &msim_port;
    249         *ctl = &stty_ctl;
    250 #elif defined(MACHINE_lgxemul) || defined(MACHINE_bgxemul)
    251         *port = &gxemul_port;
    252         #ifdef CONFIG_FB
    253                 *ctl = &gxe_fb_ctl;
    254         #else
    255                 *ctl = &stty_ctl;
    256         #endif
    257 #elif defined(UARCH_ppc32)
    258         *port = &adb_port;
    259         *ctl = &apple_ctl;
    260 #elif defined(UARCH_sparc64) && defined(PROCESSOR_sun4v)
    261         *port = &niagara_port;
    262         *ctl = &stty_ctl;
    263 #elif defined(UARCH_sparc64) && defined(MACHINE_serengeti)
    264         *port = &sgcn_port;
    265         *ctl = &stty_ctl;
    266 #elif defined(UARCH_sparc64) && defined(MACHINE_generic)
    267         *port = &sun_port;
    268         *ctl = &sun_ctl;
    269 #else
    270         *port = &dummy_port;
    271         *ctl = &pc_ctl;
    272 #endif
     264        kbd_add_dev(&chardev_port, &pc_ctl);
     265#endif
     266#if defined(UARCH_arm32) && defined(MACHINE_gta02)
     267        kbd_add_dev(&chardev_port, &stty_ctl);
     268#endif
     269#if defined(UARCH_arm32) && defined(MACHINE_testarm) && defined(CONFIG_FB)
     270        kbd_add_dev(&gxemul_port, &gxe_fb_ctl);
     271#endif
     272#if defined(UARCH_arm32) && defined(MACHINE_testarm) && !defined(CONFIG_FB)
     273        kbd_add_dev(&gxemul_port, &stty_ctl);
     274#endif
     275#if defined(UARCH_arm32) && defined(MACHINE_integratorcp)
     276        kbd_add_dev(&pl050_port, &pc_ctl);
     277#endif
     278#if defined(UARCH_ia32)
     279        kbd_add_dev(&chardev_port, &pc_ctl);
     280#endif
     281#if defined(MACHINE_i460GX)
     282        kbd_add_dev(&chardev_port, &pc_ctl);
     283#endif
     284#if defined(MACHINE_ski)
     285        kbd_add_dev(&ski_port, &stty_ctl);
     286#endif
     287#if defined(MACHINE_msim)
     288        kbd_add_dev(&msim_port, &pc_ctl);
     289#endif
     290#if (defined(MACHINE_lgxemul) || defined(MACHINE_bgxemul)) && defined(CONFIG_FB)
     291        kbd_add_dev(&gxemul_port, &gxe_fb_ctl);
     292#endif
     293#if defined(MACHINE_lgxemul) || defined(MACHINE_bgxemul) && !defined(CONFIG_FB)
     294        kbd_add_dev(&gxemul_port, &stty_ctl);
     295#endif
     296#if defined(UARCH_ppc32)
     297        kbd_add_dev(&adb_port, &apple_ctl);
     298#endif
     299#if defined(UARCH_sparc64) && defined(PROCESSOR_sun4v)
     300        kbd_add_dev(&niagara_port, &stty_ctl);
     301#endif
     302#if defined(UARCH_sparc64) && defined(MACHINE_serengeti)
     303        kbd_add_dev(&sgcn_port, &stty_ctl);
     304#endif
     305#if defined(UARCH_sparc64) && defined(MACHINE_generic)
     306        kbd_add_dev(&sun_port, &sun_ctl);
     307#endif
     308        /* Silence warning on abs32le about kbd_add_dev() being unused */
     309        (void) kbd_add_dev;
     310}
     311
     312static void kbd_devs_yield(void)
     313{
     314        /* For each keyboard device */
     315        list_foreach(kbd_devs, kdev_link) {
     316                kbd_dev_t *kdev = list_get_instance(kdev_link, kbd_dev_t,
     317                    kbd_devs);
     318
     319                /* Yield port */
     320                (*kdev->port_ops->yield)();
     321        }
     322}
     323
     324static void kbd_devs_reclaim(void)
     325{
     326        /* For each keyboard device */
     327        list_foreach(kbd_devs, kdev_link) {
     328                kbd_dev_t *kdev = list_get_instance(kdev_link, kbd_dev_t,
     329                    kbd_devs);
     330
     331                /* Reclaim port */
     332                (*kdev->port_ops->reclaim)();
     333        }
    273334}
    274335
     
    279340        sysarg_t fhc;
    280341        sysarg_t obio;
     342       
     343        list_initialize(&kbd_devs);
    281344       
    282345        if (((sysinfo_get_value("kbd.cir.fhc", &fhc) == EOK) && (fhc))
     
    289352        }
    290353       
    291         /* Select port and controller drivers. */
    292         kbd_select_drivers(&kbd_port, &kbd_ctl);
    293 
    294         /* Initialize port driver. */
    295         if ((*kbd_port->init)() != 0)
    296                 return -1;
    297 
    298         /* Initialize controller driver. */
    299         if ((*kbd_ctl->init)(kbd_port) != 0)
    300                 return -1;
     354        /* Add legacy devices. */
     355        kbd_add_legacy_devs();
    301356
    302357        /* Initialize (reset) layout. */
  • uspace/srv/hid/kbd/include/kbd.h

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2006 Josef Cejka
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    3839#define KBD_KBD_H_
    3940
     41#include <adt/list.h>
    4042#include <bool.h>
     43
     44struct kbd_port_ops;
     45struct kbd_ctl_ops;
     46
     47typedef struct kbd_dev {
     48        /** Link to kbd_devs list */
     49        link_t kbd_devs;
     50
     51        /** Port ops */
     52        struct kbd_port_ops *port_ops;
     53
     54        /** Ctl ops */
     55        struct kbd_ctl_ops *ctl_ops;
     56} kbd_dev_t;
    4157
    4258extern bool irc_service;
    4359extern int irc_phone;
    4460
    45 extern void kbd_push_scancode(int);
    46 extern void kbd_push_ev(int, unsigned int);
     61extern void kbd_push_scancode(kbd_dev_t *, int);
     62extern void kbd_push_ev(kbd_dev_t *, int, unsigned int);
    4763
    4864#endif
  • uspace/srv/hid/kbd/include/kbd_ctl.h

    r56ad818 r9be360ee  
    4040#include <kbd_port.h>
    4141
    42 typedef struct {
     42struct kbd_dev;
     43
     44typedef struct kbd_ctl_ops {
    4345        void (*parse_scancode)(int);
    44         int (*init)(kbd_port_ops_t *);
     46        int (*init)(struct kbd_dev *);
    4547        void (*set_ind)(unsigned);
    4648} kbd_ctl_ops_t;
  • uspace/srv/hid/kbd/include/kbd_port.h

    r56ad818 r9be360ee  
    4040#include <sys/types.h>
    4141
    42 typedef struct {
    43         int (*init)(void);
     42struct kbd_dev;
     43
     44typedef struct kbd_port_ops {
     45        int (*init)(struct kbd_dev *);
    4446        void (*yield)(void);
    4547        void (*reclaim)(void);
  • uspace/srv/hid/kbd/include/stroke.h

    r56ad818 r9be360ee  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3838#define KBD_STROKE_H_
    3939
    40 extern void stroke_sim(unsigned, unsigned);
     40#include <kbd.h>
     41
     42extern void stroke_sim(kbd_dev_t *, unsigned, unsigned);
    4143
    4244#endif
  • uspace/srv/hid/kbd/include/sun.h

    r56ad818 r9be360ee  
    3838#define KBD_SUN_H_
    3939
    40 extern int ns16550_port_init(void);
    41 extern int z8530_port_init(void);
     40#include <kbd.h>
     41
     42extern int ns16550_port_init(kbd_dev_t *);
     43extern int z8530_port_init(kbd_dev_t *);
    4244
    4345#endif
  • uspace/srv/hid/kbd/port/adb.c

    r56ad818 r9be360ee  
    11/*
    2  * Copyright (c) 2010 Jiri Svoboda
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4949static void adb_kbd_reg0_data(uint16_t data);
    5050
    51 static int adb_port_init(void);
     51static int adb_port_init(kbd_dev_t *);
    5252static void adb_port_yield(void);
    5353static void adb_port_reclaim(void);
     
    6161};
    6262
     63static kbd_dev_t *kbd_dev;
    6364static int dev_phone;
    6465
    6566#define NAME "kbd"
    6667
    67 static int adb_port_init(void)
     68static int adb_port_init(kbd_dev_t *kdev)
    6869{
    6970        const char *dev = "adb/kbd";
    7071        devmap_handle_t handle;
     72
     73        kbd_dev = kdev;
    7174       
    7275        int rc = devmap_device_get_handle(dev, &handle, 0);
     
    137140
    138141        if (b0 != 0xff)
    139                 kbd_push_scancode(b0);
     142                kbd_push_scancode(kbd_dev, b0);
    140143        if (b1 != 0xff)
    141                 kbd_push_scancode(b1);
     144                kbd_push_scancode(kbd_dev, b1);
    142145}
    143146
  • uspace/srv/hid/kbd/port/chardev.c

    r56ad818 r9be360ee  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4949static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall);
    5050
    51 static int chardev_port_init(void);
     51static int chardev_port_init(kbd_dev_t *);
    5252static void chardev_port_yield(void);
    5353static void chardev_port_reclaim(void);
     
    6161};
    6262
     63static kbd_dev_t *kbd_dev;
    6364static int dev_phone;
    6465
     
    7172static const unsigned int num_devs = sizeof(in_devs) / sizeof(in_devs[0]);
    7273
    73 static int chardev_port_init(void)
     74static int chardev_port_init(kbd_dev_t *kdev)
    7475{
    7576        devmap_handle_t handle;
    7677        unsigned int i;
    7778        int rc;
     79       
     80        kbd_dev = kdev;
    7881       
    7982        for (i = 0; i < num_devs; i++) {
     
    133136                switch (IPC_GET_IMETHOD(call)) {
    134137                case CHAR_NOTIF_BYTE:
    135                         kbd_push_scancode(IPC_GET_ARG1(call));
     138                        kbd_push_scancode(kbd_dev, IPC_GET_ARG1(call));
    136139                        break;
    137140                default:
  • uspace/srv/hid/kbd/port/gxemul.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2007 Michal Kebrt
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    4243#include <errno.h>
    4344
    44 static int gxemul_port_init(void);
     45static int gxemul_port_init(kbd_dev_t *);
    4546static void gxemul_port_yield(void);
    4647static void gxemul_port_reclaim(void);
     
    5354        .write = gxemul_port_write
    5455};
     56
     57static kbd_dev_t *kbd_dev;
    5558
    5659static irq_cmd_t gxemul_cmds[] = {
     
    7376
    7477/** Initializes keyboard handler. */
    75 static int gxemul_port_init(void)
     78static int gxemul_port_init(kbd_dev_t *kdev)
    7679{
     80        kbd_dev = kdev;
     81       
    7782        sysarg_t addr;
    7883        if (sysinfo_get_value("kbd.address.virtual", &addr) != EOK)
     
    113118        int scan_code = IPC_GET_ARG2(*call);
    114119
    115         kbd_push_scancode(scan_code);
     120        kbd_push_scancode(kbd_dev, scan_code);
    116121}
    117122
  • uspace/srv/hid/kbd/port/msim.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2006 Josef Cejka
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    4243#include <errno.h>
    4344
    44 static int msim_port_init(void);
     45static int msim_port_init(kbd_dev_t *);
    4546static void msim_port_yield(void);
    4647static void msim_port_reclaim(void);
     
    5354        .write = msim_port_write
    5455};
     56
     57static kbd_dev_t *kbd_dev;
    5558
    5659static irq_cmd_t msim_cmds[] = {
     
    7275static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call);
    7376
    74 static int msim_port_init(void)
     77static int msim_port_init(kbd_dev_t *kdev)
    7578{
     79        kbd_dev = kdev;
     80
    7681        sysarg_t vaddr;
    7782        if (sysinfo_get_value("kbd.address.virtual", &vaddr) != EOK)
     
    105110{
    106111        int scan_code = IPC_GET_ARG2(*call);
    107         kbd_push_scancode(scan_code);
     112        kbd_push_scancode(kbd_dev, scan_code);
    108113}
    109114
  • uspace/srv/hid/kbd/port/niagara.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2008 Pavel Rimsky
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    4647#include <errno.h>
    4748
    48 static int niagara_port_init(void);
     49static int niagara_port_init(kbd_dev_t *);
    4950static void niagara_port_yield(void);
    5051static void niagara_port_reclaim(void);
     
    5758        .write = niagara_port_write
    5859};
     60
     61static kbd_dev_t *kbd_dev;
    5962
    6063#define POLL_INTERVAL  10000
     
    9194 * Maps the shared buffer and creates the polling thread.
    9295 */
    93 static int niagara_port_init(void)
     96static int niagara_port_init(kbd_dev_t *kdev)
    9497{
     98        kbd_dev = kdev;
     99       
    95100        sysarg_t paddr;
    96101        if (sysinfo_get_value("niagara.inbuf.address", &paddr) != EOK)
     
    144149                input_buffer->read_ptr =
    145150                        ((input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE;
    146                 kbd_push_scancode(c);
     151                kbd_push_scancode(kbd_dev, c);
    147152        }
    148153}
  • uspace/srv/hid/kbd/port/ns16550.c

    r56ad818 r9be360ee  
    9393static uintptr_t ns16550_kernel;
    9494
    95 int ns16550_port_init(void)
     95static kbd_dev_t *kbd_dev;
     96
     97int ns16550_port_init(kbd_dev_t *kdev)
    9698{
    9799        void *vaddr;
     100
     101        kbd_dev = kdev;
    98102
    99103        if (sysinfo_get_value("kbd.address.physical", &ns16550_physical) != EOK)
     
    119123{
    120124        int scan_code = IPC_GET_ARG2(*call);
    121         kbd_push_scancode(scan_code);
     125        kbd_push_scancode(kbd_dev, scan_code);
    122126       
    123127        if (irc_service)
  • uspace/srv/hid/kbd/port/pl050.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2009 Vineeth Pillai
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    4647#include <errno.h>
    4748
    48 static int pl050_port_init(void);
     49static int pl050_port_init(kbd_dev_t *);
    4950static void pl050_port_yield(void);
    5051static void pl050_port_reclaim(void);
     
    5758        .write = pl050_port_write
    5859};
     60
     61static kbd_dev_t *kbd_dev;
    5962
    6063#define PL050_STAT_RXFULL  (1 << 4)
     
    9497static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call);
    9598
    96 static int pl050_port_init(void)
     99static int pl050_port_init(kbd_dev_t *kdev)
    97100{
     101        kbd_dev = kdev;
     102       
    98103        sysarg_t addr;
    99104        if (sysinfo_get_value("kbd.address.status", &addr) != EOK)
     
    134139        int scan_code = IPC_GET_ARG2(*call);
    135140
    136         kbd_push_scancode(scan_code);
     141        kbd_push_scancode(kbd_dev, scan_code);
    137142        return;
    138143}
  • uspace/srv/hid/kbd/port/sgcn.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2008 Pavel Rimsky
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    4647#include <errno.h>
    4748
    48 static int sgcn_port_init(void);
     49static int sgcn_port_init(kbd_dev_t *);
    4950static void sgcn_port_yield(void);
    5051static void sgcn_port_reclaim(void);
     
    5859};
    5960
     61static kbd_dev_t *kbd_dev;
     62
    6063#define POLL_INTERVAL  10000
    6164
     
    113116 * Maps the physical memory (SRAM) and creates the polling thread.
    114117 */
    115 static int sgcn_port_init(void)
    116 {
     118static int sgcn_port_init(kbd_dev_t *kdev)
     119{
     120        kbd_dev = kdev;
     121       
    117122        sysarg_t sram_paddr;
    118123        if (sysinfo_get_value("sram.address.physical", &sram_paddr) != EOK)
     
    179184                buf_ptr = (volatile char *)
    180185                        SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr);
    181                 kbd_push_scancode(c);
     186                kbd_push_scancode(kbd_dev, c);
    182187        }
    183188}
  • uspace/srv/hid/kbd/port/ski.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2005 Jakub Jermar
    3  * Copyright (c) 2009 Jiri Svoboda
     3 * Copyright (c) 2011 Jiri Svoboda
    44 * All rights reserved.
    55 *
     
    4545#include <bool.h>
    4646
    47 static int ski_port_init(void);
     47static int ski_port_init(kbd_dev_t *);
    4848static void ski_port_yield(void);
    4949static void ski_port_reclaim(void);
     
    5757};
    5858
     59static kbd_dev_t *kbd_dev;
     60
    5961#define SKI_GETCHAR             21
    6062
     
    6769
    6870/** Initialize Ski port driver. */
    69 static int ski_port_init(void)
     71static int ski_port_init(kbd_dev_t *kdev)
    7072{
    7173        thread_id_t tid;
    7274        int rc;
     75
     76        kbd_dev = kdev;
    7377
    7478        rc = thread_create(ski_thread_impl, NULL, "kbd_poll", &tid);
     
    106110                        if (c == 0)
    107111                                break;
    108                         kbd_push_scancode(c);
     112                        kbd_push_scancode(kbd_dev, c);
    109113                }
    110114
  • uspace/srv/hid/kbd/port/sun.c

    r56ad818 r9be360ee  
    11/*
    22 * Copyright (c) 2009 Martin Decky
     3 * Copyright (c) 2011 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    4243#include <bool.h>
    4344
    44 static int sun_port_init(void);
     45static int sun_port_init(kbd_dev_t *);
    4546static void sun_port_yield(void);
    4647static void sun_port_reclaim(void);
     
    6364 *
    6465 */
    65 static int sun_port_init(void)
     66static int sun_port_init(kbd_dev_t *kdev)
    6667{
    6768        sysarg_t z8530;
     
    7475       
    7576        if (z8530) {
    76                 if (z8530_port_init() == 0)
     77                if (z8530_port_init(kdev) == 0)
    7778                        return 0;
    7879        }
    7980       
    8081        if (ns16550) {
    81                 if (ns16550_port_init() == 0)
     82                if (ns16550_port_init(kdev) == 0)
    8283                        return 0;
    8384        }
  • uspace/srv/hid/kbd/port/z8530.c

    r56ad818 r9be360ee  
    4646#include <errno.h>
    4747
     48static kbd_dev_t *kbd_dev;
     49
    4850#define CHAN_A_STATUS  4
    4951#define CHAN_A_DATA    6
     
    8587static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call);
    8688
    87 int z8530_port_init(void)
     89int z8530_port_init(kbd_dev_t *kdev)
    8890{
     91        kbd_dev = kdev;
     92       
    8993        sysarg_t kaddr;
    9094        if (sysinfo_get_value("kbd.address.kernel", &kaddr) != EOK)
     
    107111{
    108112        int scan_code = IPC_GET_ARG2(*call);
    109         kbd_push_scancode(scan_code);
     113        kbd_push_scancode(kbd_dev, scan_code);
    110114       
    111115        if (irc_service)
Note: See TracChangeset for help on using the changeset viewer.