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