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