19#ifndef _COBALT_RTDM_RTDM_H
20#define _COBALT_RTDM_RTDM_H
22#include <linux/types.h>
23#include <linux/fcntl.h>
24#include <linux/ioctl.h>
25#include <linux/sched.h>
26#include <linux/socket.h>
27#include <cobalt/kernel/ppd.h>
30typedef __u32 socklen_t;
34int __rtdm_dev_open(
const char *path,
int oflag);
36int __rtdm_dev_socket(
int protocol_family,
37 int socket_type,
int protocol);
39static inline int rtdm_open(
const char *path,
int oflag, ...)
41 return __rtdm_dev_open(path, oflag);
44static inline int rtdm_socket(
int protocol_family,
45 int socket_type,
int protocol)
47 return __rtdm_dev_socket(protocol_family, socket_type, protocol);
50static inline int rtdm_close(
int fd)
52 return rtdm_fd_close(fd, RTDM_FD_MAGIC);
55#define rtdm_fcntl(__fd, __cmd, __args...) \
56 rtdm_fd_fcntl(__fd, __cmd, ##__args)
58#define rtdm_ioctl(__fd, __request, __args...) \
59 rtdm_fd_ioctl(__fd, __request, ##__args)
61static inline ssize_t rtdm_read(
int fd,
void *buf,
size_t count)
63 return rtdm_fd_read(fd, buf, count);
66static inline ssize_t rtdm_write(
int fd,
const void *buf,
size_t count)
68 return rtdm_fd_write(fd, buf, count);
71static inline ssize_t rtdm_recvmsg(
int s,
struct user_msghdr *msg,
int flags)
73 return rtdm_fd_recvmsg(s, msg, flags);
76static inline ssize_t rtdm_sendmsg(
int s,
const struct user_msghdr *msg,
int flags)
78 return rtdm_fd_sendmsg(s, msg, flags);
82ssize_t rtdm_recvfrom(
int s,
void *buf,
size_t len,
int flags,
83 struct sockaddr *from,
86 struct user_msghdr msg;
93 msg.msg_namelen = from ? *fromlen : 0;
96 msg.msg_control = NULL;
97 msg.msg_controllen = 0;
99 ret = rtdm_recvmsg(s, &msg, flags);
104 *fromlen = msg.msg_namelen;
109static inline ssize_t rtdm_recv(
int s,
void *buf,
size_t len,
int flags)
111 return rtdm_recvfrom(s, buf, len, flags, NULL, NULL);
114static inline ssize_t rtdm_sendto(
int s,
const void *buf,
size_t len,
115 int flags,
const struct sockaddr *to,
118 struct user_msghdr msg;
121 iov.iov_base = (
void *)buf;
123 msg.msg_name = (
struct sockaddr *)to;
124 msg.msg_namelen = tolen;
127 msg.msg_control = NULL;
128 msg.msg_controllen = 0;
130 return rtdm_sendmsg(s, &msg, flags);
133static inline ssize_t rtdm_send(
int s,
const void *buf,
size_t len,
int flags)
135 return rtdm_sendto(s, buf, len, flags, NULL, 0);
138static inline int rtdm_getsockopt(
int s,
int level,
int optname,
139 void *optval, socklen_t *optlen)
141 struct _rtdm_getsockopt_args args = {
142 level, optname, optval, optlen
145 return rtdm_ioctl(s, _RTIOC_GETSOCKOPT, &args);
148static inline int rtdm_setsockopt(
int s,
int level,
int optname,
149 const void *optval, socklen_t optlen)
151 struct _rtdm_setsockopt_args args = {
152 level, optname, (
void *)optval, optlen
155 return rtdm_ioctl(s, _RTIOC_SETSOCKOPT, &args);
158static inline int rtdm_bind(
int s,
const struct sockaddr *my_addr,
161 struct _rtdm_setsockaddr_args args = {
165 return rtdm_ioctl(s, _RTIOC_BIND, &args);
168static inline int rtdm_connect(
int s,
const struct sockaddr *serv_addr,
171 struct _rtdm_setsockaddr_args args = {
175 return rtdm_ioctl(s, _RTIOC_CONNECT, &args);
178static inline int rtdm_listen(
int s,
int backlog)
180 return rtdm_ioctl(s, _RTIOC_LISTEN, backlog);
183static inline int rtdm_accept(
int s,
struct sockaddr *addr,
186 struct _rtdm_getsockaddr_args args = {
190 return rtdm_ioctl(s, _RTIOC_ACCEPT, &args);
193static inline int rtdm_getsockname(
int s,
struct sockaddr *name,
196 struct _rtdm_getsockaddr_args args = {
200 return rtdm_ioctl(s, _RTIOC_GETSOCKNAME, &args);
203static inline int rtdm_getpeername(
int s,
struct sockaddr *name,
206 struct _rtdm_getsockaddr_args args = {
210 return rtdm_ioctl(s, _RTIOC_GETPEERNAME, &args);
213static inline int rtdm_shutdown(
int s,
int how)
215 return rtdm_ioctl(s, _RTIOC_SHUTDOWN, how);
Real-Time Driver Model for Xenomai, user API header.