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