Preparation for SB Virtual IRQs. Removed some obsolete code from SBs.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15618 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
37b30694bf
commit
9484875fef
|
@ -38,6 +38,13 @@
|
|||
#define SB_CFG_NUM_REGIONS 2
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables support for sandbox Virtual IRQs.
|
||||
*/
|
||||
#if !defined(SB_CFG_ENABLE_VRQ) || defined(__DOXYGEN__)
|
||||
#define SB_CFG_ENABLE_VRQ TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables Posix API in sandboxes using VFS.
|
||||
*/
|
||||
|
|
|
@ -38,6 +38,13 @@
|
|||
#define SB_CFG_NUM_REGIONS 2
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables support for sandbox Virtual IRQs.
|
||||
*/
|
||||
#if !defined(SB_CFG_ENABLE_VRQ) || defined(__DOXYGEN__)
|
||||
#define SB_CFG_ENABLE_VRQ TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables Posix API in sandboxes using VFS.
|
||||
*/
|
||||
|
|
|
@ -38,6 +38,13 @@
|
|||
#define SB_CFG_NUM_REGIONS 2
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables support for sandbox Virtual IRQs.
|
||||
*/
|
||||
#if !defined(SB_CFG_ENABLE_VRQ) || defined(__DOXYGEN__)
|
||||
#define SB_CFG_ENABLE_VRQ TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables Posix API in sandboxes using VFS.
|
||||
*/
|
||||
|
|
|
@ -38,6 +38,13 @@
|
|||
#define SB_CFG_NUM_REGIONS 2
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables support for sandbox Virtual IRQs.
|
||||
*/
|
||||
#if !defined(SB_CFG_ENABLE_VRQ) || defined(__DOXYGEN__)
|
||||
#define SB_CFG_ENABLE_VRQ TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables Posix API in sandboxes using VFS.
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# List of the ChibiOS ARMv7-M sandbox host files.
|
||||
SBHOSTSRC = $(CHIBIOS)/os/sb/host/sbhost.c \
|
||||
$(CHIBIOS)/os/sb/host/sbapi.c \
|
||||
$(CHIBIOS)/os/sb/host/sbvrq.c \
|
||||
$(CHIBIOS)/os/sb/host/sbelf.c \
|
||||
$(CHIBIOS)/os/sb/host/sbposix.c
|
||||
|
||||
|
|
|
@ -94,6 +94,10 @@
|
|||
#error "SB_CFG_NUM_REGIONS not defined in sbconf.h"
|
||||
#endif
|
||||
|
||||
#if !defined(SB_CFG_ENABLE_VRQ) || defined(__DOXYGEN__)
|
||||
#error "SB_CFG_ENABLE_VRQ not defined in sbconf.h"
|
||||
#endif
|
||||
|
||||
#if !defined(SB_CFG_ENABLE_VFS) || defined(__DOXYGEN__)
|
||||
#error "SB_CFG_ENABLE_VFS not defined in sbconf.h"
|
||||
#endif
|
||||
|
@ -281,6 +285,7 @@ extern "C" {
|
|||
/*===========================================================================*/
|
||||
|
||||
#include "sbsysc.h"
|
||||
#include "sbvrq.h"
|
||||
#include "sbelf.h"
|
||||
#include "sbposix.h"
|
||||
#include "sbapi.h"
|
||||
|
|
|
@ -36,6 +36,20 @@
|
|||
/* Module local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
static void sb_api_stdio(struct port_extctx *ectxp);
|
||||
static void sb_api_exit(struct port_extctx *ctxp);
|
||||
static void sb_api_get_systime(struct port_extctx *ctxp);
|
||||
static void sb_api_get_frequency(struct port_extctx *ctxp);
|
||||
static void sb_api_sleep(struct port_extctx *ctxp);
|
||||
static void sb_api_sleep_until_windowed(struct port_extctx *ctxp);
|
||||
static void sb_api_wait_message(struct port_extctx *ctxp);
|
||||
static void sb_api_reply_message(struct port_extctx *ctxp);
|
||||
static void sb_api_wait_one_timeout(struct port_extctx *ctxp);
|
||||
static void sb_api_wait_any_timeout(struct port_extctx *ctxp);
|
||||
static void sb_api_wait_all_timeout(struct port_extctx *ctxp);
|
||||
static void sb_api_broadcast_flags(struct port_extctx *ctxp);
|
||||
static void sb_api_loadelf(struct port_extctx *ectxp);
|
||||
|
||||
/**
|
||||
* @name Standard API handlers
|
||||
* @{
|
||||
|
@ -960,26 +974,8 @@ static void sb_cleanup(void) {
|
|||
#endif
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
void __sb_abort(msg_t msg) {
|
||||
|
||||
chSysUnlock();
|
||||
|
||||
sb_cleanup();
|
||||
|
||||
chSysLock();
|
||||
#if CH_CFG_USE_EVENTS == TRUE
|
||||
chEvtBroadcastI(&sb.termination_es);
|
||||
#endif
|
||||
chThdExitS(msg);
|
||||
chSysHalt("zombies");
|
||||
}
|
||||
|
||||
#if (SB_CFG_ENABLE_VFS == TRUE) || defined(__DOXYGEN__)
|
||||
void sb_api_stdio(struct port_extctx *ectxp) {
|
||||
static void sb_api_stdio(struct port_extctx *ectxp) {
|
||||
|
||||
switch (ectxp->r0) {
|
||||
case SB_POSIX_OPEN:
|
||||
|
@ -1052,7 +1048,7 @@ void sb_api_stdio(struct port_extctx *ectxp) {
|
|||
}
|
||||
#endif /* SB_CFG_ENABLE_VFS == TRUE */
|
||||
|
||||
void sb_api_exit(struct port_extctx *ectxp) {
|
||||
static void sb_api_exit(struct port_extctx *ectxp) {
|
||||
|
||||
sb_cleanup();
|
||||
|
||||
|
@ -1067,17 +1063,17 @@ void sb_api_exit(struct port_extctx *ectxp) {
|
|||
ectxp->r0 = CH_RET_ENOSYS;
|
||||
}
|
||||
|
||||
void sb_api_get_systime(struct port_extctx *ectxp) {
|
||||
static void sb_api_get_systime(struct port_extctx *ectxp) {
|
||||
|
||||
ectxp->r0 = (uint32_t)chVTGetSystemTimeX();
|
||||
}
|
||||
|
||||
void sb_api_get_frequency(struct port_extctx *ectxp) {
|
||||
static void sb_api_get_frequency(struct port_extctx *ectxp) {
|
||||
|
||||
ectxp->r0 = (uint32_t)CH_CFG_ST_FREQUENCY;
|
||||
}
|
||||
|
||||
void sb_api_sleep(struct port_extctx *ectxp) {
|
||||
static void sb_api_sleep(struct port_extctx *ectxp) {
|
||||
sysinterval_t interval = (sysinterval_t )ectxp->r0;
|
||||
|
||||
if (interval != TIME_IMMEDIATE) {
|
||||
|
@ -1087,14 +1083,14 @@ void sb_api_sleep(struct port_extctx *ectxp) {
|
|||
ectxp->r0 = CH_RET_SUCCESS;
|
||||
}
|
||||
|
||||
void sb_api_sleep_until_windowed(struct port_extctx *ectxp) {
|
||||
static void sb_api_sleep_until_windowed(struct port_extctx *ectxp) {
|
||||
|
||||
chThdSleepUntilWindowed((systime_t )ectxp->r0, (systime_t )ectxp->r1);
|
||||
|
||||
ectxp->r0 = CH_RET_SUCCESS;
|
||||
}
|
||||
|
||||
void sb_api_wait_message(struct port_extctx *ectxp) {
|
||||
static void sb_api_wait_message(struct port_extctx *ectxp) {
|
||||
#if CH_CFG_USE_MESSAGES == TRUE
|
||||
sb_class_t *sbp = (sb_class_t *)chThdGetSelfX()->ctx.syscall.p;
|
||||
|
||||
|
@ -1117,7 +1113,7 @@ void sb_api_wait_message(struct port_extctx *ectxp) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void sb_api_reply_message(struct port_extctx *ectxp) {
|
||||
static void sb_api_reply_message(struct port_extctx *ectxp) {
|
||||
#if CH_CFG_USE_MESSAGES == TRUE
|
||||
sb_class_t *sbp = (sb_class_t *)chThdGetSelfX()->ctx.syscall.p;
|
||||
|
||||
|
@ -1139,7 +1135,7 @@ void sb_api_reply_message(struct port_extctx *ectxp) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void sb_api_wait_one_timeout(struct port_extctx *ectxp) {
|
||||
static void sb_api_wait_one_timeout(struct port_extctx *ectxp) {
|
||||
#if CH_CFG_USE_EVENTS == TRUE
|
||||
|
||||
ectxp->r0 = (uint32_t)chEvtWaitOneTimeout((eventmask_t )ectxp->r0,
|
||||
|
@ -1149,7 +1145,7 @@ void sb_api_wait_one_timeout(struct port_extctx *ectxp) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void sb_api_wait_any_timeout(struct port_extctx *ectxp) {
|
||||
static void sb_api_wait_any_timeout(struct port_extctx *ectxp) {
|
||||
#if CH_CFG_USE_EVENTS == TRUE
|
||||
|
||||
ectxp->r0 = (uint32_t)chEvtWaitAnyTimeout((eventmask_t )ectxp->r0,
|
||||
|
@ -1159,7 +1155,7 @@ void sb_api_wait_any_timeout(struct port_extctx *ectxp) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void sb_api_wait_all_timeout(struct port_extctx *ectxp) {
|
||||
static void sb_api_wait_all_timeout(struct port_extctx *ectxp) {
|
||||
#if CH_CFG_USE_EVENTS == TRUE
|
||||
|
||||
ectxp->r0 = (uint32_t)chEvtWaitAllTimeout((eventmask_t )ectxp->r0,
|
||||
|
@ -1169,7 +1165,7 @@ void sb_api_wait_all_timeout(struct port_extctx *ectxp) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void sb_api_broadcast_flags(struct port_extctx *ectxp) {
|
||||
static void sb_api_broadcast_flags(struct port_extctx *ectxp) {
|
||||
#if CH_CFG_USE_EVENTS == TRUE
|
||||
sb_class_t *sbp = (sb_class_t *)chThdGetSelfX()->ctx.syscall.p;
|
||||
|
||||
|
@ -1180,7 +1176,7 @@ void sb_api_broadcast_flags(struct port_extctx *ectxp) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void sb_api_loadelf(struct port_extctx *ectxp) {
|
||||
static void sb_api_loadelf(struct port_extctx *ectxp) {
|
||||
#if (SB_CFG_ENABLE_VFS == TRUE) || defined(__DOXYGEN__)
|
||||
sb_class_t *sbp = (sb_class_t *)chThdGetSelfX()->ctx.syscall.p;
|
||||
const char *fname = (const char *)ectxp->r0;
|
||||
|
@ -1202,4 +1198,22 @@ void sb_api_loadelf(struct port_extctx *ectxp) {
|
|||
#endif
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
void __sb_abort(msg_t msg) {
|
||||
|
||||
chSysUnlock();
|
||||
|
||||
sb_cleanup();
|
||||
|
||||
chSysLock();
|
||||
#if CH_CFG_USE_EVENTS == TRUE
|
||||
chEvtBroadcastI(&sb.termination_es);
|
||||
#endif
|
||||
chThdExitS(msg);
|
||||
chSysHalt("zombies");
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
|
|
@ -49,48 +49,6 @@
|
|||
*/
|
||||
typedef void (*port_syscall_t)(struct port_extctx *ectx);
|
||||
|
||||
/**
|
||||
* @brief Sandbox Stream interface methods.
|
||||
* @note Is intentionally compatible with HAL streams but we have to
|
||||
* duplicate is because we don't want dependencies with HAL in
|
||||
* this subsystem.
|
||||
*/
|
||||
struct SandboxStreamVMT {
|
||||
/**
|
||||
* @brief Object instance offset.
|
||||
*/
|
||||
size_t instance_offset;
|
||||
/**
|
||||
* @brief Stream write buffer method.
|
||||
*/
|
||||
size_t (*write)(void *instance, const uint8_t *bp, size_t n);
|
||||
/**
|
||||
* @brief Stream read buffer method.
|
||||
*/
|
||||
size_t (*read)(void *instance, uint8_t *bp, size_t n);
|
||||
/**
|
||||
* @brief Channel put method, blocking.
|
||||
*/
|
||||
msg_t (*put)(void *instance, uint8_t b);
|
||||
/**
|
||||
* @brief Channel get method, blocking.
|
||||
*/
|
||||
msg_t (*get)(void *instance);
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Sandbox Stream class.
|
||||
* @note Is intentionally compatible with HAL streams but we have to
|
||||
* duplicate is because we don't want dependencies with HAL in
|
||||
* this subsystem.
|
||||
*/
|
||||
typedef struct {
|
||||
/**
|
||||
* @brief Virtual Methods Table.
|
||||
*/
|
||||
const struct SandboxStreamVMT *vmt;
|
||||
} SandboxStream;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
@ -102,19 +60,7 @@ typedef struct {
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void sb_api_stdio(struct port_extctx *ectxp);
|
||||
void sb_api_exit(struct port_extctx *ctxp);
|
||||
void sb_api_get_systime(struct port_extctx *ctxp);
|
||||
void sb_api_get_frequency(struct port_extctx *ctxp);
|
||||
void sb_api_sleep(struct port_extctx *ctxp);
|
||||
void sb_api_sleep_until_windowed(struct port_extctx *ctxp);
|
||||
void sb_api_wait_message(struct port_extctx *ctxp);
|
||||
void sb_api_reply_message(struct port_extctx *ctxp);
|
||||
void sb_api_wait_one_timeout(struct port_extctx *ctxp);
|
||||
void sb_api_wait_any_timeout(struct port_extctx *ctxp);
|
||||
void sb_api_wait_all_timeout(struct port_extctx *ctxp);
|
||||
void sb_api_broadcast_flags(struct port_extctx *ctxp);
|
||||
void sb_api_loadelf(struct port_extctx *ectxp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014,
|
||||
2015,2016,2017,2018,2019,2020,2021 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS.
|
||||
|
||||
ChibiOS 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 version 3 of the License.
|
||||
|
||||
ChibiOS 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file sb/host/sbvrq.c
|
||||
* @brief ARM SandBox host Virtual IRQs code.
|
||||
*
|
||||
* @addtogroup ARM_SANDBOX_VRQ
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "sb.h"
|
||||
|
||||
#if (SB_CFG_ENABLE_VRQ == TRUE) || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#endif /* SB_CFG_ENABLE_VRQ == TRUE */
|
||||
|
||||
/** @} */
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014,
|
||||
2015,2016,2017,2018,2019,2020,2021 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS.
|
||||
|
||||
ChibiOS 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 version 3 of the License.
|
||||
|
||||
ChibiOS 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file sb/host/sbvrq.h
|
||||
* @brief ARM SandBox host Virtual IRQs macros and structures.
|
||||
*
|
||||
* @addtogroup ARM_SANDBOX_HOSTAPI
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef SBVRQ_H
|
||||
#define SBVRQ_H
|
||||
|
||||
#if (SB_CFG_ENABLE_VRQ == TRUE) || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Type of a mask of Virtual IRQs.
|
||||
*/
|
||||
typedef uint32_t sb_vrqmask_t;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void sbVRQPendI(sb_class_t *sbp, sb_vrqmask_t vmask);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module inline functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#endif /* SB_CFG_ENABLE_VRQ == TRUE */
|
||||
|
||||
#endif /* SBVRQ_H */
|
||||
|
||||
/** @} */
|
Loading…
Reference in New Issue