/*******************************************************************************
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.

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


#ifndef __INCmvCtrlEnvAddrDech
#define __INCmvCtrlEnvAddrDech

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/* includes */
#include "ctrlEnv/mvCtrlEnvLib.h"
#include "ctrlEnv/mvCtrlEnvRegs.h"


/* defines  */
/* DUnit attributes */
#define ATMWCR_WIN_DUNIT_CS0_OFFS		0
#define ATMWCR_WIN_DUNIT_CS0_MASK		BIT0
#define ATMWCR_WIN_DUNIT_CS0_REQ		(0 << ATMWCR_WIN_DUNIT_CS0_OFFS)

#define ATMWCR_WIN_DUNIT_CS1_OFFS		1
#define ATMWCR_WIN_DUNIT_CS1_MASK		BIT1
#define ATMWCR_WIN_DUNIT_CS1_REQ 		(0 << ATMWCR_WIN_DUNIT_CS1_OFFS)

#define ATMWCR_WIN_DUNIT_CS2_OFFS		2
#define ATMWCR_WIN_DUNIT_CS2_MASK		BIT2
#define ATMWCR_WIN_DUNIT_CS2_REQ 		(0 << ATMWCR_WIN_DUNIT_CS2_OFFS)

#define ATMWCR_WIN_DUNIT_CS3_OFFS		3
#define ATMWCR_WIN_DUNIT_CS3_MASK		BIT3
#define ATMWCR_WIN_DUNIT_CS3_REQ 		(0 << ATMWCR_WIN_DUNIT_CS3_OFFS)

/* RUnit (Device)  attributes */
#define ATMWCR_WIN_RUNIT_DEVCS0_OFFS		0
#define ATMWCR_WIN_RUNIT_DEVCS0_MASK		BIT0
#define ATMWCR_WIN_RUNIT_DEVCS0_REQ		(0 << ATMWCR_WIN_RUNIT_DEVCS0_OFFS)

#define ATMWCR_WIN_RUNIT_DEVCS1_OFFS		1
#define ATMWCR_WIN_RUNIT_DEVCS1_MASK		BIT1
#define ATMWCR_WIN_RUNIT_DEVCS1_REQ 		(0 << ATMWCR_WIN_RUNIT_DEVCS1_OFFS)

#define ATMWCR_WIN_RUNIT_DEVCS2_OFFS		2
#define ATMWCR_WIN_RUNIT_DEVCS2_MASK		BIT2
#define ATMWCR_WIN_RUNIT_DEVCS2_REQ 		(0 << ATMWCR_WIN_RUNIT_DEVCS2_OFFS)

#define ATMWCR_WIN_RUNIT_BOOTCS_OFFS		4
#define ATMWCR_WIN_RUNIT_BOOTCS_MASK		BIT4
#define ATMWCR_WIN_RUNIT_BOOTCS_REQ 		(0 << ATMWCR_WIN_RUNIT_BOOTCS_OFFS)

/* LMaster (PCI)  attributes */
#define ATMWCR_WIN_LUNIT_BYTE_SWP_OFFS		0
#define ATMWCR_WIN_LUNIT_BYTE_SWP_MASK		BIT0
#define ATMWCR_WIN_LUNIT_BYTE_SWP		(0 << ATMWCR_WIN_LUNIT_BYTE_SWP_OFFS)
#define ATMWCR_WIN_LUNIT_BYTE_NO_SWP		(1 << ATMWCR_WIN_LUNIT_BYTE_SWP_OFFS)


#define ATMWCR_WIN_LUNIT_WORD_SWP_OFFS		1
#define ATMWCR_WIN_LUNIT_WORD_SWP_MASK		BIT1
#define ATMWCR_WIN_LUNIT_WORD_SWP		(0 << ATMWCR_WIN_LUNIT_WORD_SWP_OFFS)
#define ATMWCR_WIN_LUNIT_WORD_NO_SWP		(1 << ATMWCR_WIN_LUNIT_WORD_SWP_OFFS)

#define ATMWCR_WIN_LUNIT_NO_SNOOP		BIT2

#define ATMWCR_WIN_LUNIT_TYPE_OFFS		3
#define ATMWCR_WIN_LUNIT_TYPE_MASK		BIT3
#define ATMWCR_WIN_LUNIT_TYPE_IO		(0 << ATMWCR_WIN_LUNIT_TYPE_OFFS)
#define ATMWCR_WIN_LUNIT_TYPE_MEM		(1 << ATMWCR_WIN_LUNIT_TYPE_OFFS)

#define ATMWCR_WIN_LUNIT_FORCE64_OFFS		4
#define ATMWCR_WIN_LUNIT_FORCE64_MASK		BIT4
#define ATMWCR_WIN_LUNIT_FORCE64		(0 << ATMWCR_WIN_LUNIT_FORCE64_OFFS)

#define ATMWCR_WIN_LUNIT_ORDERING_OFFS		6
#define ATMWCR_WIN_LUNIT_ORDERING_MASK		BIT6
#define ATMWCR_WIN_LUNIT_ORDERING		(1 << ATMWCR_WIN_LUNIT_FORCE64_OFFS)

/* PEX Attributes */
#define ATMWCR_WIN_PEX_TYPE_OFFS		3
#define ATMWCR_WIN_PEX_TYPE_MASK		BIT3
#define ATMWCR_WIN_PEX_TYPE_IO			(0 << ATMWCR_WIN_PEX_TYPE_OFFS)
#define ATMWCR_WIN_PEX_TYPE_MEM			(1 << ATMWCR_WIN_PEX_TYPE_OFFS)

/* typedefs */

/* Unsupported attributes for address decode:                               */
/* 2) PCI0/1_REQ64n control                                                 */

typedef struct _mvTargetAttrib {
	MV_U8			attrib;			/* chip select attributes */
	MV_TARGET_ID 		targetId; 		/* Target Id of this MV_TARGET */
} MV_TARGET_ATTRIB;


/* This structure describes address decode window                           */
typedef struct _mvDecWin {
    MV_TARGET	target;         /* Target for addr decode window        */
    MV_ADDR_WIN	addrWin;        /* Address window of target             */
    MV_BOOL	enable;         /* Window enable/disable                */
} MV_DEC_WIN;

typedef struct _mvDecWinParams {
    MV_TARGET_ID    targetId;   /* Target ID field */
    MV_U8           attrib;     /* Attribute field */
    MV_U32          baseAddr;   /* Base address in register format */
    MV_U32          size;       /* Size in register format */
} MV_DEC_WIN_PARAMS;


/* mvCtrlEnvAddrDec API list */

MV_STATUS mvCtrlAttribGet(MV_TARGET target, MV_TARGET_ATTRIB *targetAttrib);
MV_STATUS mvCtrlAttribSet(MV_TARGET target, MV_TARGET_ATTRIB *targetAttrib);

MV_TARGET mvCtrlTargetGet(MV_TARGET_ATTRIB *targetAttrib);
MV_TARGET mvCtrlTargetByWinInfoGet(MV_UNIT_WIN_INFO *unitWinInfo);

MV_STATUS mvCtrlAddrDecToParams(MV_DEC_WIN *pAddrDecWin, MV_DEC_WIN_PARAMS *pWinParam);

MV_STATUS mvCtrlParamsToAddrDec(MV_DEC_WIN_PARAMS *pWinParam, MV_DEC_WIN *pAddrDecWin);

MV_STATUS mvCtrlAddrWinMapBuild(MV_UNIT_WIN_INFO *pAddrWinMap, MV_U32 len);

MV_STATUS mvCtrlAddrWinInfoGet(MV_UNIT_WIN_INFO *pAddrWinInfo, MV_ULONG physAddr);


#ifdef __cplusplus
}
#endif /* __cplusplus */


#endif /* __INCmvCtrlEnvAddrDech */
