1 /*
2 * Copyright (c) 2006-2023, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2023-03-23 WangXiaoyao Complete testcase for internal APIs
9 */
10 #ifndef __TEST_ASPACE_API_INTERNAL_H__
11 #define __TEST_ASPACE_API_INTERNAL_H__
12
13 #include "common.h"
14 #include "mmu.h"
15 #include "test_bst_adpt.h"
16 #include <stddef.h>
17
18 /**
19 * @brief 3 cases for find free:
20 * with prefer & MAP_FIXED
21 * with prefer
22 * without prefer
23 *
24 * the requirement of find free:
25 * it will return a subset in address space that is free
26 * the subset contains `length` contiguous elements
27 * the alignment is satisfied
28 */
test_find_free(void)29 static void test_find_free(void)
30 {
31 void *top_page = rt_kernel_space.start + rt_kernel_space.size - 0x1000;
32 void *vaddr = top_page;
33
34 CONSIST_HEAP({
35 /* type 1, on success */
36 uassert_true(!rt_aspace_map(&rt_kernel_space, &vaddr, 0x1000, MMU_MAP_K_RWCB, MMF_MAP_FIXED, &rt_mm_dummy_mapper, 0));
37 uassert_true(vaddr == top_page);
38 /* type 1, on failure */
39 // uassert_true(rt_aspace_map(&rt_kernel_space, &vaddr, 0x1000, MMU_MAP_K_RWCB, MMF_MAP_FIXED, &rt_mm_dummy_mapper, 0));
40 // uassert_true(!vaddr);
41
42 /* type 2, on success */
43 vaddr = top_page;
44 uassert_true(!rt_aspace_map(&rt_kernel_space, &vaddr, 0x1000, MMU_MAP_K_RWCB, 0, &rt_mm_dummy_mapper, 0));
45 uassert_true(vaddr < top_page);
46 uassert_true(!!vaddr);
47 rt_aspace_unmap(&rt_kernel_space, vaddr);
48 /* type 2, on failure */
49 vaddr = rt_kernel_space.start;
50 uassert_true(-RT_ENOSPC == rt_aspace_map(&rt_kernel_space, &vaddr, rt_kernel_space.size - 0x08000000, MMU_MAP_K_RWCB, 0, &rt_mm_dummy_mapper, 0));
51 uassert_true(!vaddr);
52
53 /* type 3, on success is covered by ioremap */
54 /* type 3, on failure */
55 size_t map_size = ARCH_PAGE_SIZE;
56 while (1)
57 {
58 void *va = rt_ioremap(0, map_size);
59 if (va)
60 {
61 uassert_true(1);
62 rt_iounmap(va);
63 map_size <<= 1;
64 }
65 else
66 {
67 uassert_true(1);
68 break;
69 }
70 }
71
72 /* free top page */
73 rt_aspace_unmap(&rt_kernel_space, top_page);
74 });
75
76 /* test mm_private.h */
77 CONSIST_HEAP(test_bst_adpt());
78 }
79
80 #endif /* __TEST_ASPACE_API_INTERNAL_H__ */
81