[Xenomai-git] Gilles Chanteperdrix : cobalt: move message queues syscalls to mq.c

2011-12-11 Thread GIT version control
Module: xenomai-gch
Branch: for-forge
Commit: 3b14eb4932b1b69f5a7de2fd16b94eb52e989225
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=3b14eb4932b1b69f5a7de2fd16b94eb52e989225

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Dec 11 18:12:25 2011 +0100

cobalt: move message queues syscalls to mq.c

---

 include/cobalt/mqueue.h |   47 ---
 kernel/cobalt/mq.c  |  722 +++
 kernel/cobalt/mq.h  |   36 ++-
 kernel/cobalt/syscall.c |  340 +--
 4 files changed, 389 insertions(+), 756 deletions(-)

diff --git a/include/cobalt/mqueue.h b/include/cobalt/mqueue.h
index 8f8f677..00bc847 100644
--- a/include/cobalt/mqueue.h
+++ b/include/cobalt/mqueue.h
@@ -57,53 +57,6 @@ struct mq_attr {
 longmq_curmsgs;
 };
 
-#ifdef __cplusplus
-extern C {
-#endif
-
-int mq_getattr(mqd_t qd,
-  struct mq_attr *attr);
-
-int mq_setattr(mqd_t qd,
-  const struct mq_attr *__restrict__ attr,
-  struct mq_attr *__restrict__ oattr);
-
-int mq_send(mqd_t qd,
-   const char *buffer,
-   size_t len,
-   unsigned prio);
-
-int mq_close(mqd_t qd);
-
-ssize_t  mq_receive(mqd_t q,
-   char *buffer,
-   size_t len,
-   unsigned *prio);
-
-ssize_t  mq_timedreceive(mqd_t q,
-char *__restrict__ buffer,
-size_t len,
-unsigned *__restrict__ prio,
-const struct timespec *__restrict__ timeout);
-
-int mq_timedsend(mqd_t q,
-const char *buffer,
-size_t len,
-unsigned prio,
-const struct timespec *timeout);
-
-int mq_notify(mqd_t mqdes, const struct sigevent *notification);
-
-mqd_t mq_open(const char *name,
- int oflags,
- ...);
-
-int mq_unlink(const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
 #else /* !(__KERNEL__ || __XENO_SIM__ || !HAVE_MQUEUE_H) */
 
 #include_next mqueue.h
diff --git a/kernel/cobalt/mq.c b/kernel/cobalt/mq.c
index 732a178..352873c 100644
--- a/kernel/cobalt/mq.c
+++ b/kernel/cobalt/mq.c
@@ -46,8 +46,7 @@
 struct cobalt_mq {
cobalt_node_t nodebase;
 
-#define node2mq(naddr) \
-((cobalt_mq_t *) (((char *)naddr) - offsetof(cobalt_mq_t, nodebase)))
+#define node2mq(naddr) container_of(naddr,  cobalt_mq_t, nodebase)
 
xnpqueue_t queued;
xnsynch_t receivers;
@@ -62,12 +61,19 @@ struct cobalt_mq {
 
DECLARE_XNSELECT(read_select);
DECLARE_XNSELECT(write_select);
-#define link2mq(laddr) \
-((cobalt_mq_t *) (((char *)laddr) - offsetof(cobalt_mq_t, link)))
+#define link2mq(laddr) container_of(laddr, cobalt_mq_t, link)
 };
 
-#define any2msg(addr, member)  
\
-((cobalt_msg_t *)(((char *)addr) - offsetof(cobalt_msg_t, member)))
+#define link2msg(addr) container_of(addr, cobalt_msg_t, link)
+
+typedef struct cobalt_msg {
+   xnpholder_t link;
+   size_t len;
+   char data[0];
+} cobalt_msg_t;
+
+#define cobalt_msg_get_prio(msg) (msg)-link.prio
+#define cobalt_msg_set_prio(msg, prio) (msg)-link.prio = (prio)
 
 static xnqueue_t cobalt_mqq;
 
@@ -76,7 +82,7 @@ static struct mq_attr default_attr = {
   mq_msgsize:128,
 };
 
-static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
+static inline cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
 {
xnpholder_t *holder = (xnpholder_t *)getq(mq-avail);
 
@@ -84,24 +90,21 @@ static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
return NULL;
 
initph(holder);
-   return any2msg(holder, link);
+   return link2msg(holder);
 }
 
-static void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg)
+static inline void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg)
 {
xnholder_t *holder = (xnholder_t *)(msg-link);
inith(holder);
prependq(mq-avail, holder);   /* For earliest re-use of the block. */
 }
 
-static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr)
+static inline int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr)
 {
unsigned i, msgsize, memsize;
char *mem;
 
-   if (xnpod_asynch_p() || !xnpod_root_p())
-   return EPERM;
-
if (!attr)
attr = default_attr;
else if (attr-mq_maxmsg = 0 || attr-mq_msgsize = 0)
@@ -142,7 +145,7 @@ static int cobalt_mq_init(cobalt_mq_t * mq, const struct 
mq_attr *attr)
return 0;
 }
 
-static void cobalt_mq_destroy(cobalt_mq_t *mq)
+static inline void cobalt_mq_destroy(cobalt_mq_t *mq)
 {
int resched;
spl_t s;
@@ -231,7 +234,7 @@ static void cobalt_mq_destroy(cobalt_mq_t *mq)
  * Specification./a
  *
  */
-mqd_t mq_open(const char *name, int oflags, ...)
+static mqd_t mq_open(const char *name, int oflags, ...)
 {
struct mq_attr *attr;

[Xenomai-git] Gilles Chanteperdrix : cobalt: move message queues syscalls to mq.c

2011-12-11 Thread GIT version control
Module: xenomai-gch
Branch: for-forge
Commit: d18103f31d7216d2d40e597bdbc0ed4c0fc71176
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=d18103f31d7216d2d40e597bdbc0ed4c0fc71176

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Dec 11 18:12:25 2011 +0100

cobalt: move message queues syscalls to mq.c

---

 include/cobalt/mqueue.h |   47 ---
 kernel/cobalt/mq.c  |  724 +++
 kernel/cobalt/mq.h  |   36 ++-
 kernel/cobalt/syscall.c |  340 +-
 4 files changed, 390 insertions(+), 757 deletions(-)

diff --git a/include/cobalt/mqueue.h b/include/cobalt/mqueue.h
index 8f8f677..00bc847 100644
--- a/include/cobalt/mqueue.h
+++ b/include/cobalt/mqueue.h
@@ -57,53 +57,6 @@ struct mq_attr {
 longmq_curmsgs;
 };
 
-#ifdef __cplusplus
-extern C {
-#endif
-
-int mq_getattr(mqd_t qd,
-  struct mq_attr *attr);
-
-int mq_setattr(mqd_t qd,
-  const struct mq_attr *__restrict__ attr,
-  struct mq_attr *__restrict__ oattr);
-
-int mq_send(mqd_t qd,
-   const char *buffer,
-   size_t len,
-   unsigned prio);
-
-int mq_close(mqd_t qd);
-
-ssize_t  mq_receive(mqd_t q,
-   char *buffer,
-   size_t len,
-   unsigned *prio);
-
-ssize_t  mq_timedreceive(mqd_t q,
-char *__restrict__ buffer,
-size_t len,
-unsigned *__restrict__ prio,
-const struct timespec *__restrict__ timeout);
-
-int mq_timedsend(mqd_t q,
-const char *buffer,
-size_t len,
-unsigned prio,
-const struct timespec *timeout);
-
-int mq_notify(mqd_t mqdes, const struct sigevent *notification);
-
-mqd_t mq_open(const char *name,
- int oflags,
- ...);
-
-int mq_unlink(const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
 #else /* !(__KERNEL__ || __XENO_SIM__ || !HAVE_MQUEUE_H) */
 
 #include_next mqueue.h
diff --git a/kernel/cobalt/mq.c b/kernel/cobalt/mq.c
index 732a178..8894f05 100644
--- a/kernel/cobalt/mq.c
+++ b/kernel/cobalt/mq.c
@@ -46,8 +46,7 @@
 struct cobalt_mq {
cobalt_node_t nodebase;
 
-#define node2mq(naddr) \
-((cobalt_mq_t *) (((char *)naddr) - offsetof(cobalt_mq_t, nodebase)))
+#define node2mq(naddr) container_of(naddr,  cobalt_mq_t, nodebase)
 
xnpqueue_t queued;
xnsynch_t receivers;
@@ -62,12 +61,19 @@ struct cobalt_mq {
 
DECLARE_XNSELECT(read_select);
DECLARE_XNSELECT(write_select);
-#define link2mq(laddr) \
-((cobalt_mq_t *) (((char *)laddr) - offsetof(cobalt_mq_t, link)))
+#define link2mq(laddr) container_of(laddr, cobalt_mq_t, link)
 };
 
-#define any2msg(addr, member)  
\
-((cobalt_msg_t *)(((char *)addr) - offsetof(cobalt_msg_t, member)))
+#define link2msg(addr) container_of(addr, cobalt_msg_t, link)
+
+typedef struct cobalt_msg {
+   xnpholder_t link;
+   size_t len;
+   char data[0];
+} cobalt_msg_t;
+
+#define cobalt_msg_get_prio(msg) (msg)-link.prio
+#define cobalt_msg_set_prio(msg, prio) (msg)-link.prio = (prio)
 
 static xnqueue_t cobalt_mqq;
 
@@ -76,7 +82,7 @@ static struct mq_attr default_attr = {
   mq_msgsize:128,
 };
 
-static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
+static inline cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
 {
xnpholder_t *holder = (xnpholder_t *)getq(mq-avail);
 
@@ -84,24 +90,21 @@ static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
return NULL;
 
initph(holder);
-   return any2msg(holder, link);
+   return link2msg(holder);
 }
 
-static void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg)
+static inline void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg)
 {
xnholder_t *holder = (xnholder_t *)(msg-link);
inith(holder);
prependq(mq-avail, holder);   /* For earliest re-use of the block. */
 }
 
-static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr)
+static inline int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr)
 {
unsigned i, msgsize, memsize;
char *mem;
 
-   if (xnpod_asynch_p() || !xnpod_root_p())
-   return EPERM;
-
if (!attr)
attr = default_attr;
else if (attr-mq_maxmsg = 0 || attr-mq_msgsize = 0)
@@ -142,7 +145,7 @@ static int cobalt_mq_init(cobalt_mq_t * mq, const struct 
mq_attr *attr)
return 0;
 }
 
-static void cobalt_mq_destroy(cobalt_mq_t *mq)
+static inline void cobalt_mq_destroy(cobalt_mq_t *mq)
 {
int resched;
spl_t s;
@@ -231,7 +234,7 @@ static void cobalt_mq_destroy(cobalt_mq_t *mq)
  * Specification./a
  *
  */
-mqd_t mq_open(const char *name, int oflags, ...)
+static mqd_t mq_open(const char *name, int oflags, ...)
 {
struct mq_attr *attr;

[Xenomai-git] Gilles Chanteperdrix : cobalt: move message queues syscalls to mq.c

2011-12-11 Thread GIT version control
Module: xenomai-forge
Branch: master
Commit: d18103f31d7216d2d40e597bdbc0ed4c0fc71176
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=d18103f31d7216d2d40e597bdbc0ed4c0fc71176

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Dec 11 18:12:25 2011 +0100

cobalt: move message queues syscalls to mq.c

---

 include/cobalt/mqueue.h |   47 ---
 kernel/cobalt/mq.c  |  724 +++
 kernel/cobalt/mq.h  |   36 ++-
 kernel/cobalt/syscall.c |  340 +-
 4 files changed, 390 insertions(+), 757 deletions(-)

diff --git a/include/cobalt/mqueue.h b/include/cobalt/mqueue.h
index 8f8f677..00bc847 100644
--- a/include/cobalt/mqueue.h
+++ b/include/cobalt/mqueue.h
@@ -57,53 +57,6 @@ struct mq_attr {
 longmq_curmsgs;
 };
 
-#ifdef __cplusplus
-extern C {
-#endif
-
-int mq_getattr(mqd_t qd,
-  struct mq_attr *attr);
-
-int mq_setattr(mqd_t qd,
-  const struct mq_attr *__restrict__ attr,
-  struct mq_attr *__restrict__ oattr);
-
-int mq_send(mqd_t qd,
-   const char *buffer,
-   size_t len,
-   unsigned prio);
-
-int mq_close(mqd_t qd);
-
-ssize_t  mq_receive(mqd_t q,
-   char *buffer,
-   size_t len,
-   unsigned *prio);
-
-ssize_t  mq_timedreceive(mqd_t q,
-char *__restrict__ buffer,
-size_t len,
-unsigned *__restrict__ prio,
-const struct timespec *__restrict__ timeout);
-
-int mq_timedsend(mqd_t q,
-const char *buffer,
-size_t len,
-unsigned prio,
-const struct timespec *timeout);
-
-int mq_notify(mqd_t mqdes, const struct sigevent *notification);
-
-mqd_t mq_open(const char *name,
- int oflags,
- ...);
-
-int mq_unlink(const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
 #else /* !(__KERNEL__ || __XENO_SIM__ || !HAVE_MQUEUE_H) */
 
 #include_next mqueue.h
diff --git a/kernel/cobalt/mq.c b/kernel/cobalt/mq.c
index 732a178..8894f05 100644
--- a/kernel/cobalt/mq.c
+++ b/kernel/cobalt/mq.c
@@ -46,8 +46,7 @@
 struct cobalt_mq {
cobalt_node_t nodebase;
 
-#define node2mq(naddr) \
-((cobalt_mq_t *) (((char *)naddr) - offsetof(cobalt_mq_t, nodebase)))
+#define node2mq(naddr) container_of(naddr,  cobalt_mq_t, nodebase)
 
xnpqueue_t queued;
xnsynch_t receivers;
@@ -62,12 +61,19 @@ struct cobalt_mq {
 
DECLARE_XNSELECT(read_select);
DECLARE_XNSELECT(write_select);
-#define link2mq(laddr) \
-((cobalt_mq_t *) (((char *)laddr) - offsetof(cobalt_mq_t, link)))
+#define link2mq(laddr) container_of(laddr, cobalt_mq_t, link)
 };
 
-#define any2msg(addr, member)  
\
-((cobalt_msg_t *)(((char *)addr) - offsetof(cobalt_msg_t, member)))
+#define link2msg(addr) container_of(addr, cobalt_msg_t, link)
+
+typedef struct cobalt_msg {
+   xnpholder_t link;
+   size_t len;
+   char data[0];
+} cobalt_msg_t;
+
+#define cobalt_msg_get_prio(msg) (msg)-link.prio
+#define cobalt_msg_set_prio(msg, prio) (msg)-link.prio = (prio)
 
 static xnqueue_t cobalt_mqq;
 
@@ -76,7 +82,7 @@ static struct mq_attr default_attr = {
   mq_msgsize:128,
 };
 
-static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
+static inline cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
 {
xnpholder_t *holder = (xnpholder_t *)getq(mq-avail);
 
@@ -84,24 +90,21 @@ static cobalt_msg_t *cobalt_mq_msg_alloc(cobalt_mq_t * mq)
return NULL;
 
initph(holder);
-   return any2msg(holder, link);
+   return link2msg(holder);
 }
 
-static void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg)
+static inline void cobalt_mq_msg_free(cobalt_mq_t * mq, cobalt_msg_t * msg)
 {
xnholder_t *holder = (xnholder_t *)(msg-link);
inith(holder);
prependq(mq-avail, holder);   /* For earliest re-use of the block. */
 }
 
-static int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr)
+static inline int cobalt_mq_init(cobalt_mq_t * mq, const struct mq_attr *attr)
 {
unsigned i, msgsize, memsize;
char *mem;
 
-   if (xnpod_asynch_p() || !xnpod_root_p())
-   return EPERM;
-
if (!attr)
attr = default_attr;
else if (attr-mq_maxmsg = 0 || attr-mq_msgsize = 0)
@@ -142,7 +145,7 @@ static int cobalt_mq_init(cobalt_mq_t * mq, const struct 
mq_attr *attr)
return 0;
 }
 
-static void cobalt_mq_destroy(cobalt_mq_t *mq)
+static inline void cobalt_mq_destroy(cobalt_mq_t *mq)
 {
int resched;
spl_t s;
@@ -231,7 +234,7 @@ static void cobalt_mq_destroy(cobalt_mq_t *mq)
  * Specification./a
  *
  */
-mqd_t mq_open(const char *name, int oflags, ...)
+static mqd_t mq_open(const char *name, int oflags, ...)
 {
struct mq_attr *attr;