/*******************************************************************************
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.  Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.

********************************************************************************
Marvell Commercial License Option

If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.

********************************************************************************
Marvell GPL License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.

THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED.  The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option
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.

*******************************************************************************/

/*******************************************************************************
* mvXor.h - Header File for :
*
* DESCRIPTION:
*       This file contains Marvell Controller XOR HW library API.
*       NOTE: This HW library API assumes XOR source, destination and
*       descriptors are cache coherent.
*
* DEPENDENCIES:
*       None.
*
*******************************************************************************/

#ifndef __INCMVxorh
#define __INCMVxorh

#ifdef __cplusplus
extern "C" {
#endif

#include "mvCommon.h"
#include "ctrlEnv/mvCtrlEnvSpec.h"
#include "mvSysXorConfig.h"

/* typedefs */

/* This enumerator describes the type of functionality the XOR channel      */
/* can have while using the same data structures.                           */
	typedef enum _mvXorType {
		MV_XOR,		/* XOR channel functions as XOR accelerator     */
		MV_DMA,		/* XOR channel functions as IDMA channel        */
		MV_CRC32	/* XOR channel functions as CRC 32 calculator   */
	} MV_XOR_TYPE;

	typedef enum _mvXorBurstLinit {
		MV_XOR_BURST_LIMIT_32_BYTES  = 0x2,
		MV_XOR_BURST_LIMIT_64_BYTES  = 0x3,
		MV_XOR_BURST_LIMIT_128_BYTES = 0x4
	} MV_XOR_BURST_LIMIT;

#if defined(MV_CPU_LE)
	/* This structure describes XOR descriptor size 64bytes                     */
	typedef struct _mvXorDesc {
		MV_U32 status;	/* Successful descriptor execution indication */
		MV_U32 crc32Result;	/* Result of CRC-32 calculation */
		MV_U32 descCommand;	/* type of operation to be carried out on the data */
		MV_U32 phyNextDescPtr;	/* Next descriptor address pointer */
		MV_U32 byteCnt;	/* Size of source and destination blocks in bytes */
		MV_U32 phyDestAdd;	/* Destination Block address pointer */
		MV_U32 srcAdd0;	/* source block #0 address pointer */
		MV_U32 srcAdd1;	/* source block #1 address pointer */
		MV_U32 srcAdd2;	/* source block #2 address pointer */
		MV_U32 srcAdd3;	/* source block #3 address pointer */
		MV_U32 srcAdd4;	/* source block #4 address pointer */
		MV_U32 srcAdd5;	/* source block #6 address pointer */
		MV_U32 srcAdd6;	/* source block #6 address pointer */
		MV_U32 srcAdd7;	/* source block #7 address pointer */
		MV_U32 reserved0;
		MV_U32 reserved1;
	} MV_XOR_DESC;

/* XOR descriptor structure for CRC and DMA descriptor */
	typedef struct _mvCrcDmaDesc {
		MV_U32 status;	/* Successful descriptor execution indication */
		MV_U32 crc32Result;	/* Result of CRC-32 calculation */
		MV_U32 descCommand;	/* type of operation to be carried out on the data */
		MV_U32 nextDescPtr;	/* Next descriptor address pointer */
		MV_U32 byteCnt;	/* Size of source block part represented by the descriptor */
		MV_U32 destAdd;	/* Destination Block address pointer (not used in CRC32 */
		MV_U32 srcAdd0;	/* Mode: Source Block address pointer */
		MV_U32 srcAdd1;	/* Mode: Source Block address pointer */
	} MV_CRC_DMA_DESC;

#elif defined(MV_CPU_BE)
/* This structure describes XOR descriptor size 64bytes                     */
	typedef struct _mvXorDesc {
		MV_U32 crc32Result;	/* Result of CRC-32 calculation */
		MV_U32 status;	/* Successful descriptor execution indication */
		MV_U32 phyNextDescPtr;	/* Next descriptor address pointer */
		MV_U32 descCommand;	/* type of operation to be carried out on the data */
		MV_U32 phyDestAdd;	/* Destination Block address pointer */
		MV_U32 byteCnt;	/* Size of source and destination blocks in bytes */
		MV_U32 srcAdd1;	/* source block #1 address pointer */
		MV_U32 srcAdd0;	/* source block #0 address pointer */
		MV_U32 srcAdd3;	/* source block #3 address pointer */
		MV_U32 srcAdd2;	/* source block #2 address pointer */
		MV_U32 srcAdd5;	/* source block #5 address pointer */
		MV_U32 srcAdd4;	/* source block #4 address pointer */
		MV_U32 srcAdd7;	/* source block #7 address pointer */
		MV_U32 srcAdd6;	/* source block #6 address pointer */
		MV_U32 reserved0;
		MV_U32 reserved1;
	} MV_XOR_DESC;

/* XOR descriptor structure for CRC and DMA descriptor */
	typedef struct _mvCrcDmaDesc {
		MV_U32 crc32Result;	/* Result of CRC-32 calculation */
		MV_U32 status;	/* Successful descriptor execution indication */
		MV_U32 nextDescPtr;	/* Next descriptor address pointer */
		MV_U32 descCommand;	/* type of operation to be carried out on the data */
		MV_U32 destAdd;	/* Destination Block address pointer (not used in CRC32 */
		MV_U32 byteCnt;	/* Size of source block part represented by the descriptor */
		MV_U32 srcAdd1;	/* Mode: Source Block address pointer */
		MV_U32 srcAdd0;	/* Mode: Source Block address pointer */
	} MV_CRC_DMA_DESC;

#endif

#define MV_XOR_DESC_ALIGNMENT       sizeof(MV_XOR_DESC)
	typedef struct _mvXorEcc {
		MV_U32 destPtr;	/* Target block pointer to ECC/MemInit operation */
		MV_U32 blockSize;	/* Block size in bytes for ECC/MemInit operation */
		MV_BOOL periodicEnable;	/* Enable Timer Mode                                                         */
		MV_U32 tClkTicks;	/* ECC timer mode initial count - down value     */
		MV_U32 sectorSize;	/* section size for ECC timer mode operation     */
	} MV_XOR_ECC;

	typedef enum _mvXorOverrideTarget {
		SRC_ADDR0,	/* Source Address #0 Control */
		SRC_ADDR1,	/* Source Address #1 Control */
		SRC_ADDR2,	/* Source Address #2 Control */
		SRC_ADDR3,	/* Source Address #3 Control */
		SRC_ADDR4,	/* Source Address #4 Control */
		SRC_ADDR5,	/* Source Address #5 Control */
		SRC_ADDR6,	/* Source Address #6 Control */
		SRC_ADDR7,	/* Source Address #7 Control */
		XOR_DST_ADDR,	/* Destination Address Control */
		XOR_NEXT_DESC	/* Next Descriptor Address Control */
	} MV_XOR_OVERRIDE_TARGET;

	MV_VOID mvXorHalInit(MV_U32 unit);
	MV_STATUS mvXorCtrlSet(MV_U32 chan, MV_U32 xorCtrl);
	MV_STATUS mvXorEccClean(MV_U32 chan, MV_XOR_ECC *pXorEccConfig);
	MV_U32 mvXorEccCurrTimerGet(MV_U32 chan, MV_U32 tClk);
	MV_STATUS mvXorMemInit(MV_U32 chan, MV_U32 startPtr, MV_U32 blockSize, MV_U32 initValHigh, MV_U32 initValLow);
	MV_STATUS mvXorTransfer(MV_U32 chan, MV_XOR_TYPE xorType, MV_U32 xorChainPtr);
	MV_STATE mvXorStateGet(MV_U32 chan);
	MV_STATUS mvXorCommandSet(MV_U32 chan, MV_COMMAND command);
	MV_STATUS mvXorOverrideSet(MV_U32 chan, MV_XOR_OVERRIDE_TARGET target, MV_U32 winNum, MV_BOOL enable);
	MV_VOID xorSetSrcBurstLimit(MV_U32 chan, MV_XOR_BURST_LIMIT srcBurstLimit);
	MV_VOID mvXorOverrideDisable(MV_U32 chan);

	MV_STATUS mvXorWinInit(MV_UNIT_WIN_INFO *addrWinMap);
	MV_STATUS mvXorTargetWinWrite(MV_U32 unit, MV_U32 winNum,
					MV_UNIT_WIN_INFO *pAddrDecWin);
	MV_STATUS mvXorTargetWinRead(MV_U32 unit, MV_U32 winNum,
					MV_UNIT_WIN_INFO *pAddrDecWin);
	MV_STATUS mvXorTargetWinEnable(MV_U32 unit, MV_U32 winNum, MV_BOOL enable);
	MV_STATUS mvXorProtWinSet(MV_U32 unit, MV_U32 chan, MV_U32 winNum, MV_BOOL access, MV_BOOL write);
	MV_STATUS mvXorPciRemap(MV_U32 unit, MV_U32 winNum, MV_U32 addrHigh);

#ifdef __cplusplus
}
#endif
#endif
