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