2 * The PCI Utilities -- List All PCI Devices
4 * Copyright (c) 1997--2018 Martin Mares <mj@ucw.cz>
6 * Can be freely distributed and used under the terms of the GNU GPL v2+
8 * SPDX-License-Identifier: GPL-2.0-or-later
11 #define PCIUTILS_LSPCI
15 * If we aren't being compiled by GCC, use xmalloc() instead of alloca().
16 * This increases our memory footprint, but only slightly since we don't
19 #if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__DragonFly__) || defined (__DJGPP__)
20 /* alloca() is defined in stdlib.h */
21 #elif defined(__GNUC__) && !defined(PCI_OS_WINDOWS)
25 #define alloca xmalloc
31 extern struct pci_filter filter;
32 extern char *opt_pcimap;
34 /*** PCI devices and access to their config space ***/
39 /* Bus topology calculated by grow_tree() */
40 struct device *bus_next;
41 struct bus *parent_bus;
42 struct bridge *bridge;
45 unsigned int config_cached, config_bufsize;
46 byte *config; /* Cached configuration space data */
47 byte *present; /* Maps which configuration bytes are present */
50 extern struct device *first_dev;
51 extern struct pci_access *pacc;
53 struct device *scan_device(struct pci_dev *p);
54 void show_device(struct device *d);
56 int config_fetch(struct device *d, unsigned int pos, unsigned int len);
57 u32 get_conf_long(struct device *d, unsigned int pos);
58 word get_conf_word(struct device *d, unsigned int pos);
59 byte get_conf_byte(struct device *d, unsigned int pos);
61 /* Useful macros for decoding of bits and bit fields */
63 #define FLAG(x,y) ((x & y) ? '+' : '-')
64 #define BITS(x,at,width) (((x) >> (at)) & ((1 << (width)) - 1))
65 #define TABLE(tab,x,buf) ((x) < sizeof(tab)/sizeof((tab)[0]) ? (tab)[x] : (sprintf((buf), "??%d", (x)), (buf)))
69 void cap_vpd(struct device *d);
73 void show_caps(struct device *d, int where);
77 void show_ext_caps(struct device *d, int type);
79 /* ls-caps-vendor.c */
81 void show_vendor_caps(struct device *d, int where, int cap);
85 void show_kernel_machine(struct device *d UNUSED);
86 void show_kernel(struct device *d UNUSED);
87 void show_kernel_cleanup(void);
92 struct bridge *chain; /* Single-linked list of bridges */
93 struct bridge *next, *prev, *child; /* Tree of bridges */
94 struct bus *first_bus, *last_bus; /* List of buses connected to this bridge */
96 unsigned int primary, secondary, subordinate; /* Bus numbers */
97 struct device *br_dev;
104 struct bridge *parent_bridge;
105 struct device *first_dev, **last_dev;
108 extern struct bridge host_bridge;
110 void grow_tree(void);
111 void show_forest(struct pci_filter *filter);
115 void map_the_bus(void);