/*
 *	Implementation for the private skb data pool handlers.
 */

#include <linux/kernel.h>
#include <linux/slab.h>
#include "fastskb.h"

//#define FASTSKB_DEBUG

#define MODULENAME "fastskb"
#define PFX MODULENAME ": "

#ifdef FASTSKB_DEBUG
#define assert(expr) \
	if (!(expr)) {					\
		printk( "Assertion failed! %s,%s,%s,line=%d\n",	\
		#expr,__FILE__,__FUNCTION__,__LINE__);		\
	}
#define dprintk(fmt, args...)	do { printk(PFX fmt, ## args); } while (0)
#else
#define assert(expr) do {} while (0)
#define dprintk(fmt, args...)	do {} while (0)
#endif /* FASTSKB_DEBUG */

int enable_sar_fastskb=1;
u8 *private_data_pool[DATA_POOL_SIZE];
int pvt_data_pool_producer=0;
int pvt_data_pool_consumer=DATA_POOL_SIZE-1;

int flush_skb_data_bfr(void)
{
	int ptr;
	int count=0;
	
	dprintk("consumer=%d; producer=%d\n", pvt_data_pool_consumer, pvt_data_pool_producer);
	ptr = (pvt_data_pool_consumer+1)&(DATA_POOL_SIZE-1);
	while (ptr != pvt_data_pool_producer) {
		if (private_data_pool[ptr]==NULL)
			dprintk("Assertion failed! %s,%s,%s,line=%d\n",
			"private_data_pool[ptr]!=NULL",__FILE__,__FUNCTION__,__LINE__);
		else
			kfree(private_data_pool[ptr]);
		count++;
		ptr = (ptr+1)&(DATA_POOL_SIZE-1);
	}
	pvt_data_pool_producer=0;
	pvt_data_pool_consumer=DATA_POOL_SIZE-1;
	dprintk("free count = %d\n", count);
	return 0;
}