1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Test memory functions
4 *
5 * Copyright (c) 2025 Heinrich Schuchardt <xypron.glpk@gmx.de>
6 */
7
8 #include <efi_loader.h>
9 #include <test/lib.h>
10 #include <test/test.h>
11 #include <test/ut.h>
12
lib_test_efi_alloc_aligned_pages(struct unit_test_state * uts)13 static int lib_test_efi_alloc_aligned_pages(struct unit_test_state *uts)
14 {
15 efi_status_t ret;
16
17 void *addr;
18 unsigned long align = 0x400000;
19
20 addr = efi_alloc_aligned_pages(4096, EFI_PERSISTENT_MEMORY_TYPE,
21 EFI_PAGE_SIZE);
22 ut_asserteq_ptr(NULL, addr);
23
24 addr = efi_alloc_aligned_pages(4096, 0x6FFFFFFF, EFI_PAGE_SIZE);
25 ut_asserteq_ptr(NULL, addr);
26
27 align = 0x200;
28 addr = efi_alloc_aligned_pages(4096, EFI_ACPI_RECLAIM_MEMORY, align);
29 ut_assertnonnull(addr);
30 ut_asserteq_64(0, (uintptr_t)addr & (align - 1));
31
32 ret = efi_free_pages((uintptr_t) addr, 1);
33 ut_asserteq_64(ret, EFI_SUCCESS);
34
35 align = 0x400000;
36 addr = efi_alloc_aligned_pages(4096, EFI_ACPI_RECLAIM_MEMORY, align);
37 ut_assertnonnull(addr);
38 ut_asserteq_64(0, (uintptr_t)addr & (align - 1));
39
40 ret = efi_free_pages((uintptr_t) addr, 1);
41 ut_asserteq_64(ret, EFI_SUCCESS);
42
43 return 0;
44 }
45 LIB_TEST(lib_test_efi_alloc_aligned_pages, 0);
46
lib_test_efi_allocate_pages(struct unit_test_state * uts)47 static int lib_test_efi_allocate_pages(struct unit_test_state *uts)
48 {
49 efi_status_t ret;
50 u64 memory;
51
52 ret = efi_allocate_pages(EFI_ALLOCATE_ANY_PAGES,
53 EFI_ACPI_RECLAIM_MEMORY,
54 1, &memory);
55 ut_asserteq_64(ret, EFI_SUCCESS);
56 ut_asserteq_64(0, memory & EFI_PAGE_MASK);
57
58 ret = efi_free_pages(memory, 1);
59 ut_asserteq_64(ret, EFI_SUCCESS);
60
61 return 0;
62 }
63 LIB_TEST(lib_test_efi_allocate_pages, 0);
64