summaryrefslogtreecommitdiff
path: root/BFS/host/mram-management.h
blob: f2ee031b68c1cdecd341ecfe1427bebc3dd0cec2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

#ifndef _MRAM_MANAGEMENT_H_
#define _MRAM_MANAGEMENT_H_

#include "../support/common.h"
#include "../support/utils.h"

#define DPU_CAPACITY (64 << 20)	// A DPU's capacity is 64 MiB

struct mram_heap_allocator_t {
	uint32_t totalAllocated;
};

static void init_allocator(struct mram_heap_allocator_t *allocator)
{
	allocator->totalAllocated = 0;
}

static uint32_t mram_heap_alloc(struct mram_heap_allocator_t *allocator,
				uint32_t size)
{
	uint32_t ret = allocator->totalAllocated;
	allocator->totalAllocated += ROUND_UP_TO_MULTIPLE_OF_8(size);
	if (allocator->totalAllocated > DPU_CAPACITY) {
		PRINT_ERROR
		    ("        Total memory allocated is %d bytes which exceeds the DPU capacity (%d bytes)!",
		     allocator->totalAllocated, DPU_CAPACITY);
		exit(0);
	}
	return ret;
}

static void copyToDPU(struct dpu_set_t dpu, uint8_t *hostPtr, uint32_t mramIdx,
		      uint32_t size)
{
	DPU_ASSERT(dpu_copy_to
		   (dpu, DPU_MRAM_HEAP_POINTER_NAME, mramIdx, hostPtr,
		    ROUND_UP_TO_MULTIPLE_OF_8(size)));
}

static void copyFromDPU(struct dpu_set_t dpu, uint32_t mramIdx,
			uint8_t *hostPtr, uint32_t size)
{
	DPU_ASSERT(dpu_copy_from
		   (dpu, DPU_MRAM_HEAP_POINTER_NAME, mramIdx, hostPtr,
		    ROUND_UP_TO_MULTIPLE_OF_8(size)));
}

#endif