Newer
Older
pbuf / src / tlpbuf.c
/* Copyright (C) Thornwave Labs Inc - All Rights Reserved
 * Unauthorized copying of this file, via any medium is strictly prohibited
 * Proprietary and confidential
 * Written by Razvan Turiac <razvan.turiac@thornwave.com>
 */

#include <tlpbuf.h>


void pbuf_pool_create(pbuf_pool_t* pool, uint32_t pbuf_count, void* pbuf_memory, uint32_t pbuf_payload_capacity, void* pbuf_payload_memory)
{
	pbuf_payload_capacity = (pbuf_payload_capacity + 3) & ~3;

	pool->pbuf_memory = (pbuf_t*)pbuf_memory;
	pool->pbuf_count = pbuf_count;

	pool->payload_capacity = pbuf_payload_capacity;
	pool->payload_memory = (uint8_t*)pbuf_payload_memory;
	
	pool->free_callback = NULL;

	pbuf_pool_reset(pool);
}



void pbuf_pool_reset(pbuf_pool_t* pool)
{
	//initialize pbuf structures
	uint8_t *payload = pool->payload_memory;

	pbuf_t *p = pool->free_list = pool->pbuf_memory;
	for(uint32_t i = 0; i < pool->pbuf_count - 1; i++)
	{
		p->payload_memory = payload;
		payload += pool->payload_capacity;
		
		p->pool = pool;
		p->next = p + 1;

		p++;
	}

	p->payload_memory = payload;
	p->pool = pool;
	p->next = 0;
	
	pool->pbufs_available = pool->pbuf_count;
}