1/* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#ifndef BASE_STARTUP_PARAM_OS_ADAPTER_H 17#define BASE_STARTUP_PARAM_OS_ADAPTER_H 18#include <stdint.h> 19#include <string.h> 20#include <unistd.h> 21#include <stdio.h> 22#include <string.h> 23#if !(defined __LITEOS_A__ || defined __LITEOS_M__) 24#include <sys/syscall.h> 25#include "loop_event.h" 26#else 27#include <time.h> 28#endif 29 30#ifndef __LITEOS_M__ 31#include <pthread.h> 32#endif 33#include "param_utils.h" 34#include "param_common.h" 35#ifdef __cplusplus 36#if __cplusplus 37extern "C" { 38#endif 39#endif 40 41#ifndef STATIC_INLINE 42#ifdef STARTUP_INIT_TEST 43#define STATIC_INLINE 44#else 45#define STATIC_INLINE static inline 46#endif 47#endif 48 49#define PARAM_WORKSPACE_INVALID ((uint32_t)-1) 50#define PARAM_WORKSPACE_MIN (1024) 51/* 52 length for parameter = node size + data size 53 xxxx.xxxx.xxxx.xxxx 54 node size: 55 24 * (count(.) + 1) + strlen(xxxx.xxxx.xxxx.xxxx) 56 data size 57 strlen(xxxx.xxxx.xxxx.xxxx) + 96 58 59 dac size 60 24 * (count(.) + 1) + sizeof(ParamSecurityNode) 61*/ 62#define DAC_DEFAULT_GROUP 0 63#define DAC_DEFAULT_USER 0 64 65#ifdef STARTUP_INIT_TEST 66#define DAC_DEFAULT_MODE 0777 67#define PARAM_WORKSPACE_DEF (1024 * 80) 68#define PARAM_WORKSPACE_MAX (1024 * 100) 69#define PARAM_WORKSPACE_SMALL PARAM_WORKSPACE_DEF 70#else 71 72#ifdef __LITEOS_M__ 73#define DAC_DEFAULT_MODE 0777 74#ifndef PARAM_WORKSPACE_MAX 75#define PARAM_WORKSPACE_MAX (1024 * 5) 76#endif 77#define PARAM_WORKSPACE_SMALL PARAM_WORKSPACE_MAX 78#define PARAM_WORKSPACE_DEF PARAM_WORKSPACE_MAX 79#else // __LITEOS_M__ 80 81#ifdef __LITEOS_A__ 82#define DAC_DEFAULT_MODE 0777 83#define PARAM_WORKSPACE_MAX (1024 * 10) 84#define PARAM_WORKSPACE_SMALL PARAM_WORKSPACE_MAX 85#define PARAM_WORKSPACE_DEF PARAM_WORKSPACE_MAX 86#else // __LITEOS_A__ 87#define DAC_DEFAULT_MODE 0774 88#ifdef PARAM_TEST_PERFORMANCE 89#define PARAM_WORKSPACE_MAX (1024 * 1024 * 10) 90#else 91#define PARAM_WORKSPACE_MAX (80 * 1024) 92#endif 93#define PARAM_WORKSPACE_SMALL (1024 * 10) 94#define PARAM_WORKSPACE_DEF (1024 * 30) 95#define PARAM_WORKSPACE_DAC (1024 * 1024 * 2) 96#endif // __LITEOS_A__ 97#endif // __LITEOS_M__ 98#endif // STARTUP_INIT_TEST 99 100#ifndef PARAM_WORKSPACE_DAC 101#define PARAM_WORKSPACE_DAC PARAM_WORKSPACE_SMALL 102#endif 103 104// support timer 105#if defined __LITEOS_A__ || defined __LITEOS_M__ 106struct ParamTimer_; 107typedef void (*ProcessTimer)(const struct ParamTimer_ *taskHandle, void *context); 108typedef struct ParamTimer_ { 109 timer_t timerId; 110 uint64_t repeat; 111 ProcessTimer timeProcessor; 112 void *context; 113} ParamTimer; 114 115typedef ParamTimer *ParamTaskPtr; 116#else 117typedef LoopBase *ParamTaskPtr; 118typedef void (*ProcessTimer)(const ParamTaskPtr taskHandle, void *context); 119#endif 120 121int ParamTimerCreate(ParamTaskPtr *timer, ProcessTimer process, void *context); 122int ParamTimerStart(const ParamTaskPtr timer, uint64_t timeout, uint64_t repeat); 123void ParamTimerClose(ParamTaskPtr timer); 124 125INIT_LOCAL_API void paramMutexEnvInit(void); 126INIT_LOCAL_API int ParamRWMutexCreate(ParamRWMutex *lock); 127INIT_LOCAL_API int ParamRWMutexWRLock(ParamRWMutex *lock); 128INIT_LOCAL_API int ParamRWMutexRDLock(ParamRWMutex *lock); 129INIT_LOCAL_API int ParamRWMutexUnlock(ParamRWMutex *lock); 130INIT_LOCAL_API int ParamRWMutexDelete(ParamRWMutex *lock); 131 132INIT_LOCAL_API int ParamMutexCreate(ParamMutex *mutex); 133INIT_LOCAL_API int ParamMutexPend(ParamMutex *mutex); 134INIT_LOCAL_API int ParamMutexPost(ParamMutex *mutex); 135INIT_LOCAL_API int ParamMutexDelete(ParamMutex *mutex); 136 137#ifdef WORKSPACE_AREA_NEED_MUTEX 138#define PARAMSPACE_AREA_INIT_LOCK(workspace) ParamRWMutexCreate(&workspace->rwlock) 139#define PARAMSPACE_AREA_RW_LOCK(workspace) ParamRWMutexWRLock(&workspace->rwlock) 140#define PARAMSPACE_AREA_RD_LOCK(workspace) ParamRWMutexRDLock(&workspace->rwlock) 141#define PARAMSPACE_AREA_RW_UNLOCK(workspace) ParamRWMutexUnlock(&workspace->rwlock) 142#else 143#define PARAMSPACE_AREA_INIT_LOCK(rwlock) (void)(rwlock) 144#define PARAMSPACE_AREA_RW_LOCK(rwlock) (void)(rwlock) 145#define PARAMSPACE_AREA_RD_LOCK(rwlock) (void)(rwlock) 146#define PARAMSPACE_AREA_RW_UNLOCK(rwlock) (void)(rwlock) 147#endif 148 149INIT_LOCAL_API void *GetSharedMem(const char *fileName, MemHandle *handle, uint32_t spaceSize, int readOnly); 150INIT_LOCAL_API void FreeSharedMem(const MemHandle *handle, void *mem, uint32_t dataSize); 151 152#ifdef __cplusplus 153#if __cplusplus 154} 155#endif 156#endif 157 158#endif // BASE_STARTUP_PARAM_OS_ADAPTER_H