Changeset 677cad5 in mainline
- Timestamp:
- 2017-11-20T20:29:03Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b2f542a
- Parents:
- 19ea61d
- Location:
- uspace
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/char/i8042/i8042.c
r19ea61d r677cad5 67 67 68 68 static void i8042_char_conn(ipc_callid_t, ipc_call_t *, void *); 69 static int i8042_read(chardev_srv_t *, void *, size_t );70 static int i8042_write(chardev_srv_t *, const void *, size_t );69 static int i8042_read(chardev_srv_t *, void *, size_t, size_t *); 70 static int i8042_write(chardev_srv_t *, const void *, size_t, size_t *); 71 71 72 72 static chardev_ops_t i8042_chardev_ops = { … … 333 333 * @param buffer Data source 334 334 * @param size Data size 335 * 336 * @return Bytes written. 337 * 338 */ 339 static int i8042_write(chardev_srv_t *srv, const void *data, size_t size) 335 * @param nwr Place to store number of bytes successfully written 336 * 337 * @return EOK on success or non-zero error code 338 * 339 */ 340 static int i8042_write(chardev_srv_t *srv, const void *data, size_t size, 341 size_t *nwr) 340 342 { 341 343 i8042_port_t *port = (i8042_port_t *)srv->srvs->sarg; … … 357 359 358 360 fibril_mutex_unlock(&i8042->write_guard); 359 return size; 361 *nwr = size; 362 return EOK; 360 363 } 361 364 … … 365 368 * @param buffer Data place 366 369 * @param size Data place size 367 * 368 * @return Bytes read. 369 * 370 */ 371 static int i8042_read(chardev_srv_t *srv, void *dest, size_t size) 370 * @param nread Place to store number of bytes successfully read 371 * 372 * @return EOK on success or non-zero error code 373 * 374 */ 375 static int i8042_read(chardev_srv_t *srv, void *dest, size_t size, 376 size_t *nread) 372 377 { 373 378 i8042_port_t *port = (i8042_port_t *)srv->srvs->sarg; … … 387 392 } 388 393 389 return i; 394 *nread = i; 395 return EOK; 390 396 } 391 397 -
uspace/drv/char/pl050/pl050.c
r19ea61d r677cad5 54 54 static int pl050_fun_offline(ddf_fun_t *); 55 55 static void pl050_char_conn(ipc_callid_t, ipc_call_t *, void *); 56 static int pl050_read(chardev_srv_t *, void *, size_t );57 static int pl050_write(chardev_srv_t *, const void *, size_t );56 static int pl050_read(chardev_srv_t *, void *, size_t, size_t *); 57 static int pl050_write(chardev_srv_t *, const void *, size_t, size_t *); 58 58 59 59 static driver_ops_t driver_ops = { … … 236 236 } 237 237 238 static int pl050_read(chardev_srv_t *srv, void *buffer, size_t size) 238 static int pl050_read(chardev_srv_t *srv, void *buffer, size_t size, 239 size_t *nread) 239 240 { 240 241 pl050_t *pl050 = (pl050_t *)srv->srvs->sarg; … … 257 258 fibril_mutex_unlock(&pl050->buf_lock); 258 259 259 return size - left; 260 } 261 262 static int pl050_write(chardev_srv_t *srv, const void *data, size_t size) 260 *nread = size - left; 261 return EOK; 262 } 263 264 static int pl050_write(chardev_srv_t *srv, const void *data, size_t size, 265 size_t *nwritten) 263 266 { 264 267 pl050_t *pl050 = (pl050_t *)srv->srvs->sarg; … … 278 281 ddf_msg(LVL_NOTE, "%s/pl050_write() success", pl050->name); 279 282 280 return size; 283 *nwritten = size; 284 return EOK; 281 285 } 282 286 -
uspace/lib/c/generic/io/chardev_srv.c
r19ea61d r677cad5 48 48 void *buf; 49 49 size_t size; 50 size_t nread; 50 51 int rc; 51 52 ipc_callid_t rcallid; … … 70 71 } 71 72 72 rc = srv->srvs->ops->read(srv, buf, size );73 if (rc <0) {73 rc = srv->srvs->ops->read(srv, buf, size, &nread); 74 if (rc != EOK && nread == 0) { 74 75 async_answer_0(rcallid, rc); 75 76 async_answer_0(callid, rc); … … 78 79 } 79 80 80 async_data_read_finalize(rcallid, buf, size);81 async_data_read_finalize(rcallid, buf, nread); 81 82 82 83 free(buf); 83 async_answer_2(callid, EOK, EOK, rc /* nread */);84 async_answer_2(callid, EOK, rc, nread); 84 85 } 85 86 … … 89 90 void *data; 90 91 size_t size; 92 size_t nwr; 91 93 int rc; 92 94 … … 102 104 } 103 105 104 rc = srv->srvs->ops->write(srv, data, size );106 rc = srv->srvs->ops->write(srv, data, size, &nwr); 105 107 free(data); 106 if (rc < 0)108 if (rc != EOK && nwr == 0) { 107 109 async_answer_0(callid, rc); 110 return; 111 } 108 112 109 async_answer_2(callid, EOK, EOK, rc /* nwritten */);113 async_answer_2(callid, EOK, rc, nwr); 110 114 } 111 115 -
uspace/lib/c/include/io/chardev_srv.h
r19ea61d r677cad5 59 59 int (*open)(chardev_srvs_t *, chardev_srv_t *); 60 60 int (*close)(chardev_srv_t *); 61 int (*read)(chardev_srv_t *, void *, size_t );62 int (*write)(chardev_srv_t *, const void *, size_t );61 int (*read)(chardev_srv_t *, void *, size_t, size_t *); 62 int (*write)(chardev_srv_t *, const void *, size_t, size_t *); 63 63 }; 64 64
Note:
See TracChangeset
for help on using the changeset viewer.