Changeset f2d88f3 in mainline for uspace/drv/char


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/drv/char
Files:
7 edited

Legend:

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

    r06412ba rf2d88f3  
    6767
    6868static void i8042_char_conn(ipc_call_t *, void *);
    69 static errno_t i8042_read(chardev_srv_t *, void *, size_t, size_t *);
     69static errno_t i8042_read(chardev_srv_t *, void *, size_t, size_t *,
     70    chardev_flags_t);
    7071static errno_t i8042_write(chardev_srv_t *, const void *, size_t, size_t *);
    7172
     
    385386 */
    386387static errno_t i8042_read(chardev_srv_t *srv, void *dest, size_t size,
    387     size_t *nread)
     388    size_t *nread, chardev_flags_t flags)
    388389{
    389390        i8042_port_t *port = (i8042_port_t *)srv->srvs->sarg;
     
    394395        fibril_mutex_lock(&port->buf_lock);
    395396
    396         while (circ_buf_nused(&port->cbuf) == 0)
     397        while ((flags & chardev_f_nonblock) == 0 &&
     398            circ_buf_nused(&port->cbuf) == 0)
    397399                fibril_condvar_wait(&port->buf_cv, &port->buf_lock);
    398400
  • uspace/drv/char/msim-con/msim-con.c

    r06412ba rf2d88f3  
    4343static void msim_con_connection(ipc_call_t *, void *);
    4444
    45 static errno_t msim_con_read(chardev_srv_t *, void *, size_t, size_t *);
     45static errno_t msim_con_read(chardev_srv_t *, void *, size_t, size_t *,
     46    chardev_flags_t);
    4647static errno_t msim_con_write(chardev_srv_t *, const void *, size_t, size_t *);
    4748
     
    185186/** Read from msim console device */
    186187static errno_t msim_con_read(chardev_srv_t *srv, void *buf, size_t size,
    187     size_t *nread)
     188    size_t *nread, chardev_flags_t flags)
    188189{
    189190        msim_con_t *con = (msim_con_t *) srv->srvs->sarg;
     
    194195        fibril_mutex_lock(&con->buf_lock);
    195196
    196         while (circ_buf_nused(&con->cbuf) == 0)
     197        while ((flags & chardev_f_nonblock) == 0 &&
     198            circ_buf_nused(&con->cbuf) == 0)
    197199                fibril_condvar_wait(&con->buf_cv, &con->buf_lock);
    198200
  • uspace/drv/char/ns8250/ns8250.c

    r06412ba rf2d88f3  
    246246 * @param count         The number of bytes to be read.
    247247 * @param nread         Place to store number of bytes actually read
     248 * @param flags         @c chardev_f_nonblock not to block waiting for data
     249 *                      even if no data is available
    248250 *
    249251 * @return              EOK on success or non-zero error code
    250252 */
    251 static errno_t ns8250_read(chardev_srv_t *srv, void *buf, size_t count, size_t *nread)
     253static errno_t ns8250_read(chardev_srv_t *srv, void *buf, size_t count, size_t *nread,
     254    chardev_flags_t flags)
    252255{
    253256        ns8250_t *ns = srv_ns8250(srv);
     
    261264
    262265        fibril_mutex_lock(&ns->mutex);
    263         while (buf_is_empty(&ns->input_buffer))
     266        while ((flags & chardev_f_none) == 0 &&
     267            buf_is_empty(&ns->input_buffer))
    264268                fibril_condvar_wait(&ns->input_buffer_available, &ns->mutex);
    265269        while (!buf_is_empty(&ns->input_buffer) && pos < count) {
  • uspace/drv/char/pc-lpt/pc-lpt.c

    r06412ba rf2d88f3  
    4545static void pc_lpt_connection(ipc_call_t *, void *);
    4646
    47 static errno_t pc_lpt_read(chardev_srv_t *, void *, size_t, size_t *);
     47static errno_t pc_lpt_read(chardev_srv_t *, void *, size_t, size_t *,
     48    chardev_flags_t);
    4849static errno_t pc_lpt_write(chardev_srv_t *, const void *, size_t, size_t *);
    4950
     
    224225/** Read from pc-lpt device */
    225226static errno_t pc_lpt_read(chardev_srv_t *srv, void *buf, size_t size,
    226     size_t *nread)
     227    size_t *nread, chardev_flags_t flags)
    227228{
    228229        pc_lpt_t *lpt = (pc_lpt_t *) srv->srvs->sarg;
  • uspace/drv/char/pl050/pl050.c

    r06412ba rf2d88f3  
    5959static errno_t pl050_fun_offline(ddf_fun_t *);
    6060static void pl050_char_conn(ipc_call_t *, void *);
    61 static errno_t pl050_read(chardev_srv_t *, void *, size_t, size_t *);
     61static errno_t pl050_read(chardev_srv_t *, void *, size_t, size_t *,
     62    chardev_flags_t);
    6263static errno_t pl050_write(chardev_srv_t *, const void *, size_t, size_t *);
    6364
     
    242243
    243244static errno_t pl050_read(chardev_srv_t *srv, void *buffer, size_t size,
    244     size_t *nread)
     245    size_t *nread, chardev_flags_t flags)
    245246{
    246247        pl050_t *pl050 = (pl050_t *)srv->srvs->sarg;
     
    252253        left = size;
    253254        while (left > 0) {
    254                 while (left == size && pl050->buf_rp == pl050->buf_wp)
     255                while ((flags & chardev_f_nonblock) == 0 &&
     256                    left == size && pl050->buf_rp == pl050->buf_wp)
    255257                        fibril_condvar_wait(&pl050->buf_cv, &pl050->buf_lock);
    256258                if (pl050->buf_rp == pl050->buf_wp)
  • uspace/drv/char/ski-con/ski-con.c

    r06412ba rf2d88f3  
    5555static void ski_con_connection(ipc_call_t *, void *);
    5656
    57 static errno_t ski_con_read(chardev_srv_t *, void *, size_t, size_t *);
     57static errno_t ski_con_read(chardev_srv_t *, void *, size_t, size_t *,
     58    chardev_flags_t);
    5859static errno_t ski_con_write(chardev_srv_t *, const void *, size_t, size_t *);
    5960
     
    260261/** Read from Ski console device */
    261262static errno_t ski_con_read(chardev_srv_t *srv, void *buf, size_t size,
    262     size_t *nread)
     263    size_t *nread, chardev_flags_t flags)
    263264{
    264265        ski_con_t *con = (ski_con_t *) srv->srvs->sarg;
     
    269270        fibril_mutex_lock(&con->buf_lock);
    270271
    271         while (circ_buf_nused(&con->cbuf) == 0)
     272        while ((flags & chardev_f_nonblock) == 0 &&
     273            circ_buf_nused(&con->cbuf) == 0)
    272274                fibril_condvar_wait(&con->buf_cv, &con->buf_lock);
    273275
  • uspace/drv/char/sun4v-con/sun4v-con.c

    r06412ba rf2d88f3  
    4646#define POLL_INTERVAL  10000
    4747
    48 static errno_t sun4v_con_read(chardev_srv_t *, void *, size_t, size_t *);
     48static errno_t sun4v_con_read(chardev_srv_t *, void *, size_t, size_t *,
     49    chardev_flags_t);
    4950static errno_t sun4v_con_write(chardev_srv_t *, const void *, size_t, size_t *);
    5051
     
    154155/** Read from Sun4v console device */
    155156static errno_t sun4v_con_read(chardev_srv_t *srv, void *buf, size_t size,
    156     size_t *nread)
     157    size_t *nread, chardev_flags_t flags)
    157158{
    158159        sun4v_con_t *con = (sun4v_con_t *) srv->srvs->sarg;
     
    161162        char c;
    162163
    163         while (con->input_buffer->read_ptr == con->input_buffer->write_ptr)
     164        while ((flags & chardev_f_nonblock) == 0 &&
     165            con->input_buffer->read_ptr == con->input_buffer->write_ptr)
    164166                fibril_usleep(POLL_INTERVAL);
    165167
Note: See TracChangeset for help on using the changeset viewer.