Ignore:
File:
1 edited

Legend:

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

    r25f6bddb 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);
     874                call->cap_handle = CAP_NIL;
    873875        }
    874876
    875877        return true;
     878}
     879
     880bool async_get_call(ipc_call_t *call)
     881{
     882        return async_get_call_timeout(call, 0);
    876883}
    877884
     
    937944
    938945        /* New connection */
    939         if (IPC_GET_IMETHOD(*call) == IPC_M_CONNECT_ME_TO) {
     946        if (ipc_get_imethod(call) == IPC_M_CONNECT_ME_TO) {
    940947                connection_t *conn = calloc(1, sizeof(*conn));
    941948                if (!conn) {
     
    944951                }
    945952
    946                 iface_t iface = (iface_t) IPC_GET_ARG1(*call);
     953                iface_t iface = (iface_t) ipc_get_arg1(call);
    947954
    948955                // TODO: Currently ignores all ports but the first one.
     
    10011008
    10021009/** Add one manager to manager list. */
    1003 fid_t async_create_manager(void)
     1010static fid_t async_create_manager(void)
    10041011{
    10051012        fid_t fid = fibril_create_generic(async_manager_fibril, NULL, PAGE_SIZE);
     
    10941101}
    10951102
    1096 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,
    10971104    sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, unsigned int mode)
    10981105{
     
    11101117}
    11111118
    1112 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,
    11131120    sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,
    11141121    sysarg_t arg4, sysarg_t arg5, unsigned int mode)
     
    11251132        return ipc_forward_slow(chandle, exch->phone, imethod, arg1, arg2, arg3,
    11261133            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);
    11271175}
    11281176
     
    11731221        async_get_call(call);
    11741222
    1175         if (IPC_GET_IMETHOD(*call) != IPC_M_SHARE_IN)
     1223        if (ipc_get_imethod(call) != IPC_M_SHARE_IN)
    11761224                return false;
    11771225
    1178         *size = (size_t) IPC_GET_ARG1(*call);
     1226        *size = (size_t) ipc_get_arg1(call);
    11791227        return true;
    11801228}
     
    12281276        async_get_call(call);
    12291277
    1230         if (IPC_GET_IMETHOD(*call) != IPC_M_SHARE_OUT)
     1278        if (ipc_get_imethod(call) != IPC_M_SHARE_OUT)
    12311279                return false;
    12321280
    1233         *size = (size_t) IPC_GET_ARG2(*call);
    1234         *flags = (unsigned int) IPC_GET_ARG3(*call);
     1281        *size = (size_t) ipc_get_arg2(call);
     1282        *flags = (unsigned int) ipc_get_arg3(call);
    12351283        return true;
    12361284}
     
    12811329        async_get_call(call);
    12821330
    1283         if (IPC_GET_IMETHOD(*call) != IPC_M_DATA_READ)
     1331        if (ipc_get_imethod(call) != IPC_M_DATA_READ)
    12841332                return false;
    12851333
    12861334        if (size)
    1287                 *size = (size_t) IPC_GET_ARG2(*call);
     1335                *size = (size_t) ipc_get_arg2(call);
    12881336
    12891337        return true;
     
    13181366 *
    13191367 */
    1320 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,
    13211369    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
    13221370    ipc_call_t *dataptr)
     
    13311379        }
    13321380
    1333         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,
    13341382            dataptr);
    13351383        if (msg == 0) {
     
    13521400}
    13531401
     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
    13541470/** Wrapper for receiving the IPC_M_DATA_WRITE calls using the async framework.
    13551471 *
     
    13721488        async_get_call(call);
    13731489
    1374         if (IPC_GET_IMETHOD(*call) != IPC_M_DATA_WRITE)
     1490        if (ipc_get_imethod(call) != IPC_M_DATA_WRITE)
    13751491                return false;
    13761492
    13771493        if (size)
    1378                 *size = (size_t) IPC_GET_ARG2(*call);
     1494                *size = (size_t) ipc_get_arg2(call);
    13791495
    13801496        return true;
     
    14951611 *
    14961612 */
    1497 errno_t async_data_write_forward_fast(async_exch_t *exch, sysarg_t imethod,
    1498     sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4,
    1499     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)
    15001616{
    15011617        if (exch == NULL)
     
    15081624        }
    15091625
    1510         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,
    15111627            dataptr);
    15121628        if (msg == 0) {
     
    15291645}
    15301646
     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
    15311717/** Wrapper for receiving the IPC_M_CONNECT_TO_ME calls.
    15321718 *
     
    15461732        async_get_call(&call);
    15471733
    1548         cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(call);
    1549 
    1550         if ((IPC_GET_IMETHOD(call) != IPC_M_CONNECT_TO_ME) ||
    1551             !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))) {
    15521738                async_answer_0(&call, EINVAL);
    15531739                return NULL;
     
    15901776async_sess_t *async_callback_receive_start(exch_mgmt_t mgmt, ipc_call_t *call)
    15911777{
    1592         cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(*call);
    1593 
    1594         if ((IPC_GET_IMETHOD(*call) != IPC_M_CONNECT_TO_ME) ||
    1595             !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)))
    15961782                return NULL;
    15971783
     
    16171803        async_get_call(call);
    16181804
    1619         if (IPC_GET_IMETHOD(*call) != IPC_M_STATE_CHANGE_AUTHORIZE)
     1805        if (ipc_get_imethod(call) != IPC_M_STATE_CHANGE_AUTHORIZE)
    16201806                return false;
    16211807
     
    16271813        assert(call);
    16281814
    1629         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));
    16301816}
    16311817
Note: See TracChangeset for help on using the changeset viewer.