Changeset f2d88f3 in mainline for uspace/drv


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
Files:
10 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
  • uspace/drv/hid/atkbd/atkbd.c

    r06412ba rf2d88f3  
    211211        while (true) {
    212212                uint8_t code = 0;
    213                 rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     213                rc = chardev_read(kbd->chardev, &code, 1, &nwr, chardev_f_none);
    214214                if (rc != EOK)
    215215                        return EIO;
     
    222222                        map_size = sizeof(scanmap_e0) / sizeof(unsigned int);
    223223
    224                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     224                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     225                            chardev_f_none);
    225226                        if (rc != EOK)
    226227                                return EIO;
    227228                } else if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) {
    228                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     229                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     230                            chardev_f_none);
    229231                        if (rc != EOK)
    230232                                return EIO;
     
    232234                                continue;
    233235
    234                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     236                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     237                            chardev_f_none);
    235238                        if (rc != EOK)
    236239                                return EIO;
     
    238241                                continue;
    239242
    240                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     243                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     244                            chardev_f_none);
    241245                        if (rc != EOK)
    242246                                return EIO;
     
    244248                                continue;
    245249
    246                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     250                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     251                            chardev_f_none);
    247252                        if (rc != EOK)
    248253                                return EIO;
     
    250255                                continue;
    251256
    252                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     257                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     258                            chardev_f_none);
    253259                        if (rc != EOK)
    254260                                return EIO;
     
    256262                                continue;
    257263
    258                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     264                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     265                            chardev_f_none);
    259266                        if (rc != EOK)
    260267                                return EIO;
     
    262269                                continue;
    263270
    264                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     271                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     272                            chardev_f_none);
    265273                        if (rc != EOK)
    266274                                return EIO;
     
    277285                if (code == KBD_SCANCODE_KEY_RELEASE) {
    278286                        type = KEY_RELEASE;
    279                         rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     287                        rc = chardev_read(kbd->chardev, &code, 1, &nwr,
     288                            chardev_f_none);
    280289                        if (rc != EOK)
    281290                                return EIO;
     
    418427                return EIO;
    419428        }
    420         rc = chardev_read(kbd->chardev, &code, 1, &bytes);
     429        rc = chardev_read(kbd->chardev, &code, 1, &bytes,
     430            chardev_f_none);
    421431        if (rc != EOK || code != AT_KBD_ACK) {
    422432                ddf_msg(LVL_ERROR, "Failed to confirm keyboard enable: %hhx.",
  • uspace/drv/hid/ps2mouse/ps2mouse.c

    r06412ba rf2d88f3  
    7777        uint8_t data = 0; \
    7878        size_t nread; \
    79         const errno_t rc = chardev_read((mouse)->chardev, &data, 1, &nread); \
     79        const errno_t rc = chardev_read((mouse)->chardev, &data, 1, &nread, \
     80            chardev_f_none); \
    8081        if (rc != EOK) { \
    8182                ddf_msg(LVL_ERROR, "Failed reading byte: %s", str_error_name(rc));\
     
    184185
    185186        size_t nread;
    186         rc = chardev_read(mouse->chardev, &report, 1, &nread);
     187        rc = chardev_read(mouse->chardev, &report, 1, &nread, chardev_f_none);
    187188        if (rc != EOK || report != PS2_MOUSE_ACK) {
    188189                ddf_msg(LVL_ERROR, "Failed to confirm data reporting: %hhx.",
     
    232233        while (pos < psize) {
    233234                rc = chardev_read(mouse->chardev, pbuf + pos, psize - pos,
    234                     &nread);
     235                    &nread, chardev_f_none);
    235236                if (rc != EOK) {
    236237                        ddf_msg(LVL_WARN, "Error reading packet.");
  • uspace/drv/hid/xtkbd/xtkbd.c

    r06412ba rf2d88f3  
    216216
    217217                uint8_t code = 0;
    218                 rc = chardev_read(kbd->chardev, &code, 1, &nread);
     218                rc = chardev_read(kbd->chardev, &code, 1, &nread, chardev_f_none);
    219219                if (rc != EOK)
    220220                        return EIO;
     
    229229                        map_size = sizeof(scanmap_e0) / sizeof(unsigned int);
    230230
    231                         rc = chardev_read(kbd->chardev, &code, 1, &nread);
     231                        rc = chardev_read(kbd->chardev, &code, 1, &nread,
     232                            chardev_f_none);
    232233                        if (rc != EOK)
    233234                                return EIO;
     
    236237
    237238                        if (code == 0x2a) {  /* Print Screen */
    238                                 rc = chardev_read(kbd->chardev, &code, 1, &nread);
     239                                rc = chardev_read(kbd->chardev, &code, 1, &nread,
     240                                    chardev_f_none);
    239241                                if (rc != EOK)
    240242                                        return EIO;
     
    243245                                        continue;
    244246
    245                                 rc = chardev_read(kbd->chardev, &code, 1, &nread);
     247                                rc = chardev_read(kbd->chardev, &code, 1, &nread,
     248                                    chardev_f_none);
    246249                                if (rc != EOK)
    247250                                        return EIO;
     
    254257
    255258                        if (code == 0x46) {  /* Break */
    256                                 rc = chardev_read(kbd->chardev, &code, 1, &nread);
     259                                rc = chardev_read(kbd->chardev, &code, 1, &nread,
     260                                    chardev_f_none);
    257261                                if (rc != EOK)
    258262                                        return EIO;
     
    261265                                        continue;
    262266
    263                                 rc = chardev_read(kbd->chardev, &code, 1, &nread);
     267                                rc = chardev_read(kbd->chardev, &code, 1, &nread,
     268                                    chardev_f_none);
    264269                                if (rc != EOK)
    265270                                        return EIO;
     
    274279                /* Extended special set */
    275280                if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) {
    276                         rc = chardev_read(kbd->chardev, &code, 1, &nread);
     281                        rc = chardev_read(kbd->chardev, &code, 1, &nread,
     282                            chardev_f_none);
    277283                        if (rc != EOK)
    278284                                return EIO;
     
    281287                                continue;
    282288
    283                         rc = chardev_read(kbd->chardev, &code, 1, &nread);
     289                        rc = chardev_read(kbd->chardev, &code, 1, &nread,
     290                            chardev_f_none);
    284291                        if (rc != EOK)
    285292                                return EIO;
     
    288295                                continue;
    289296
    290                         rc = chardev_read(kbd->chardev, &code, 1, &nread);
     297                        rc = chardev_read(kbd->chardev, &code, 1, &nread,
     298                            chardev_f_none);
    291299                        if (rc != EOK)
    292300                                return EIO;
     
    295303                                continue;
    296304
    297                         rc = chardev_read(kbd->chardev, &code, 1, &nread);
     305                        rc = chardev_read(kbd->chardev, &code, 1, &nread,
     306                            chardev_f_none);
    298307                        if (rc != EOK)
    299308                                return EIO;
     
    302311                                continue;
    303312
    304                         rc = chardev_read(kbd->chardev, &code, 1, &nread);
     313                        rc = chardev_read(kbd->chardev, &code, 1, &nread,
     314                            chardev_f_none);
    305315                        if (rc != EOK)
    306316                                return EIO;
Note: See TracChangeset for help on using the changeset viewer.