/*
 * Copyright (C) 2018 Synaptics Incorporated. All rights reserved.
 *
 * 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.
 *
 * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
 * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
 * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
 * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
 * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
 * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
 * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
 * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
 */
#ifndef _DIAG_COMMON_
#define _DIAG_COMMON_

#include "lgpl_printf.h"
#include "string.h"
#include "diag_cpu.h"

#define VELOCE      0
#define FPGA        1
#define ASIC        2

#undef PLATFORM
#define PLATFORM    ASIC        // default platform

#if PLATFORM == VELOCE
    #define A_F_V(a, f, v)      (v)
#elif PLATFORM == FPGA
    #define A_F_V(a, f, v)      (f)
#else // ASIC
    #define A_F_V(a, f, v)      (a)
#endif

#ifndef NULL
#define NULL        0
#endif

enum PRINT_LEVEL
{
	PRN_NONE=0,
	PRN_ERR,
	PRN_RES,
	PRN_INFO,
	PRN_DBG,
	PRN_BUF,
};
#define PRN_BUFFERED                (1<<5)

#define dbg_printf(lvl, format, args...) \
	do { \
		if((lvl) > PRN_RES){ \
	} \
	else \
		lgpl_printf(format, ## args); \
	}while(0)

#define DIAG_ASSERT(cond)       {if (!(cond)) { \
	dbg_printf(PRN_RES, "Assert fail, condition:%s, file:%s, line:%d\n", #cond, __FILE__, __LINE__); \
	while(1); \
	}}

#ifndef ALIGN
#define ALIGN(n, align)         (((n)+((align) - 1)) & (~((align) - 1)))
#endif

/*
 * Macro to remove unused variable warning for function args not used for
 * specific platform.
 */
#define UNUSED(var) do { (void)(var); } while(0)

#endif /*_DIAG_COMMON_*/
