
#ifndef _PFE_CTRL_HAL_H_
#define _PFE_CTRL_HAL_H_

#include <linux/timer.h>
#include <linux/jiffies.h>
#include <linux/string.h>
#include <linux/elf.h>
#include <linux/slab.h>
#include <asm/byteorder.h>
#include <asm/io.h>

#include "pfe_mod.h"

#define CLASS_DMEM_SH(var) __attribute__((section(".class_dmem_sh_" #var))) var
#define CLASS_PE_LMEM_SH(var) __attribute__((section(".class_pe_lmem_sh_" #var))) var
#define TMU_DMEM_SH(var) __attribute__((section(".tmu_dmem_sh_" #var))) var
#define UTIL_DMEM_SH(var) __attribute__((section(".util_dmem_sh_" #var))) var
#define UTIL_DDR_SH(var) __attribute__((section(".util_ddr_sh_" #var))) var

#define CLASS_DMEM_SH2(var) __attribute__((section(".class_dmem_sh_" #var))) class_##var
#define CLASS_PE_LMEM_SH2(var) __attribute__((section(".class_pe_lmem_sh_" #var))) class_##var
#define TMU_DMEM_SH2(var) __attribute__((section(".tmu_dmem_sh_" #var))) tmu_##var
#define UTIL_DMEM_SH2(var) __attribute__((section(".util_dmem_sh_" #var))) util_##var

/** Translate the name of a shared variable to its PFE counterpart.
 * Those macros may be used to determine the address of a shared variable,
 * and will work even if the variable is accessed through a macro, as is the case
 * with most fields of gFppGlobals.
 */
#define CONCAT(str, var) str##var
#define CLASS_VARNAME2(var) CONCAT(class_, var)
#define UTIL_VARNAME2(var) CONCAT(util_, var)
#define TMU_VARNAME2(var) CONCAT(tmu_, var)

typedef struct tHostMessage {
	u16	length;
	u16	code;
	u16	data[128];
} HostMessage;

HostMessage *msg_alloc(void);
void msg_free(HostMessage *msg);
int msg_send(HostMessage *msg);


unsigned long virt_to_class(void *p);
unsigned long virt_to_class_dmem(void *p);
unsigned long virt_to_class_pe_lmem(void *p);
unsigned long virt_to_tmu_dmem(void *p);
unsigned long virt_to_util_dmem(void *p);
unsigned long virt_to_util_ddr(void *p);
void * virt_to_util_virt(void *p);
unsigned long virt_to_phys_iram(void *p);
unsigned long virt_to_phys_ipsec_lmem(void *p);
unsigned long virt_to_phys_ipsec_axi(void *p);


#define TIMER_TICKS_PER_SEC	100

#if TIMER_TICKS_PER_SEC > HZ
#error TIMER_TICKS_PER_SEC is too high
#endif


typedef void (* TIMER_HANDLER)(void);

typedef struct {
	struct list_head list;
	unsigned long timeout;
	unsigned long period;
	TIMER_HANDLER handler;
	char running;
} TIMER_ENTRY;


/** Initializes a timer structure.
* Must be called once for each TIMER_ENTRY structure.
* The caller must be holding the ctrl->mutex.
*
* @param timer		pointer to the timer to be initialized
* @param handler	timer handler function pointer
*
*/
void timer_init(TIMER_ENTRY *timer, TIMER_HANDLER handler);

/** Adds a timer to the running timer list.
* It's safe to call even if the timer was already running. In this case we just update the granularity.
* The caller must be holding the ctrl->mutex.
*
* @param timer		pointer to the timer to be added
* @param granularity	granularity of the timer (in timer tick units)
*
*/
void timer_add(TIMER_ENTRY *timer, u16 granularity);

/** Deletes a timer from the running timer list.
* It's safe to call even if the timer is no longer running.
* The caller must be holding the ctrl->mutex.
*
* @param timer	pointer to the timer to be removed
*/
void timer_del(TIMER_ENTRY *timer);

void *Heap_Alloc(int size);

#define Heap_Alloc_ARAM(s)	Heap_Alloc(s)
#define __Heap_Alloc(h, s)		Heap_Alloc(s)
void Heap_Free(void *p);

#endif /* _PFE_CTRL_HAL_H_ */
