On 20.02.21 13:45, Philippe Gerum wrote:
> From: Philippe Gerum <[email protected]>
> 
> In order to intimately connect Cobalt to the kernel, Dovetail allows
> us to extend the latter with data and procedures we need:
> 
> - we can embed our own context information into a set of critical
>   kernel data structures. This information should be defined as a set
>   of core-specific types, such as struct oob_thread_state which is
>   going to be part of struct thread_info.
> 
> - we can define preparation and finalization handlers for out-of-band
>   IRQ handling, which Dovetail should invoke right after entering the
>   outer interrupt frame, then right before leaving it respectively.
> 
> Add the couple of interface headers we need to connect those elements
> to the kernel.
> 
> Signed-off-by: Philippe Gerum <[email protected]>
> ---
>  kernel/cobalt/include/dovetail/irq.h         | 52 ++++++++++++++++++++
>  kernel/cobalt/include/dovetail/thread_info.h | 33 +++++++++++++
>  2 files changed, 85 insertions(+)
>  create mode 100644 kernel/cobalt/include/dovetail/irq.h
>  create mode 100644 kernel/cobalt/include/dovetail/thread_info.h
> 
> diff --git a/kernel/cobalt/include/dovetail/irq.h 
> b/kernel/cobalt/include/dovetail/irq.h
> new file mode 100644
> index 000000000..66d020fde
> --- /dev/null
> +++ b/kernel/cobalt/include/dovetail/irq.h
> @@ -0,0 +1,52 @@
> +/*
> + * SPDX-License-Identifier: GPL-2.0
> + *
> + * Copyright (C) 2017 Philippe Gerum  <[email protected]>
> + */
> +
> +#ifndef _COBALT_DOVETAIL_IRQ_H
> +#define _COBALT_DOVETAIL_IRQ_H
> +
> +#ifdef CONFIG_XENOMAI
> +
> +#include <cobalt/kernel/sched.h>
> +
> +/* hard irqs off. */
> +static inline void irq_enter_pipeline(void)
> +{
> +     struct xnsched *sched = xnsched_current();
> +
> +     sched->lflags |= XNINIRQ;
> +}
> +
> +/* hard irqs off. */
> +static inline void irq_exit_pipeline(void)
> +{
> +     struct xnsched *sched = xnsched_current();
> +
> +     sched->lflags &= ~XNINIRQ;
> +
> +     /*
> +      * CAUTION: Switching stages as a result of rescheduling may
> +      * re-enable irqs, shut them off before returning if so.
> +      */
> +     if ((sched->status|sched->lflags) & XNRESCHED) {
> +             xnsched_run();
> +             if (!hard_irqs_disabled())
> +                     hard_local_irq_disable();
> +     }
> +}
> +
> +#else  /* !CONFIG_XENOMAI */
> +
> +static inline void irq_enter_pipeline(void)
> +{
> +}
> +
> +static inline void irq_exit_pipeline(void)
> +{
> +}
> +
> +#endif       /* !CONFIG_XENOMAI */
> +
> +#endif /* !_COBALT_DOVETAIL_IRQ_H */
> diff --git a/kernel/cobalt/include/dovetail/thread_info.h 
> b/kernel/cobalt/include/dovetail/thread_info.h
> new file mode 100644
> index 000000000..69b89de35
> --- /dev/null
> +++ b/kernel/cobalt/include/dovetail/thread_info.h
> @@ -0,0 +1,33 @@
> +/**
> + * Copyright (C) 2012 Philippe Gerum <[email protected]>.
> + * Copyright (c) Siemens AG, 2020
> + *
> + * Xenomai is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
> + * USA; either version 2 of the License, or (at your option) any later
> + * version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Also a stale copyright header.

> + */
> +#ifndef _COBALT_DOVETAIL_THREAD_INFO_H
> +#define _COBALT_DOVETAIL_THREAD_INFO_H
> +
> +struct xnthread;
> +struct cobalt_process;
> +
> +struct oob_thread_state {
> +     /* Core thread backlink. */
> +     struct xnthread *thread;
> +     /* User process backlink. NULL for core threads. */
> +     struct cobalt_process *process;
> +};
> +
> +#endif /* !_COBALT_DOVETAIL_THREAD_INFO_H */
> 

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

Reply via email to