Xenomai 3.3.2
Loading...
Searching...
No Matches
rtdm.h
1/*
2 * Copyright (C) 2005, 2006 Jan Kiszka <jan.kiszka@web.de>
3 * Copyright (C) 2005 Joerg Langenberg <joerg.langenberg@gmx.net>
4 *
5 * Xenomai is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Xenomai is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with Xenomai; if not, write to the Free Software Foundation,
17 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 */
19#ifndef _COBALT_RTDM_RTDM_H
20#define _COBALT_RTDM_RTDM_H
21
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>
28#include <rtdm/fd.h>
29
30typedef __u32 socklen_t;
31
32#include <rtdm/uapi/rtdm.h>
33
34int __rtdm_dev_open(const char *path, int oflag);
35
36int __rtdm_dev_socket(int protocol_family,
37 int socket_type, int protocol);
38
39static inline int rtdm_open(const char *path, int oflag, ...)
40{
41 return __rtdm_dev_open(path, oflag);
42}
43
44static inline int rtdm_socket(int protocol_family,
45 int socket_type, int protocol)
46{
47 return __rtdm_dev_socket(protocol_family, socket_type, protocol);
48}
49
50static inline int rtdm_close(int fd)
51{
52 return rtdm_fd_close(fd, RTDM_FD_MAGIC);
53}
54
55#define rtdm_fcntl(__fd, __cmd, __args...) \
56 rtdm_fd_fcntl(__fd, __cmd, ##__args)
57
58#define rtdm_ioctl(__fd, __request, __args...) \
59 rtdm_fd_ioctl(__fd, __request, ##__args)
60
61static inline ssize_t rtdm_read(int fd, void *buf, size_t count)
62{
63 return rtdm_fd_read(fd, buf, count);
64}
65
66static inline ssize_t rtdm_write(int fd, const void *buf, size_t count)
67{
68 return rtdm_fd_write(fd, buf, count);
69}
70
71static inline ssize_t rtdm_recvmsg(int s, struct user_msghdr *msg, int flags)
72{
73 return rtdm_fd_recvmsg(s, msg, flags);
74}
75
76static inline ssize_t rtdm_sendmsg(int s, const struct user_msghdr *msg, int flags)
77{
78 return rtdm_fd_sendmsg(s, msg, flags);
79}
80
81static inline
82ssize_t rtdm_recvfrom(int s, void *buf, size_t len, int flags,
83 struct sockaddr *from,
84 socklen_t *fromlen)
85{
86 struct user_msghdr msg;
87 struct iovec iov;
88 ssize_t ret;
89
90 iov.iov_base = buf;
91 iov.iov_len = len;
92 msg.msg_name = from;
93 msg.msg_namelen = from ? *fromlen : 0;
94 msg.msg_iov = &iov;
95 msg.msg_iovlen = 1;
96 msg.msg_control = NULL;
97 msg.msg_controllen = 0;
98
99 ret = rtdm_recvmsg(s, &msg, flags);
100 if (ret < 0)
101 return ret;
102
103 if (from)
104 *fromlen = msg.msg_namelen;
105
106 return ret;
107}
108
109static inline ssize_t rtdm_recv(int s, void *buf, size_t len, int flags)
110{
111 return rtdm_recvfrom(s, buf, len, flags, NULL, NULL);
112}
113
114static inline ssize_t rtdm_sendto(int s, const void *buf, size_t len,
115 int flags, const struct sockaddr *to,
116 socklen_t tolen)
117{
118 struct user_msghdr msg;
119 struct iovec iov;
120
121 iov.iov_base = (void *)buf;
122 iov.iov_len = len;
123 msg.msg_name = (struct sockaddr *)to;
124 msg.msg_namelen = tolen;
125 msg.msg_iov = &iov;
126 msg.msg_iovlen = 1;
127 msg.msg_control = NULL;
128 msg.msg_controllen = 0;
129
130 return rtdm_sendmsg(s, &msg, flags);
131}
132
133static inline ssize_t rtdm_send(int s, const void *buf, size_t len, int flags)
134{
135 return rtdm_sendto(s, buf, len, flags, NULL, 0);
136}
137
138static inline int rtdm_getsockopt(int s, int level, int optname,
139 void *optval, socklen_t *optlen)
140{
141 struct _rtdm_getsockopt_args args = {
142 level, optname, optval, optlen
143 };
144
145 return rtdm_ioctl(s, _RTIOC_GETSOCKOPT, &args);
146}
147
148static inline int rtdm_setsockopt(int s, int level, int optname,
149 const void *optval, socklen_t optlen)
150{
151 struct _rtdm_setsockopt_args args = {
152 level, optname, (void *)optval, optlen
153 };
154
155 return rtdm_ioctl(s, _RTIOC_SETSOCKOPT, &args);
156}
157
158static inline int rtdm_bind(int s, const struct sockaddr *my_addr,
159 socklen_t addrlen)
160{
161 struct _rtdm_setsockaddr_args args = {
162 my_addr, addrlen
163 };
164
165 return rtdm_ioctl(s, _RTIOC_BIND, &args);
166}
167
168static inline int rtdm_connect(int s, const struct sockaddr *serv_addr,
169 socklen_t addrlen)
170{
171 struct _rtdm_setsockaddr_args args = {
172 serv_addr, addrlen
173 };
174
175 return rtdm_ioctl(s, _RTIOC_CONNECT, &args);
176}
177
178static inline int rtdm_listen(int s, int backlog)
179{
180 return rtdm_ioctl(s, _RTIOC_LISTEN, backlog);
181}
182
183static inline int rtdm_accept(int s, struct sockaddr *addr,
184 socklen_t *addrlen)
185{
186 struct _rtdm_getsockaddr_args args = {
187 addr, addrlen
188 };
189
190 return rtdm_ioctl(s, _RTIOC_ACCEPT, &args);
191}
192
193static inline int rtdm_getsockname(int s, struct sockaddr *name,
194 socklen_t *namelen)
195{
196 struct _rtdm_getsockaddr_args args = {
197 name, namelen
198 };
199
200 return rtdm_ioctl(s, _RTIOC_GETSOCKNAME, &args);
201}
202
203static inline int rtdm_getpeername(int s, struct sockaddr *name,
204 socklen_t *namelen)
205{
206 struct _rtdm_getsockaddr_args args = {
207 name, namelen
208 };
209
210 return rtdm_ioctl(s, _RTIOC_GETPEERNAME, &args);
211}
212
213static inline int rtdm_shutdown(int s, int how)
214{
215 return rtdm_ioctl(s, _RTIOC_SHUTDOWN, how);
216}
217
218#endif /* _COBALT_RTDM_RTDM_H */
operation handlers
Real-Time Driver Model for Xenomai, user API header.