Greg Steiert / pegasus_dev

Dependents:   blinky_max32630fthr

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers export_table_exports.h Source File

export_table_exports.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_EXPORT_TABLE_EXPORTS_H__
00018 #define __UVISOR_API_EXPORT_TABLE_EXPORTS_H__
00019 
00020 #include "rt_OsEventObserver.h"
00021 #include "api/inc/pool_queue_exports.h"
00022 #include <stdint.h>
00023 
00024 /* If this magic doesn't match what you get in a TUvisorExportTable, then you
00025  * didn't find a TUvisorExportTable and all bets are off as to what will be
00026  * contained in what you found. */
00027 #define UVISOR_EXPORT_MAGIC 0x5C9411B4
00028 
00029 /* This is the export table API version. If this version doesn't match what you
00030  * get in TUvisorExportTable, then you need a different header file to
00031  * understand the TUvisorExportTable. */
00032 #define UVISOR_EXPORT_VERSION 0
00033 
00034 typedef struct {
00035     /* magic and version must be present as the first two elements in this
00036      * table so that across various versions of the table layout, the table can
00037      * be interpreted correctly. */
00038     uint32_t magic;
00039     uint32_t version;
00040 
00041     OsEventObserver os_event_observer;
00042 
00043     UvisorPoolTable pool;
00044 
00045     /* This must be the last element of the table so that uvisor-input.S can
00046      * export the size statically. */
00047     uint32_t size;
00048 } TUvisorExportTable;
00049 
00050 static inline TUvisorExportTable const * uvisor_export_table(void)
00051 {
00052     /* Defined in uvisor-input.S */
00053     extern uint32_t uvisor_config;
00054     extern uint32_t uvisor_export_table_size;
00055 
00056     uintptr_t uvisor_config_addr = (uintptr_t) &uvisor_config;
00057     return (TUvisorExportTable *) (uvisor_config_addr - uvisor_export_table_size);
00058 }
00059 
00060 #endif