Changeset a64c64d in mainline for uspace/srv/net/messages.h


Ignore:
Timestamp:
2010-03-09T22:24:31Z (14 years ago)
Author:
Lukas Mejdrech <lukasmejdrech@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
74520daf
Parents:
9f2ea28
Message:
  • code reorganization (no functional change)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/messages.h

    r9f2ea28 ra64c64d  
    4848#include "structures/packet/packet.h"
    4949
    50 /** @name Networking message counts
    51  */
    52 /*@{*/
    53 
    54 /** The number of network interface driver messages.
    55  */
    56 #define NET_NETIF_COUNT         6
    57 
    58 /** The number of general networking messages.
    59  */
    60 #define NET_NET_COUNT           3
    61 
    62 /** The number of network interface layer messages.
    63  */
    64 #define NET_NIL_COUNT           7
    65 
    66 /** The number of Ethernet messages.
    67  */
    68 #define NET_ETH_COUNT           0
    69 
    70 /** The number of inter-network messages.
    71  */
    72 #define NET_IL_COUNT            6
    73 
    74 /** The number of IP messages.
    75  */
    76 #define NET_IP_COUNT            4
    77 
    78 /** The number of ARP messages.
    79  */
    80 #define NET_ARP_COUNT           5
    81 
    82 /** The number of ICMP messages.
    83  */
    84 #define NET_ICMP_COUNT          6
    85 
    86 /** The number of transport layer messages.
    87  */
    88 #define NET_TL_COUNT            1
    89 
    90 /** The number of UDP messages.
    91  */
    92 #define NET_UDP_COUNT           0
    93 
    94 /** The number of TCP messages.
    95  */
    96 #define NET_TCP_COUNT           0
    97 
    98 /** The number of packet management system messages.
    99  */
    100 #define NET_PACKET_COUNT        5
    101 
    102 /** The number of socket messages.
    103  */
    104 #define NET_SOCKET_COUNT        14
    105 
    106 /*@}*/
    107 
    108 /** @name Networking message intervals
    109  */
    110 /*@{*/
    111 
    112 /** The first networking message.
    113  */
    114 #define NET_FIRST                       2000
    115 
    116 /** The first network interface layer message.
    117  */
    118 #define NET_NETIF_FIRST         NET_FIRST
    119 
    120 /** The last network interface layer message.
    121  */
    122 #define NET_NETIF_LAST          (NET_NETIF_FIRST + NET_NETIF_COUNT)
    123 
    124 /** The first general networking message.
    125  */
    126 #define NET_NET_FIRST           (NET_NETIF_LAST + 0)
    127 
    128 /** The last general networking message.
    129  */
    130 #define NET_NET_LAST            (NET_NET_FIRST + NET_NET_COUNT)
    131 
    132 /** The first network interface layer message.
    133  */
    134 #define NET_NIL_FIRST           (NET_NET_LAST + 0)
    135 
    136 /** The last network interface layer message.
    137  */
    138 #define NET_NIL_LAST            (NET_NIL_FIRST + NET_NIL_COUNT)
    139 
    140 /** The first Ethernet message.
    141  */
    142 #define NET_ETH_FIRST           (NET_NIL_LAST + 0)
    143 
    144 /** The last Ethernet message.
    145  */
    146 #define NET_ETH_LAST            (NET_ETH_FIRST + NET_ETH_COUNT)
    147 
    148 /** The first inter-network message.
    149  */
    150 #define NET_IL_FIRST            (NET_ETH_LAST + 0)
    151 
    152 /** The last inter-network message.
    153  */
    154 #define NET_IL_LAST                     (NET_IL_FIRST + NET_IL_COUNT)
    155 
    156 /** The first IP message.
    157  */
    158 #define NET_IP_FIRST            (NET_IL_LAST + 0)
    159 
    160 /** The last IP message.
    161  */
    162 #define NET_IP_LAST                     (NET_IP_FIRST + NET_IP_COUNT)
    163 
    164 /** The first ARP message.
    165  */
    166 #define NET_ARP_FIRST           (NET_IP_LAST + 0)
    167 
    168 /** The last ARP message.
    169  */
    170 #define NET_ARP_LAST            (NET_ARP_FIRST + NET_ARP_COUNT)
    171 
    172 /** The first ICMP message.
    173  */
    174 #define NET_ICMP_FIRST          (NET_ARP_LAST + 0)
    175 
    176 /** The last ICMP message.
    177  */
    178 #define NET_ICMP_LAST           (NET_ICMP_FIRST + NET_ICMP_COUNT)
    179 
    180 /** The first ICMP message.
    181  */
    182 #define NET_TL_FIRST            (NET_ICMP_LAST + 0)
    183 
    184 /** The last ICMP message.
    185  */
    186 #define NET_TL_LAST                     (NET_TL_FIRST + NET_TL_COUNT)
    187 
    188 /** The first UDP message.
    189  */
    190 #define NET_UDP_FIRST           (NET_TL_LAST + 0)
    191 
    192 /** The last UDP message.
    193  */
    194 #define NET_UDP_LAST            (NET_UDP_FIRST + NET_UDP_COUNT)
    195 
    196 /** The first TCP message.
    197  */
    198 #define NET_TCP_FIRST           (NET_UDP_LAST + 0)
    199 
    200 /** The last TCP message.
    201  */
    202 #define NET_TCP_LAST            (NET_TCP_FIRST + NET_TCP_COUNT)
    203 
    204 /** The first socket message.
    205  */
    206 #define NET_SOCKET_FIRST        (NET_TCP_LAST + 0)
    207 
    208 /** The last socket message.
    209  */
    210 #define NET_SOCKET_LAST         (NET_SOCKET_FIRST + NET_SOCKET_COUNT)
    211 
    212 /** The first packet management system message.
    213  */
    214 #define NET_PACKET_FIRST        (NET_SOCKET_LAST + 0)
    215 
    216 /** The last packet management system message.
    217  */
    218 #define NET_PACKET_LAST         (NET_PACKET_FIRST + NET_PACKET_COUNT)
    219 
    220 /** The last networking message.
    221  */
    222 #define NET_LAST                        NET_PACKET_LAST
    223 
    224 /** The number of networking messages.
    225  */
    226 #define NET_COUNT                       (NET_LAST - NET_FIRST)
    227 
    22850/** Returns a value indicating whether the value is in the interval.
    22951 *  @param[in] item The value to be checked.
     
    23355#define IS_IN_INTERVAL(item, first_inclusive, last_exclusive)   (((item) >= (first_inclusive)) && ((item) < (last_exclusive)))
    23456
     57/** @name Networking message counts
     58 */
     59/*@{*/
     60
     61/** The number of ARP messages.
     62 */
     63#define NET_ARP_COUNT           5
     64
     65/** The number of Ethernet messages.
     66 */
     67#define NET_ETH_COUNT           0
     68
     69/** The number of ICMP messages.
     70 */
     71#define NET_ICMP_COUNT          6
     72
     73/** The number of inter-network messages.
     74 */
     75#define NET_IL_COUNT            6
     76
     77/** The number of IP messages.
     78 */
     79#define NET_IP_COUNT            4
     80
     81/** The number of general networking messages.
     82 */
     83#define NET_NET_COUNT           3
     84
     85/** The number of network interface driver messages.
     86 */
     87#define NET_NETIF_COUNT         6
     88
     89/** The number of network interface layer messages.
     90 */
     91#define NET_NIL_COUNT           7
     92
     93/** The number of packet management system messages.
     94 */
     95#define NET_PACKET_COUNT        5
     96
     97/** The number of socket messages.
     98 */
     99#define NET_SOCKET_COUNT        14
     100
     101/** The number of TCP messages.
     102 */
     103#define NET_TCP_COUNT           0
     104
     105/** The number of transport layer messages.
     106 */
     107#define NET_TL_COUNT            1
     108
     109/** The number of UDP messages.
     110 */
     111#define NET_UDP_COUNT           0
     112
     113/*@}*/
     114
     115/** @name Networking message intervals
     116 */
     117/*@{*/
     118
     119/** The first networking message.
     120 */
     121#define NET_FIRST                       2000
     122
     123/** The first network interface layer message.
     124 */
     125#define NET_NETIF_FIRST         NET_FIRST
     126
     127/** The last network interface layer message.
     128 */
     129#define NET_NETIF_LAST          (NET_NETIF_FIRST + NET_NETIF_COUNT)
     130
     131/** The first general networking message.
     132 */
     133#define NET_NET_FIRST           (NET_NETIF_LAST + 0)
     134
     135/** The last general networking message.
     136 */
     137#define NET_NET_LAST            (NET_NET_FIRST + NET_NET_COUNT)
     138
     139/** The first network interface layer message.
     140 */
     141#define NET_NIL_FIRST           (NET_NET_LAST + 0)
     142
     143/** The last network interface layer message.
     144 */
     145#define NET_NIL_LAST            (NET_NIL_FIRST + NET_NIL_COUNT)
     146
     147/** The first Ethernet message.
     148 */
     149#define NET_ETH_FIRST           (NET_NIL_LAST + 0)
     150
     151/** The last Ethernet message.
     152 */
     153#define NET_ETH_LAST            (NET_ETH_FIRST + NET_ETH_COUNT)
     154
     155/** The first inter-network message.
     156 */
     157#define NET_IL_FIRST            (NET_ETH_LAST + 0)
     158
     159/** The last inter-network message.
     160 */
     161#define NET_IL_LAST                     (NET_IL_FIRST + NET_IL_COUNT)
     162
     163/** The first IP message.
     164 */
     165#define NET_IP_FIRST            (NET_IL_LAST + 0)
     166
     167/** The last IP message.
     168 */
     169#define NET_IP_LAST                     (NET_IP_FIRST + NET_IP_COUNT)
     170
     171/** The first ARP message.
     172 */
     173#define NET_ARP_FIRST           (NET_IP_LAST + 0)
     174
     175/** The last ARP message.
     176 */
     177#define NET_ARP_LAST            (NET_ARP_FIRST + NET_ARP_COUNT)
     178
     179/** The first ICMP message.
     180 */
     181#define NET_ICMP_FIRST          (NET_ARP_LAST + 0)
     182
     183/** The last ICMP message.
     184 */
     185#define NET_ICMP_LAST           (NET_ICMP_FIRST + NET_ICMP_COUNT)
     186
     187/** The first ICMP message.
     188 */
     189#define NET_TL_FIRST            (NET_ICMP_LAST + 0)
     190
     191/** The last ICMP message.
     192 */
     193#define NET_TL_LAST                     (NET_TL_FIRST + NET_TL_COUNT)
     194
     195/** The first UDP message.
     196 */
     197#define NET_UDP_FIRST           (NET_TL_LAST + 0)
     198
     199/** The last UDP message.
     200 */
     201#define NET_UDP_LAST            (NET_UDP_FIRST + NET_UDP_COUNT)
     202
     203/** The first TCP message.
     204 */
     205#define NET_TCP_FIRST           (NET_UDP_LAST + 0)
     206
     207/** The last TCP message.
     208 */
     209#define NET_TCP_LAST            (NET_TCP_FIRST + NET_TCP_COUNT)
     210
     211/** The first socket message.
     212 */
     213#define NET_SOCKET_FIRST        (NET_TCP_LAST + 0)
     214
     215/** The last socket message.
     216 */
     217#define NET_SOCKET_LAST         (NET_SOCKET_FIRST + NET_SOCKET_COUNT)
     218
     219/** The first packet management system message.
     220 */
     221#define NET_PACKET_FIRST        (NET_SOCKET_LAST + 0)
     222
     223/** The last packet management system message.
     224 */
     225#define NET_PACKET_LAST         (NET_PACKET_FIRST + NET_PACKET_COUNT)
     226
     227/** The last networking message.
     228 */
     229#define NET_LAST                        NET_PACKET_LAST
     230
     231/** The number of networking messages.
     232 */
     233#define NET_COUNT                       (NET_LAST - NET_FIRST)
     234
    235235/** Returns a value indicating whether the IPC call is a generic networking message.
    236236 *  @param[in] call The IPC call to be checked.
     
    238238#define IS_NET_MESSAGE(call)                    IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_FIRST, NET_LAST)
    239239
     240/** Returns a value indicating whether the IPC call is an ARP message.
     241 *  @param[in] call The IPC call to be checked.
     242 */
     243#define IS_NET_ARP_MESSAGE(call)                IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ARP_FIRST, NET_ARP_LAST)
     244
     245/** Returns a value indicating whether the IPC call is an Ethernet message.
     246 *  @param[in] call The IPC call to be checked.
     247 */
     248#define IS_NET_ETH_MESSAGE(call)                IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ETH_FIRST, NET_ETH_LAST)
     249
     250/** Returns a value indicating whether the IPC call is an ICMP message.
     251 *  @param[in] call The IPC call to be checked.
     252 */
     253#define IS_NET_ICMP_MESSAGE(call)               IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ICMP_FIRST, NET_ICMP_LAST)
     254
     255/** Returns a value indicating whether the IPC call is an inter-network layer message.
     256 *  @param[in] call The IPC call to be checked.
     257 */
     258#define IS_NET_IL_MESSAGE(call)         IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_IL_FIRST, NET_IL_LAST)
     259
     260/** Returns a value indicating whether the IPC call is an IP message.
     261 *  @param[in] call The IPC call to be checked.
     262 */
     263#define IS_NET_IP_MESSAGE(call)         IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_IP_FIRST, NET_IP_LAST)
     264
    240265/** Returns a value indicating whether the IPC call is a generic networking message.
    241266 *  @param[in] call The IPC call to be checked.
     
    248273#define IS_NET_NIL_MESSAGE(call)                IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_NIL_FIRST, NET_NIL_LAST)
    249274
    250 /** Returns a value indicating whether the IPC call is an Ethernet message.
    251  *  @param[in] call The IPC call to be checked.
    252  */
    253 #define IS_NET_ETH_MESSAGE(call)                IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ETH_FIRST, NET_ETH_LAST)
    254 
    255 /** Returns a value indicating whether the IPC call is an inter-network layer message.
    256  *  @param[in] call The IPC call to be checked.
    257  */
    258 #define IS_NET_IL_MESSAGE(call)         IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_IL_FIRST, NET_IL_LAST)
    259 
    260 /** Returns a value indicating whether the IPC call is an IP message.
    261  *  @param[in] call The IPC call to be checked.
    262  */
    263 #define IS_NET_IP_MESSAGE(call)         IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_IP_FIRST, NET_IP_LAST)
    264 
    265 /** Returns a value indicating whether the IPC call is an ARP message.
    266  *  @param[in] call The IPC call to be checked.
    267  */
    268 #define IS_NET_ARP_MESSAGE(call)                IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ARP_FIRST, NET_ARP_LAST)
    269 
    270 /** Returns a value indicating whether the IPC call is an ICMP message.
    271  *  @param[in] call The IPC call to be checked.
    272  */
    273 #define IS_NET_ICMP_MESSAGE(call)               IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ICMP_FIRST, NET_ICMP_LAST)
     275/** Returns a value indicating whether the IPC call is a packet manaagement system message.
     276 *  @param[in] call The IPC call to be checked.
     277 */
     278#define IS_NET_PACKET_MESSAGE(call)     IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_PACKET_FIRST, NET_PACKET_LAST)
     279
     280/** Returns a value indicating whether the IPC call is a socket message.
     281 *  @param[in] call The IPC call to be checked.
     282 */
     283#define IS_NET_SOCKET_MESSAGE(call)     IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_SOCKET_FIRST, NET_SOCKET_LAST)
     284
     285/** Returns a value indicating whether the IPC call is a TCP message.
     286 *  @param[in] call The IPC call to be checked.
     287 */
     288#define IS_NET_TCP_MESSAGE(call)                IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_TCP_FIRST, NET_TCP_LAST)
    274289
    275290/** Returns a value indicating whether the IPC call is a transport layer message.
     
    283298#define IS_NET_UDP_MESSAGE(call)                IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_UDP_FIRST, NET_UDP_LAST)
    284299
    285 /** Returns a value indicating whether the IPC call is a TCP message.
    286  *  @param[in] call The IPC call to be checked.
    287  */
    288 #define IS_NET_TCP_MESSAGE(call)                IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_TCP_FIRST, NET_TCP_LAST)
    289 
    290 /** Returns a value indicating whether the IPC call is a socket message.
    291  *  @param[in] call The IPC call to be checked.
    292  */
    293 #define IS_NET_SOCKET_MESSAGE(call)     IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_SOCKET_FIRST, NET_SOCKET_LAST)
    294 
    295 /** Returns a value indicating whether the IPC call is a packet manaagement system message.
    296  *  @param[in] call The IPC call to be checked.
    297  */
    298 #define IS_NET_PACKET_MESSAGE(call)     IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_PACKET_FIRST, NET_PACKET_LAST)
    299 
    300 /*@}*/
    301 
    302 /** @name Networking specific message parameters definitions
    303  */
    304 /*@{*/
    305 
    306 /** Returns the device identifier message parameter.
     300/*@}*/
     301
     302/** @name Networking specific message arguments definitions
     303 */
     304/*@{*/
     305
     306/** @name First arguments
     307 */
     308/*@{*/
     309
     310/** Returns the device identifier message argument.
    307311 *  @param[in] call The message call structure.
    308312 */
    309313#define IPC_GET_DEVICE(call)            (device_id_t) IPC_GET_ARG1(*call)
    310314
    311 /** Returns the packet identifier message parameter.
     315/*@}*/
     316
     317/** @name Second arguments
     318 */
     319/*@{*/
     320
     321/** Returns the packet identifier message argument.
    312322 *  @param[in] call The message call structure.
    313323 */
    314324#define IPC_GET_PACKET(call)            (packet_id_t) IPC_GET_ARG2(*call)
    315325
    316 /** Returns the count message parameter.
     326/** Returns the count message argument.
    317327 *  @param[in] call The message call structure.
    318328 */
    319329#define IPC_GET_COUNT(call)             (size_t) IPC_GET_ARG2(*call)
    320330
    321 /** Returns the device state message parameter.
     331/** Returns the device state message argument.
    322332 *  @param[in] call The message call structure.
    323333 */
    324334#define IPC_GET_STATE(call)             (device_state_t) IPC_GET_ARG2(*call)
    325335
    326 /** Returns the maximum transmission unit message parameter.
     336/** Returns the maximum transmission unit message argument.
    327337 *  @param[in] call The message call structure.
    328338 */
    329339#define IPC_GET_MTU(call)                       (size_t) IPC_GET_ARG2(*call)
    330340
    331 /** Returns the device driver service message parameter.
     341/*@}*/
     342
     343/** @name Third arguments
     344 */
     345/*@{*/
     346
     347/** Returns the device driver service message argument.
    332348 *  @param[in] call The message call structure.
    333349 */
    334350#define IPC_GET_SERVICE(call)           (services_t) IPC_GET_ARG3(*call)
    335351
    336 /** Returns the target service message parameter.
     352/** Returns the target service message argument.
    337353 *  @param[in] call The message call structure.
    338354 */
    339355#define IPC_GET_TARGET(call)            (services_t) IPC_GET_ARG3(*call)
    340356
    341 /** Returns the sender service message parameter.
     357/** Returns the sender service message argument.
    342358 *  @param[in] call The message call structure.
    343359 */
    344360#define IPC_GET_SENDER(call)            (services_t) IPC_GET_ARG3(*call)
    345361
    346 /** Returns the error service message parameter.
     362/*@}*/
     363
     364/** @name Fourth arguments
     365 */
     366/*@{*/
     367
     368/** Returns the error service message argument.
    347369 *  @param[in] call The message call structure.
    348370 */
    349371#define IPC_GET_ERROR(call)             (services_t) IPC_GET_ARG4(*call)
    350372
    351 /** Returns the phone message parameter.
     373/*@}*/
     374
     375/** @name Fifth arguments
     376 */
     377/*@{*/
     378
     379/** Returns the phone message argument.
    352380 *  @param[in] call The message call structure.
    353381 */
    354382#define IPC_GET_PHONE(call)             (int) IPC_GET_ARG5(*call)
     383
     384/*@}*/
     385
     386/** @name First answers
     387 */
     388/*@{*/
    355389
    356390/** Sets the device identifier in the message answer.
     
    364398#define IPC_SET_ADDR(answer)            ((size_t *) &IPC_GET_ARG1(*answer))
    365399
     400/*@}*/
     401
     402/** @name Second answers
     403 */
     404/*@{*/
     405
    366406/** Sets the minimum prefix size in the message answer.
    367407 *  @param[out] answer The message answer structure.
     
    369409#define IPC_SET_PREFIX(answer)  ((size_t *) &IPC_GET_ARG2(*answer))
    370410
     411/*@}*/
     412
     413/** @name Third answers
     414 */
     415/*@{*/
     416
    371417/** Sets the maximum content size in the message answer.
    372418 *  @param[out] answer The message answer structure.
     
    374420#define IPC_SET_CONTENT(answer) ((size_t *) &IPC_GET_ARG3(*answer))
    375421
     422/*@}*/
     423
     424/** @name Fourth answers
     425 */
     426/*@{*/
     427
    376428/** Sets the minimum suffix size in the message answer.
    377429 *  @param[out] answer The message answer structure.
     
    380432
    381433/*@}*/
     434
     435/*@}*/
     436
     437/** Notifies the module about the device state change.
     438 *  @param[in] phone The service module phone.
     439 *  @param[in] message The service specific message.
     440 *  @param[in] device_id The device identifier.
     441 *  @param[in] state The new device state.
     442 *  @param[in] target The target module service.
     443 *  @returns EOK on success.
     444 */
     445static inline int generic_device_state_msg(int phone, int message, device_id_t device_id, int state, services_t target){
     446        async_msg_3(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) state, target);
     447        return EOK;
     448}
     449
     450/** Notifies a module about the device.
     451 *  @param[in] phone The service module phone.
     452 *  @param[in] message The service specific message.
     453 *  @param[in] device_id The device identifier.
     454 *  @param[in] arg2 The second argument of the message.
     455 *  @param[in] service The device module service.
     456 *  @returns EOK on success.
     457 *  @returns Other error codes as defined for the specific service message.
     458 */
     459static inline int generic_device_req(int phone, int message, device_id_t device_id, int arg2, services_t service){
     460        return (int) async_req_3_0(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) arg2, (ipcarg_t) service);
     461}
    382462
    383463/** Returns the address.
     
    399479                return EBADMEM;
    400480        }
     481
     482        // request the address
    401483        message_id = async_send_1(phone, (ipcarg_t) message, (ipcarg_t) device_id, NULL);
    402484        string = measured_strings_return(phone, address, data, 1);
    403485        async_wait_for(message_id, &result);
     486
     487        // if not successful
    404488        if((string == EOK) && (result != EOK)){
     489                // clear the data
    405490                free(*address);
    406491                free(*data);
    407492        }
    408493        return (int) result;
     494}
     495
     496/** Returns the device packet dimension for sending.
     497 *  @param[in] phone The service module phone.
     498 *  @param[in] message The service specific message.
     499 *  @param[in] device_id The device identifier.
     500 *  @param[out] packet_dimension The packet dimension.
     501 *  @returns EOK on success.
     502 *  @returns EBADMEM if the packet_dimension parameter is NULL.
     503 *  @returns Other error codes as defined for the specific service message.
     504 */
     505static inline int generic_packet_size_req(int phone, int message, device_id_t device_id, packet_dimension_ref packet_dimension){
     506        ipcarg_t result;
     507        ipcarg_t prefix;
     508        ipcarg_t content;
     509        ipcarg_t suffix;
     510        ipcarg_t addr_len;
     511
     512        if(! packet_dimension){
     513                return EBADMEM;
     514        }
     515        result = async_req_1_4(phone, (ipcarg_t) message, (ipcarg_t) device_id, &addr_len, &prefix, &content, &suffix);
     516        packet_dimension->prefix = (size_t) prefix;
     517        packet_dimension->content = (size_t) content;
     518        packet_dimension->suffix = (size_t) suffix;
     519        packet_dimension->addr_len = (size_t) addr_len;
     520        return (int) result;
     521}
     522
     523/** Passes the packet queue to the module.
     524 *  @param[in] phone The service module phone.
     525 *  @param[in] message The service specific message.
     526 *  @param[in] device_id The device identifier.
     527 *  @param[in] packet_id The received packet or the received packet queue identifier.
     528 *  @param[in] target The target module service.
     529 *  @param[in] error The error module service.
     530 *  @returns EOK on success.
     531 */
     532static inline int generic_received_msg(int phone, int message, device_id_t device_id, packet_id_t packet_id, services_t target, services_t error){
     533        if(error){
     534                async_msg_4(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) packet_id, (ipcarg_t) target, (ipcarg_t) error);
     535        }else{
     536                async_msg_3(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) packet_id, (ipcarg_t) target);
     537        }
     538        return EOK;
     539}
     540
     541/** Sends the packet queue.
     542 *  @param[in] phone The service module phone.
     543 *  @param[in] message The service specific message.
     544 *  @param[in] device_id The device identifier.
     545 *  @param[in] packet_id The packet or the packet queue identifier.
     546 *  @param[in] sender The sending module service.
     547 *  @param[in] error The error module service.
     548 *  @returns EOK on success.
     549 */
     550static inline int generic_send_msg(int phone, int message, device_id_t device_id, packet_id_t packet_id, services_t sender, services_t error){
     551        if(error){
     552                async_msg_4(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) packet_id, (ipcarg_t) sender, (ipcarg_t) error);
     553        }else{
     554                async_msg_3(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) packet_id, (ipcarg_t) sender);
     555        }
     556        return EOK;
    409557}
    410558
     
    436584                return EBADMEM;
    437585        }
     586
     587        // request the translation
    438588        message_id = async_send_3(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) count, (ipcarg_t) service, NULL);
    439589        measured_strings_send(phone, configuration, count);
    440590        string = measured_strings_return(phone, translation, data, count);
    441591        async_wait_for(message_id, &result);
     592
     593        // if not successful
    442594        if((string == EOK) && (result != EOK)){
     595                // clear the data
    443596                free(*translation);
    444597                free(*data);
    445598        }
     599
    446600        return (int) result;
    447601}
    448602
    449 /** Sends the packet queue.
    450  *  @param[in] phone The service module phone.
    451  *  @param[in] message The service specific message.
    452  *  @param[in] device_id The device identifier.
    453  *  @param[in] packet_id The packet or the packet queue identifier.
    454  *  @param[in] sender The sending module service.
    455  *  @param[in] error The error module service.
    456  *  @returns EOK on success.
    457  */
    458 static inline int generic_send_msg(int phone, int message, device_id_t device_id, packet_id_t packet_id, services_t sender, services_t error){
    459         if(error){
    460                 async_msg_4(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) packet_id, (ipcarg_t) sender, (ipcarg_t) error);
    461         }else{
    462                 async_msg_3(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) packet_id, (ipcarg_t) sender);
    463         }
    464         return EOK;
    465 }
    466 
    467 /** Returns the device packet dimension for sending.
    468  *  @param[in] phone The service module phone.
    469  *  @param[in] message The service specific message.
    470  *  @param[in] device_id The device identifier.
    471  *  @param[out] packet_dimension The packet dimension.
    472  *  @returns EOK on success.
    473  *  @returns EBADMEM if the packet_dimension parameter is NULL.
    474  *  @returns Other error codes as defined for the specific service message.
    475  */
    476 static inline int generic_packet_size_req(int phone, int message, device_id_t device_id, packet_dimension_ref packet_dimension){
    477         ipcarg_t result;
    478         ipcarg_t prefix;
    479         ipcarg_t content;
    480         ipcarg_t suffix;
    481         ipcarg_t addr_len;
    482 
    483         if(! packet_dimension){
    484                 return EBADMEM;
    485         }
    486         result = async_req_1_4(phone, (ipcarg_t) message, (ipcarg_t) device_id, &addr_len, &prefix, &content, &suffix);
    487         packet_dimension->prefix = (size_t) prefix;
    488         packet_dimension->content = (size_t) content;
    489         packet_dimension->suffix = (size_t) suffix;
    490         packet_dimension->addr_len = (size_t) addr_len;
    491         return (int) result;
    492 }
    493 
    494 /** Notifies the module about the device state change.
    495  *  @param[in] phone The service module phone.
    496  *  @param[in] message The service specific message.
    497  *  @param[in] device_id The device identifier.
    498  *  @param[in] state The new device state.
    499  *  @param[in] target The target module service.
    500  *  @returns EOK on success.
    501  */
    502 static inline int generic_device_state_msg(int phone, int message, device_id_t device_id, int state, services_t target){
    503         async_msg_3(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) state, target);
    504         return EOK;
    505 }
    506 
    507 /** Passes the packet queue to the module.
    508  *  @param[in] phone The service module phone.
    509  *  @param[in] message The service specific message.
    510  *  @param[in] device_id The device identifier.
    511  *  @param[in] packet_id The received packet or the received packet queue identifier.
    512  *  @param[in] target The target module service.
    513  *  @param[in] error The error module service.
    514  *  @returns EOK on success.
    515  */
    516 static inline int generic_received_msg(int phone, int message, device_id_t device_id, packet_id_t packet_id, services_t target, services_t error){
    517         if(error){
    518                 async_msg_4(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) packet_id, (ipcarg_t) target, (ipcarg_t) error);
    519         }else{
    520                 async_msg_3(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) packet_id, (ipcarg_t) target);
    521         }
    522         return EOK;
    523 }
    524 
    525 /** Notifies a module about the device.
    526  *  @param[in] phone The service module phone.
    527  *  @param[in] message The service specific message.
    528  *  @param[in] device_id The device identifier.
    529  *  @param[in] arg2 The second argument of the message.
    530  *  @param[in] service The device module service.
    531  *  @returns EOK on success.
    532  *  @returns Other error codes as defined for the specific service message.
    533  */
    534 static inline int generic_device_req(int phone, int message, device_id_t device_id, int arg2, services_t service){
    535         return (int) async_req_3_0(phone, (ipcarg_t) message, (ipcarg_t) device_id, (ipcarg_t) arg2, (ipcarg_t) service);
    536 }
    537 
    538603#endif
    539604
Note: See TracChangeset for help on using the changeset viewer.