2 * This file is part of the libpayload project.
4 * Copyright (C) 2008 Advanced Micro Devices, Inc.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 typedef unsigned short pcidev_t;
35 #define REG_VENDOR_ID 0x00
36 #define REG_DEVICE_ID 0x04
37 #define REG_HEADER_TYPE 0x0E
38 #define REG_PRIMARY_BUS 0x18
40 #define HEADER_TYPE_NORMAL 0
41 #define HEADER_TYPE_BRIDGE 1
42 #define HEADER_TYPE_CARDBUS 2
44 #define PCIDEV(_b, _d) ((((_b) & 0xFF) << 8) | ((_d) & 0xFF))
46 #define PCIDEV_BUS(_d) (((_d) >> 8) & 0xFF)
47 #define PCIDEV_DEVFN(_d) ((_d) & 0xFF)
49 #define PCI_ADDR(_bus, _dev, _reg) \
50 (0x80000000 | (_bus << 16) | (_dev << 8) | (_reg & ~3))
52 void pci_read_dword(unsigned int bus, unsigned int devfn,
53 unsigned int reg, unsigned int *val);
55 void pci_read_byte(unsigned int bus, unsigned int devfn,
56 unsigned int reg, unsigned char *val);
58 int pci_find_device(unsigned short vid, unsigned short did, pcidev_t *dev);
59 unsigned int pci_read_resource(pcidev_t dev, int bar);