]> mj.ucw.cz Git - pciutils.git/blob - lspci.h
lspci: Retrieve prog if, subsystem ids and revision id via libpci
[pciutils.git] / lspci.h
1 /*
2  *      The PCI Utilities -- List All PCI Devices
3  *
4  *      Copyright (c) 1997--2018 Martin Mares <mj@ucw.cz>
5  *
6  *      Can be freely distributed and used under the terms of the GNU GPL.
7  */
8
9 #define PCIUTILS_LSPCI
10 #include "pciutils.h"
11
12 /*
13  *  If we aren't being compiled by GCC, use xmalloc() instead of alloca().
14  *  This increases our memory footprint, but only slightly since we don't
15  *  use alloca() much.
16  */
17 #if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__DragonFly__) || defined (__DJGPP__)
18 /* alloca() is defined in stdlib.h */
19 #elif defined(__GNUC__) && !defined(PCI_OS_WINDOWS)
20 #include <alloca.h>
21 #else
22 #undef alloca
23 #define alloca xmalloc
24 #endif
25
26 /*** Options ***/
27
28 extern int verbose;
29 extern struct pci_filter filter;
30 extern char *opt_pcimap;
31
32 /*** PCI devices and access to their config space ***/
33
34 struct device {
35   struct device *next;
36   struct pci_dev *dev;
37   /* Bus topology calculated by grow_tree() */
38   struct device *bus_next;
39   struct bus *parent_bus;
40   struct bridge *bridge;
41   /* Cache */
42   unsigned int config_cached, config_bufsize;
43   byte *config;                         /* Cached configuration space data */
44   byte *present;                        /* Maps which configuration bytes are present */
45 };
46
47 extern struct device *first_dev;
48 extern struct pci_access *pacc;
49
50 struct device *scan_device(struct pci_dev *p);
51 void show_device(struct device *d);
52
53 int config_fetch(struct device *d, unsigned int pos, unsigned int len);
54 u32 get_conf_long(struct device *d, unsigned int pos);
55 word get_conf_word(struct device *d, unsigned int pos);
56 byte get_conf_byte(struct device *d, unsigned int pos);
57
58 /* Useful macros for decoding of bits and bit fields */
59
60 #define FLAG(x,y) ((x & y) ? '+' : '-')
61 #define BITS(x,at,width) (((x) >> (at)) & ((1 << (width)) - 1))
62 #define TABLE(tab,x,buf) ((x) < sizeof(tab)/sizeof((tab)[0]) ? (tab)[x] : (sprintf((buf), "??%d", (x)), (buf)))
63
64 /* ls-vpd.c */
65
66 void cap_vpd(struct device *d);
67
68 /* ls-caps.c */
69
70 void show_caps(struct device *d, int where);
71
72 /* ls-ecaps.c */
73
74 void show_ext_caps(struct device *d, int type);
75
76 /* ls-caps-vendor.c */
77
78 void show_vendor_caps(struct device *d, int where, int cap);
79
80 /* ls-kernel.c */
81
82 void show_kernel_machine(struct device *d UNUSED);
83 void show_kernel(struct device *d UNUSED);
84 void show_kernel_cleanup(void);
85
86 /* ls-tree.c */
87
88 struct bridge {
89   struct bridge *chain;                 /* Single-linked list of bridges */
90   struct bridge *next, *child;          /* Tree of bridges */
91   struct bus *first_bus, *last_bus;     /* List of buses connected to this bridge */
92   unsigned int domain;
93   unsigned int primary, secondary, subordinate; /* Bus numbers */
94   struct device *br_dev;
95 };
96
97 struct bus {
98   unsigned int domain;
99   unsigned int number;
100   struct bus *sibling;
101   struct bridge *parent_bridge;
102   struct device *first_dev, **last_dev;
103 };
104
105 extern struct bridge host_bridge;
106
107 void grow_tree(void);
108 void show_forest(struct pci_filter *filter);
109
110 /* ls-map.c */
111
112 void map_the_bus(void);