base/include/rtai_msg.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2002 POSEIDON CONTROLS INC <pcloutier@poseidoncontrols.com>
00003  *                    Paolo Mantegazza <mantegazza@aero.polimi.it>
00004  *
00005  * This program is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU General Public License as
00007  * published by the Free Software Foundation; either version 2 of the
00008  * License, or (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00018  */
00019 
00020 #ifndef _RTAI_MSG_H
00021 #define _RTAI_MSG_H
00022 
00023 #include <rtai_types.h>
00024 
00025 #define MSG_ERR ((RT_TASK *)RTE_OBJINV)
00026 
00027 struct rt_task_struct;
00028 struct QueueBlock;
00029 struct QueueHook;
00030 
00031 #ifdef __KERNEL__
00032 
00033 typedef struct t_msgcb { /* Message control block structure. */
00034     int  cmd;
00035     void *sbuf;
00036     size_t sbytes;
00037     void *rbuf;
00038     size_t rbytes;
00039 } MSGCB;
00040 
00041 #define PROXY_MIN_STACK_SIZE 2048
00042 
00043 struct proxy_t {
00044 
00045     struct rt_task_struct *receiver;
00046     int nmsgs,
00047     nbytes;
00048     char *msg;
00049 };
00050 
00051 #define SYNCMSG          0
00052 #define PROXY           -1
00053 
00054 #ifdef __cplusplus
00055 extern "C" {
00056 #endif /* __cplusplus */
00057 
00058 int __rtai_msg_init(void);
00059 
00060 void __rtai_msg_exit(void);
00061 
00062 RTAI_SYSCALL_MODE struct rt_task_struct *rt_send(struct rt_task_struct *task,
00063                    unsigned long msg);
00064 
00065 RTAI_SYSCALL_MODE struct rt_task_struct *rt_send_if(struct rt_task_struct *task,
00066                   unsigned long msg);
00067 
00068 RTAI_SYSCALL_MODE struct rt_task_struct *rt_send_until(struct rt_task_struct *task,
00069                      unsigned long msg,
00070                      RTIME time);
00071     
00072 RTAI_SYSCALL_MODE struct rt_task_struct *rt_send_timed(struct rt_task_struct *task,
00073                      unsigned long msg,
00074                      RTIME delay);
00075 
00076 RTAI_SYSCALL_MODE struct rt_task_struct *rt_evdrp(struct rt_task_struct *task,
00077                 void *msg);
00078 
00079 RTAI_SYSCALL_MODE struct rt_task_struct *rt_receive(struct rt_task_struct *task,
00080                   void *msg);
00081 
00082 RTAI_SYSCALL_MODE struct rt_task_struct *rt_receive_if(struct rt_task_struct *task,
00083                      void *msg);
00084 
00085 RTAI_SYSCALL_MODE struct rt_task_struct *rt_receive_until(struct rt_task_struct *task,
00086                     void *msg,
00087                     RTIME time);
00088 
00089 RTAI_SYSCALL_MODE struct rt_task_struct *rt_receive_timed(struct rt_task_struct *task,
00090                     void *msg,
00091                     RTIME delay);
00092 
00093 RTAI_SYSCALL_MODE struct rt_task_struct *rt_rpc(struct rt_task_struct *task,
00094                   unsigned long to_do,
00095                   void *result);
00096 
00097 RTAI_SYSCALL_MODE struct rt_task_struct *rt_rpc_if(struct rt_task_struct *task,
00098                  unsigned long to_do,
00099                  void *result);
00100 
00101 RTAI_SYSCALL_MODE struct rt_task_struct *rt_rpc_until(struct rt_task_struct *task,
00102                     unsigned long to_do,
00103                     void *result,
00104                     RTIME time);
00105 
00106 RTAI_SYSCALL_MODE struct rt_task_struct *rt_rpc_timed(struct rt_task_struct *task,
00107                     unsigned long to_do,
00108                     void *result,
00109                     RTIME delay);
00110 
00111 RTAI_SYSCALL_MODE int rt_isrpc(struct rt_task_struct *task);
00112 
00113 RTAI_SYSCALL_MODE struct rt_task_struct *rt_return(struct rt_task_struct *task,
00114                  unsigned long result);
00115 
00116 RTAI_SYSCALL_MODE struct rt_task_struct *rt_rpcx(struct rt_task_struct *task,
00117                    void *smsg,
00118                    void *rmsg,
00119                    int ssize,
00120                    int rsize);
00121 
00122 RTAI_SYSCALL_MODE struct rt_task_struct *rt_rpcx_if(struct rt_task_struct *task,
00123                   void *smsg,
00124                   void *rmsg,
00125                   int ssize,
00126                   int rsize);
00127 
00128 RTAI_SYSCALL_MODE struct rt_task_struct *rt_rpcx_until(struct rt_task_struct *task,
00129                      void *smsg,
00130                      void *rmsg,
00131                      int ssize,
00132                      int rsize,
00133                      RTIME time);
00134 
00135 RTAI_SYSCALL_MODE struct rt_task_struct *rt_rpcx_timed(struct rt_task_struct *task,
00136                      void *smsg,
00137                      void *rmsg,
00138                      int ssize,
00139                      int rsize,
00140                      RTIME delay);
00141 
00142 RTAI_SYSCALL_MODE struct rt_task_struct *rt_sendx(struct rt_task_struct *task,
00143                 void *msg,
00144                 int size);
00145 
00146 RTAI_SYSCALL_MODE struct rt_task_struct *rt_sendx_if(struct rt_task_struct *task,
00147                    void *msg,
00148                    int size);
00149 
00150 RTAI_SYSCALL_MODE struct rt_task_struct *rt_sendx_until(struct rt_task_struct *task,
00151                       void *msg,
00152                       int size,
00153                       RTIME time);
00154 
00155 RTAI_SYSCALL_MODE struct rt_task_struct *rt_sendx_timed(struct rt_task_struct *task,
00156                       void *msg,
00157                       int size,
00158                       RTIME delay);
00159 
00160 RTAI_SYSCALL_MODE struct rt_task_struct *rt_returnx(struct rt_task_struct *task,
00161                   void *msg,
00162                   int size);
00163 
00164 #define rt_isrpcx(task) rt_isrpc(task)
00165 
00166 RTAI_SYSCALL_MODE struct rt_task_struct *rt_evdrpx(struct rt_task_struct *task,
00167                  void *msg,
00168                  int size,
00169                  long *len);
00170 
00171 RTAI_SYSCALL_MODE struct rt_task_struct *rt_receivex(struct rt_task_struct *task,
00172                    void *msg,
00173                    int size,
00174                    long *len);
00175 
00176 RTAI_SYSCALL_MODE struct rt_task_struct *rt_receivex_if(struct rt_task_struct *task,
00177                       void *msg,
00178                       int size,
00179                       long *len);
00180 
00181 RTAI_SYSCALL_MODE struct rt_task_struct *rt_receivex_until(struct rt_task_struct *task,
00182                      void *msg,
00183                      int size,
00184                      long *len,
00185                      RTIME time);
00186 
00187 RTAI_SYSCALL_MODE struct rt_task_struct *rt_receivex_timed(struct rt_task_struct *task,
00188                      void *msg,
00189                      int size,
00190                      long *len,
00191                      RTIME delay);
00192 
00193 struct rt_task_struct *__rt_proxy_attach(void (*func)(long),
00194                      struct rt_task_struct *task,
00195                      void *msg,
00196                      int nbytes,
00197                      int priority);
00198 
00199 RTAI_SYSCALL_MODE struct rt_task_struct *rt_proxy_attach(struct rt_task_struct *task,
00200                        void *msg,
00201                        int nbytes,
00202                        int priority);
00203 
00204 RTAI_SYSCALL_MODE int rt_proxy_detach(struct rt_task_struct *proxy);
00205 
00206 RTAI_SYSCALL_MODE struct rt_task_struct *rt_trigger(struct rt_task_struct *proxy);
00207 
00208 #define exist(name)  rt_get_adr(nam2num(name))
00209 
00210 RTAI_SYSCALL_MODE int rt_Send(pid_t pid,
00211         void *smsg,
00212         void *rmsg,
00213         size_t ssize,
00214         size_t rsize);
00215 
00216 RTAI_SYSCALL_MODE pid_t rt_Receive(pid_t pid,
00217          void *msg,
00218          size_t maxsize,
00219          size_t *msglen);
00220 
00221 RTAI_SYSCALL_MODE pid_t rt_Creceive(pid_t pid,
00222           void *msg,
00223           size_t maxsize,
00224           size_t *msglen,
00225           RTIME delay);
00226 
00227 RTAI_SYSCALL_MODE int rt_Reply(pid_t pid,
00228          void *msg,
00229          size_t size);
00230 
00231 RTAI_SYSCALL_MODE pid_t rt_Proxy_attach(pid_t pid,
00232               void *msg,
00233               int nbytes,
00234               int priority);
00235 
00236 RTAI_SYSCALL_MODE int rt_Proxy_detach(pid_t pid);
00237 
00238 RTAI_SYSCALL_MODE pid_t rt_Trigger(pid_t pid);
00239 
00240 RTAI_SYSCALL_MODE pid_t rt_Name_attach(const char *name);
00241 
00242 RTAI_SYSCALL_MODE pid_t rt_Name_locate(const char *host,
00243              const char *name);
00244 
00245 RTAI_SYSCALL_MODE int rt_Name_detach(pid_t pid);
00246 
00247 #ifdef __cplusplus
00248 }
00249 #endif /* __cplusplus */
00250 
00251 #else /* !__KERNEL__ */
00252 
00253 #include <rtai_lxrt.h>
00254 
00255 #ifdef __cplusplus
00256 extern "C" {
00257 #endif /* __cplusplus */
00258 
00259 RTAI_PROTO(struct rt_task_struct *,rt_send,(struct rt_task_struct *task, unsigned long msg))
00260 {
00261     struct { struct rt_task_struct *task; unsigned long msg; } arg = { task, msg };
00262     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, SENDMSG, &arg).v[LOW];
00263 }
00264 
00265 RTAI_PROTO(struct rt_task_struct *,rt_send_if,(struct rt_task_struct *task, unsigned long msg))
00266 {
00267     struct { struct rt_task_struct *task; unsigned long msg; } arg = { task, msg };
00268     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, SEND_IF, &arg).v[LOW];
00269 }
00270 
00271 RTAI_PROTO(struct rt_task_struct *,rt_send_until,(struct rt_task_struct *task, unsigned long msg, RTIME time))
00272 {
00273     struct { struct rt_task_struct *task; unsigned long msg; RTIME time; } arg = { task, msg, time };
00274     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, SEND_UNTIL, &arg).v[LOW];
00275 }
00276 
00277 RTAI_PROTO(struct rt_task_struct *,rt_send_timed,(struct rt_task_struct *task, unsigned long msg, RTIME delay))
00278 {
00279     struct { struct rt_task_struct *task; unsigned long msg; RTIME delay; } arg = { task, msg, delay };
00280     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, SEND_TIMED, &arg).v[LOW];
00281 }
00282 
00283 RTAI_PROTO(struct rt_task_struct *,rt_evdrp,(struct rt_task_struct *task, void *msg))
00284 {
00285     struct { struct rt_task_struct *task; void *msg; } arg = { task, msg };
00286     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, EVDRP, &arg).v[LOW];
00287 }
00288 
00289 RTAI_PROTO(struct rt_task_struct *,rt_receive,(struct rt_task_struct *task, void *msg))
00290 {
00291     struct { struct rt_task_struct *task; void *msg; } arg = { task, msg };
00292     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RECEIVEMSG, &arg).v[LOW];
00293 }
00294 
00295 RTAI_PROTO(struct rt_task_struct *,rt_receive_if,(struct rt_task_struct *task, void *msg))
00296 {
00297     struct { struct rt_task_struct *task; void *msg; } arg = { task, msg };
00298     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RECEIVE_IF, &arg).v[LOW];
00299 }
00300 
00301 RTAI_PROTO(struct rt_task_struct *,rt_receive_until,(struct rt_task_struct *task, void *msg, RTIME time))
00302 {
00303     struct { struct rt_task_struct *task; void *msg; RTIME time; } arg = { task, msg, time };
00304     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RECEIVE_UNTIL, &arg).v[LOW];
00305 }
00306 
00307 RTAI_PROTO(struct rt_task_struct *,rt_receive_timed,(struct rt_task_struct *task, void *msg, RTIME delay))
00308 {
00309     struct { struct rt_task_struct *task; void *msg; RTIME delay; } arg = { task, msg, delay };
00310     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RECEIVE_TIMED, &arg).v[LOW];
00311 }
00312 
00313 RTAI_PROTO(struct rt_task_struct *,rt_rpc,(struct rt_task_struct *task, unsigned long to_do, void *result))
00314 {
00315     struct { struct rt_task_struct *task; unsigned long to_do; void *result; } arg = { task, to_do, result };
00316     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RPCMSG, &arg).v[LOW];
00317 }
00318 
00319 RTAI_PROTO(struct rt_task_struct *,rt_rpc_if,(struct rt_task_struct *task, unsigned long to_do, void *result))
00320 {
00321     struct { struct rt_task_struct *task; unsigned long to_do; void *result; } arg = { task, to_do, result };
00322     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RPC_IF, &arg).v[LOW];
00323 }
00324 
00325 RTAI_PROTO(struct rt_task_struct *,rt_rpc_until,(struct rt_task_struct *task, unsigned long to_do, void *result, RTIME time))
00326 {
00327     struct { struct rt_task_struct *task; unsigned long to_do; void *result; RTIME time; } arg = { task, to_do, result, time };
00328     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RPC_UNTIL, &arg).v[LOW];
00329 }
00330 
00331 RTAI_PROTO(struct rt_task_struct *,rt_rpc_timed,(struct rt_task_struct *task, unsigned long to_do, void *result, RTIME delay))
00332 {
00333     struct { struct rt_task_struct *task; unsigned long to_do; void *result; RTIME delay; } arg = { task, to_do, result, delay };
00334     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RPC_TIMED, &arg).v[LOW];
00335 }
00336 
00337 RTAI_PROTO(int, rt_isrpc,(struct rt_task_struct *task))
00338 {
00339     struct { struct rt_task_struct *task; } arg = { task };
00340     return (int)rtai_lxrt(BIDX, SIZARG, ISRPC, &arg).i[LOW];
00341 }
00342 
00343 RTAI_PROTO(struct rt_task_struct *,rt_return,(struct rt_task_struct *task, unsigned long result))
00344 {
00345     struct { struct rt_task_struct *task; unsigned long result; } arg = { task, result };
00346     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RETURNMSG, &arg).v[LOW];
00347 }
00348 
00349 RTAI_PROTO(struct rt_task_struct *,rt_rpcx,(struct rt_task_struct *task, void *smsg, void *rmsg, int ssize, int rsize))
00350 {
00351     struct { struct rt_task_struct *task; void *smsg; void *rmsg; long ssize; long rsize; } arg = { task, smsg, rmsg, ssize, rsize };
00352     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RPCX, &arg).v[LOW];
00353 }
00354 
00355 RTAI_PROTO(struct rt_task_struct *,rt_rpcx_if,(struct rt_task_struct *task, void *smsg, void *rmsg, int ssize, int rsize))
00356 {
00357     struct { struct rt_task_struct *task; void *smsg; void *rmsg; long ssize; long rsize; } arg = { task, smsg, rmsg, ssize, rsize };
00358     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RPCX_IF, &arg).v[LOW];
00359 }
00360 
00361 RTAI_PROTO(struct rt_task_struct *,rt_rpcx_until,(struct rt_task_struct *task, void *smsg, void *rmsg, int ssize, int rsize, RTIME time))
00362 {
00363     struct { struct rt_task_struct *task; void *smsg; void *rmsg; long ssize; long rsize; RTIME time; } arg = { task, smsg, rmsg, ssize, rsize, time };
00364     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RPCX_UNTIL, &arg).v[LOW];
00365 }
00366 
00367 RTAI_PROTO(struct rt_task_struct *,rt_rpcx_timed,(struct rt_task_struct *task, void *smsg, void *rmsg, int ssize, int rsize, RTIME delay))
00368 {
00369     struct { struct rt_task_struct *task; void *smsg; void *rmsg; long ssize; long rsize; RTIME delay; } arg = { task, smsg, rmsg, ssize, rsize, delay };
00370     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RPCX_TIMED, &arg).v[LOW];
00371 }
00372 
00373 RTAI_PROTO(struct rt_task_struct *,rt_sendx,(struct rt_task_struct *task, void *msg, int size))
00374 {
00375     struct { struct rt_task_struct *task; void *msg; long size; } arg = { task, msg, size };
00376     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, SENDX, &arg).v[LOW];
00377 }
00378 
00379 RTAI_PROTO(struct rt_task_struct *,rt_sendx_if,(struct rt_task_struct *task, void *msg, int size))
00380 {
00381     struct { struct rt_task_struct *task; void *msg; long size; } arg = { task, msg, size };
00382     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, SENDX_IF, &arg).v[LOW];
00383 }
00384 
00385 RTAI_PROTO(struct rt_task_struct *,rt_sendx_until,(struct rt_task_struct *task, void *msg, int size, RTIME time))
00386 {
00387     struct { struct rt_task_struct *task; void *msg; long size; RTIME time; } arg = { task, msg, size, time };
00388     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, SENDX_UNTIL, &arg).v[LOW];
00389 }
00390 
00391 RTAI_PROTO(struct rt_task_struct *,rt_sendx_timed,(struct rt_task_struct *task, void *msg, long size, RTIME delay))
00392 {
00393     struct { struct rt_task_struct *task; void *msg; long size; RTIME delay; } arg = { task, msg, size, delay };
00394     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, SENDX_TIMED, &arg).v[LOW];
00395 }
00396 
00397 RTAI_PROTO(struct rt_task_struct *,rt_returnx,(struct rt_task_struct *task, void *msg, int size))
00398 {
00399     struct { struct rt_task_struct *task; void *msg; long size; } arg = { task, msg, size };
00400     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RETURNX, &arg).v[LOW];
00401 }
00402 
00403 #define rt_isrpcx(task)  rt_isrpc(task)
00404 
00405 RTAI_PROTO(struct rt_task_struct *,rt_evdrpx,(struct rt_task_struct *task, void *msg, int size, long *len))
00406 {
00407     struct { struct rt_task_struct *task; void *msg; long size; long *len; } arg = { task, msg, size, len };
00408     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, EVDRPX, &arg).v[LOW];
00409 }
00410 
00411 RTAI_PROTO(struct rt_task_struct *,rt_receivex,(struct rt_task_struct *task, void *msg, int size, long *len))
00412 {
00413     struct { struct rt_task_struct *task; void *msg; long size; long *len; } arg = { task, msg, size, len };
00414     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RECEIVEX, &arg).v[LOW];
00415 }
00416 
00417 RTAI_PROTO(struct rt_task_struct *,rt_receivex_if,(struct rt_task_struct *task, void *msg, int size, long *len))
00418 {
00419     struct { struct rt_task_struct *task; void *msg; long size; long *len; } arg = { task, msg, size, len };
00420     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RECEIVEX_IF, &arg).v[LOW];
00421 }
00422 
00423 RTAI_PROTO(struct rt_task_struct *,rt_receivex_until,(struct rt_task_struct *task, void *msg, int size, long *len, RTIME time))
00424 {
00425     struct { struct rt_task_struct *task; void *msg; long size; long *len; RTIME time; } arg = { task, msg, size, len, time };
00426     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RECEIVEX_UNTIL, &arg).v[LOW];
00427 }
00428 
00429 RTAI_PROTO(struct rt_task_struct *,rt_receivex_timed,(struct rt_task_struct *task, void *msg, int size, long *len, RTIME delay))
00430 {
00431     struct { struct rt_task_struct *task; void *msg; long size; long *len; RTIME delay; } arg = { task, msg, size, len, delay };
00432     return (struct rt_task_struct *)rtai_lxrt(BIDX, SIZARG, RECEIVEX_TIMED, &arg).v[LOW];
00433 }
00434 
00435 RTAI_PROTO(struct rt_task_struct *,rt_proxy_attach,(struct rt_task_struct *proxy, void *msg, int nbytes, int priority))
00436 {
00437     struct { struct rt_task_struct *proxy; void *msg; long nbytes, priority;} arg = { proxy, msg, nbytes, priority };
00438     return (struct rt_task_struct *) rtai_lxrt(BIDX, SIZARG, PROXY_ATTACH, &arg).v[LOW];
00439 }
00440 
00441 RTAI_PROTO(int, rt_proxy_detach,(struct rt_task_struct *proxy))
00442 {
00443     struct { struct rt_task_struct *proxy; } arg = { proxy };
00444     return (pid_t) rtai_lxrt(BIDX, SIZARG, PROXY_DETACH, &arg).i[LOW];
00445 }
00446 
00447 RTAI_PROTO(struct rt_task_struct *,rt_trigger,(struct rt_task_struct *proxy))
00448 {
00449     struct { struct rt_task_struct *proxy; } arg = { proxy };
00450     return (struct rt_task_struct *) rtai_lxrt(BIDX, SIZARG, PROXY_TRIGGER, &arg).v[LOW];
00451 }
00452 
00453 RTAI_PROTO(int, rt_Send,(pid_t pid, void *smsg, void *rmsg, size_t ssize, size_t rsize ))
00454 {
00455     struct { long pid; void *smsg; void *rmsg; long ssize, rsize;} arg = { pid, smsg, rmsg, ssize, rsize };
00456     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_SEND, &arg).i[LOW];
00457 }
00458 
00459 RTAI_PROTO(pid_t, rt_Receive,(pid_t pid, void *msg, size_t maxsize, size_t *msglen))
00460 {
00461     struct { long pid; void *msg; long maxsize; size_t *msglen; } arg = { pid, msg, maxsize, msglen };
00462     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_RECEIVE, &arg).i[LOW];
00463 }
00464 
00465 RTAI_PROTO(pid_t, rt_Creceive,(pid_t pid, void *msg, size_t maxsize, size_t *msglen, RTIME delay))
00466 {
00467     struct { long pid; void *msg; long maxsize; size_t *msglen; RTIME delay;} arg = { pid, msg, maxsize, msglen, delay };
00468     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_CRECEIVE, &arg).i[LOW];
00469 }
00470 
00471 RTAI_PROTO(pid_t, rt_Reply,(pid_t pid, void *msg, size_t size))
00472 {
00473     struct { long pid; void *msg; long size;} arg = { pid, msg, size };
00474     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_REPLY, &arg).i[LOW];
00475 }
00476 
00477 RTAI_PROTO(pid_t, rt_Proxy_attach,(pid_t pid, void *msg, int nbytes, int priority))
00478 {
00479     struct { long pid; void *msg; long nbytes, priority;} arg = { pid, msg, nbytes, priority };
00480     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_PROXY_ATTACH, &arg).i[LOW];
00481 }
00482 
00483 RTAI_PROTO(pid_t, rt_Proxy_detach,(pid_t pid))
00484 {
00485     struct { long pid; } arg = { pid };
00486     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_PROXY_DETACH, &arg).i[LOW];
00487 }
00488 
00489 RTAI_PROTO(pid_t, rt_Trigger,(pid_t pid))
00490 {
00491     struct { long pid; } arg = { pid };
00492     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_TRIGGER, &arg).i[LOW];
00493 }
00494 
00495 RTAI_PROTO(pid_t, rt_Alias_attach,(const char *name))
00496 {
00497     struct { const char *name; } arg = { name};
00498     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_NAME_ATTACH, &arg).i[LOW];
00499 }
00500 
00501 RTAI_PROTO(pid_t, rt_Name_locate,(const char *host, const char *name))
00502 {
00503     struct { const char *host, *name; } arg = { host, name };
00504     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_NAME_LOCATE, &arg).i[LOW];
00505 }
00506 
00507 RTAI_PROTO(int, rt_Name_detach,(pid_t pid))
00508 {
00509     struct { long pid; } arg = { pid };
00510     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_NAME_DETACH, &arg).i[LOW];
00511 }
00512 
00513 RTAI_PROTO(int, rt_InitTickQueue,(void))
00514 {
00515     struct { unsigned long dummy; } arg;
00516     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_INITTICKQUEUE, &arg).i[LOW];
00517 }
00518 
00519 RTAI_PROTO(void, rt_ReleaseTickQueue,(void))
00520 {
00521     struct { unsigned long dummy; } arg;
00522     rtai_lxrt(BIDX, SIZARG, RT_RELEASETICKQUEUE, &arg);
00523 }
00524 
00525 RTAI_PROTO(unsigned long, rt_qDynAlloc,(unsigned long n))
00526 {
00527     struct { unsigned long n; } arg = { n };
00528     return (unsigned long) rtai_lxrt(BIDX, SIZARG, RT_QDYNALLOC, &arg).i[LOW];
00529 } 
00530 
00531 RTAI_PROTO(unsigned long, rt_qDynFree,(int n))
00532 {
00533     struct { unsigned long n; } arg = { n };
00534     return (unsigned long) rtai_lxrt(BIDX, SIZARG, RT_QDYNFREE, &arg).i[LOW];
00535 }
00536 
00537 RTAI_PROTO(struct QueueBlock *,rt_qDynInit,(struct QueueBlock **q, void (*fun)(void *, int), void *data, int evn ))
00538 {
00539     struct QueueBlock *r;
00540 
00541     struct { struct QueueBlock **q; void (*fun)(void *, int), *data; long evn; } arg = { 0, fun, data, evn };
00542     r  = (struct QueueBlock *) rtai_lxrt(BIDX, SIZARG, RT_QDYNINIT, &arg).v[LOW];
00543     if (q) *q = r;
00544     return r;
00545 }
00546 
00547 RTAI_PROTO(void, rt_qBlkWait,(struct QueueBlock *q, RTIME t))
00548 {
00549     struct { struct QueueBlock *q; RTIME t; } arg = { q, t } ;
00550     rtai_lxrt(BIDX, SIZARG, RT_QBLKWAIT, &arg);
00551 }
00552 
00553 RTAI_PROTO(void, rt_qBlkRepeat,(struct QueueBlock *q, RTIME t))
00554 {
00555     struct { struct QueueBlock *q; RTIME t; } arg = { q, t } ;
00556     rtai_lxrt(BIDX, SIZARG, RT_QBLKREPEAT, &arg);
00557 }
00558 
00559 RTAI_PROTO(void, rt_qBlkSoon,(struct QueueBlock *q))
00560 {
00561     struct { struct QueueBlock *q; } arg = { q };
00562     rtai_lxrt(BIDX, SIZARG, RT_QBLKSOON, &arg);
00563 }
00564 
00565 RTAI_PROTO(void, rt_qBlkDequeue,(struct QueueBlock *q))
00566 {
00567     struct { struct QueueBlock *q; } arg = { q };
00568     rtai_lxrt(BIDX, SIZARG, RT_QBLKDEQUEUE, &arg);
00569 }
00570 
00571 RTAI_PROTO(void, rt_qBlkCancel,(struct QueueBlock *q))
00572 {
00573     struct { struct QueueBlock *q; } arg = { q };
00574     rtai_lxrt(BIDX, SIZARG, RT_QBLKCANCEL, &arg);
00575 }
00576 
00577 RTAI_PROTO(void, rt_qBlkBefore,(struct QueueBlock *cur, struct QueueBlock *nxt))
00578 {
00579     struct { struct QueueBlock *cur, *nxt; } arg = { cur, nxt };
00580     rtai_lxrt(BIDX, SIZARG, RT_QBLKBEFORE, &arg);
00581 }
00582 
00583 RTAI_PROTO(void, rt_qBlkAfter,(struct QueueBlock *cur, struct QueueBlock *prv))
00584 {
00585     struct { struct QueueBlock *cur, *prv; } arg = { cur, prv };
00586     rtai_lxrt(BIDX, SIZARG, RT_QBLKAFTER, &arg);
00587 }
00588 
00589 RTAI_PROTO(struct QueueBlock *,rt_qBlkUnhook,(struct QueueBlock *q))
00590 {
00591     struct { struct QueueBlock *q; } arg = { q };
00592     return (struct QueueBlock *) rtai_lxrt(BIDX, SIZARG, RT_QBLKUNHOOK, &arg).v[LOW];
00593 }
00594 
00595 RTAI_PROTO(void, rt_qBlkRelease,(struct QueueBlock *q))
00596 {
00597     struct { struct QueueBlock *q; } arg = { q };
00598     rtai_lxrt(BIDX, SIZARG, RT_QBLKRELEASE, &arg);
00599 }
00600 
00601 RTAI_PROTO(void, rt_qBlkComplete,(struct QueueBlock *q))
00602 {
00603     struct { struct QueueBlock *q; } arg = { q };
00604     rtai_lxrt(BIDX, SIZARG, RT_QBLKCOMPLETE, &arg);
00605 }
00606 
00607 RTAI_PROTO(int, rt_qSync,(void))
00608 {
00609     struct { unsigned long long dummy; } arg;
00610     return rtai_lxrt(BIDX, SIZARG, RT_QSYNC, &arg).i[LOW];
00611 }
00612 
00613 RTAI_PROTO(pid_t, rt_qReceive,(pid_t target, void *buf, size_t maxlen, size_t *msglen))
00614 {
00615     struct { long target; void *buf; long maxlen; size_t *msglen; } arg = { target, buf, maxlen, msglen };
00616     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_QRECEIVE, &arg).i[LOW];
00617 }
00618 
00619 RTAI_PROTO(void, rt_qLoop,(void))
00620 {
00621     struct { unsigned long dummy; } arg;
00622     rtai_lxrt(BIDX, SIZARG, RT_QLOOP, &arg);
00623 }
00624 
00625 RTAI_PROTO(RTIME, rt_qStep,(void))
00626 {
00627     struct { unsigned long dummy; } arg;
00628     return rtai_lxrt(BIDX, SIZARG, RT_QSTEP, &arg).rt;
00629 }
00630 
00631 RTAI_PROTO(void, rt_qHookFlush,(struct QueueHook *h))
00632 {
00633     struct { struct QueueHook *h; } arg = { h };
00634     rtai_lxrt(BIDX, SIZARG, RT_QHOOKFLUSH, &arg);
00635 }
00636 
00637 RTAI_PROTO(void, rt_qBlkAtHead,(struct QueueBlock *q, struct QueueHook *h))
00638 {
00639     struct { struct QueueBlock *q; struct QueueHook *h; } arg = { q, h };
00640     rtai_lxrt(BIDX, SIZARG, RT_QBLKATHEAD, &arg);
00641 }
00642 
00643 RTAI_PROTO(void, rt_qBlkAtTail,(struct QueueBlock *q, struct QueueHook *h))
00644 {
00645     struct { struct QueueBlock *q; struct QueueHook *h; } arg = { q, h };
00646     rtai_lxrt(BIDX, SIZARG, RT_QBLKATTAIL, &arg);
00647 }
00648 
00649 RTAI_PROTO(struct QueueHook *,rt_qHookInit,(struct QueueHook **h, void (*c)(void *, struct QueueBlock *), void *a))
00650 {
00651     struct QueueHook *r;
00652     struct { struct QueueHook **h; void (*c)(void *, struct QueueBlock *), *a;} arg = { 0, c, a };
00653     r = (struct QueueHook *) rtai_lxrt(BIDX, SIZARG, RT_QHOOKINIT, &arg).v[LOW];
00654     if (h) *h = r;
00655     return r;
00656 }
00657 
00658 RTAI_PROTO(void, rt_qHookRelease,(struct QueueHook *h))
00659 {
00660     struct { struct QueueHook *h; } arg = { h };
00661     rtai_lxrt(BIDX, SIZARG, RT_QHOOKRELEASE, &arg);
00662 }
00663 
00664 RTAI_PROTO(void, rt_qBlkSchedule,(struct QueueBlock *q, RTIME t))
00665 {
00666     struct { struct QueueBlock *q; RTIME t; } arg = { q, t } ;
00667     rtai_lxrt(BIDX, SIZARG, RT_QBLKSCHEDULE, &arg);
00668 }
00669 
00670 RTAI_PROTO(struct QueueHook *,rt_GetTickQueueHook,(void))
00671 {
00672     struct { unsigned long dummy; } arg;
00673     return (struct QueueHook *) rtai_lxrt(BIDX, SIZARG, RT_GETTICKQUEUEHOOK, &arg).v[LOW];
00674 }
00675 
00676 RTAI_PROTO(pid_t, rt_vc_reserve,( void ))
00677 {
00678     struct { unsigned long dummy; } arg;
00679     return (pid_t) rtai_lxrt(BIDX, SIZARG, RT_VC_RESERVE, &arg).i[LOW];
00680 }
00681 
00682 RTAI_PROTO(int, rt_vc_attach,(pid_t pid))
00683 {
00684     struct { long pid; } arg = { pid };
00685     return rtai_lxrt(BIDX, SIZARG, RT_VC_ATTACH, &arg).i[LOW];
00686 }
00687 
00688 RTAI_PROTO(int, rt_vc_release,(pid_t pid))
00689 {
00690     struct { long pid; } arg = { pid };
00691     return rtai_lxrt(BIDX, SIZARG, RT_VC_RELEASE, &arg).i[LOW];
00692 }
00693 
00694 #ifdef __cplusplus
00695 }
00696 #endif /* __cplusplus */
00697 
00698 #endif /* __KERNEL__ */
00699 
00700 #if !defined(__KERNEL__) || defined(__cplusplus)
00701 
00702 typedef struct t_msgcb {
00703     int opaque;
00704 } MSGCB;
00705 
00706 #endif /* !__KERNEL__ || __cplusplus */
00707 
00708 #endif /* !_RTAI_MSG_H */

Generated on Tue Feb 2 17:46:05 2010 for RTAI API by  doxygen 1.4.7