xref: /aosp_15_r20/external/pciutils/lspci.h (revision c2e0c6b56a71da9abe8df5c8348fb3eb5c2c9251)
1 /*
2  *	The PCI Utilities -- List All PCI Devices
3  *
4  *	Copyright (c) 1997--2018 Martin Mares <[email protected]>
5  *
6  *	Can be freely distributed and used under the terms of the GNU GPL v2+
7  *
8  *	SPDX-License-Identifier: GPL-2.0-or-later
9  */
10 
11 #define PCIUTILS_LSPCI
12 #include "pciutils.h"
13 
14 /*
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
17  *  use alloca() much.
18  */
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)
22 #include <alloca.h>
23 #else
24 #undef alloca
25 #define alloca xmalloc
26 #endif
27 
28 /*** Options ***/
29 
30 extern int verbose;
31 extern struct pci_filter filter;
32 extern char *opt_pcimap;
33 
34 /*** PCI devices and access to their config space ***/
35 
36 struct device {
37   struct device *next;
38   struct pci_dev *dev;
39   /* Bus topology calculated by grow_tree() */
40   struct device *bus_next;
41   struct bus *parent_bus;
42   struct bridge *bridge;
43   /* Cache */
44   int no_config_access;
45   unsigned int config_cached, config_bufsize;
46   byte *config;				/* Cached configuration space data */
47   byte *present;			/* Maps which configuration bytes are present */
48 };
49 
50 extern struct device *first_dev;
51 extern struct pci_access *pacc;
52 
53 struct device *scan_device(struct pci_dev *p);
54 void show_device(struct device *d);
55 
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);
60 
61 /* ls-vpd.c */
62 
63 void cap_vpd(struct device *d);
64 
65 /* ls-caps.c */
66 
67 void show_caps(struct device *d, int where);
68 
69 /* ls-ecaps.c */
70 
71 void show_ext_caps(struct device *d, int type);
72 
73 /* ls-caps-vendor.c */
74 
75 void show_vendor_caps(struct device *d, int where, int cap);
76 
77 /* ls-kernel.c */
78 
79 void show_kernel_machine(struct device *d UNUSED);
80 void show_kernel(struct device *d UNUSED);
81 void show_kernel_cleanup(void);
82 
83 /* ls-tree.c */
84 
85 struct bridge {
86   struct bridge *chain;			/* Single-linked list of bridges */
87   struct bridge *next, *prev, *child;	/* Tree of bridges */
88   struct bus *first_bus, *last_bus;	/* List of buses connected to this bridge */
89   unsigned int domain;
90   unsigned int primary, secondary, subordinate;	/* Bus numbers */
91   struct device *br_dev;
92 };
93 
94 struct bus {
95   unsigned int domain;
96   unsigned int number;
97   struct bus *sibling;
98   struct bridge *parent_bridge;
99   struct device *first_dev, **last_dev;
100 };
101 
102 extern struct bridge host_bridge;
103 
104 void grow_tree(void);
105 void show_forest(struct pci_filter *filter);
106 
107 /* ls-map.c */
108 
109 void map_the_bus(void);
110