Changeset eadaeae8 in mainline for uspace/lib/c/include/async.h


Ignore:
Timestamp:
2018-03-21T20:58:49Z (6 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3be9d10
Parents:
874381a
Message:

Make capability handles type-safe

Define distinct pointer types for the handles of the supported
capability types and use them instead of integer handles. This makes it
virtually impossible to pass a non-handle or a handle of different type
instead of the proper handle. Also turn cap_handle_t into an "untyped"
capability handle that can be assigned to and from the "typed" handles.

This commit also fixes a bug in msim-con driver, which wrongly used the
IRQ number instead of the IRQ capability handle to unregister the IRQ.

This commit also fixes the wrong use of the capability handle instead
of error code in libusbhost.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/include/async.h

    r874381a readaeae8  
    6666 *
    6767 */
    68 typedef void (*async_port_handler_t)(cap_handle_t, ipc_call_t *, void *);
     68typedef void (*async_port_handler_t)(cap_call_handle_t, ipc_call_t *, void *);
    6969
    7070/** Notification handler */
     
    119119        async_get_call_timeout(data, 0)
    120120
    121 extern cap_handle_t async_get_call_timeout(ipc_call_t *, suseconds_t);
     121extern cap_call_handle_t async_get_call_timeout(ipc_call_t *, suseconds_t);
    122122
    123123/*
     
    169169
    170170extern errno_t async_irq_subscribe(int, async_notification_handler_t, void *,
    171     const irq_code_t *, cap_handle_t *);
    172 extern errno_t async_irq_unsubscribe(cap_handle_t);
     171    const irq_code_t *, cap_irq_handle_t *);
     172extern errno_t async_irq_unsubscribe(cap_irq_handle_t);
    173173
    174174extern errno_t async_event_subscribe(event_type_t, async_notification_handler_t,
     
    198198 */
    199199
    200 extern errno_t async_answer_0(cap_handle_t, errno_t);
    201 extern errno_t async_answer_1(cap_handle_t, errno_t, sysarg_t);
    202 extern errno_t async_answer_2(cap_handle_t, errno_t, sysarg_t, sysarg_t);
    203 extern errno_t async_answer_3(cap_handle_t, errno_t, sysarg_t, sysarg_t,
     200extern errno_t async_answer_0(cap_call_handle_t, errno_t);
     201extern errno_t async_answer_1(cap_call_handle_t, errno_t, sysarg_t);
     202extern errno_t async_answer_2(cap_call_handle_t, errno_t, sysarg_t, sysarg_t);
     203extern errno_t async_answer_3(cap_call_handle_t, errno_t, sysarg_t, sysarg_t,
    204204    sysarg_t);
    205 extern errno_t async_answer_4(cap_handle_t, errno_t, sysarg_t, sysarg_t,
     205extern errno_t async_answer_4(cap_call_handle_t, errno_t, sysarg_t, sysarg_t,
    206206    sysarg_t, sysarg_t);
    207 extern errno_t async_answer_5(cap_handle_t, errno_t, sysarg_t, sysarg_t,
     207extern errno_t async_answer_5(cap_call_handle_t, errno_t, sysarg_t, sysarg_t,
    208208    sysarg_t, sysarg_t, sysarg_t);
    209209
     
    212212 */
    213213
    214 extern errno_t async_forward_fast(cap_handle_t, async_exch_t *, sysarg_t, sysarg_t,
    215     sysarg_t, unsigned int);
    216 extern errno_t async_forward_slow(cap_handle_t, async_exch_t *, sysarg_t, sysarg_t,
    217     sysarg_t, sysarg_t, sysarg_t, sysarg_t, unsigned int);
     214extern errno_t async_forward_fast(cap_call_handle_t, async_exch_t *, sysarg_t,
     215    sysarg_t, sysarg_t, unsigned int);
     216extern errno_t async_forward_slow(cap_call_handle_t, async_exch_t *, sysarg_t,
     217    sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t, unsigned int);
    218218
    219219/*
     
    384384extern errno_t async_share_in_start(async_exch_t *, size_t, sysarg_t,
    385385    unsigned int *, void **);
    386 extern bool async_share_in_receive(cap_handle_t *, size_t *);
    387 extern errno_t async_share_in_finalize(cap_handle_t, void *, unsigned int);
     386extern bool async_share_in_receive(cap_call_handle_t *, size_t *);
     387extern errno_t async_share_in_finalize(cap_call_handle_t, void *, unsigned int);
    388388
    389389extern errno_t async_share_out_start(async_exch_t *, void *, unsigned int);
    390 extern bool async_share_out_receive(cap_handle_t *, size_t *, unsigned int *);
    391 extern errno_t async_share_out_finalize(cap_handle_t, void **);
     390extern bool async_share_out_receive(cap_call_handle_t *, size_t *,
     391    unsigned int *);
     392extern errno_t async_share_out_finalize(cap_call_handle_t, void **);
    392393
    393394/*
     
    423424extern aid_t async_data_read(async_exch_t *, void *, size_t, ipc_call_t *);
    424425extern errno_t async_data_read_start(async_exch_t *, void *, size_t);
    425 extern bool async_data_read_receive(cap_handle_t *, size_t *);
    426 extern bool async_data_read_receive_call(cap_handle_t *, ipc_call_t *, size_t *);
    427 extern errno_t async_data_read_finalize(cap_handle_t, const void *, size_t);
     426extern bool async_data_read_receive(cap_call_handle_t *, size_t *);
     427extern bool async_data_read_receive_call(cap_call_handle_t *, ipc_call_t *,
     428    size_t *);
     429extern errno_t async_data_read_finalize(cap_call_handle_t, const void *,
     430    size_t);
    428431
    429432extern errno_t async_data_read_forward_fast(async_exch_t *, sysarg_t, sysarg_t,
     
    462465
    463466extern errno_t async_data_write_start(async_exch_t *, const void *, size_t);
    464 extern bool async_data_write_receive(cap_handle_t *, size_t *);
    465 extern bool async_data_write_receive_call(cap_handle_t *, ipc_call_t *, size_t *);
    466 extern errno_t async_data_write_finalize(cap_handle_t, void *, size_t);
     467extern bool async_data_write_receive(cap_call_handle_t *, size_t *);
     468extern bool async_data_write_receive_call(cap_call_handle_t *, ipc_call_t *,
     469    size_t *);
     470extern errno_t async_data_write_finalize(cap_call_handle_t, void *, size_t);
    467471
    468472extern errno_t async_data_write_accept(void **, const bool, const size_t,
     
    478482extern errno_t async_state_change_start(async_exch_t *, sysarg_t, sysarg_t,
    479483    sysarg_t, async_exch_t *);
    480 extern bool async_state_change_receive(cap_handle_t *, sysarg_t *, sysarg_t *,
    481     sysarg_t *);
    482 extern errno_t async_state_change_finalize(cap_handle_t, async_exch_t *);
     484extern bool async_state_change_receive(cap_call_handle_t *, sysarg_t *,
     485    sysarg_t *, sysarg_t *);
     486extern errno_t async_state_change_finalize(cap_call_handle_t, async_exch_t *);
    483487
    484488extern void *async_remote_state_acquire(async_sess_t *);
Note: See TracChangeset for help on using the changeset viewer.