1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 * to endorse or promote products derived from this software without specific prior written
17 * permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef _OSTEST_H
33#define _OSTEST_H
34
35#ifndef SWTMR_TEST
36#define SWTMR_TEST
37#endif
38
39#include "stdarg.h"
40#include "los_config.h"
41#include "iCunit.h"
42#include "stdio.h"
43#include "stdlib.h"
44#include "limits.h"
45#include "string.h"
46#include "los_base.h"
47#include "los_config.h"
48#include "los_typedef.h"
49#include "los_hwi.h"
50#include "los_vm_map.h"
51#include "los_task.h"
52#include "los_sched_pri.h"
53#include "los_task_pri.h"
54#include "los_sys_pri.h"
55#include "los_sem_pri.h"
56#include "los_event.h"
57#include "los_memory.h"
58#include "los_queue.h"
59#include "los_swtmr.h"
60#include "los_mux.h"
61#include "los_queue_pri.h"
62#include "los_atomic.h"
63#if !defined(TEST1980) && !defined(TESTISP)
64#include "console.h"
65#endif
66
67#ifndef LOSCFG_AARCH64
68#ifdef LOSCFG_LIB_LIBC
69#include "time.h"
70#endif
71#include "target_config.h"
72#endif
73#include "los_process_pri.h"
74#include "pthread.h"
75
76#define LOSCFG_TEST 1
77#ifdef LOSCFG_PLATFORM_HI3516DV300
78#define TEST3516DV300
79#elif LOSCFG_PLATFORM_HI3518EV300
80#define TEST3518EV300
81#endif
82
83#ifdef __cplusplus
84#if __cplusplus
85extern "C" {
86#endif /* __cpluscplus */
87#endif /* __cpluscplus */
88
89#define TEST_TASK_PARAM_INIT(testTask, task_name, entry, prio)                              \
90    do {                                                                                    \
91        (void)memset_s(&(testTask), sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S)); \
92        testTask.pfnTaskEntry = (TSK_ENTRY_FUNC)entry;                                      \
93        testTask.uwStackSize = 0x1000;                                                      \
94        testTask.pcName = task_name;                                                        \
95        testTask.usTaskPrio = prio;                                                         \
96        testTask.uwResved = LOS_TASK_STATUS_DETACHED;                                       \
97    } while (0);
98
99#ifdef LOSCFG_KERNEL_SMP
100#define TEST_TASK_PARAM_INIT_AFFI(testTask, task_name, entry, prio, affi) \
101    TEST_TASK_PARAM_INIT(testTask, task_name, entry, prio)                \
102    testTask.usCpuAffiMask = affi;
103#else
104#define TEST_TASK_PARAM_INIT_AFFI(stTestTask, task_name, entry, prio, affi) \
105    TEST_TASK_PARAM_INIT(stTestTask, task_name, entry, prio)
106#endif
107#define JFFS_BASE_MTD_ADDR 0x100000
108#define JFFS_BASE_MTD_LEN 0x600000
109
110
111#define TASK_PRIO_TEST (LOS_TaskPriGet(LOS_CurTaskIDGet())) // 25
112#define TASK_PRIO_TEST_TASK 25
113#define TASK_PRIO_TEST_SWTMR 4
114#ifdef LOSCFG_AARCH64
115#define TASK_STACK_SIZE_TEST (LOS_TASK_MIN_STACK_SIZE * 3)
116#else
117#define TASK_STACK_SIZE_TEST LOS_TASK_MIN_STACK_SIZE
118#endif
119#define LOS_MS_PER_TICK (OS_SYS_MS_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND)
120#define LOS_US_PER_TICK (OS_SYS_US_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND)
121
122#define HWI_NUM_INTVALID OS_HWI_MAX_NUM
123#define writel(g_value, address) WRITE_UINT32(g_value, address)
124#ifdef TESTPBXA9
125extern int vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
126#endif
127
128#if defined(LOSCFG_TEST_POSIX)
129extern UINT32 PosixPthreadInit(pthread_attr_t *attr, int pri);
130extern UINT32 PosixPthreadDestroy(pthread_attr_t *attr, pthread_t thread);
131#endif
132
133extern UINT32 TaskCountGetTest(VOID);
134extern UINT32 SemCountGetTest(VOID);
135extern UINT32 QueueCountGetTest(VOID);
136extern UINT32 SwtmrCountGetTest(VOID);
137extern void hal_interrupt_set_affinity(uint32_t irq, uint32_t cpuMask);
138
139#define TASK_EXISTED_NUM (TaskCountGetTest())
140#define QUEUE_EXISTED_NUM (QueueCountGetTest())
141#define SWTMR_EXISTED_NUM (SwtmrCountGetTest())
142#define SEM_EXISTED_NUM (SemCountGetTest())
143
144extern void TestTestHwiDelete(unsigned int irq, void *devId);
145extern void TestHwiTrigger(unsigned int irq);
146extern void TestExtraTaskDelay(UINT32 tick);
147extern UINT64 TestTickCountGet(void);
148extern UINT64 TestTickCountByCurrCpuid(void);
149extern void TestBusyTaskDelay(UINT32 tick);
150extern void *malloc(size_t size);
151extern void TestDumpCpuid(void);
152extern u_long TRandom(void);
153
154#define TEST_HwiDelete(ID) TestTestHwiDelete(ID, NULL)
155#define TEST_HwiClear(ID) HalIrqMask(ID)
156#define TEST_HwiTriggerDelay LOS_TaskDelay(200 * LOSCFG_BASE_CORE_TICK_PER_SECOND / 1000)
157#define TEST_HwiCreate(ID, prio, mode, Func, arg) LOS_HwiCreate(ID, prio, mode, Func, arg)
158
159
160#define HWI_NUM_INT0 0
161#define HWI_NUM_INT1 1
162#define HWI_NUM_INT2 2
163#define HWI_NUM_INT3 3
164#define HWI_NUM_INT4 4
165#define HWI_NUM_INT5 5
166#define HWI_NUM_INT6 6
167#define HWI_NUM_INT7 7
168#define HWI_NUM_INT11 11
169#define HWI_NUM_INT12 12
170#define HWI_NUM_INT13 13
171#define HWI_NUM_INT14 14
172#define HWI_NUM_INT15 15
173#define HWI_NUM_INT16 16
174#define HWI_NUM_INT17 17
175#define HWI_NUM_INT18 18
176#define HWI_NUM_INT19 19
177#define HWI_NUM_INT21 21
178#define HWI_NUM_INT22 22
179#define HWI_NUM_INT23 23
180#define HWI_NUM_INT24 24
181#define HWI_NUM_INT25 25
182#define HWI_NUM_INT26 26
183#define HWI_NUM_INT27 27
184#define HWI_NUM_INT28 28
185#define HWI_NUM_INT30 30
186#define HWI_NUM_INT31 31
187#define HWI_NUM_INT32 32
188#define HWI_NUM_INT33 33
189#define HWI_NUM_INT34 34
190#define HWI_NUM_INT35 35
191#define HWI_NUM_INT42 42
192#define HWI_NUM_INT45 45
193#define HWI_NUM_INT46 46
194#define HWI_NUM_INT50 50
195#define HWI_NUM_INT55 55
196#define HWI_NUM_INT56 56
197#define HWI_NUM_INT57 57
198#define HWI_NUM_INT58 58
199#define HWI_NUM_INT59 59
200#define HWI_NUM_INT60 60
201#define HWI_NUM_INT61 61
202#define HWI_NUM_INT63 63
203#define HWI_NUM_INT62 62
204#define HWI_NUM_INT68 68
205#define HWI_NUM_INT69 69
206
207#define HWI_NUM_INT95 95
208#define HWI_NUM_INT114 114
209#define HWI_NUM_INT169 169
210
211#if defined TESTPBXA9
212#define HWI_NUM_TEST HWI_NUM_INT56
213#define HWI_NUM_TEST1 HWI_NUM_INT57
214#define HWI_NUM_TEST0 HWI_NUM_INT58
215#define HWI_NUM_TEST2 HWI_NUM_INT59
216#define HWI_NUM_TEST3 HWI_NUM_INT60
217#elif defined TEST3518EV300
218#define HWI_NUM_TEST0 HWI_NUM_INT58
219#define HWI_NUM_TEST HWI_NUM_INT59
220#define HWI_NUM_TEST1 HWI_NUM_INT60
221#define HWI_NUM_TEST2 HWI_NUM_INT61
222#define HWI_NUM_TEST3 HWI_NUM_INT68
223#elif defined TEST3516DV300
224#define HWI_NUM_TEST HWI_NUM_INT56
225#define HWI_NUM_TEST1 HWI_NUM_INT57
226#define HWI_NUM_TEST0 HWI_NUM_INT58
227#define HWI_NUM_TEST2 HWI_NUM_INT59
228#define HWI_NUM_TEST3 HWI_NUM_INT60
229#endif
230
231#define TEST_TASKDELAY_1TICK 1
232#define TEST_TASKDELAY_2TICK 2
233#define TEST_TASKDELAY_4TICK 4
234#define TEST_TASKDELAY_10TICK 10
235#define TEST_TASKDELAY_20TICK 20
236#define TEST_TASKDELAY_50TICK 50
237
238#ifdef TEST3731
239#define TestTimer2ValueGet(temp) READ_UINT32(temp, TIMER1_REG_BASE + TIMER_VALUE)
240#elif defined TEST3559
241#define TestTimer2ValueGet(temp) READ_UINT32(temp, TIMER3_REG_BASE + TIMER_VALUE)
242#else
243#define TestTimer2ValueGet(temp) READ_UINT32(temp, TIMER2_REG_BASE + TIMER_VALUE)
244#endif
245
246#define REALTIME(time) (UINT32)((UINT64)(0xffffffff - time) * 1000 / OS_SYS_CLOCK)           /* accuracy:ms */
247#define HW_TMI(time) (UINT32)((UINT64)(0xffffffff - time) * 1000 / (OS_SYS_CLOCK / 1000000)) /* accuracy:ns */
248
249#define uart_printf_func dprintf
250
251#ifndef VFS_STAT_PRINTF
252#define VFS_STAT_PRINTF 0
253#endif
254
255#ifndef VFS_STATFS_PRINTF
256#define VFS_STATFS_PRINTF 0
257#endif
258
259#define OPEN_FILE_MAX 20
260
261#define HUAWEI_ENV_NFS 0
262
263#ifndef TEST_RESOURCELEAK_CHECK
264#define TEST_RESOURCELEAK_CHECK 1
265#endif
266
267#ifndef TEST_MODULE_CHECK
268#define TEST_MODULE_CHECK 1
269#endif
270
271#define OS_PROCESS_STATUS_PEND OS_PROCESS_STATUS_PENDING
272#define OS_TASK_STATUS_SUSPEND OS_TASK_STATUS_SUSPENDED
273#define OS_TASK_STATUS_PEND OS_TASK_STATUS_PENDING
274
275extern UINT32 volatile g_testCount;
276extern UINT32 g_testCount1;
277extern UINT32 g_testCount2;
278extern UINT32 g_testCount3;
279extern UINT32 g_flowcheck;
280extern UINT32 g_failResult;
281extern UINT32 g_passResult;
282extern UINT32 g_testTskHandle;
283extern UINT32 g_testTaskID01;
284extern UINT32 g_testTaskID02;
285extern UINT32 g_testTaskID03;
286extern UINT32 g_testTaskID04;
287extern UINT32 g_hwiNum1;
288extern UINT32 g_hwiNum2;
289extern UINT32 g_semID;
290extern UINT32 g_semID2;
291extern LosMux g_mutexkernelTest;
292extern UINT32 g_cpupTestCount;
293extern UINT16 g_swTmrID;
294extern UINT32 g_semID;
295extern UINT32 g_testQueueID01;
296extern UINT32 g_testQueueID02;
297extern UINT32 g_testQueueID03;
298extern UINT32 g_testTskHandle;
299extern UINT32 g_leavingTaskNum;
300extern UINT32 g_semID3[];
301extern EVENT_CB_S g_eventCB;
302extern EVENT_CB_S g_event;
303extern UINT32 g_testPeriod;
304extern BOOL g_isAddArray;
305extern BOOL g_isSdInit;
306extern BOOL g_isSpinorInit;
307extern UINT32 g_getTickConsume;
308extern UINT32 g_waitTestCount;
309extern INT32 g_libFileSystem;
310extern UINT32 LosMuxCreate(LosMux *mutex);
311extern INT32 g_performanceStart;
312
313extern void msleep(unsigned int msecs);
314extern unsigned int sleep(unsigned int seconds);
315extern int usleep(unsigned useconds);
316
317#define OS_TASK_STATUS_DETACHED 0
318extern UINT32 LOS_MemTotalUsedGet(VOID *pool);
319extern VOID ptestTickConsume(VOID);
320extern UINT32 TEST_TskDelete(UINT32 taskID);
321extern UINT32 TEST_SemDelete(UINT32 semHandle);
322
323extern VOID ItSuiteLosQueue(VOID);
324extern VOID ItSuiteLosSwtmr(VOID);
325extern VOID ItSuiteLosTask(VOID);
326extern VOID ItSuiteLosEvent(VOID);
327
328extern VOID ItSuiteLosMux(VOID);
329extern VOID ItSuiteLosRwlock(VOID);
330extern VOID ItSuiteLosSem(VOID);
331extern VOID ItSuiteSmpHwi(VOID);
332extern VOID ItSuiteHwiNesting(VOID);
333
334extern VOID ItSuiteExtendCpup(VOID);
335
336extern VOID ItSuitePosixMutex(VOID);
337extern VOID ItSuitePosixPthread(VOID);
338
339extern VOID TestRunShell(VOID);
340
341extern void TestSystemInit(void);
342
343extern void TEST_DT_COMMON(void);
344extern VOID dprintf(const char *fmt, ...);
345
346extern UINT32 OsSwtmrTaskIDGetByCpuid(UINT16 cpuid);
347
348#define BIG_FD 512
349typedef struct testrunParam {
350    CHAR testcase_sequence[16];
351    CHAR testcase_num[16];
352    CHAR testcase_layer[32];
353    CHAR testcase_module[32];
354    CHAR testcase_level[16];
355    CHAR testcase_type[16];
356    CHAR testcase_id[128];
357} TEST_RUN_PARAM;
358
359#define LOSCFG_BASE_CORE_TSK_CONFIG LOSCFG_BASE_CORE_TSK_LIMIT
360#define LOSCFG_BASE_IPC_SEM_CONFIG LOSCFG_BASE_IPC_SEM_LIMIT
361#define LOSCFG_BASE_IPC_QUEUE_CONFIG LOSCFG_BASE_IPC_QUEUE_LIMIT
362#define LOSCFG_BASE_CORE_SWTMR_CONFIG LOSCFG_BASE_CORE_SWTMR_LIMIT
363
364#define HAL_READ_UINT8(addr, data) READ_UINT8(data, addr)
365#define HAL_WRITE_UINT8(addr, data) WRITE_UINT8(data, addr)
366#define HAL_READ_UINT32(addr, data) READ_UINT32(data, addr)
367#define HAL_WRITE_UINT32(addr, data) WRITE_UINT32(data, addr)
368
369extern void InitRebootHook(void);
370
371#define LOSCFG_TEST_SMOKE
372#define LOSCFG_TEST_FULL
373#ifdef __cplusplus
374#if __cplusplus
375}
376#endif /* __cpluscplus */
377#endif /* __cpluscplus */
378
379#endif /* _OSTEST_H */
380