Pci.h revision a2760a4d593af57a19ec32cdfd1723b68495df8c
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.h,v 1.36 2002/12/23 15:37:26 tsi Exp $ */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/*
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Copyright 1998 by Concurrent Computer Corporation
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Permission to use, copy, modify, distribute, and sell this software
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * and its documentation for any purpose is hereby granted without fee,
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * provided that the above copyright notice appear in all copies and that
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * both that copyright notice and this permission notice appear in
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * supporting documentation, and that the name of Concurrent Computer
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Corporation not be used in advertising or publicity pertaining to
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * distribution of the software without specific, written prior
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * permission. Concurrent Computer Corporation makes no representations
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * about the suitability of this software for any purpose. It is
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * provided "as is" without express or implied warranty.
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * CONCURRENT COMPUTER CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * AND FITNESS, IN NO EVENT SHALL CONCURRENT COMPUTER CORPORATION BE
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * SOFTWARE.
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Copyright 1998 by Metro Link Incorporated
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Permission to use, copy, modify, distribute, and sell this software
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * and its documentation for any purpose is hereby granted without fee,
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * provided that the above copyright notice appear in all copies and that
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * both that copyright notice and this permission notice appear in
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * supporting documentation, and that the name of Metro Link
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * Incorporated not be used in advertising or publicity pertaining to
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * distribution of the software without specific, written prior
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * permission. Metro Link Incorporated makes no representations
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * about the suitability of this software for any purpose. It is
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * provided "as is" without express or implied warranty.
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering *
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * METRO LINK INCORPORATED DISCLAIMS ALL WARRANTIES WITH REGARD
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * AND FITNESS, IN NO EVENT SHALL METRO LINK INCORPORATED BE
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * SOFTWARE.
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * This file is derived in part from the original xf86_PCI.h that included
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * following copyright message:
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Copyright 1995 by Robin Cutshaw <robin@XFree86.Org>
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Permission to use, copy, modify, distribute, and sell this software and its
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * documentation for any purpose is hereby granted without fee, provided that
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * the above copyright notice appear in all copies and that both that
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * copyright notice and this permission notice appear in supporting
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * documentation, and that the names of the above listed copyright holder(s)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * not be used in advertising or publicity pertaining to distribution of
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * the software without specific, written prior permission. The above listed
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * copyright holder(s) make(s) no representations about the suitability of this
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * software for any purpose. It is provided "as is" without express or
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * implied warranty.
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering *
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/*
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * This file has the private Pci definitions. The public ones are imported
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * from xf86Pci.h. Drivers should not use this file.
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#ifndef _PCI_H
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define _PCI_H 1
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#include "Xarch.h"
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#include "Xfuncproto.h"
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#include "xf86Pci.h"
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#include "xf86PciInfo.h"
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/*
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Global Definitions
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define MAX_PCI_DEVICES 64 /* Max number of devices accomodated */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering /* by xf86scanpci */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#if defined(sun) && defined(SVR4) && defined(sparc)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering# define MAX_PCI_BUSES 4096 /* Max number of PCI buses */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#elif defined(__alpha__) && defined (linux)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering# define MAX_PCI_DOMAINS 512
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define PCI_DOM_MASK 0x01fful
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define MAX_PCI_BUSES (MAX_PCI_DOMAINS*256) /* 256 per domain */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#else
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering# define MAX_PCI_BUSES 256 /* Max number of PCI buses */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#endif
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_NOT_FOUND 0xffffffff
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define DEVID(vendor, device) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering ((CARD32)((PCI_CHIP_##device << 16) | PCI_VENDOR_##vendor))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#ifndef PCI_DOM_MASK
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering# define PCI_DOM_MASK 0x0ffu
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#endif
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_DOMBUS_MASK (((PCI_DOM_MASK) << 8) | 0x0ffu)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering/*
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * "b" contains an optional domain number.
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_MAKE_TAG(b,d,f) ((((b) & (PCI_DOMBUS_MASK)) << 16) | \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering (((d) & 0x00001fu) << 11) | \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering (((f) & 0x000007u) << 8))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_MAKE_BUS(d,b) ((((d) & (PCI_DOM_MASK)) << 8) | ((b) & 0xffu))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_DOM_FROM_TAG(tag) (((tag) >> 24) & (PCI_DOM_MASK))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_BUS_FROM_TAG(tag) (((tag) >> 16) & (PCI_DOMBUS_MASK))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_DEV_FROM_TAG(tag) (((tag) & 0x0000f800u) >> 11)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_FUNC_FROM_TAG(tag) (((tag) & 0x00000700u) >> 8)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_DFN_FROM_TAG(tag) (((tag) & 0x0000ff00u) >> 8)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_BDEV_FROM_TAG(tag) ((tag) & 0x00fff800u)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_DOM_FROM_BUS(bus) (((bus) >> 8) & (PCI_DOM_MASK))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_BUS_NO_DOMAIN(bus) ((bus) & 0xffu)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_TAG_NO_DOMAIN(tag) ((tag) & 0x00ffff00u)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/*
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Macros for bus numbers found in P2P headers.
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_PRIMARY_BUS_EXTRACT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering ((((x) & PCI_PRIMARY_BUS_MASK ) >> 0) | (PCI_DOM_FROM_TAG(tag) << 8))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_SECONDARY_BUS_EXTRACT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering ((((x) & PCI_SECONDARY_BUS_MASK ) >> 8) | (PCI_DOM_FROM_TAG(tag) << 8))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_SUBORDINATE_BUS_EXTRACT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering ((((x) & PCI_SUBORDINATE_BUS_MASK) >> 16) | (PCI_DOM_FROM_TAG(tag) << 8))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_PRIMARY_BUS_INSERT(x, y) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering (((x) & ~PCI_PRIMARY_BUS_MASK ) | (((y) & 0xffu) << 0))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_SECONDARY_BUS_INSERT(x, y) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering (((x) & ~PCI_SECONDARY_BUS_MASK ) | (((y) & 0xffu) << 8))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_SUBORDINATE_BUS_INSERT(x, y) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering (((x) & ~PCI_SUBORDINATE_BUS_MASK) | (((y) & 0xffu) << 16))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/* Ditto for CardBus bridges */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CB_PRIMARY_BUS_EXTRACT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering PCI_PRIMARY_BUS_EXTRACT(x, tag)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CB_CARDBUS_BUS_EXTRACT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering PCI_SECONDARY_BUS_EXTRACT(x, tag)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CB_SUBORDINATE_BUS_EXTRACT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering PCI_SUBORDINATE_BUS_EXTRACT(x, tag)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CB_PRIMARY_BUS_INSERT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering PCI_PRIMARY_BUS_INSERT(x, tag)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CB_CARDBUS_BUS_INSERT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering PCI_SECONDARY_BUS_INSERT(x, tag)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CB_SUBORDINATE_BUS_INSERT(x, tag) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering PCI_SUBORDINATE_BUS_INSERT(x, tag)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#if X_BYTE_ORDER == X_BIG_ENDIAN
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CPU(val) (((val >> 24) & 0x000000ff) | \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering ((val >> 8) & 0x0000ff00) | \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering ((val << 8) & 0x00ff0000) | \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering ((val << 24) & 0xff000000))
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#else
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CPU(val) (val)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#endif
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/*
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * Debug Macros/Definitions
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/* #define DEBUGPCI 2 */ /* Disable/enable trace in PCI code */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#if defined(DEBUGPCI)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering# define PCITRACE(lvl,printfargs) \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering if (lvl > xf86Verbose) { \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering ErrorF printfargs; \
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering }
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#else /* !defined(DEBUGPCI) */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering# define PCITRACE(lvl,printfargs)
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#endif /* !defined(DEBUGPCI) */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering/*
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering * PCI Config mechanism definitions
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering */
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_EN 0x80000000
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CFGMECH1_ADDRESS_REG 0xCF8
3e2cda698f05d7290a8b9444d2c7d5c2599b2a27Lennart Poettering#define PCI_CFGMECH1_DATA_REG 0xCFC
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#define PCI_CFGMECH1_MAXDEV 32
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering/*
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * Select architecture specific PCI init function
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#if defined(__alpha__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT axpPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# elif defined(__FreeBSD__) || defined(__OpenBSD__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT freebsdPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# elif defined(__NetBSD__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT netbsdPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__arm__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__hppa__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__ia64__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define XF86SCANPCI_WRAPPER ia64ScanPCIWrapper
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__i386__)
15411c0cb1192799b37ec8f25d6f30e8d7292fc6David Herrmann# define ARCH_PCI_INIT ix86PciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_HOST_BRIDGE ix86PciHostBridge
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_OS_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__mc68000__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__mips__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__powerpc__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN /* Needs kernel work to remove */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# elif defined(__OpenBSD__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT freebsdPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# elif defined(__NetBSD__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT netbsdPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# elif defined(PowerMAX_OS) /* This port is broken */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT ppcPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# else
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT ppcPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__s390__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__sh__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__sparc__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# elif defined(sun)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT sparcPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# elif defined(__OpenBSD__) && defined(__sparc64__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT freebsdPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_PCI_BRIDGE sparcPciPciBridge
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#elif defined(__x86_64__)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_INIT ix86PciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_MAP_PCI_MEM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define INCLUDE_XF86_NO_DOMAIN
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# if defined(linux)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# define ARCH_PCI_OS_INIT linuxPciInit
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering# endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#ifndef ARCH_PCI_INIT
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#error No PCI support available for this architecture/OS combination
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern void ARCH_PCI_INIT(void);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#if defined(ARCH_PCI_OS_INIT)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern void ARCH_PCI_OS_INIT(void);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#if defined(ARCH_PCI_HOST_BRIDGE)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern void ARCH_PCI_HOST_BRIDGE(pciConfigPtr pPCI);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#if defined(ARCH_PCI_PCI_BRIDGE)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern void ARCH_PCI_PCI_BRIDGE(pciConfigPtr pPCI);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#if defined(XF86SCANPCI_WRAPPER)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringtypedef enum {
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering SCANPCI_INIT,
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering SCANPCI_TERM
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering} scanpciWrapperOpt;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern void XF86SCANPCI_WRAPPER(scanpciWrapperOpt flags);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering/*
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * Table of functions used to access a specific PCI bus domain
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * (e.g. a primary PCI bus and all of its secondaries)
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringtypedef struct pci_bus_funcs {
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering CARD32 (*pciReadLong)(PCITAG, int);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering void (*pciWriteLong)(PCITAG, int, CARD32);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering void (*pciSetBitsLong)(PCITAG, int, CARD32, CARD32);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering ADDRESS (*pciAddrHostToBus)(PCITAG, PciAddrType, ADDRESS);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering ADDRESS (*pciAddrBusToHost)(PCITAG, PciAddrType, ADDRESS);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering /*
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * The next three are optional. If NULL, the corresponding function is
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * to be performed generically.
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering CARD16 (*pciControlBridge)(int, CARD16, CARD16);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering void (*pciGetBridgeBusses)(int, int *, int *, int *);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering /* Use pointer's to avoid #include recursion */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering void (*pciGetBridgeResources)(int, pointer *, pointer *, pointer *);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering} pciBusFuncs_t, *pciBusFuncs_p;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering/*
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering * pciBusInfo_t - One structure per defined PCI bus
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringtypedef struct pci_bus_info {
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering unsigned char configMech; /* PCI config type to use */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering unsigned char numDevices; /* Range of valid devnums */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering unsigned char secondary; /* Boolean: bus is a secondary */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering int primary_bus; /* Parent bus */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#ifdef PowerMAX_OS
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering unsigned long ppc_io_base; /* PowerPC I/O spc membase */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering unsigned long ppc_io_size; /* PowerPC I/O spc size */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#endif
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering pciBusFuncs_p funcs; /* PCI access functions */
15411c0cb1192799b37ec8f25d6f30e8d7292fc6David Herrmann void *pciBusPriv; /* Implementation private data */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering pciConfigPtr bridge; /* bridge that opens this bus */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering} pciBusInfo_t;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#define HOST_NO_BUS ((pciBusInfo_t *)(-1))
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering/* configMech values */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#define PCI_CFG_MECH_UNKNOWN 0 /* Not yet known */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#define PCI_CFG_MECH_1 1 /* Most machines */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#define PCI_CFG_MECH_2 2 /* Older PC's */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#define PCI_CFG_MECH_OTHER 3 /* Something else */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering/* Generic PCI service functions and helpers */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart PoetteringPCITAG pciGenFindFirst(void);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart PoetteringPCITAG pciGenFindNext(void);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart PoetteringCARD32 pciCfgMech1Read(PCITAG tag, int offset);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringvoid pciCfgMech1Write(PCITAG tag, int offset, CARD32 val);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringvoid pciCfgMech1SetBits(PCITAG tag, int offset, CARD32 mask,
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering CARD32 val);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart PoetteringCARD32 pciByteSwap(CARD32);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart PoetteringBool pciMfDev(int, int);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart PoetteringADDRESS pciAddrNOOP(PCITAG tag, PciAddrType type, ADDRESS);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern PCITAG (*pciFindFirstFP)(void);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern PCITAG (*pciFindNextFP)(void);
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern CARD32 pciDevid;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern CARD32 pciDevidMask;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern int pciMaxBusNum;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern int pciBusNum;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern int pciDevNum;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern int pciFuncNum;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern PCITAG pciDeviceTag;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poetteringextern pciBusInfo_t *pciBusInfo[];
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering#endif /* _PCI_H */
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering