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

/*
This module only support scanning of Header type 00h of pci devices
There is no suppotr for Header type 01h of pci devices  ( PCI bridges )
*/

/* includes */
#include "mvCommon.h"
#include "mvSysHwConfig.h"

#include "pci-if/mvPciIf.h"
#include "pci-if/mvPciIfRegs.h"

/* PCI base address low bar mask */
#define PCI_ERROR_CODE                      0xffffffff

#define PCI_BRIDGE_CLASS					0x6
#define P2P_BRIDGE_SUB_CLASS_CODE			0x4

#define P2P_BUSSES_NUM						0x18
#define P2P_IO_BASE_LIMIT_SEC_STATUS		0x1C
#define P2P_MEM_BASE_LIMIT					0x20
#define P2P_PREF_MEM_BASE_LIMIT				0x24
#define P2P_PREF_BASE_UPPER_32				0x28
#define P2P_PREF_LIMIT_UPPER_32				0x2C
#define P2P_IO_BASE_LIMIT_UPPER_16			0x30
#define P2P_EXP_ROM							0x38

/* P2P_BUSSES_NUM  (PBM) */

#define PBM_PRIME_BUS_NUM_OFFS				0
#define PBM_PRIME_BUS_NUM_MASK				(0xff << PBM_PRIME_BUS_NUM_OFFS)

#define PBM_SEC_BUS_NUM_OFFS				8
#define PBM_SEC_BUS_NUM_MASK				(0xff << PBM_SEC_BUS_NUM_OFFS)

#define PBM_SUB_BUS_NUM_OFFS				16
#define PBM_SUB_BUS_NUM_MASK				(0xff << PBM_SUB_BUS_NUM_OFFS)

#define PBM_SEC_LAT_TMR_OFFS				24
#define PBM_SEC_LAT_TMR_MASK				(0xff << PBM_SEC_LAT_TMR_OFFS)

/* P2P_IO_BASE_LIMIT_SEC_STATUS (PIBLSS) */

#define PIBLSS_IO_BASE_OFFS					0
#define PIBLSS_IO_BASE_MASK					(0xff << PIBLSS_IO_BASE_OFFS)

#define PIBLSS_ADD_CAP_OFFS					0
#define PIBLSS_ADD_CAP_MASK 				(0x3 << PIBLSS_ADD_CAP_OFFS)
#define PIBLSS_ADD_CAP_16BIT 				(0x0 << PIBLSS_ADD_CAP_OFFS)
#define PIBLSS_ADD_CAP_32BIT 				(0x1 << PIBLSS_ADD_CAP_OFFS)

#define PIBLSS_LOW_ADDR_OFFS				0
#define PIBLSS_LOW_ADDR_MASK				(0xFFF << PIBLSS_LOW_ADDR_OFFS)

#define PIBLSS_HIGH_ADDR_OFFS				12
#define PIBLSS_HIGH_ADDR_MASK				(0xF << PIBLSS_HIGH_ADDR_OFFS)

#define PIBLSS_IO_LIMIT_OFFS				8
#define PIBLSS_IO_LIMIT_MASK				(0xff << PIBLSS_IO_LIMIT_OFFS)

#define PIBLSS_SEC_STATUS_OFFS				16
#define PIBLSS_SEC_STATUS_MASK				(0xffff << PIBLSS_SEC_STATUS_OFFS)

/* P2P_MEM_BASE_LIMIT (PMBL)*/

#define PMBL_MEM_BASE_OFFS					0
#define PMBL_MEM_BASE_MASK					(0xffff << PMBL_MEM_BASE_OFFS)

#define PMBL_MEM_LIMIT_OFFS					16
#define PMBL_MEM_LIMIT_MASK					(0xffff << PMBL_MEM_LIMIT_OFFS)

#define PMBL_LOW_ADDR_OFFS					0
#define PMBL_LOW_ADDR_MASK					(0xFFFFF << PMBL_LOW_ADDR_OFFS)

#define PMBL_HIGH_ADDR_OFFS					20
#define PMBL_HIGH_ADDR_MASK					(0xFFF << PMBL_HIGH_ADDR_OFFS)

/* P2P_PREF_MEM_BASE_LIMIT (PRMBL) */

#define PRMBL_PREF_MEM_BASE_OFFS			0
#define PRMBL_PREF_MEM_BASE_MASK			(0xffff << PRMBL_PREF_MEM_BASE_OFFS)

#define PRMBL_PREF_MEM_LIMIT_OFFS			16
#define PRMBL_PREF_MEM_LIMIT_MASK			(0xffff<<PRMBL_PREF_MEM_LIMIT_OFFS)

#define PRMBL_LOW_ADDR_OFFS					0
#define PRMBL_LOW_ADDR_MASK					(0xFFFFF << PRMBL_LOW_ADDR_OFFS)

#define PRMBL_HIGH_ADDR_OFFS				20
#define PRMBL_HIGH_ADDR_MASK				(0xFFF << PRMBL_HIGH_ADDR_OFFS)

#define PRMBL_ADD_CAP_OFFS					0
#define PRMBL_ADD_CAP_MASK					(0xf << PRMBL_ADD_CAP_OFFS)
#define PRMBL_ADD_CAP_32BIT					(0x0 << PRMBL_ADD_CAP_OFFS)
#define PRMBL_ADD_CAP_64BIT					(0x1 << PRMBL_ADD_CAP_OFFS)

/* P2P_IO_BASE_LIMIT_UPPER_16 (PIBLU) */

#define PRBU_IO_UPP_BASE_OFFS				0
#define PRBU_IO_UPP_BASE_MASK				(0xffff << PRBU_IO_UPP_BASE_OFFS)

#define PRBU_IO_UPP_LIMIT_OFFS				16
#define PRBU_IO_UPP_LIMIT_MASK				(0xffff << PRBU_IO_UPP_LIMIT_OFFS)

/* typedefs */

typedef enum _mvPciBarMapping {
	PCI_MEMORY_BAR,
	PCI_IO_BAR,
	PCI_NO_MAPPING
} MV_PCI_BAR_MAPPING;

typedef enum _mvPciBarType {
	PCI_32BIT_BAR,
	PCI_64BIT_BAR
} MV_PCI_BAR_TYPE;

typedef enum _mvPciIntPin {
	MV_PCI_INTA = 1,
	MV_PCI_INTB = 2,
	MV_PCI_INTC = 3,
	MV_PCI_INTD = 4
} MV_PCI_INT_PIN;

typedef enum _mvPciHeader {
	MV_PCI_STANDARD,
	MV_PCI_PCI2PCI_BRIDGE
} MV_PCI_HEADER;

/* BAR structure */
typedef struct _pciBar {
	MV_U32 barOffset;
	MV_U32 barBaseLow;
	MV_U32 barBaseHigh;
	MV_U32 barSizeLow;
	MV_U32 barSizeHigh;
	/* The 'barBaseAddr' is a 64-bit variable
	   that will contain the TOTAL base address
	   value achived by combining both the 'barBaseLow'
	   and the 'barBaseHigh' parameters as follows:

	   BIT: 63          31         0
	   |           |         |
	   barBaseHigh barBaseLow */
	MV_U64 barBaseAddr;
	/* The 'barSize' is a 64-bit variable
	   that will contain the TOTAL size achived
	   by combining both the 'barSizeLow' and
	   the 'barSizeHigh' parameters as follows:

	   BIT: 63          31         0
	   |           |         |
	   barSizeHigh barSizeLow

	   NOTE: The total size described above
	   is AFTER the size calculation as
	   described in PCI spec rev2.2 */
	MV_U64 barSize;
	MV_BOOL isPrefetchable;
	MV_PCI_BAR_TYPE barType;
	MV_PCI_BAR_MAPPING barMapping;

} PCI_BAR;

/* Device information structure */
typedef struct _mvPciDevice {
	/* Device specific information */
	MV_U32 busNumber;	/* Pci agent bus number */
	MV_U32 deviceNum;	/* Pci agent device number */
	MV_U32 function;	/* Pci agent function number */

	MV_U32 venID;		/* Pci agent Vendor ID */
	MV_U32 deviceID;	/* Pci agent Device ID */

	MV_BOOL isFastB2BCapable;	/* Capability of Fast Back to Back
					   transactions */
	MV_BOOL isCapListSupport;	/* Support of Capability list */
	MV_BOOL is66MHZCapable;	/* 66MHZ support */

	MV_U32 baseClassCode;	/* Pci agent base Class Code */
	MV_U32 subClassCode;	/* Pci agent sub Class Code */
	MV_U32 progIf;	/* Pci agent Programing interface */
	MV_U32 revisionID;

	PCI_BAR pciBar[6];	/* Pci agent bar list */

	MV_U32 p2pPrimBusNum;	/* P2P Primary Bus number */
	MV_U32 p2pSecBusNum;	/* P2P Secondary Bus Number */
	MV_U32 p2pSubBusNum;	/* P2P Subordinate bus Number */
	MV_U32 p2pSecLatencyTimer;	/* P2P Econdary Latency Timer */
	MV_U32 p2pIObase;	/* P2P IO Base */
	MV_U32 p2pIOLimit;	/* P2P IO Linit */
	MV_BOOL bIO32;
	MV_U32 p2pSecStatus;	/* P2P Secondary Status */
	MV_U32 p2pMemBase;	/* P2P Memory Space */
	MV_U32 p2pMemLimit;	/* P2P Memory Limit */
	MV_U32 p2pPrefMemBase;	/* P2P Prefetchable Mem Base */
	MV_U32 p2pPrefMemLimit;	/* P2P Prefetchable Memory Limit */
	MV_BOOL bPrefMem64;
	MV_U32 p2pPrefBaseUpper32Bits;	/* P2P Prefetchable upper 32 bits */
	MV_U32 p2pPrefLimitUpper32Bits;	/* P2P prefetchable limit upper 32 */

	MV_U32 pciCacheLine;	/* Pci agent cache line */
	MV_U32 pciLatencyTimer;	/* Pci agent Latency timer  */
	MV_PCI_HEADER pciHeader;	/* Pci agent header type */
	MV_BOOL isMultiFunction;	/* Multi function support */
	MV_BOOL isBISTCapable;	/* Self test capable */

	MV_U32 subSysID;	/* Sub System ID */
	MV_U32 subSysVenID;	/* Sub System Vendor ID */

	MV_BOOL isExpRom;	/* Expantion Rom support */
	MV_U32 expRomAddr;	/* Expantion Rom pointer */

	MV_U32 capListPointer;	/* Capability list pointer */

	MV_U32 irqLine;	/* IRQ line  */
	MV_PCI_INT_PIN intPin;	/* Interrupt pin */
	MV_U32 minGrant;	/* Minimum grant */
	MV_U32 maxLatency;	/* Maximum latency */

	MV_U32 funtionsNum;	/* pci agent total functions number */

	MV_U32 barsNum;
	MV_U8 type[60];	/* class name of the pci agent */

} MV_PCI_DEVICE;

/* PCI gloabl functions */
MV_STATUS mvPciClassNameGet(MV_U32 classCode, MV_8 *pType);

/* Performs a full scan on both PCIs and returns all possible details on the
   agents found on the bus. */
MV_STATUS mvPciScan(MV_U32 pciIf, MV_PCI_DEVICE *pPciAgents, MV_U32 *pPciAgentsNum);

#endif /* #ifndef __INCmvPciUtilsh */
