00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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 {
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
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
00250
00251 #else
00252
00253 #include <rtai_lxrt.h>
00254
00255 #ifdef __cplusplus
00256 extern "C" {
00257 #endif
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
00697
00698 #endif
00699
00700 #if !defined(__KERNEL__) || defined(__cplusplus)
00701
00702 typedef struct t_msgcb {
00703 int opaque;
00704 } MSGCB;
00705
00706 #endif
00707
00708 #endif