Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/async/server.c

    rfec7ba0 r5e801dc  
    9696 */
    9797
    98 #define LIBC_ASYNC_C_
     98#define _LIBC_ASYNC_C_
    9999#include <ipc/ipc.h>
    100100#include <async.h>
    101101#include "../private/async.h"
    102 #undef LIBC_ASYNC_C_
     102#undef _LIBC_ASYNC_C_
    103103
    104104#include <ipc/irq.h>
     
    231231static sysarg_t notification_avail = 0;
    232232
    233 static size_t client_key_hash(void *key)
    234 {
    235         task_id_t in_task_id = *(task_id_t *) key;
    236         return in_task_id;
     233static size_t client_key_hash(const void *key)
     234{
     235        const task_id_t *in_task_id = key;
     236        return *in_task_id;
    237237}
    238238
     
    243243}
    244244
    245 static bool client_key_equal(void *key, const ht_link_t *item)
    246 {
    247         task_id_t in_task_id = *(task_id_t *) key;
     245static bool client_key_equal(const void *key, const ht_link_t *item)
     246{
     247        const task_id_t *in_task_id = key;
    248248        client_t *client = hash_table_get_inst(item, client_t, link);
    249         return in_task_id == client->in_task_id;
     249        return *in_task_id == client->in_task_id;
    250250}
    251251
     
    490490}
    491491
    492 static size_t notification_key_hash(void *key)
    493 {
    494         sysarg_t id = *(sysarg_t *) key;
    495         return id;
     492static size_t notification_key_hash(const void *key)
     493{
     494        const sysarg_t *id = key;
     495        return *id;
    496496}
    497497
     
    503503}
    504504
    505 static bool notification_key_equal(void *key, const ht_link_t *item)
    506 {
    507         sysarg_t id = *(sysarg_t *) key;
     505static bool notification_key_equal(const void *key, const ht_link_t *item)
     506{
     507        const sysarg_t *id = key;
    508508        notification_t *notification =
    509509            hash_table_get_inst(item, notification_t, htlink);
    510         return id == notification->imethod;
     510        return *id == notification->imethod;
    511511}
    512512
     
    546546        errno_t rc = mpsc_send(conn->msg_channel, call);
    547547
    548         if (IPC_GET_IMETHOD(*call) == IPC_M_PHONE_HUNGUP) {
     548        if (ipc_get_imethod(call) == IPC_M_PHONE_HUNGUP) {
    549549                /* Close the channel, but let the connection fibril answer. */
    550550                mpsc_close(conn->msg_channel);
     
    656656        }
    657657
    658         ht_link_t *link = hash_table_find(&notification_hash_table,
    659             &IPC_GET_IMETHOD(*call));
     658        sysarg_t imethod = ipc_get_imethod(call);
     659        ht_link_t *link = hash_table_find(&notification_hash_table, &imethod);
    660660        if (!link) {
    661661                /* Invalid notification. */
     
    871871
    872872                memset(call, 0, sizeof(ipc_call_t));
    873                 IPC_SET_IMETHOD(*call, IPC_M_PHONE_HUNGUP);
     873                ipc_set_imethod(call, IPC_M_PHONE_HUNGUP);
    874874                call->cap_handle = CAP_NIL;
    875875        }
    876876
    877877        return true;
     878}
     879
     880bool async_get_call(ipc_call_t *call)
     881{
     882        return async_get_call_timeout(call, 0);
    878883}
    879884
     
    939944
    940945        /* New connection */
    941         if (IPC_GET_IMETHOD(*call) == IPC_M_CONNECT_ME_TO) {
     946        if (ipc_get_imethod(call) == IPC_M_CONNECT_ME_TO) {
    942947                connection_t *conn = calloc(1, sizeof(*conn));
    943948                if (!conn) {
     
    946951                }
    947952
    948                 iface_t iface = (iface_t) IPC_GET_ARG1(*call);
     953                iface_t iface = (iface_t) ipc_get_arg1(call);
    949954
    950955                // TODO: Currently ignores all ports but the first one.
     
    10961101}
    10971102
    1098 errno_t async_forward_fast(ipc_call_t *call, async_exch_t *exch,
     1103static errno_t async_forward_fast(ipc_call_t *call, async_exch_t *exch,
    10991104    sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, unsigned int mode)
    11001105{
     
    11121117}
    11131118
    1114 errno_t async_forward_slow(ipc_call_t *call, async_exch_t *exch,
     1119static errno_t async_forward_slow(ipc_call_t *call, async_exch_t *exch,
    11151120    sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,
    11161121    sysarg_t arg4, sysarg_t arg5, unsigned int mode)
     
    11271132        return ipc_forward_slow(chandle, exch->phone, imethod, arg1, arg2, arg3,
    11281133            arg4, arg5, mode);
     1134}
     1135
     1136errno_t async_forward_0(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
     1137    unsigned int mode)
     1138{
     1139        return async_forward_fast(call, exch, imethod, 0, 0, mode);
     1140}
     1141
     1142errno_t async_forward_1(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
     1143    sysarg_t arg1, unsigned int mode)
     1144{
     1145        return async_forward_fast(call, exch, imethod, arg1, 0, mode);
     1146}
     1147
     1148errno_t async_forward_2(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
     1149    sysarg_t arg1, sysarg_t arg2, unsigned int mode)
     1150{
     1151        return async_forward_fast(call, exch, imethod, arg1, arg2, mode);
     1152}
     1153
     1154errno_t async_forward_3(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
     1155    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, unsigned int mode)
     1156{
     1157        return async_forward_slow(call, exch, imethod, arg1, arg2, arg3, 0, 0,
     1158            mode);
     1159}
     1160
     1161errno_t async_forward_4(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
     1162    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
     1163    unsigned int mode)
     1164{
     1165        return async_forward_slow(call, exch, imethod, arg1, arg2, arg3, arg4,
     1166            0, mode);
     1167}
     1168
     1169errno_t async_forward_5(ipc_call_t *call, async_exch_t *exch, sysarg_t imethod,
     1170    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5,
     1171    unsigned int mode)
     1172{
     1173        return async_forward_slow(call, exch, imethod, arg1, arg2, arg3, arg4,
     1174            arg5, mode);
    11291175}
    11301176
     
    11751221        async_get_call(call);
    11761222
    1177         if (IPC_GET_IMETHOD(*call) != IPC_M_SHARE_IN)
     1223        if (ipc_get_imethod(call) != IPC_M_SHARE_IN)
    11781224                return false;
    11791225
    1180         *size = (size_t) IPC_GET_ARG1(*call);
     1226        *size = (size_t) ipc_get_arg1(call);
    11811227        return true;
    11821228}
     
    12301276        async_get_call(call);
    12311277
    1232         if (IPC_GET_IMETHOD(*call) != IPC_M_SHARE_OUT)
     1278        if (ipc_get_imethod(call) != IPC_M_SHARE_OUT)
    12331279                return false;
    12341280
    1235         *size = (size_t) IPC_GET_ARG2(*call);
    1236         *flags = (unsigned int) IPC_GET_ARG3(*call);
     1281        *size = (size_t) ipc_get_arg2(call);
     1282        *flags = (unsigned int) ipc_get_arg3(call);
    12371283        return true;
    12381284}
     
    12831329        async_get_call(call);
    12841330
    1285         if (IPC_GET_IMETHOD(*call) != IPC_M_DATA_READ)
     1331        if (ipc_get_imethod(call) != IPC_M_DATA_READ)
    12861332                return false;
    12871333
    12881334        if (size)
    1289                 *size = (size_t) IPC_GET_ARG2(*call);
     1335                *size = (size_t) ipc_get_arg2(call);
    12901336
    12911337        return true;
     
    13201366 *
    13211367 */
    1322 errno_t async_data_read_forward_fast(async_exch_t *exch, sysarg_t imethod,
     1368static errno_t async_data_read_forward_fast(async_exch_t *exch, sysarg_t imethod,
    13231369    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
    13241370    ipc_call_t *dataptr)
     
    13331379        }
    13341380
    1335         aid_t msg = async_send_fast(exch, imethod, arg1, arg2, arg3, arg4,
     1381        aid_t msg = async_send_4(exch, imethod, arg1, arg2, arg3, arg4,
    13361382            dataptr);
    13371383        if (msg == 0) {
     
    13541400}
    13551401
     1402errno_t async_data_read_forward_0_0(async_exch_t *exch, sysarg_t imethod)
     1403{
     1404        return async_data_read_forward_fast(exch, imethod, 0, 0, 0, 0, NULL);
     1405}
     1406
     1407errno_t async_data_read_forward_1_0(async_exch_t *exch, sysarg_t imethod,
     1408    sysarg_t arg1)
     1409{
     1410        return async_data_read_forward_fast(exch, imethod, arg1, 0, 0, 0, NULL);
     1411}
     1412
     1413errno_t async_data_read_forward_2_0(async_exch_t *exch, sysarg_t imethod,
     1414    sysarg_t arg1, sysarg_t arg2)
     1415{
     1416        return async_data_read_forward_fast(exch, imethod, arg1, arg2, 0,
     1417            0, NULL);
     1418}
     1419
     1420errno_t async_data_read_forward_3_0(async_exch_t *exch, sysarg_t imethod,
     1421    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3)
     1422{
     1423        return async_data_read_forward_fast(exch, imethod, arg1, arg2, arg3,
     1424            0, NULL);
     1425}
     1426
     1427errno_t async_data_read_forward_4_0(async_exch_t *exch, sysarg_t imethod,
     1428    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
     1429{
     1430        return async_data_read_forward_fast(exch, imethod, arg1, arg2, arg3,
     1431            arg4, NULL);
     1432}
     1433
     1434errno_t async_data_read_forward_0_1(async_exch_t *exch, sysarg_t imethod,
     1435    ipc_call_t *dataptr)
     1436{
     1437        return async_data_read_forward_fast(exch, imethod, 0, 0, 0,
     1438            0, dataptr);
     1439}
     1440
     1441errno_t async_data_read_forward_1_1(async_exch_t *exch, sysarg_t imethod,
     1442    sysarg_t arg1, ipc_call_t *dataptr)
     1443{
     1444        return async_data_read_forward_fast(exch, imethod, arg1, 0, 0,
     1445            0, dataptr);
     1446}
     1447
     1448errno_t async_data_read_forward_2_1(async_exch_t *exch, sysarg_t imethod,
     1449    sysarg_t arg1, sysarg_t arg2, ipc_call_t *dataptr)
     1450{
     1451        return async_data_read_forward_fast(exch, imethod, arg1, arg2, 0,
     1452            0, dataptr);
     1453}
     1454
     1455errno_t async_data_read_forward_3_1(async_exch_t *exch, sysarg_t imethod,
     1456    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, ipc_call_t *dataptr)
     1457{
     1458        return async_data_read_forward_fast(exch, imethod, arg1, arg2, arg3,
     1459            0, dataptr);
     1460}
     1461
     1462errno_t async_data_read_forward_4_1(async_exch_t *exch, sysarg_t imethod,
     1463    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
     1464    ipc_call_t *dataptr)
     1465{
     1466        return async_data_read_forward_fast(exch, imethod, arg1, arg2, arg3,
     1467            arg4, dataptr);
     1468}
     1469
    13561470/** Wrapper for receiving the IPC_M_DATA_WRITE calls using the async framework.
    13571471 *
     
    13741488        async_get_call(call);
    13751489
    1376         if (IPC_GET_IMETHOD(*call) != IPC_M_DATA_WRITE)
     1490        if (ipc_get_imethod(call) != IPC_M_DATA_WRITE)
    13771491                return false;
    13781492
    13791493        if (size)
    1380                 *size = (size_t) IPC_GET_ARG2(*call);
     1494                *size = (size_t) ipc_get_arg2(call);
    13811495
    13821496        return true;
     
    14971611 *
    14981612 */
    1499 errno_t async_data_write_forward_fast(async_exch_t *exch, sysarg_t imethod,
    1500     sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
    1501     ipc_call_t *dataptr)
     1613static errno_t async_data_write_forward_fast(async_exch_t *exch,
     1614    sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,
     1615    sysarg_t arg4, ipc_call_t *dataptr)
    15021616{
    15031617        if (exch == NULL)
     
    15101624        }
    15111625
    1512         aid_t msg = async_send_fast(exch, imethod, arg1, arg2, arg3, arg4,
     1626        aid_t msg = async_send_4(exch, imethod, arg1, arg2, arg3, arg4,
    15131627            dataptr);
    15141628        if (msg == 0) {
     
    15311645}
    15321646
     1647errno_t async_data_write_forward_0_0(async_exch_t *exch, sysarg_t imethod)
     1648{
     1649        return async_data_write_forward_fast(exch, imethod, 0, 0, 0,
     1650            0, NULL);
     1651}
     1652
     1653errno_t async_data_write_forward_1_0(async_exch_t *exch, sysarg_t imethod,
     1654    sysarg_t arg1)
     1655{
     1656        return async_data_write_forward_fast(exch, imethod, arg1, 0, 0,
     1657            0, NULL);
     1658}
     1659
     1660errno_t async_data_write_forward_2_0(async_exch_t *exch, sysarg_t imethod,
     1661    sysarg_t arg1, sysarg_t arg2)
     1662{
     1663        return async_data_write_forward_fast(exch, imethod, arg1, arg2, 0,
     1664            0, NULL);
     1665}
     1666
     1667errno_t async_data_write_forward_3_0(async_exch_t *exch, sysarg_t imethod,
     1668    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3)
     1669{
     1670        return async_data_write_forward_fast(exch, imethod, arg1, arg2, arg3,
     1671            0, NULL);
     1672}
     1673
     1674errno_t async_data_write_forward_4_0(async_exch_t *exch, sysarg_t imethod,
     1675    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
     1676{
     1677        return async_data_write_forward_fast(exch, imethod, arg1, arg2, arg3,
     1678            arg4, NULL);
     1679}
     1680
     1681errno_t async_data_write_forward_0_1(async_exch_t *exch, sysarg_t imethod,
     1682    ipc_call_t *dataptr)
     1683{
     1684        return async_data_write_forward_fast(exch, imethod, 0, 0, 0,
     1685            0, dataptr);
     1686}
     1687
     1688errno_t async_data_write_forward_1_1(async_exch_t *exch, sysarg_t imethod,
     1689    sysarg_t arg1, ipc_call_t *dataptr)
     1690{
     1691        return async_data_write_forward_fast(exch, imethod, arg1, 0, 0,
     1692            0, dataptr);
     1693}
     1694
     1695errno_t async_data_write_forward_2_1(async_exch_t *exch, sysarg_t imethod,
     1696    sysarg_t arg1, sysarg_t arg2, ipc_call_t *dataptr)
     1697{
     1698        return async_data_write_forward_fast(exch, imethod, arg1, arg2, 0,
     1699            0, dataptr);
     1700}
     1701
     1702errno_t async_data_write_forward_3_1(async_exch_t *exch, sysarg_t imethod,
     1703    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, ipc_call_t *dataptr)
     1704{
     1705        return async_data_write_forward_fast(exch, imethod, arg1, arg2, arg3,
     1706            0, dataptr);
     1707}
     1708
     1709errno_t async_data_write_forward_4_1(async_exch_t *exch, sysarg_t imethod,
     1710    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
     1711    ipc_call_t *dataptr)
     1712{
     1713        return async_data_write_forward_fast(exch, imethod, arg1, arg2, arg3,
     1714            arg4, dataptr);
     1715}
     1716
    15331717/** Wrapper for receiving the IPC_M_CONNECT_TO_ME calls.
    15341718 *
     
    15481732        async_get_call(&call);
    15491733
    1550         cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(call);
    1551 
    1552         if ((IPC_GET_IMETHOD(call) != IPC_M_CONNECT_TO_ME) ||
    1553             !CAP_HANDLE_VALID((phandle))) {
     1734        cap_phone_handle_t phandle = (cap_handle_t) ipc_get_arg5(&call);
     1735
     1736        if ((ipc_get_imethod(&call) != IPC_M_CONNECT_TO_ME) ||
     1737            !cap_handle_valid((phandle))) {
    15541738                async_answer_0(&call, EINVAL);
    15551739                return NULL;
     
    15921776async_sess_t *async_callback_receive_start(exch_mgmt_t mgmt, ipc_call_t *call)
    15931777{
    1594         cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(*call);
    1595 
    1596         if ((IPC_GET_IMETHOD(*call) != IPC_M_CONNECT_TO_ME) ||
    1597             !CAP_HANDLE_VALID((phandle)))
     1778        cap_phone_handle_t phandle = (cap_handle_t) ipc_get_arg5(call);
     1779
     1780        if ((ipc_get_imethod(call) != IPC_M_CONNECT_TO_ME) ||
     1781            !cap_handle_valid((phandle)))
    15981782                return NULL;
    15991783
     
    16191803        async_get_call(call);
    16201804
    1621         if (IPC_GET_IMETHOD(*call) != IPC_M_STATE_CHANGE_AUTHORIZE)
     1805        if (ipc_get_imethod(call) != IPC_M_STATE_CHANGE_AUTHORIZE)
    16221806                return false;
    16231807
     
    16291813        assert(call);
    16301814
    1631         return async_answer_1(call, EOK, CAP_HANDLE_RAW(other_exch->phone));
     1815        return async_answer_1(call, EOK, cap_handle_raw(other_exch->phone));
    16321816}
    16331817
Note: See TracChangeset for help on using the changeset viewer.