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

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

#include "mvSysHwConfig.h"
#include "pci-if/mvPciIfRegs.h"
#if defined(MV_INCLUDE_PEX)
#include "pex/mvPex.h"
#endif
#if defined(MV_INCLUDE_PCI)
#include "pci/mvPci.h"
#endif
#include "ctrlEnv/mvCtrlEnvLib.h"
#include "ctrlEnv/mvCtrlEnvAddrDec.h"

typedef enum _mvPCIIfType {
	PCI_IF_TYPE_CONVEN_PCIX,
	PCI_IF_TYPE_PEX
} PCI_IF_TYPE;

typedef enum _mvPCIIfMode {
	PCI_IF_MODE_HOST,
	PCI_IF_MODE_DEVICE
} PCI_IF_MODE;

/* Global Functions prototypes */

/* mvPciIfInit - Initialize PCI interfaces*/
MV_STATUS mvPciIfInit(MV_U32 pciIf, PCI_IF_MODE pciIfmode);

/* mvPciIfConfigRead - Read from configuration space */
MV_U32 mvPciIfConfigRead(MV_U32 pciIf, MV_U32 bus, MV_U32 dev, MV_U32 func, MV_U32 regOff);

/* mvPciIfConfigWrite - Write to configuration space */
MV_STATUS mvPciIfConfigWrite(MV_U32 pciIf, MV_U32 bus, MV_U32 dev, MV_U32 func, MV_U32 regOff, MV_U32 data);

/* mvPciIfMasterEnable - Enable/disale PCI interface master transactions.*/
MV_STATUS mvPciIfMasterEnable(MV_U32 pciIf, MV_BOOL enable);

/* mvPciIfSlaveEnable - Enable/disale PCI interface slave transactions.*/
MV_STATUS mvPciIfSlaveEnable(MV_U32 pciIf, MV_U32 bus, MV_U32 dev, MV_BOOL enable);

/* mvPciIfLocalBusNumSet - Set PCI interface local bus number.*/
MV_STATUS mvPciIfLocalBusNumSet(MV_U32 pciIf, MV_U32 busNum);

/* mvPciIfLocalBusNumGet - Get PCI interface local bus number.*/
MV_U32 mvPciIfLocalBusNumGet(MV_U32 pciIf);

/* mvPciIfLocalDevNumSet - Set PCI interface local device number.*/
MV_STATUS mvPciIfLocalDevNumSet(MV_U32 pciIf, MV_U32 devNum);

/* mvPciIfLocalDevNumGet - Get PCI interface local device number.*/
MV_U32 mvPciIfLocalDevNumGet(MV_U32 pciIf);

/* mvPciIfTypeGet - Get PCI If type*/
PCI_IF_TYPE mvPciIfTypeGet(MV_U32 pciIf);

MV_U32 mvPciRealIfNumGet(MV_U32 pciIf);

/* mvPciIfAddrDecShow - Display address decode windows attributes */
MV_VOID mvPciIfAddrDecShow(MV_VOID);

#ifdef __cplusplus
}
#endif	/* __cplusplus */

#endif /* #ifndef __INCPCIIFH */
