/******************************************************************************
*              Copyright (c) Marvell International Ltd. and its affiliates
*
* This software file (the "File") is owned and distributed by Marvell
* International Ltd. and/or its affiliates ("Marvell") under the following
* alternative licensing terms.
* If you received this File from Marvell, you may opt to use, redistribute
* and/or modify this File under the following licensing terms.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*  -   Redistributions of source code must retain the above copyright notice,
*       this list of conditions and the following disclaimer.
*  -   Redistributions in binary form must reproduce the above copyright
*       notice, this list of conditions and the following disclaimer in the
*       documentation and/or other materials provided with the distribution.
*  -    Neither the name of Marvell nor the names of its contributors may be
*       used to endorse or promote products derived from this software without
*       specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
* mvDdr3TrainingIPDef.h
*
* DESCRIPTION:
*
*
* FILE REVISION NUMBER:
*       $Revision: 42 $
*
*******************************************************************************/

#ifndef __mvDdr3TrainingIPDef_H
#define __mvDdr3TrainingIPDef_H

#include <gtOs/gtGenTypes.h>
#include "common/siliconIf/mvSiliconIf.h"

#if defined(CHX_FAMILY) || defined(EXMXPM_FAMILY)
#define CPSS_BUILD
#endif

#if defined(CHX_FAMILY) || defined(EXMXPM_FAMILY)
#define osMemCpy	hwsOsMemCopyFuncPtr
#else
#include <gtOs/gtOsMem.h>
#include <gtOs/gtOsIo.h>
#endif

#if defined(CHX_FAMILY) || defined(EXMXPM_FAMILY) || defined (WIN32)
#define INLINE
#else
#define INLINE inline
#endif

#if !defined(CHX_FAMILY) && !defined(EXMXPM_FAMILY) /* to avoid duplicated definition
													   of ASIC_SIMULATION in case it was defined */
#ifdef WIN32
#define ASIC_SIMULATION
#endif
#endif

#define PATTERN_55 (0x55555555)
#define PATTERN_AA (0xAAAAAAAA)
#define PATTERN_80 (0x80808080)
#define PATTERN_20 (0x20202020)
#define PATTERN_01 (0x01010101)
#define PATTERN_FF (0xFFFFFFFF)
#define PATTERN_00 (0x00000000)

/*16bit bus width patterns*/
#define PATTERN_55AA (0x5555AAAA)
#define PATTERN_00FF (0x0000FFFF)
#define PATTERN_0080 (0x00008080)

#define INVALID_VALUE (0xffffffff)
#define MAX_NUM_OF_DUNITS (32)
/* length *2 = length in words of pattern, first low address, second high address */
#define TEST_PATTERN_LENGTH (4) 
#define KILLER_PATTERN_DQ_NUMBER (8)
#define SSO_DQ_NUMBER (4)
#define PATTERN_MAXIMUM_LENGTH (64)
#define ADLL_TX_LENGTH (64)
#define ADLL_RX_LENGTH (32)

#define PARAM_NOT_CARE (0)

#define READ_LEVELING_PHY_OFFSET    (2)
#define WRITE_LEVELING_PHY_OFFSET   (0)

#define MASK_ALL_BITS (0xffffffff)

#define CS_BIT_MASK					(0xF)

/* DFX access */
#define BROADCAST_ID                        (28)
#define MULTICAST_ID                        (29)

#define  XSB_BASE_ADDR                      (0x00004000)
#define  XSB_CTRL_0_REG                     (0x00000000)
#define  XSB_CTRL_1_REG                     (0x00000004)
#define  XSB_CMD_REG                        (0x00000008)
#define  XSB_ADDRESS_REG                    (0x0000000C)
#define  XSB_DATA_REG                       (0x00000010)
#define  PIPE_ENABLE_ADDR	                (0x000f8000)
#define  ENABLE_DDR_TUNING_ADDR             (0x000f829C)

#define  CLIENT_BASE_ADDR                   (0x00002000)
#define  CLIENT_CTRL_REG                    (0x00000000)

#define  TARGET_INT                         (0x1801)
#define  TARGET_EXT                         (0x180E)
#define  BYTE_EN                            (0)
#define  CMD_READ                           (0)
#define  CMD_WRITE                          (1)

#define  INTERNAL_ACCESS_PORT               (1)
#define  EXECUTING                          (1)
#define  ACCESS_EXT                         (1)
#define  CS2_EXIST_BIT                      (2)
#define  TRAINING_ID                        (0xF)
#define  EXT_TRAINING_ID                    (1)
#define  EXT_MODE                           (0x4)

#define GET_RESULT_STATE(res)               (res )
#define SET_RESULT_STATE(res, state)        (res = state)
#if !defined(CHX_FAMILY) && !defined(EXMXPM_FAMILY)
#define _1K         0x00000400
#define _4K         0x00001000
#define _8K         0x00002000
#define _16K        0x00004000
#define _32K        0x00008000
#define _64K        0x00010000
#define _128K       0x00020000
#define _256K       0x00040000
#define _512K       0x00080000

#define _1M         0x00100000
#define _2M         0x00200000
#define _4M         0x00400000
#define _8M         0x00800000
#define _16M        0x01000000
#define _32M        0x02000000
#define _64M        0x04000000
#define _128M       0x08000000
#define _256M       0x10000000
#define _512M       0x20000000

#define _1G         0x40000000
#endif
#define _2G         0x80000000


#define      ADDR_SIZE_512Mb    0x04000000
#define      ADDR_SIZE_1Gb      0x08000000
#define      ADDR_SIZE_2Gb      0x10000000
#define      ADDR_SIZE_4Gb      0x20000000
#define      ADDR_SIZE_8Gb      0x40000000

/******************************** enum ***************************************/

typedef enum 
{
   FreqField_PLL_NDIV,
   FreqField_PLL_MDIV,
   FreqField_PLL_KDIV,
   FreqField_PLL_VCO_BAND,
   FreqField_PLL_LPF_R1_CTRL,

   MV_HWS_FreqField_LIMIT
}MV_HWS_FreqField;



typedef enum 
{
   EDGE_PF,
   EDGE_FP,
   EDGE_FPF,
   EDGE_PFP
}MV_HWS_EdgeCompare;



typedef enum 
{
   MV_HWS_ControlElement_ADLL, /* per bit 1 edge */
   MV_HWS_ControlElement_DQ_SKEW,
   MV_HWS_ControlElement_DQS_SKEW

}MV_HWS_ControlElement;


typedef enum 
{
   MV_HWS_TrainingType_PBS, /* per bit 1 edge */
   MV_HWS_TrainingType_ADLL_SHIFT, /* per pup 1 edge */
   MV_HWS_TrainingType_CENTRALIZATION /* per pup 2 edge */

}MV_HWS_TrainingType;

typedef enum 
{
   MV_HWS_Low2High,
   MV_HWS_High2Low,
   MV_HWS_SearchDirLimit
}MV_HWS_SearchDirection;


typedef enum
{
   PageSize_1K,
   PageSize_2K

}MV_HWS_PageSize;


typedef enum 
{
   MV_HWS_InitialValues_ADLL,
   MV_HWS_InitialValues_PBS

}MV_HWS_InitialValues;


typedef enum 
{
   Operation_READ = 0,
   Operation_WRITE = 1

} MV_HWS_Operation;

typedef enum 
{
   MV_HWS_TrainingIpStatus_FAIL,
   MV_HWS_TrainingIpStatus_SUCCESS,
   MV_HWS_TrainingIpStatus_TIMEOUT
}MV_HWS_TrainingIpStatus;


typedef enum _MV_HWS_CsType
{
   CS_SINGLE,
   CS_NON_SINGLE
}MV_HWS_DDR_CS;

typedef enum 
{
   DDR_PHY_DATA = 0,
   DDR_PHY_CONTROL = 1

} MV_HWS_DDR_PHY;

typedef enum 
{
   MV_HWS_MemoryType_Dummy
} MV_HWS_MemoryType;

typedef enum 
{
   OPER_WRITE,
   OPER_READ,
   OPER_WRITE_AND_READ

}MV_HWS_DIRECTION;

typedef enum 
{
   PHASE_SHIFT,
   CLOCK_SHIFT,
   ALIGN_SHIFT

}MV_HWS_WL_SUPP;
/************************* Structures ***********************************************/

typedef struct
{
	GT_U32                  regAddr;
	GT_U32                  regData;
	GT_U32                  regMask;
} RegData;


#endif /* __mvDdr3TrainingIPDef_H */


