[Xenomai-git] Philippe Gerum : psos: introduce t_setreg/t_getreg syscalls

2010-09-21 Thread GIT version control
Module: xenomai-rpm
Branch: for-upstream
Commit: 740e3b9e5f77588f3df010752c255ecd24adea4e
URL:
http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=740e3b9e5f77588f3df010752c255ecd24adea4e

Author: Philippe Gerum r...@xenomai.org
Date:   Tue Sep 21 09:25:31 2010 +0200

psos: introduce t_setreg/t_getreg syscalls

---

 include/psos+/syscall.h|2 +
 ksrc/skins/psos+/syscall.c |   55 
 src/skins/psos+/task.c |   12 +
 3 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/include/psos+/syscall.h b/include/psos+/syscall.h
index 86cc998..a3507d0 100644
--- a/include/psos+/syscall.h
+++ b/include/psos+/syscall.h
@@ -75,6 +75,8 @@
 #define __psos_tm_getc  46
 /* Xenomai internal: get hidden pthread_t identifier. */
 #define __psos_t_getpth 47
+#define __psos_t_setreg 48
+#define __psos_t_getreg 49
 
 struct psos_arg_bulk {
 u_long a1;
diff --git a/ksrc/skins/psos+/syscall.c b/ksrc/skins/psos+/syscall.c
index 3ce53cc..2990fef 100644
--- a/ksrc/skins/psos+/syscall.c
+++ b/ksrc/skins/psos+/syscall.c
@@ -320,6 +320,59 @@ static int __t_setpri(struct pt_regs *regs)
 }
 
 /*
+ * int __t_setreg(u_long tid, u_long regnum, u_long regval)
+ */
+
+static int __t_setreg(struct pt_regs *regs)
+{
+   xnhandle_t handle = __xn_reg_arg1(regs);
+   u_long regnum, regval;
+   psostask_t *task;
+
+   if (handle)
+   task = __psos_task_lookup(handle);
+   else
+   task = __psos_task_current(current);
+
+   if (task == NULL)
+   return ERR_OBJID;
+
+   regnum = __xn_reg_arg2(regs);
+   regval = __xn_reg_arg3(regs);
+
+   return t_setreg((u_long)task, regnum, regval);
+}
+
+/*
+ * int __t_getreg(u_long tid, u_long regnum, u_long *regvalp)
+ */
+
+static int __t_getreg(struct pt_regs *regs)
+{
+   xnhandle_t handle = __xn_reg_arg1(regs);
+   u_long err, regnum, regval;
+   psostask_t *task;
+
+   if (handle)
+   task = __psos_task_lookup(handle);
+   else
+   task = __psos_task_current(current);
+
+   if (task == NULL)
+   return ERR_OBJID;
+
+   regnum = __xn_reg_arg2(regs);
+
+   err = t_getreg((u_long)task, regnum, regval);
+   if (err == SUCCESS 
+   __xn_safe_copy_to_user((void __user *)__xn_reg_arg3(regs), regval,
+  sizeof(regval)))
+   return -EFAULT;
+
+   return err;
+}
+
+/*
  * int __ev_send(u_long tid, u_long events)
  */
 
@@ -1425,6 +1478,8 @@ static xnsysent_t __systab[] = {
[__psos_t_ident] = {__t_ident, __xn_exec_primary},
[__psos_t_mode] = {__t_mode, __xn_exec_primary},
[__psos_t_setpri] = {__t_setpri, __xn_exec_conforming},
+   [__psos_t_setreg] = {__t_setreg, __xn_exec_any},
+   [__psos_t_getreg] = {__t_getreg, __xn_exec_any},
[__psos_ev_send] = {__ev_send, __xn_exec_any},
[__psos_ev_receive] = {__ev_receive, __xn_exec_primary},
[__psos_q_create] = {__q_create, __xn_exec_any},
diff --git a/src/skins/psos+/task.c b/src/skins/psos+/task.c
index 89871cb..757c043 100644
--- a/src/skins/psos+/task.c
+++ b/src/skins/psos+/task.c
@@ -246,6 +246,18 @@ u_long t_resume(u_long tid)
return XENOMAI_SKINCALL1(__psos_muxid, __psos_t_resume, tid);
 }
 
+u_long t_setreg(u_long tid, u_long regnum, u_long regvalue)
+{
+   return XENOMAI_SKINCALL3(__psos_muxid, __psos_t_setreg,
+tid, regnum, regvalue);
+}
+
+u_long t_getreg(u_long tid, u_long regnum, u_long *regvalue_r)
+{
+   return XENOMAI_SKINCALL3(__psos_muxid, __psos_t_setreg,
+tid, regnum, regvalue_r);
+}
+
 u_long t_ident(const char *name, u_long nodeno, u_long *tid_r)
 {
return XENOMAI_SKINCALL2(__psos_muxid, __psos_t_ident, name, tid_r);


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : psos: introduce t_setreg/t_getreg syscalls

2010-09-21 Thread GIT version control
Module: xenomai-rpm
Branch: for-upstream
Commit: 71f9e1712b321b7c09f99686bc5d7a5961c15077
URL:
http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=71f9e1712b321b7c09f99686bc5d7a5961c15077

Author: Philippe Gerum r...@xenomai.org
Date:   Tue Sep 21 17:05:32 2010 +0200

psos: introduce t_setreg/t_getreg syscalls

---

 include/psos+/syscall.h|2 +
 ksrc/skins/psos+/syscall.c |   55 
 src/skins/psos+/task.c |   12 +
 3 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/include/psos+/syscall.h b/include/psos+/syscall.h
index 86cc998..a3507d0 100644
--- a/include/psos+/syscall.h
+++ b/include/psos+/syscall.h
@@ -75,6 +75,8 @@
 #define __psos_tm_getc  46
 /* Xenomai internal: get hidden pthread_t identifier. */
 #define __psos_t_getpth 47
+#define __psos_t_setreg 48
+#define __psos_t_getreg 49
 
 struct psos_arg_bulk {
 u_long a1;
diff --git a/ksrc/skins/psos+/syscall.c b/ksrc/skins/psos+/syscall.c
index 3ce53cc..2990fef 100644
--- a/ksrc/skins/psos+/syscall.c
+++ b/ksrc/skins/psos+/syscall.c
@@ -320,6 +320,59 @@ static int __t_setpri(struct pt_regs *regs)
 }
 
 /*
+ * int __t_setreg(u_long tid, u_long regnum, u_long regval)
+ */
+
+static int __t_setreg(struct pt_regs *regs)
+{
+   xnhandle_t handle = __xn_reg_arg1(regs);
+   u_long regnum, regval;
+   psostask_t *task;
+
+   if (handle)
+   task = __psos_task_lookup(handle);
+   else
+   task = __psos_task_current(current);
+
+   if (task == NULL)
+   return ERR_OBJID;
+
+   regnum = __xn_reg_arg2(regs);
+   regval = __xn_reg_arg3(regs);
+
+   return t_setreg((u_long)task, regnum, regval);
+}
+
+/*
+ * int __t_getreg(u_long tid, u_long regnum, u_long *regvalp)
+ */
+
+static int __t_getreg(struct pt_regs *regs)
+{
+   xnhandle_t handle = __xn_reg_arg1(regs);
+   u_long err, regnum, regval;
+   psostask_t *task;
+
+   if (handle)
+   task = __psos_task_lookup(handle);
+   else
+   task = __psos_task_current(current);
+
+   if (task == NULL)
+   return ERR_OBJID;
+
+   regnum = __xn_reg_arg2(regs);
+
+   err = t_getreg((u_long)task, regnum, regval);
+   if (err == SUCCESS 
+   __xn_safe_copy_to_user((void __user *)__xn_reg_arg3(regs), regval,
+  sizeof(regval)))
+   return -EFAULT;
+
+   return err;
+}
+
+/*
  * int __ev_send(u_long tid, u_long events)
  */
 
@@ -1425,6 +1478,8 @@ static xnsysent_t __systab[] = {
[__psos_t_ident] = {__t_ident, __xn_exec_primary},
[__psos_t_mode] = {__t_mode, __xn_exec_primary},
[__psos_t_setpri] = {__t_setpri, __xn_exec_conforming},
+   [__psos_t_setreg] = {__t_setreg, __xn_exec_any},
+   [__psos_t_getreg] = {__t_getreg, __xn_exec_any},
[__psos_ev_send] = {__ev_send, __xn_exec_any},
[__psos_ev_receive] = {__ev_receive, __xn_exec_primary},
[__psos_q_create] = {__q_create, __xn_exec_any},
diff --git a/src/skins/psos+/task.c b/src/skins/psos+/task.c
index 89871cb..98d16f6 100644
--- a/src/skins/psos+/task.c
+++ b/src/skins/psos+/task.c
@@ -246,6 +246,18 @@ u_long t_resume(u_long tid)
return XENOMAI_SKINCALL1(__psos_muxid, __psos_t_resume, tid);
 }
 
+u_long t_setreg(u_long tid, u_long regnum, u_long regvalue)
+{
+   return XENOMAI_SKINCALL3(__psos_muxid, __psos_t_setreg,
+tid, regnum, regvalue);
+}
+
+u_long t_getreg(u_long tid, u_long regnum, u_long *regvalue_r)
+{
+   return XENOMAI_SKINCALL3(__psos_muxid, __psos_t_getreg,
+tid, regnum, regvalue_r);
+}
+
 u_long t_ident(const char *name, u_long nodeno, u_long *tid_r)
 {
return XENOMAI_SKINCALL2(__psos_muxid, __psos_t_ident, name, tid_r);


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : psos: fix t_shadow() regression

2010-09-21 Thread GIT version control
Module: xenomai-rpm
Branch: for-upstream
Commit: fde0f283797569ffb4020088d380cba547be5d5c
URL:
http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=fde0f283797569ffb4020088d380cba547be5d5c

Author: Philippe Gerum r...@xenomai.org
Date:   Mon Sep 20 07:02:55 2010 +0200

psos: fix t_shadow() regression

Introducing the u_mode support caused the t_shadow routine to send a
bad arglist to the __t_create syscall used internally.

---

 ksrc/skins/psos+/syscall.c |3 ++-
 src/skins/psos+/task.c |4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/ksrc/skins/psos+/syscall.c b/ksrc/skins/psos+/syscall.c
index ef20b48..3ce53cc 100644
--- a/ksrc/skins/psos+/syscall.c
+++ b/ksrc/skins/psos+/syscall.c
@@ -110,7 +110,8 @@ static int __t_create(struct pt_regs *regs)
 * TCB pointer freely. */
tid = xnthread_handle(task-threadbase);
task-pthread = bulk.a5; /* hidden pthread_t identifier. */
-   if (__xn_safe_copy_to_user((void __user *)__xn_reg_arg2(regs), 
tid,
+   if (__xn_reg_arg2(regs) 
+   __xn_safe_copy_to_user((void __user *)__xn_reg_arg2(regs), 
tid,
   sizeof(tid)))
return -EFAULT;
 
diff --git a/src/skins/psos+/task.c b/src/skins/psos+/task.c
index 89b22ed..89871cb 100644
--- a/src/skins/psos+/task.c
+++ b/src/skins/psos+/task.c
@@ -180,10 +180,10 @@ u_long t_shadow(const char *name, /* Xenomai extension. */
bulk.a1 = (u_long)name;
bulk.a2 = (u_long)prio;
bulk.a3 = (u_long)flags;
-   bulk.a4 = (u_long)tid_r;
+   bulk.a4 = (u_long)xeno_init_current_mode();
bulk.a5 = (u_long)pthread_self();
 
-   ret = XENOMAI_SKINCALL2(__psos_muxid, __psos_t_create, bulk, NULL);
+   ret = XENOMAI_SKINCALL3(__psos_muxid, __psos_t_create, bulk, tid_r, 
NULL);
if (!ret)
xeno_set_current();
 


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : nucleus/bufd: fix documentation group tag

2010-09-21 Thread GIT version control
Module: xenomai-rpm
Branch: for-upstream
Commit: ea727a088fdbc62d1525e292717bf88607afeb3f
URL:
http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=ea727a088fdbc62d1525e292717bf88607afeb3f

Author: Philippe Gerum r...@xenomai.org
Date:   Mon Sep 20 07:02:51 2010 +0200

nucleus/bufd: fix documentation group tag

---

 include/nucleus/bufd.h |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/include/nucleus/bufd.h b/include/nucleus/bufd.h
index 262e546..2b56474 100644
--- a/include/nucleus/bufd.h
+++ b/include/nucleus/bufd.h
@@ -17,7 +17,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  *
- * \ingroup map
+ * \ingroup bufd
  */
 
 #ifndef _XENO_NUCLEUS_BUFD_H


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : psos: introduce t_setreg/t_getreg syscalls

2010-09-21 Thread GIT version control
Module: xenomai-rpm
Branch: for-upstream
Commit: 6306a9c66f92ff6378c0baa1afcf21e7c5477934
URL:
http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=6306a9c66f92ff6378c0baa1afcf21e7c5477934

Author: Philippe Gerum r...@xenomai.org
Date:   Tue Sep 21 17:05:32 2010 +0200

psos: introduce t_setreg/t_getreg syscalls

---

 include/psos+/syscall.h|2 +
 ksrc/skins/psos+/syscall.c |   55 
 src/skins/psos+/task.c |   12 +
 3 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/include/psos+/syscall.h b/include/psos+/syscall.h
index 86cc998..a3507d0 100644
--- a/include/psos+/syscall.h
+++ b/include/psos+/syscall.h
@@ -75,6 +75,8 @@
 #define __psos_tm_getc  46
 /* Xenomai internal: get hidden pthread_t identifier. */
 #define __psos_t_getpth 47
+#define __psos_t_setreg 48
+#define __psos_t_getreg 49
 
 struct psos_arg_bulk {
 u_long a1;
diff --git a/ksrc/skins/psos+/syscall.c b/ksrc/skins/psos+/syscall.c
index 3ce53cc..2990fef 100644
--- a/ksrc/skins/psos+/syscall.c
+++ b/ksrc/skins/psos+/syscall.c
@@ -320,6 +320,59 @@ static int __t_setpri(struct pt_regs *regs)
 }
 
 /*
+ * int __t_setreg(u_long tid, u_long regnum, u_long regval)
+ */
+
+static int __t_setreg(struct pt_regs *regs)
+{
+   xnhandle_t handle = __xn_reg_arg1(regs);
+   u_long regnum, regval;
+   psostask_t *task;
+
+   if (handle)
+   task = __psos_task_lookup(handle);
+   else
+   task = __psos_task_current(current);
+
+   if (task == NULL)
+   return ERR_OBJID;
+
+   regnum = __xn_reg_arg2(regs);
+   regval = __xn_reg_arg3(regs);
+
+   return t_setreg((u_long)task, regnum, regval);
+}
+
+/*
+ * int __t_getreg(u_long tid, u_long regnum, u_long *regvalp)
+ */
+
+static int __t_getreg(struct pt_regs *regs)
+{
+   xnhandle_t handle = __xn_reg_arg1(regs);
+   u_long err, regnum, regval;
+   psostask_t *task;
+
+   if (handle)
+   task = __psos_task_lookup(handle);
+   else
+   task = __psos_task_current(current);
+
+   if (task == NULL)
+   return ERR_OBJID;
+
+   regnum = __xn_reg_arg2(regs);
+
+   err = t_getreg((u_long)task, regnum, regval);
+   if (err == SUCCESS 
+   __xn_safe_copy_to_user((void __user *)__xn_reg_arg3(regs), regval,
+  sizeof(regval)))
+   return -EFAULT;
+
+   return err;
+}
+
+/*
  * int __ev_send(u_long tid, u_long events)
  */
 
@@ -1425,6 +1478,8 @@ static xnsysent_t __systab[] = {
[__psos_t_ident] = {__t_ident, __xn_exec_primary},
[__psos_t_mode] = {__t_mode, __xn_exec_primary},
[__psos_t_setpri] = {__t_setpri, __xn_exec_conforming},
+   [__psos_t_setreg] = {__t_setreg, __xn_exec_any},
+   [__psos_t_getreg] = {__t_getreg, __xn_exec_any},
[__psos_ev_send] = {__ev_send, __xn_exec_any},
[__psos_ev_receive] = {__ev_receive, __xn_exec_primary},
[__psos_q_create] = {__q_create, __xn_exec_any},
diff --git a/src/skins/psos+/task.c b/src/skins/psos+/task.c
index 89871cb..98d16f6 100644
--- a/src/skins/psos+/task.c
+++ b/src/skins/psos+/task.c
@@ -246,6 +246,18 @@ u_long t_resume(u_long tid)
return XENOMAI_SKINCALL1(__psos_muxid, __psos_t_resume, tid);
 }
 
+u_long t_setreg(u_long tid, u_long regnum, u_long regvalue)
+{
+   return XENOMAI_SKINCALL3(__psos_muxid, __psos_t_setreg,
+tid, regnum, regvalue);
+}
+
+u_long t_getreg(u_long tid, u_long regnum, u_long *regvalue_r)
+{
+   return XENOMAI_SKINCALL3(__psos_muxid, __psos_t_getreg,
+tid, regnum, regvalue_r);
+}
+
 u_long t_ident(const char *name, u_long nodeno, u_long *tid_r)
 {
return XENOMAI_SKINCALL2(__psos_muxid, __psos_t_ident, name, tid_r);


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git