Changes in uspace/drv/char/ps2mouse/ps2mouse.c [68c60b0:d87561c] in mainline
- File:
-
- 1 edited
-
uspace/drv/char/ps2mouse/ps2mouse.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/char/ps2mouse/ps2mouse.c
r68c60b0 rd87561c 33 33 */ 34 34 35 #include < bool.h>35 #include <stdbool.h> 36 36 #include <errno.h> 37 #include <devman.h>38 37 #include <ddf/log.h> 39 38 #include <io/keycode.h> … … 71 70 #define PS2_BUTTON_MASK(button) (1 << button) 72 71 73 #define MOUSE_READ_BYTE_TEST(sess, value ) \72 #define MOUSE_READ_BYTE_TEST(sess, value_) \ 74 73 do { \ 74 uint8_t value = (value_); \ 75 75 uint8_t data = 0; \ 76 76 const ssize_t size = chardev_read(sess, &data, 1); \ 77 77 if (size != 1) { \ 78 ddf_msg(LVL_ERROR, "Failed reading byte: % d)", size);\78 ddf_msg(LVL_ERROR, "Failed reading byte: %zd)", size);\ 79 79 return size < 0 ? size : EIO; \ 80 80 } \ 81 if (data != (value)) { \81 if (data != value) { \ 82 82 ddf_msg(LVL_DEBUG, "Failed testing byte: got %hhx vs. %hhx)", \ 83 data, (value)); \83 data, value); \ 84 84 return EIO; \ 85 85 } \ 86 86 } while (0) 87 87 88 #define MOUSE_WRITE_BYTE(sess, value ) \88 #define MOUSE_WRITE_BYTE(sess, value_) \ 89 89 do { \ 90 uint8_t value = (value_); \ 90 91 uint8_t data = (value); \ 91 92 const ssize_t size = chardev_write(sess, &data, 1); \ … … 114 115 int ps2_mouse_init(ps2_mouse_t *mouse, ddf_dev_t *dev) 115 116 { 116 assert(mouse);117 assert(dev);118 117 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); 121 119 if (!mouse->parent_sess) 122 120 return ENOMEM; … … 124 122 mouse->mouse_fun = ddf_fun_create(dev, fun_exposed, "mouse"); 125 123 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); 131 127 132 128 int ret = ddf_fun_bind(mouse->mouse_fun); 133 129 if (ret != EOK) { 134 async_hangup(mouse->parent_sess);135 mouse->mouse_fun->driver_data = NULL;136 130 ddf_fun_destroy(mouse->mouse_fun); 137 131 return ENOMEM; … … 140 134 ret = ddf_fun_add_to_category(mouse->mouse_fun, "mouse"); 141 135 if (ret != EOK) { 142 async_hangup(mouse->parent_sess);143 136 ddf_fun_unbind(mouse->mouse_fun); 144 mouse->mouse_fun->driver_data = NULL;145 137 ddf_fun_destroy(mouse->mouse_fun); 146 138 return ENOMEM; … … 161 153 ddf_msg(LVL_ERROR, "Failed to enable data reporting."); 162 154 async_exchange_end(exch); 163 async_hangup(mouse->parent_sess);164 155 ddf_fun_unbind(mouse->mouse_fun); 165 mouse->mouse_fun->driver_data = NULL;166 156 ddf_fun_destroy(mouse->mouse_fun); 167 157 return EIO; … … 173 163 ddf_msg(LVL_ERROR, "Failed to confirm data reporting: %hhx.", 174 164 report); 175 async_hangup(mouse->parent_sess);176 165 ddf_fun_unbind(mouse->mouse_fun); 177 mouse->mouse_fun->driver_data = NULL;178 166 ddf_fun_destroy(mouse->mouse_fun); 179 167 return EIO; … … 182 170 mouse->polling_fibril = fibril_create(polling_f, mouse); 183 171 if (!mouse->polling_fibril) { 184 async_hangup(mouse->parent_sess);185 172 ddf_fun_unbind(mouse->mouse_fun); 186 mouse->mouse_fun->driver_data = NULL;187 173 ddf_fun_destroy(mouse->mouse_fun); 188 174 return ENOMEM; … … 368 354 ipc_callid_t icallid, ipc_call_t *icall) 369 355 { 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 376 356 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)); 378 358 379 359 switch (method) {
Note:
See TracChangeset
for help on using the changeset viewer.
