mirror of https://github.com/ARMmbed/mbed-os.git
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
parent
86b91beeca
commit
32d04a08d0
|
@ -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;
|
||||
}
|
|
@ -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
|
||||
|
||||
/** @}*/
|
Loading…
Reference in New Issue