[Xenomai-git] Philippe Gerum : psos: introduce t_setreg/t_getreg syscalls
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
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
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
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
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