Luna/kernel/src/memory/SharedMemory.h

33 lines
737 B
C

#pragma once
#include "fs/VFS.h"
#include "fs/devices/Device.h"
#include <luna/HashMap.h>
#include <luna/Vector.h>
#include <sys/types.h>
struct SharedMemory
{
Vector<u64> frames;
off_t offset;
int prot;
SharedPtr<VFS::Inode> inode {};
SharedPtr<Device> device {};
int refs { 0 };
SharedMemory() = default;
SharedMemory(SharedMemory&&) = default;
static Result<u64> create(u8* mem, off_t offset, usize count);
Result<void> grow_forward(u8* mem, usize count);
Result<void> grow_backward(u8* mem, usize count);
Result<void> map(u64 virt, int flags, off_t offset, usize count);
void free();
~SharedMemory() = default;
};
extern HashMap<u64, SharedMemory> g_shared_memory_map;