Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/char/xtkbd/xtkbd.c

    r56fd7cf r9d58539  
    3434
    3535#include <errno.h>
     36#include <devman.h>
    3637#include <ddf/log.h>
    3738#include <io/keycode.h>
     
    206207        assert(dev);
    207208        kbd->client_sess = NULL;
    208         kbd->parent_sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE);
     209        kbd->parent_sess = devman_parent_device_connect(EXCHANGE_SERIALIZE,
     210            dev->handle, IPC_FLAG_BLOCKING);
    209211        if (!kbd->parent_sess)
    210212                return ENOMEM;
     
    212214        kbd->kbd_fun = ddf_fun_create(dev, fun_exposed, "kbd");
    213215        if (!kbd->kbd_fun) {
    214                 return ENOMEM;
    215         }
    216         ddf_fun_set_ops(kbd->kbd_fun, &kbd_ops);
     216                async_hangup(kbd->parent_sess);
     217                return ENOMEM;
     218        }
     219        kbd->kbd_fun->ops = &kbd_ops;
     220        kbd->kbd_fun->driver_data = kbd;
    217221
    218222        int ret = ddf_fun_bind(kbd->kbd_fun);
    219223        if (ret != EOK) {
     224                async_hangup(kbd->parent_sess);
     225                kbd->kbd_fun->driver_data = NULL;
    220226                ddf_fun_destroy(kbd->kbd_fun);
    221227                return ENOMEM;
     
    224230        ret = ddf_fun_add_to_category(kbd->kbd_fun, "keyboard");
    225231        if (ret != EOK) {
     232                async_hangup(kbd->parent_sess);
    226233                ddf_fun_unbind(kbd->kbd_fun);
     234                kbd->kbd_fun->driver_data = NULL;
    227235                ddf_fun_destroy(kbd->kbd_fun);
    228236                return ENOMEM;
     
    231239        kbd->polling_fibril = fibril_create(polling, kbd);
    232240        if (!kbd->polling_fibril) {
     241                async_hangup(kbd->parent_sess);
    233242                ddf_fun_unbind(kbd->kbd_fun);
     243                kbd->kbd_fun->driver_data = NULL;
    234244                ddf_fun_destroy(kbd->kbd_fun);
    235245                return ENOMEM;
     
    309319    ipc_callid_t icallid, ipc_call_t *icall)
    310320{
     321        if (fun == NULL || fun->driver_data == NULL) {
     322                ddf_msg(LVL_ERROR, "%s: Missing parameter.", __FUNCTION__);
     323                async_answer_0(icallid, EINVAL);
     324                return;
     325        }
     326
    311327        const sysarg_t method = IPC_GET_IMETHOD(*icall);
    312         xt_kbd_t *kbd = ddf_dev_data_get(ddf_fun_get_dev(fun));
     328        xt_kbd_t *kbd = fun->driver_data;
    313329
    314330        switch (method) {
Note: See TracChangeset for help on using the changeset viewer.