/*
 * (C) Copyright Marvell Semiconductors,Inc 2006 All rightes reserved
 */

#ifndef	__UTIL_H__
#define	__UTIL_H__

#include <stddef.h>

void *	UtilMemSet(void *s, int c, int n);
void *	UtilMemCpy(void *s1, const void *s2, int n);
int	UtilMemCmp(const void *s1, const void *s2, int n);
void *	UtilMemAlloc(int size);
void *	UtilMemAllocZ(int size);
void    UtilMemReset(void);

//used for bitmaps that could be more than 32 bits wide
#define BITMASK(b)		(1 << ((b) % 8))
#define BITSLOT(b)		((b) / 8)
#define BITSET(a, b)	((a)[BITSLOT(b)] |= BITMASK(b))
#define BITCLEAR(a, b)	((a)[BITSLOT(b)] &= ~BITMASK(b))
#define BITTEST(a, b)	((a)[BITSLOT(b)] & BITMASK(b))
#define BITNSLOTS(nb)	((nb + 8 - 1) / 8)

#define BFM_HOST_Bus_Write32(offset, val)	((*(UNSG32*)(offset))=val)
#define BFM_HOST_Bus_Read32(offset, holder)	((*(UNSG32*)(holder))=(*(UNSG32*)(offset)))
#define BFM_HOST_Bus_Write16(offset, val)	((*(unsigned short*)(offset))=val)
#define BFM_HOST_Bus_Read16(offset, holder)	((*(unsigned short*)(holder))=(*(unsigned short*)(offset)))
#define BFM_HOST_Bus_Write8(offset, val)	((*(unsigned char*)(offset))=val)
#define BFM_HOST_Bus_Read8(offset, holder)	((*(unsigned char*)(holder))=(*(unsigned char*)(offset)))


#define CMD_BUF_SIZE	2048
#define	CMD_LINE_BUFFER_SIZE		CMD_BUF_SIZE

#define PROMPT "BerlinDebug>"

#define	malloc UtilMemAlloc

enum led_chip_model_t {
	LED_MODEL_PCA9956B,
	LED_MODEL_PCA9955B,
	LED_MODEL_CNT,
};


#if 0
void *	UtilMemMove(void *dest, const void *src, int n);
#endif

/* defined in uish.S */
extern void *__user_read_heap_top(void);
extern void *__user_read_heap_bottom(void);
void __reset_cpu(unsigned int, int, int);

/* defined in cache.S */
void flush_dcache_range(void *start, void *end);
void invalidate_dcache_range(unsigned int, unsigned int);
int diag_i2c_vcore_control(int master_id, int volt_index);
int diag_i2c_led_init(int master_id, unsigned char slave_addr,
		      enum led_chip_model_t model);
int diag_i2c_led_set_frame(int master_id, unsigned char slave_addr,
			   unsigned char *frame, size_t size,
			   enum led_chip_model_t model);
int diag_i2c_check_sy21202(int master_id);
int diag_i2c_check_pg86x(int master_id);
void initMPGIC(void);
int diag_GICSetInt(int MPid, int intId, int enable);
#endif	/* __UTIL_H__	*/
