a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.h,v 1.36 2002/12/23 15:37:26 tsi Exp $ */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Copyright 1998 by Concurrent Computer Corporation
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Permission to use, copy, modify, distribute, and sell this software
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * and its documentation for any purpose is hereby granted without fee,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * provided that the above copyright notice appear in all copies and that
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * both that copyright notice and this permission notice appear in
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * supporting documentation, and that the name of Concurrent Computer
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Corporation not be used in advertising or publicity pertaining to
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * distribution of the software without specific, written prior
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * permission. Concurrent Computer Corporation makes no representations
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * about the suitability of this software for any purpose. It is
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * provided "as is" without express or implied warranty.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * CONCURRENT COMPUTER CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * AND FITNESS, IN NO EVENT SHALL CONCURRENT COMPUTER CORPORATION BE
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * SOFTWARE.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Copyright 1998 by Metro Link Incorporated
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Permission to use, copy, modify, distribute, and sell this software
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * and its documentation for any purpose is hereby granted without fee,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * provided that the above copyright notice appear in all copies and that
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * both that copyright notice and this permission notice appear in
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * supporting documentation, and that the name of Metro Link
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Incorporated not be used in advertising or publicity pertaining to
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * distribution of the software without specific, written prior
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * permission. Metro Link Incorporated makes no representations
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * about the suitability of this software for any purpose. It is
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * provided "as is" without express or implied warranty.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * METRO LINK INCORPORATED DISCLAIMS ALL WARRANTIES WITH REGARD
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * AND FITNESS, IN NO EVENT SHALL METRO LINK INCORPORATED BE
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * SOFTWARE.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * This file is derived in part from the original xf86_PCI.h that included
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * following copyright message:
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Copyright 1995 by Robin Cutshaw <robin@XFree86.Org>
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Permission to use, copy, modify, distribute, and sell this software and its
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * documentation for any purpose is hereby granted without fee, provided that
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * the above copyright notice appear in all copies and that both that
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * copyright notice and this permission notice appear in supporting
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * documentation, and that the names of the above listed copyright holder(s)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * not be used in advertising or publicity pertaining to distribution of
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * the software without specific, written prior permission. The above listed
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * copyright holder(s) make(s) no representations about the suitability of this
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * software for any purpose. It is provided "as is" without express or
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * implied warranty.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * This file has the private Pci definitions. The public ones are imported
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * from xf86Pci.h. Drivers should not use this file.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Global Definitions
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define MAX_PCI_DEVICES 64 /* Max number of devices accomodated */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync /* by xf86scanpci */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# define MAX_PCI_BUSES 4096 /* Max number of PCI buses */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# define MAX_PCI_BUSES (MAX_PCI_DOMAINS*256) /* 256 per domain */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# define MAX_PCI_BUSES 256 /* Max number of PCI buses */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync ((CARD32)((PCI_CHIP_##device << 16) | PCI_VENDOR_##vendor))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_DOMBUS_MASK (((PCI_DOM_MASK) << 8) | 0x0ffu)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * "b" contains an optional domain number.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_MAKE_TAG(b,d,f) ((((b) & (PCI_DOMBUS_MASK)) << 16) | \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_MAKE_BUS(d,b) ((((d) & (PCI_DOM_MASK)) << 8) | ((b) & 0xffu))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_DOM_FROM_TAG(tag) (((tag) >> 24) & (PCI_DOM_MASK))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_BUS_FROM_TAG(tag) (((tag) >> 16) & (PCI_DOMBUS_MASK))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_DEV_FROM_TAG(tag) (((tag) & 0x0000f800u) >> 11)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_FUNC_FROM_TAG(tag) (((tag) & 0x00000700u) >> 8)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_DFN_FROM_TAG(tag) (((tag) & 0x0000ff00u) >> 8)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_BDEV_FROM_TAG(tag) ((tag) & 0x00fff800u)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_DOM_FROM_BUS(bus) (((bus) >> 8) & (PCI_DOM_MASK))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_TAG_NO_DOMAIN(tag) ((tag) & 0x00ffff00u)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Macros for bus numbers found in P2P headers.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync ((((x) & PCI_PRIMARY_BUS_MASK ) >> 0) | (PCI_DOM_FROM_TAG(tag) << 8))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync ((((x) & PCI_SECONDARY_BUS_MASK ) >> 8) | (PCI_DOM_FROM_TAG(tag) << 8))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync ((((x) & PCI_SUBORDINATE_BUS_MASK) >> 16) | (PCI_DOM_FROM_TAG(tag) << 8))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync (((x) & ~PCI_PRIMARY_BUS_MASK ) | (((y) & 0xffu) << 0))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync (((x) & ~PCI_SECONDARY_BUS_MASK ) | (((y) & 0xffu) << 8))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync (((x) & ~PCI_SUBORDINATE_BUS_MASK) | (((y) & 0xffu) << 16))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/* Ditto for CardBus bridges */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define PCI_CPU(val) (((val >> 24) & 0x000000ff) | \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/* #define DEBUGPCI 2 */ /* Disable/enable trace in PCI code */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#else /* !defined(DEBUGPCI) */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* !defined(DEBUGPCI) */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * PCI Config mechanism definitions
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Select architecture specific PCI init function
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# define INCLUDE_XF86_NO_DOMAIN /* Needs kernel work to remove */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# elif defined(PowerMAX_OS) /* This port is broken */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync# if defined(linux)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#error No PCI support available for this architecture/OS combination
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncextern void ARCH_PCI_INIT(void);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncextern void ARCH_PCI_OS_INIT(void);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncextern void ARCH_PCI_HOST_BRIDGE(pciConfigPtr pPCI);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsynctypedef enum {
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncextern void XF86SCANPCI_WRAPPER(scanpciWrapperOpt flags);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * Table of functions used to access a specific PCI bus domain
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * (e.g. a primary PCI bus and all of its secondaries)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync void (*pciSetBitsLong)(PCITAG, int, CARD32, CARD32);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync ADDRESS (*pciAddrHostToBus)(PCITAG, PciAddrType, ADDRESS);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync ADDRESS (*pciAddrBusToHost)(PCITAG, PciAddrType, ADDRESS);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * The next three are optional. If NULL, the corresponding function is
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * to be performed generically.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync void (*pciGetBridgeBusses)(int, int *, int *, int *);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync /* Use pointer's to avoid #include recursion */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync void (*pciGetBridgeResources)(int, pointer *, pointer *, pointer *);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * pciBusInfo_t - One structure per defined PCI bus
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned char configMech; /* PCI config type to use */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned char numDevices; /* Range of valid devnums */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned char secondary; /* Boolean: bus is a secondary */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned long ppc_io_base; /* PowerPC I/O spc membase */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned long ppc_io_size; /* PowerPC I/O spc size */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync void *pciBusPriv; /* Implementation private data */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync pciConfigPtr bridge; /* bridge that opens this bus */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/* configMech values */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/* Generic PCI service functions and helpers */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncvoid pciCfgMech1Write(PCITAG tag, int offset, CARD32 val);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncvoid pciCfgMech1SetBits(PCITAG tag, int offset, CARD32 mask,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncADDRESS pciAddrNOOP(PCITAG tag, PciAddrType type, ADDRESS);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* _PCI_H */