/*
 * 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 __COMMON_TYPE_H__
#define __COMMON_TYPE_H__

typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef  unsigned int uint32_t;
typedef  unsigned long int uint64_t; // <stdint.h>
typedef unsigned long uintptr_t;
typedef  signed char int8_t;
typedef  signed short int16_t;
typedef  signed int int32_t;
typedef  long int int64_t;	// <stdint.h>
typedef signed long intptr_t;
typedef  unsigned long size_t;
typedef  unsigned char       UNSG8;
typedef  signed char         SIGN8;
typedef  unsigned short      UNSG16;
typedef  signed short        SIGN16;
typedef  unsigned int        UNSG32;
typedef  signed int          SIGN32;
typedef  unsigned long long  UNSG64;
typedef  signed long long    SIGN64;
typedef  float               REAL32;
typedef  double              REAL64;
#ifndef INLINE
    #define INLINE          inline
#endif
typedef unsigned char          UCHAR;
typedef char                   CHAR;
typedef UCHAR                  BOOL;
typedef UCHAR                  BOOLEAN;
typedef CHAR                   INT8;
typedef UCHAR                  UINT8;
typedef UCHAR                  BYTE;
typedef short                  INT16;
typedef unsigned short         UINT16;
typedef int                    INT32;
typedef unsigned int           UINT32;
typedef long long              INT64;
typedef unsigned long long     UINT64;
typedef unsigned int           UINT;
typedef int                    INT;
typedef signed int              HRESULT;
typedef long            LONG;
typedef unsigned long   ULONG;

/*---------------------------------------------------------------------------
 *    Multiple-word types
 *--------------------------------------------------------------------------*/
#ifndef Txxb
#define Txxb
typedef UINT8 T8b;
typedef UINT16 T16b;
typedef UINT32 T32b;
typedef UINT32 T64b[2];
typedef UINT32 T96b[3];
typedef UINT32 T128b[4];
typedef UINT32 T160b[5];
typedef UINT32 T192b[6];
typedef UINT32 T224b[7];
typedef UINT32 T256b[8];
#endif

typedef void VOID;
typedef void *PTR;
typedef void **PHANDLE;
typedef void *HANDLE;
typedef void *PVOID;
typedef long long loff_t;
typedef signed int hresult;
typedef void *SHM_HANDLE;

#define GaloisMemSet memset
#define GaloisFree(x) (void)0
#define GaloisMemcpy memcpy
#define GaloisMemClear(buf, n)  memset((buf), 0, (n))

#ifndef TRUE
#define TRUE (1)
#endif
#ifndef FALSE
#define FALSE (0)
#endif

#ifndef True
#define True (1)
#endif
#ifndef False
#define False (0)
#endif

#ifndef NULL
#define NULL ((void *)0)
#endif

#define E_SUC (0x00000000)
#define E_ERR (0x80000000)

#define E_GENERIC_BASE  (0x0000 << 16)

#define E_GEN_SUC(code) (E_SUC | E_GENERIC_BASE | (code&0x0000FFFF))
#define E_GEN_ERR(code) (E_ERR | E_GENERIC_BASE | (code&0x0000FFFF))

#define S_OK  E_GEN_SUC(0x0000)
#define S_FALSE  E_GEN_SUC(0x0001)

#define MAGIC_NUMBER (0xD2ADA3F1)
#define COMMAND_SIZE 5
#define _RESERVED_   0
#define IMAGE3_DDR_ADDR IMAGE3_DDR_ADDRESS
#define reg(addr) (*((int *)(addr)))

/* kernel interface return status definiton */
enum status {
	SUCCCESS     = 0,
	FAIL        = -1,
};

#define AMP_SHM_STATIC 1
#define AMP_SHM_VIDEO_FB   2

#endif
