/******************************************************************************
 * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
 *
 * Based on the r8180 driver, which is:
 * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 *
 * The full GNU General Public License is included in this distribution in the
 * file called LICENSE.
 *
 * Contact Information:
 * wlanfae <wlanfae@realtek.com>
 ******************************************************************************/
#ifndef _RTL_PCI_H
#define _RTL_PCI_H

#include <linux/types.h>
#include <linux/pci.h>
#include "rtllib/rtllib.h"

static inline void NdisRawWritePortUlong(u32 port,  u32 val) 		
{
	outl(val, port);
}

static inline void NdisRawWritePortUchar(u32 port,  u8 val)
{
	outb(val, port);
}

static inline void NdisRawReadPortUchar(u32 port, u8 *pval)
{
	*pval = inb(port);
}

static inline void NdisRawReadPortUshort(u32 port, u16 *pval)
{
	*pval = inw(port);
}

static inline void NdisRawReadPortUlong(u32 port, u32 *pval)
{
	*pval = inl(port);
}

typedef struct _mp_adapter{
	u8		LinkCtrlReg;
	
	u8		BusNumber;
	u8		DevNumber;	
	u8		FuncNumber;	

	u8		PciBridgeBusNum;
	u8		PciBridgeDevNum;
	u8		PciBridgeFuncNum;
	u8		PciBridgeVendor;
	u16		PciBridgeVendorId;
	u16		PciBridgeDeviceId;
	u8		PciBridgePCIeHdrOffset;
	u8		PciBridgeLinkCtrlReg;	

	bool		AMDL1PATCH;
}mp_adapter,*pmp_adapter;

typedef struct _RT_PCI_CAPABILITIES_HEADER {
    unsigned char   CapabilityID;
    unsigned char   Next;
} RT_PCI_CAPABILITIES_HEADER, *PRT_PCI_CAPABILITIES_HEADER;

#define PCI_MAX_BRIDGE_NUMBER				255
#define PCI_MAX_DEVICES						32
#define PCI_MAX_FUNCTION					8

#define PCI_CONF_ADDRESS   					0x0CF8   
#define PCI_CONF_DATA						0x0CFC   

#define	PCI_CLASS_BRIDGE_DEV				0x06
#define	PCI_SUBCLASS_BR_PCI_TO_PCI		0x04

#define	U1DONTCARE 						0xFF	
#define	U2DONTCARE 						0xFFFF	
#define	U4DONTCARE 						0xFFFFFFFF

#define	INTEL_VENDOR_ID					0x8086
#define	SIS_VENDOR_ID						0x1039
#define	ATI_VENDOR_ID						0x1002
#define	ATI_DEVICE_ID						0x7914
#define	AMD_VENDOR_ID						0x1022

#define PCI_CAPABILITY_ID_PCI_EXPRESS 		0x10

struct net_device;
bool rtl8192_pci_findadapter(struct pci_dev *pdev, struct net_device *dev);

#endif
