Commit 0f582b98 authored by Philippe Gerum's avatar Philippe Gerum Committed by Jan Kiszka

cobalt/dovetail: provide core-specific context extensions

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's avatarPhilippe Gerum <rpm@xenomai.org>
Signed-off-by: Jan Kiszka's avatarJan Kiszka <jan.kiszka@siemens.com>
parent 58f5001f
/*
* SPDX-License-Identifier: GPL-2.0
*
* Copyright (C) 2017 Philippe Gerum <rpm@xenomai.org>
*/
#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 */
/**
* Copyright (C) 2012 Philippe Gerum <rpm@xenomai.org>.
* 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.
*/
#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 */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment