Changeset d082801 in mainline for uspace/lib/device/src/hr.c


Ignore:
Timestamp:
2025-03-29T14:04:37Z (4 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
746e636
Parents:
1a28518
Message:

hr: refactor manual assembly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/device/src/hr.c

    r1a28518 rd082801  
    11/*
    2  * Copyright (c) 2024 Miroslav Cimerman
     2 * Copyright (c) 2025 Miroslav Cimerman
    33 * All rights reserved.
    44 *
     
    8888}
    8989
    90 errno_t hr_create(hr_t *hr, hr_config_t *hr_config, bool assemble)
     90errno_t hr_create(hr_t *hr, hr_config_t *hr_config)
    9191{
    9292        errno_t rc, retval;
     
    9898                return EINVAL;
    9999
    100         req = async_send_0(exch, assemble ? HR_ASSEMBLE : HR_CREATE, NULL);
     100        req = async_send_0(exch, HR_CREATE, NULL);
    101101
    102102        rc = async_data_write_start(exch, hr_config, sizeof(hr_config_t));
     
    113113
    114114        return EOK;
     115}
     116
     117errno_t hr_assemble(hr_t *hr, hr_config_t *hr_config, size_t *rassembled_cnt)
     118{
     119        errno_t rc;
     120        async_exch_t *exch;
     121        aid_t req;
     122        size_t assembled_cnt;
     123
     124        exch = async_exchange_begin(hr->sess);
     125        if (exch == NULL)
     126                return EINVAL;
     127
     128        req = async_send_0(exch, HR_ASSEMBLE, NULL);
     129
     130        rc = async_data_write_start(exch, hr_config, sizeof(hr_config_t));
     131        if (rc != EOK) {
     132                async_exchange_end(exch);
     133                async_forget(req);
     134                return rc;
     135        }
     136
     137        rc = async_data_read_start(exch, &assembled_cnt, sizeof(size_t));
     138        if (rc != EOK) {
     139                async_exchange_end(exch);
     140                async_forget(req);
     141                return rc;
     142        }
     143
     144        async_exchange_end(exch);
     145        async_wait_for(req, &rc);
     146
     147        if (rassembled_cnt != NULL)
     148                *rassembled_cnt = assembled_cnt;
     149
     150        return rc;
    115151}
    116152
Note: See TracChangeset for help on using the changeset viewer.