Clean-up loader and added fetching of the memory map.
This commit is contained in:
66
targets/x86_64/include/boot.hpp
Normal file
66
targets/x86_64/include/boot.hpp
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BOOT_HPP_INCLUDED)
|
||||
#define BOOT_HPP_INCLUDED 1
|
||||
|
||||
#include <efi.h>
|
||||
|
||||
class EfiMemoryMapIterator
|
||||
{
|
||||
private:
|
||||
EFI_MEMORY_DESCRIPTOR* mDescriptor;
|
||||
UINTN mDescriptorSize;
|
||||
public:
|
||||
EfiMemoryMapIterator(EFI_MEMORY_DESCRIPTOR* descriptor, UINTN descriptorSize) noexcept : mDescriptor(descriptor), mDescriptorSize(descriptorSize) {}
|
||||
EfiMemoryMapIterator(const EfiMemoryMapIterator&) noexcept = default;
|
||||
|
||||
EfiMemoryMapIterator& operator=(const EfiMemoryMapIterator&) noexcept = default;
|
||||
|
||||
bool operator==(const EfiMemoryMapIterator& other) const noexcept
|
||||
{
|
||||
return mDescriptor == other.mDescriptor && mDescriptorSize == other.mDescriptorSize;
|
||||
}
|
||||
bool operator!=(const EfiMemoryMapIterator& other) const noexcept
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
EFI_MEMORY_DESCRIPTOR& operator*() const noexcept { return *mDescriptor; }
|
||||
EfiMemoryMapIterator& operator++() noexcept
|
||||
{
|
||||
mDescriptor = reinterpret_cast<EFI_MEMORY_DESCRIPTOR*>(reinterpret_cast<UINT64>(mDescriptor) + mDescriptorSize);
|
||||
return *this;
|
||||
}
|
||||
EfiMemoryMapIterator operator++(int) noexcept
|
||||
{
|
||||
EfiMemoryMapIterator copy(*this);
|
||||
++(*this);
|
||||
return copy;
|
||||
}
|
||||
};
|
||||
|
||||
struct EfiMemoryMap
|
||||
{
|
||||
UINTN mapSize = 0;
|
||||
EFI_MEMORY_DESCRIPTOR* map = nullptr;
|
||||
UINTN mapKey = 0;
|
||||
UINTN descriptorSize = 0;
|
||||
UINT32 descriptorVersion = 0;
|
||||
|
||||
EfiMemoryMapIterator begin() const noexcept
|
||||
{
|
||||
return EfiMemoryMapIterator(map, descriptorSize);
|
||||
}
|
||||
EfiMemoryMapIterator end() const noexcept
|
||||
{
|
||||
// just in case
|
||||
const UINTN totalMapSize = (mapSize / descriptorSize) * descriptorSize;
|
||||
return EfiMemoryMapIterator(
|
||||
reinterpret_cast<EFI_MEMORY_DESCRIPTOR*>(reinterpret_cast<UINT64>(map) + totalMapSize),
|
||||
descriptorSize
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // BOOT_HPP_INCLUDED
|
||||
Reference in New Issue
Block a user