Changeset f2d88f3 in mainline for uspace/lib/c


Ignore:
Timestamp:
2019-01-04T21:22:17Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
af7b85b
Parents:
06412ba
Message:

Add forgotten changes to enable non-blocking chardev read

Location:
uspace/lib/c
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/io/chardev.c

    r06412ba rf2d88f3  
    9191 * @param size Maximum number of bytes to read
    9292 * @param nread Place to store actual number of bytes read
     93 * @param flags @c chardev_f_nonblock to return immediately even if no
     94 *              bytes are available
    9395 *
    9496 * @return EOK on success or non-zero error code
    9597 */
    96 errno_t chardev_read(chardev_t *chardev, void *buf, size_t size, size_t *nread)
     98errno_t chardev_read(chardev_t *chardev, void *buf, size_t size, size_t *nread,
     99    chardev_flags_t flags)
    97100{
    98101        async_exch_t *exch = async_exchange_begin(chardev->sess);
     
    104107
    105108        ipc_call_t answer;
    106         aid_t req = async_send_0(exch, CHARDEV_READ, &answer);
     109        aid_t req = async_send_1(exch, CHARDEV_READ, flags, &answer);
    107110        errno_t rc = async_data_read_start(exch, buf, size);
    108111        async_exchange_end(exch);
  • uspace/lib/c/generic/io/chardev_srv.c

    r06412ba rf2d88f3  
    4848        size_t size;
    4949        size_t nread;
     50        chardev_flags_t flags;
    5051        errno_t rc;
     52
     53        flags = IPC_GET_ARG1(*icall);
    5154
    5255        ipc_call_t call;
     
    7073        }
    7174
    72         rc = srv->srvs->ops->read(srv, buf, size, &nread);
     75        rc = srv->srvs->ops->read(srv, buf, size, &nread, flags);
    7376        if (rc != EOK && nread == 0) {
    7477                async_answer_0(&call, rc);
  • uspace/lib/c/include/io/chardev.h

    r06412ba rf2d88f3  
    3636#include <async.h>
    3737#include <stddef.h>
     38#include <types/io/chardev.h>
    3839
    3940typedef struct {
     
    4344extern errno_t chardev_open(async_sess_t *, chardev_t **);
    4445extern void chardev_close(chardev_t *);
    45 extern errno_t chardev_read(chardev_t *, void *, size_t, size_t *);
     46extern errno_t chardev_read(chardev_t *, void *, size_t, size_t *,
     47    chardev_flags_t);
    4648extern errno_t chardev_write(chardev_t *, const void *, size_t, size_t *);
    4749
  • uspace/lib/c/include/io/chardev_srv.h

    r06412ba rf2d88f3  
    4141#include <stdbool.h>
    4242#include <stddef.h>
     43#include <types/io/chardev.h>
    4344
    4445typedef struct chardev_ops chardev_ops_t;
     
    5960        errno_t (*open)(chardev_srvs_t *, chardev_srv_t *);
    6061        errno_t (*close)(chardev_srv_t *);
    61         errno_t (*read)(chardev_srv_t *, void *, size_t, size_t *);
     62        errno_t (*read)(chardev_srv_t *, void *, size_t, size_t *,
     63            chardev_flags_t);
    6264        errno_t (*write)(chardev_srv_t *, const void *, size_t, size_t *);
    6365        void (*def_handler)(chardev_srv_t *, ipc_call_t *);
  • uspace/lib/c/include/types/io/chardev.h

    r06412ba rf2d88f3  
    3535/** Chardev read/write operation flags */
    3636typedef enum {
     37        /** No flags */
     38        chardev_f_none = 0,
    3739        /** Do not block even if no bytes can be transferred */
    3840        chardev_f_nonblock = 0x1
Note: See TracChangeset for help on using the changeset viewer.