Changeset 4285f384 in mainline for uspace/lib/device


Ignore:
Timestamp:
2025-02-25T20:25:43Z (12 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
d30e067, f35749e
Parents:
d231a54
Message:

Allow physically ejecting CD-ROM using vol eject -s

Location:
uspace/lib/device
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/device/include/bd.h

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2012 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5151extern errno_t bd_get_block_size(bd_t *, size_t *);
    5252extern errno_t bd_get_num_blocks(bd_t *, aoff64_t *);
     53extern errno_t bd_eject(bd_t *);
    5354
    5455#endif
  • uspace/lib/device/include/bd_srv.h

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2012 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6666        errno_t (*get_block_size)(bd_srv_t *, size_t *);
    6767        errno_t (*get_num_blocks)(bd_srv_t *, aoff64_t *);
     68        errno_t (*eject)(bd_srv_t *);
    6869};
    6970
  • uspace/lib/device/include/ipc/bd.h

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4444        BD_SYNC_CACHE,
    4545        BD_WRITE_BLOCKS,
    46         BD_READ_TOC
     46        BD_READ_TOC,
     47        BD_EJECT
    4748} bd_request_t;
    4849
  • uspace/lib/device/include/ipc/vol.h

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2015 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5454} vol_request_t;
    5555
     56/** Volume eject flags */
     57typedef enum {
     58        /** No flags */
     59        vef_none = 0x0,
     60        /** Physically eject medium */
     61        vef_physical = 0x1
     62} vol_eject_flags_t;
     63
    5664#endif
    5765
  • uspace/lib/device/include/types/vol.h

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2015 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
  • uspace/lib/device/include/vol.h

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2015 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4848extern errno_t vol_part_add(vol_t *, service_id_t);
    4949extern errno_t vol_part_info(vol_t *, service_id_t, vol_part_info_t *);
    50 extern errno_t vol_part_eject(vol_t *, service_id_t);
     50extern errno_t vol_part_eject(vol_t *, service_id_t, vol_eject_flags_t);
    5151extern errno_t vol_part_empty(vol_t *, service_id_t);
    5252extern errno_t vol_part_insert(vol_t *, service_id_t);
  • uspace/lib/device/src/bd.c

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2012 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    196196}
    197197
     198errno_t bd_eject(bd_t *bd)
     199{
     200        async_exch_t *exch = async_exchange_begin(bd->sess);
     201
     202        errno_t rc = async_req_0_0(exch, BD_EJECT);
     203        async_exchange_end(exch);
     204
     205        return rc;
     206}
     207
    198208static void bd_cb_conn(ipc_call_t *icall, void *arg)
    199209{
  • uspace/lib/device/src/bd_srv.c

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    206206}
    207207
     208static void bd_eject_srv(bd_srv_t *srv, ipc_call_t *call)
     209{
     210        errno_t rc;
     211
     212        if (srv->srvs->ops->eject == NULL) {
     213                async_answer_0(call, ENOTSUP);
     214                return;
     215        }
     216
     217        rc = srv->srvs->ops->eject(srv);
     218        async_answer_0(call, rc);
     219}
     220
    208221static bd_srv_t *bd_srv_create(bd_srvs_t *srvs)
    209222{
     
    276289                        bd_get_num_blocks_srv(srv, &call);
    277290                        break;
     291                case BD_EJECT:
     292                        bd_eject_srv(srv, &call);
     293                        break;
    278294                default:
    279295                        async_answer_0(&call, EINVAL);
  • uspace/lib/device/src/vol.c

    rd231a54 r4285f384  
    11/*
    2  * Copyright (c) 2015 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    253253 * @param vol Volume service
    254254 * @param sid Service ID of the partition
    255  * @return EOK on success or an error code
    256  */
    257 errno_t vol_part_eject(vol_t *vol, service_id_t sid)
    258 {
    259         async_exch_t *exch;
    260         errno_t retval;
    261 
    262         exch = async_exchange_begin(vol->sess);
    263         retval = async_req_1_0(exch, VOL_PART_EJECT, sid);
     255 * @param flags Ejection flags
     256 * @return EOK on success or an error code
     257 */
     258errno_t vol_part_eject(vol_t *vol, service_id_t sid, vol_eject_flags_t flags)
     259{
     260        async_exch_t *exch;
     261        errno_t retval;
     262
     263        exch = async_exchange_begin(vol->sess);
     264        retval = async_req_2_0(exch, VOL_PART_EJECT, sid, flags);
    264265        async_exchange_end(exch);
    265266
Note: See TracChangeset for help on using the changeset viewer.