1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/** @file
HostMemoryAllocationBelowAddressLib class
Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef HOST_MEMORY_ALLOCATION_BELOW_ADDRESS_LIB_H_
/**
Allocate memory below a specifies address.
@param[in] MaximumAddress The address below which the memory allocation must
be performed.
@param[in] Length The size, in bytes, of the memory allocation.
@retval !NULL Pointer to the allocated memory.
@retval NULL The memory allocation failed.
**/
VOID *
EFIAPI
HostAllocatePoolBelowAddress (
IN UINT64 MaximumAddress,
IN UINT64 Length
);
/**
Free memory allocated with AllocateMemoryHostAllocatePoolBelowAddress().
@param[in] Address Pointer to buffer previously allocated with
HostAllocatePoolBelowAddress().
**/
VOID
EFIAPI
HostFreePoolBelowAddress (
IN VOID *Address
);
/**
Allocates one or more 4KB pages below a specified address at a specified
alignment.
Allocates the number of 4KB pages specified by Pages below MaximumAddress with
an alignment specified by Alignment. The allocated buffer is returned. If
Pages is 0, then NULL is returned. If there is not enough memory below the
requested address at the specified alignment remaining to satisfy the request,
then NULL is returned.
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
@param[in] MaximumAddress The address below which the memory allocation must
@param[in] Pages The number of 4 KB pages to allocate.
@param[in] Alignment The requested alignment of the allocation. Must be
a power of two. If Alignment is zero, then byte
alignment is used.
@return A pointer to the allocated buffer or NULL if allocation fails.
**/
VOID *
EFIAPI
HostAllocateAlignedPagesBelowAddress (
IN UINT64 MaximumAddress,
IN UINTN Pages,
IN UINT64 Alignment
);
/**
Frees one or more 4KB pages that were previously allocated with
HostAllocateAlignedPagesBelowAddress().
Frees the number of 4KB pages specified by Pages from the buffer specified by
Buffer. Buffer must have been allocated with HostAllocateAlignedPagesBelowAddress().
If it is not possible to free allocated pages, then this function will perform
no actions.
If Buffer was not allocated with HostAllocateAlignedPagesBelowAddress(), then
ASSERT(). If Pages is zero, then ASSERT().
@param[in] Buffer The pointer to the buffer of pages to free.
@param[in] Pages The number of 4 KB pages to free.
**/
VOID
EFIAPI
HostFreeAlignedPagesBelowAddress (
IN VOID *Buffer,
IN UINTN Pages
);
#endif
|