refactor(driver/api): delegate memory allocation and deallocation to DriverManager

Signed-off-by: EnderIce2 <enderice2@protonmail.com>
This commit is contained in:
EnderIce2 2025-03-02 21:26:00 +00:00
parent adba9cc348
commit ae2617dca2
No known key found for this signature in database
GPG Key ID: 2EE20AF089811A5A
3 changed files with 21 additions and 18 deletions

View File

@ -451,29 +451,13 @@ namespace v0
void *AllocateMemory(dev_t DriverID, size_t Pages)
{
dbg_api("%d, %d", DriverID, Pages);
std::unordered_map<dev_t, Driver::DriverObject> &Drivers =
DriverManager->GetDrivers();
auto itr = Drivers.find(DriverID);
assert(itr != Drivers.end());
void *ptr = itr->second.vma->RequestPages(Pages);
memset(ptr, 0, FROM_PAGES(Pages));
return ptr;
return DriverManager->AllocateMemory(DriverID, Pages);
}
void FreeMemory(dev_t DriverID, void *Pointer, size_t Pages)
{
dbg_api("%d, %#lx, %d", DriverID, Pointer, Pages);
std::unordered_map<dev_t, Driver::DriverObject> &Drivers =
DriverManager->GetDrivers();
auto itr = Drivers.find(DriverID);
assert(itr != Drivers.end());
itr->second.vma->FreePages(Pointer, Pages);
DriverManager->FreeMemory(DriverID, Pointer, Pages);
}
void *MemoryCopy(dev_t DriverID, void *Destination, const void *Source, size_t Length)

View File

@ -766,6 +766,22 @@ namespace Driver
return 0;
}
void *Manager::AllocateMemory(dev_t DriverID, size_t Pages)
{
auto itr = Drivers.find(DriverID);
assert(itr != Drivers.end());
void *ptr = itr->second.vma->RequestPages(Pages);
memset(ptr, 0, FROM_PAGES(Pages));
return ptr;
}
void Manager::FreeMemory(dev_t DriverID, void *Pointer, size_t Pages)
{
auto itr = Drivers.find(DriverID);
assert(itr != Drivers.end());
itr->second.vma->FreePages(Pointer, Pages);
}
int Manager::ReportInputEvent(dev_t DriverID, InputReport *Report)
{
std::unordered_map<dev_t, Driver::DriverObject> &drivers =

View File

@ -153,6 +153,9 @@ namespace Driver
int UnregisterDevice(dev_t DriverID, dev_t Device);
void *AllocateMemory(dev_t DriverID, size_t Pages);
void FreeMemory(dev_t DriverID, void *Pointer, size_t Pages);
Manager();
~Manager();
};