/* SPDX-License-Identifier: GPL-2.0 */
/*
 * LWIS Recycling Memory Allocator
 *
 * Copyright (c) 2021 Google Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef LWIS_ALLOCATOR_H_
#define LWIS_ALLOCATOR_H_

#include <linux/mutex.h>
#include "lwis_commands.h"
#include "lwis_device.h"

struct lwis_allocator_block {
	int type;
	void *ptr;
	struct lwis_allocator_block *next;
	struct lwis_allocator_block *prev;
	struct hlist_node node;
};

struct lwis_allocator_block_pool {
	char name[LWIS_MAX_NAME_STRING_LEN];
	struct lwis_allocator_block *free;
	uint32_t free_count;
	struct lwis_allocator_block *in_use;
	uint32_t in_use_count;
};

struct lwis_allocator_block_mgr {
	spinlock_t lock;
	struct lwis_allocator_block_pool pool_8k;
	struct lwis_allocator_block_pool pool_16k;
	struct lwis_allocator_block_pool pool_32k;
	struct lwis_allocator_block_pool pool_64k;
	struct lwis_allocator_block_pool pool_128k;
	struct lwis_allocator_block_pool pool_256k;
	struct lwis_allocator_block_pool pool_512k;
	struct lwis_allocator_block_pool pool_large;
	/* Hash table of allocated buffers keyed by allocated addresses */
	DECLARE_HASHTABLE(allocated_blocks, BUFFER_HASH_BITS);
	int ref_count;
};

/*
 *  lwis_allocator_init: Initialize the recycling memory allocator
 */
int lwis_allocator_init(struct lwis_device *lwis_dev);

/*
 *  lwis_allocator_release: Release the recycling memory allocator
 *  and its resources
 */
void lwis_allocator_release(struct lwis_device *lwis_dev);

/*
 *  lwis_allocator_allocate: Allocate a block from the recycling memory allocator
 */
void *lwis_allocator_allocate(struct lwis_device *lwis_dev, size_t size);

/*
 *  lwis_allocator_free: Free a block to the recycling memory allocator
 */
void lwis_allocator_free(struct lwis_device *lwis_dev, void *ptr);

#endif /* LWIS_ALLOCATOR_H_ */
