The Pedigree Project 0.1
SlamBitmap.h
1/*
2 * Copyright (c) 2026, Pedigree Developers
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted.
6 */
7
8#ifndef PEDIGREE_KERNEL_CORE_SLAMBITMAP_H
9#define PEDIGREE_KERNEL_CORE_SLAMBITMAP_H
10
11#include <stddef.h>
12#include <stdint.h>
13
16 public:
17 SlamBitmap() : /*m_Entries(nullptr), */ m_EntryCount(0), m_PageCount(0) {}
18 void useMemory(void* memory, size_t entryCount, size_t pageCount);
19
20 size_t findFreeRun(size_t pageCount) const;
21 void reserve(size_t firstPage, size_t pageCount);
22 void release(size_t firstPage, size_t pageCount);
23 void setMapped(size_t page);
24 void clearMappedAndReady(size_t page);
25 bool isReserved(size_t page) const;
26 bool isMapped(size_t page) const;
27 bool isReady(size_t page) const;
28 void setReady(size_t page);
29 uint64_t reservedBits(size_t entry) const;
30 uintptr_t metadataAddress(size_t entry) const;
31
32 private:
33 // struct Entry {
34 // uint64_t reserved;
35 // uint64_t mapped;
36 // uint64_t ready;
37 // };
38 // Entry* m_Entries;
39
40 uint64_t* m_reserved = nullptr;
41 uint64_t* m_mapped = nullptr;
42 uint64_t* m_ready = nullptr;
43
44 size_t m_EntryCount;
45 size_t m_PageCount;
46 size_t m_FirstFreeEntry = 0;
47};
48
49#endif