Ignore:
File:
1 edited

Legend:

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

    r68c60b0 rd87561c  
    3333 */
    3434
    35 #include <bool.h>
     35#include <stdbool.h>
    3636#include <errno.h>
    37 #include <devman.h>
    3837#include <ddf/log.h>
    3938#include <io/keycode.h>
     
    7170#define PS2_BUTTON_MASK(button) (1 << button)
    7271
    73 #define MOUSE_READ_BYTE_TEST(sess, value) \
     72#define MOUSE_READ_BYTE_TEST(sess, value_) \
    7473do { \
     74        uint8_t value = (value_); \
    7575        uint8_t data = 0; \
    7676        const ssize_t size = chardev_read(sess, &data, 1); \
    7777        if (size != 1) { \
    78                 ddf_msg(LVL_ERROR, "Failed reading byte: %d)", size);\
     78                ddf_msg(LVL_ERROR, "Failed reading byte: %zd)", size);\
    7979                return size < 0 ? size : EIO; \
    8080        } \
    81         if (data != (value)) { \
     81        if (data != value) { \
    8282                ddf_msg(LVL_DEBUG, "Failed testing byte: got %hhx vs. %hhx)", \
    83                     data, (value)); \
     83                    data, value); \
    8484                return EIO; \
    8585        } \
    8686} while (0)
    8787
    88 #define MOUSE_WRITE_BYTE(sess, value) \
     88#define MOUSE_WRITE_BYTE(sess, value_) \
    8989do { \
     90        uint8_t value = (value_); \
    9091        uint8_t data = (value); \
    9192        const ssize_t size = chardev_write(sess, &data, 1); \
     
    114115int ps2_mouse_init(ps2_mouse_t *mouse, ddf_dev_t *dev)
    115116{
    116         assert(mouse);
    117         assert(dev);
    118117        mouse->client_sess = NULL;
    119         mouse->parent_sess = devman_parent_device_connect(EXCHANGE_SERIALIZE,
    120             dev->handle, IPC_FLAG_BLOCKING);
     118        mouse->parent_sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE);
    121119        if (!mouse->parent_sess)
    122120                return ENOMEM;
     
    124122        mouse->mouse_fun = ddf_fun_create(dev, fun_exposed, "mouse");
    125123        if (!mouse->mouse_fun) {
    126                 async_hangup(mouse->parent_sess);
    127                 return ENOMEM;
    128         }
    129         mouse->mouse_fun->ops = &mouse_ops;
    130         mouse->mouse_fun->driver_data = mouse;
     124                return ENOMEM;
     125        }
     126        ddf_fun_set_ops(mouse->mouse_fun, &mouse_ops);
    131127
    132128        int ret = ddf_fun_bind(mouse->mouse_fun);
    133129        if (ret != EOK) {
    134                 async_hangup(mouse->parent_sess);
    135                 mouse->mouse_fun->driver_data = NULL;
    136130                ddf_fun_destroy(mouse->mouse_fun);
    137131                return ENOMEM;
     
    140134        ret = ddf_fun_add_to_category(mouse->mouse_fun, "mouse");
    141135        if (ret != EOK) {
    142                 async_hangup(mouse->parent_sess);
    143136                ddf_fun_unbind(mouse->mouse_fun);
    144                 mouse->mouse_fun->driver_data = NULL;
    145137                ddf_fun_destroy(mouse->mouse_fun);
    146138                return ENOMEM;
     
    161153                ddf_msg(LVL_ERROR, "Failed to enable data reporting.");
    162154                async_exchange_end(exch);
    163                 async_hangup(mouse->parent_sess);
    164155                ddf_fun_unbind(mouse->mouse_fun);
    165                 mouse->mouse_fun->driver_data = NULL;
    166156                ddf_fun_destroy(mouse->mouse_fun);
    167157                return EIO;
     
    173163                ddf_msg(LVL_ERROR, "Failed to confirm data reporting: %hhx.",
    174164                    report);
    175                 async_hangup(mouse->parent_sess);
    176165                ddf_fun_unbind(mouse->mouse_fun);
    177                 mouse->mouse_fun->driver_data = NULL;
    178166                ddf_fun_destroy(mouse->mouse_fun);
    179167                return EIO;
     
    182170        mouse->polling_fibril = fibril_create(polling_f, mouse);
    183171        if (!mouse->polling_fibril) {
    184                 async_hangup(mouse->parent_sess);
    185172                ddf_fun_unbind(mouse->mouse_fun);
    186                 mouse->mouse_fun->driver_data = NULL;
    187173                ddf_fun_destroy(mouse->mouse_fun);
    188174                return ENOMEM;
     
    368354    ipc_callid_t icallid, ipc_call_t *icall)
    369355{
    370         if (fun == NULL || fun->driver_data == NULL) {
    371                 ddf_msg(LVL_ERROR, "%s: Missing parameter.", __FUNCTION__);
    372                 async_answer_0(icallid, EINVAL);
    373                 return;
    374         }
    375 
    376356        const sysarg_t method = IPC_GET_IMETHOD(*icall);
    377         ps2_mouse_t *mouse = fun->driver_data;
     357        ps2_mouse_t *mouse = ddf_dev_data_get(ddf_fun_get_dev(fun));
    378358
    379359        switch (method) {
Note: See TracChangeset for help on using the changeset viewer.