![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Rtos API example
Embed:
(wiki syntax)
Show/hide line numbers
api.h
00001 /* 00002 * Copyright (c) 2016, ARM Limited, All Rights Reserved 00003 * SPDX-License-Identifier: Apache-2.0 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); you may 00006 * not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00013 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 #ifndef __UVISOR_API_H__ 00018 #define __UVISOR_API_H__ 00019 00020 #include "rt_OsEventObserver.h" 00021 #include "api/inc/uvisor_exports.h" 00022 #include "api/inc/virq_exports.h" 00023 #include "api/inc/debug_exports.h" 00024 #include "api/inc/halt_exports.h" 00025 #include "api/inc/pool_queue_exports.h" 00026 #include "api/inc/page_allocator_exports.h" 00027 #include "api/inc/uvisor_spinlock_exports.h" 00028 #include <stdint.h> 00029 00030 #define UVISOR_API_MAGIC 0x5C9411B4 00031 #define UVISOR_API_VERSION (10) 00032 00033 UVISOR_EXTERN_C_BEGIN 00034 00035 extern void uvisor_init(void); 00036 /* This method is an api method which initializes the g_semihosting_magic variable. 00037 * This function will only work if called in privileged mode or from secure code, 00038 * it is only intended to be called by debugger after reset. 00039 */ 00040 void debug_semihosting_enable(void); 00041 00042 typedef struct { 00043 uint32_t magic; 00044 uint32_t (*get_version)(uint32_t); 00045 00046 void (*init)(uint32_t caller); 00047 00048 void (*irq_enable)(uint32_t irqn); 00049 void (*irq_disable)(uint32_t irqn); 00050 void (*irq_disable_all)(void); 00051 void (*irq_enable_all)(void); 00052 void (*irq_set_vector)(uint32_t irqn, uint32_t vector); 00053 uint32_t (*irq_get_vector)(uint32_t irqn); 00054 void (*irq_set_priority)(uint32_t irqn, uint32_t priority); 00055 uint32_t (*irq_get_priority)(uint32_t irqn); 00056 void (*irq_set_pending)(uint32_t irqn); 00057 uint32_t (*irq_get_pending)(uint32_t irqn); 00058 void (*irq_clear_pending)(uint32_t irqn); 00059 int (*irq_get_level)(void); 00060 void (*irq_system_reset)(TResetReason reason); 00061 00062 int (*page_malloc)(UvisorPageTable * const table); 00063 int (*page_free)(const UvisorPageTable * const table); 00064 00065 int (*box_namespace)(int box_id, char *box_namespace, size_t length); 00066 int (*box_id_for_namespace)(int * const box_id, const char * const box_namespace); 00067 00068 void (*error)(THaltUserError reason); 00069 void (*start)(void); 00070 void (*vmpu_mem_invalidate)(void); 00071 00072 int (*pool_init)(uvisor_pool_t *, void *, size_t, size_t); 00073 int (*pool_queue_init)(uvisor_pool_queue_t *, uvisor_pool_t *, void *, size_t, size_t); 00074 uvisor_pool_slot_t (*pool_allocate)(uvisor_pool_t *); 00075 uvisor_pool_slot_t (*pool_try_allocate)(uvisor_pool_t *); 00076 uvisor_pool_slot_t (*pool_queue_enqueue)(uvisor_pool_queue_t *, uvisor_pool_slot_t); 00077 uvisor_pool_slot_t (*pool_queue_try_enqueue)(uvisor_pool_queue_t *, uvisor_pool_slot_t); 00078 uvisor_pool_slot_t (*pool_free)(uvisor_pool_t *, uvisor_pool_slot_t); 00079 uvisor_pool_slot_t (*pool_try_free)(uvisor_pool_t *, uvisor_pool_slot_t); 00080 uvisor_pool_slot_t (*pool_queue_dequeue)(uvisor_pool_queue_t *, uvisor_pool_slot_t); 00081 uvisor_pool_slot_t (*pool_queue_try_dequeue)(uvisor_pool_queue_t *, uvisor_pool_slot_t); 00082 uvisor_pool_slot_t (*pool_queue_dequeue_first)(uvisor_pool_queue_t *); 00083 uvisor_pool_slot_t (*pool_queue_try_dequeue_first)(uvisor_pool_queue_t *); 00084 uvisor_pool_slot_t (*pool_queue_find_first)(uvisor_pool_queue_t *, TQueryFN_Ptr, void *); 00085 uvisor_pool_slot_t (*pool_queue_try_find_first)(uvisor_pool_queue_t *, TQueryFN_Ptr, void *); 00086 00087 void (*spin_init)(UvisorSpinlock * spinlock); 00088 bool (*spin_trylock)(UvisorSpinlock * spinlock); 00089 void (*spin_lock)(UvisorSpinlock * spinlock); 00090 void (*spin_unlock)(UvisorSpinlock * spinlock); 00091 00092 void (*debug_semihosting_enable)(void); 00093 00094 OsEventObserver os_event_observer; 00095 } UVISOR_PACKED UvisorApi; 00096 00097 extern UvisorApi uvisor_api; 00098 00099 static UVISOR_FORCEINLINE uint32_t uvisor_get_version(void) 00100 { 00101 return uvisor_api.get_version(UVISOR_API_VERSION); 00102 } 00103 00104 UVISOR_EXTERN_C_END 00105 00106 #endif /* __UVISOR_API_H__ */
Generated on Sun Jul 17 2022 08:25:18 by
![doxygen](doxygen.png)