/*
 * Copyright (c) 2024, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef SMCMALLOC_H
#define SMCMALLOC_H

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TOTALMEMORYSIZE (0x10000)
#define BLKSPACEDIV (4)
#define TOPBITSIZE (20)
#define MAX_NAME_CHARS 50

struct memblk {
	unsigned int address;
	unsigned int size;
	int valid;
};

struct memmod {
	char memory[TOTALMEMORYSIZE];
	unsigned int nmemblk;
	unsigned int maxmemblk;
	unsigned int checkadd;
	struct memblk *memptr;
	struct memblk *memptrend;
	unsigned int mallocdeladd[((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	struct memblk *precblock[((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	struct memblk *trailblock[((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	struct memblk *memblkqueue[((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	unsigned int memallocsize[((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	unsigned int mallocdeladd_valid[((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	unsigned int mallocdeladd_queue[((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	unsigned int checksa[4*((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	unsigned int checkea[4*((TOTALMEMORYSIZE/BLKSPACEDIV)/sizeof(struct memblk))];
	unsigned int cntdeladd;
	unsigned int ptrmemblkqueue;
	unsigned int mallocdeladd_queue_cnt;
	unsigned int checknumentries;
	unsigned int memerror;
};

struct peret {
	unsigned int tbit;
	unsigned int pow2;
};

void initmem(void);
struct peret priorityencoder(unsigned int);
void *smcmalloc(unsigned int, struct memmod*);
int smcfree(void*, struct memmod *);
#ifdef DEBUG_SMC_MALLOC
void displayblocks(struct memmod *);
void displaymalloctable(struct memmod *);
#endif

#endif /* SMCMALLOC_H */
