enum MemoryServiceResult {
    
}

@alignment(4096)
type PageAlignedPointer = pointer;

type RID = u64;



@nonexhaustive 
@version 1.0
protocol MemoryService {
    @validator(page_count, Range(1..16))
    fn map_pages(page_count: u8, ptr: Optional<PageAlignedPointer>) -> MemoryServiceResult;
    fn unmap_pages(ptr: PageAlignedPointer) -> MemoryServiceResult;
    // ptr must be page aligned and already mapped from map_pages
    fn map_hardware(hw: RID, ptr: PageAlignedPointer) -> MemoryServiceResult;
    fn unmap_hardware(hw: RID) -> MemoryServiceResult;

}