37#define MDL_SEGS_SMALL_MAX 2
162#define MDL_ITER_CREATE(_mdl) \
203#define MDL_FOR_EACH(_byte, _mdl) for (mdl_iter_t _iter = MDL_ITER_CREATE(_mdl); mdl_iter_next(&_iter, (_byte));)
EFI_PHYSICAL_ADDRESS buffer
#define MDL_SEGS_SMALL_MAX
Amount of memory segments statically allocated for small MDLs.
uint64_t mdl_write(mdl_t *mdl, const void *buffer, size_t count, size_t offset)
Write to a Memory Descriptor List from a buffer.
void mdl_free_chain(mdl_t *mdl, void(*free)(void *))
Free a Memory Descriptor List chain.
void mdl_deinit(mdl_t *mdl)
Deinitialize a Memory Descriptor List.
uint64_t mdl_from_region(mdl_t *mdl, mdl_t *prev, space_t *space, const void *addr, size_t size)
Initialize a Memory Descriptor List from a memory region.
static void mdl_init(mdl_t *next, mdl_t *prev)
Initialize a Memory Descriptor List.
uint64_t mdl_add(mdl_t *mdl, space_t *space, const void *addr, size_t size)
Add a memory region to the Memory Descriptor List.
uint64_t mdl_read(mdl_t *mdl, void *buffer, size_t count, size_t offset)
Read from a Memory Descriptor List into a buffer.
static bool mdl_iter_next(mdl_iter_t *iter, uint8_t *byte)
Get the next byte from a Memory Descriptor List Iterator.
#define PFN_TO_VIRT(_pfn)
Convert a PFN to its identity mapped higher half virtual address.
size_t pfn_t
Page Frame Number type.
#define NULL
Pointer error value.
_PUBLIC void free(void *ptr)
Memory Descriptor List Iterator structure.
Memory Descriptor List Segment structure.
uint32_t offset
Offset in bytes within the first page.
pfn_t pfn
Page frame number.
uint32_t size
Size of the segment in bytes.
Memory Descriptor List structure.
uint32_t amount
Number of memory segments.
struct mdl * next
Pointer to the next MDL.
mdl_seg_t * segments
Pointer to segments array.
uint32_t capacity
Capacity of the large array.
Virtual address space structure.