RTX5: uVisor: Add OsEventObserver

Add the OsEventObserver mechanism. A client interested in receiving
notifications on certain OS events can register to receive notifications
with osRegisterForOsEvents. This is useful for clients like the secure
memory allocator, which observes thread switching events in order to
swap in and out different memory allocator objects.
pull/6273/head
Jaeden Amero 2017-01-19 13:41:05 +00:00 committed by Bartek Szatkowski
parent 86b91beeca
commit 32d04a08d0
2 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2013-2016 ARM Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* -----------------------------------------------------------------------------
*
* Project: CMSIS-RTOS RTX
* Title: OS Event Observer
*
* -----------------------------------------------------------------------------
*/
#include "rt_OsEventObserver.h"
/*
* _____ _____ ____ __ _____
* | ___|_ _\ \/ / \/ | ____|
* | |_ | | \ /| |\/| | _|
* | _| | | / \| | | | |___
* |_| |___/_/\_\_| |_|_____|
*
* FIXME:
* The osEventObs variable must be in protected memory. If not every box
* and box 0 can modify osEventObs to point to any handler to run code
* privileged. This issue is tracked at
* <https://github.com/ARMmbed/uvisor/issues/235>.
*/
const OsEventObserver *osEventObs;
void osRegisterForOsEvents(const OsEventObserver *observer)
{
static uint8_t has_been_called = 0;
if (has_been_called) {
return;
}
has_been_called = 1;
osEventObs = observer;
}

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2013-2016 ARM Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* -----------------------------------------------------------------------------
*
* Project: CMSIS-RTOS RTX
* Title: OS Event Observer
*
* -----------------------------------------------------------------------------
*/
#ifndef _RT_OS_EVENT_OBSERVER_H
#define _RT_OS_EVENT_OBSERVER_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
uint32_t version;
void (*pre_start)(void);
void *(*thread_create)(int thread_id, void *context);
void (*thread_destroy)(void *context);
void (*thread_switch)(void *context);
} OsEventObserver;
extern const OsEventObserver *osEventObs;
void osRegisterForOsEvents(const OsEventObserver *observer);
#ifdef __cplusplus
};
#endif
#endif
/** @}*/