xref: /titanic_44/usr/src/cmd/pcitool/pcitool_usage.c (revision d5ace9454616652a717c9831d949dffa319381f9)
1*d5ace945SErwin T Tsaur /*
2*d5ace945SErwin T Tsaur  * CDDL HEADER START
3*d5ace945SErwin T Tsaur  *
4*d5ace945SErwin T Tsaur  * The contents of this file are subject to the terms of the
5*d5ace945SErwin T Tsaur  * Common Development and Distribution License (the "License").
6*d5ace945SErwin T Tsaur  * You may not use this file except in compliance with the License.
7*d5ace945SErwin T Tsaur  *
8*d5ace945SErwin T Tsaur  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*d5ace945SErwin T Tsaur  * or http://www.opensolaris.org/os/licensing.
10*d5ace945SErwin T Tsaur  * See the License for the specific language governing permissions
11*d5ace945SErwin T Tsaur  * and limitations under the License.
12*d5ace945SErwin T Tsaur  *
13*d5ace945SErwin T Tsaur  * When distributing Covered Code, include this CDDL HEADER in each
14*d5ace945SErwin T Tsaur  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*d5ace945SErwin T Tsaur  * If applicable, add the following below this CDDL HEADER, with the
16*d5ace945SErwin T Tsaur  * fields enclosed by brackets "[]" replaced with your own identifying
17*d5ace945SErwin T Tsaur  * information: Portions Copyright [yyyy] [name of copyright owner]
18*d5ace945SErwin T Tsaur  *
19*d5ace945SErwin T Tsaur  * CDDL HEADER END
20*d5ace945SErwin T Tsaur  */
21*d5ace945SErwin T Tsaur /*
22*d5ace945SErwin T Tsaur  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*d5ace945SErwin T Tsaur  * Use is subject to license terms.
24*d5ace945SErwin T Tsaur  */
25*d5ace945SErwin T Tsaur 
26*d5ace945SErwin T Tsaur #ifndef	_PCITOOL_USAGE_TEXT_H
27*d5ace945SErwin T Tsaur #define	_PCITOOL_USAGE_TEXT_H
28*d5ace945SErwin T Tsaur 
29*d5ace945SErwin T Tsaur #include <stdio.h>
30*d5ace945SErwin T Tsaur 
31*d5ace945SErwin T Tsaur static char *pcitool_usage_reg[] = {
32*d5ace945SErwin T Tsaur "Register peek/poke mode:",
33*d5ace945SErwin T Tsaur " %s <PCI nexus node>",
34*d5ace945SErwin T Tsaur "  [   -n bank=<register bank>",
35*d5ace945SErwin T Tsaur "         where register bank is 0 for mapped jbus space and 1 for pcie space",
36*d5ace945SErwin T Tsaur "         (only on applicable platforms)",
37*d5ace945SErwin T Tsaur "",
38*d5ace945SErwin T Tsaur "      -n base=<base address>",
39*d5ace945SErwin T Tsaur "         where base address is a physical base address of a register bank",
40*d5ace945SErwin T Tsaur "         (only on applicable platforms (e.g. sun4v) where bank info is "
41*d5ace945SErwin T Tsaur 	"unavailable)",
42*d5ace945SErwin T Tsaur "",
43*d5ace945SErwin T Tsaur "      -d bus=<bus>,dev=<dev>,func=<func>,bank=<register bank>",
44*d5ace945SErwin T Tsaur "      -d bdf=<bus>.<dev>.<func>,bank=<register bank>",
45*d5ace945SErwin T Tsaur "",
46*d5ace945SErwin T Tsaur "      -d bus=<bus>,dev=<dev>,func=<func> | bdf=<bus>.<dev>.<func> ,",
47*d5ace945SErwin T Tsaur "	  [ config | bar0 | bar1 | bar2 | bar3 | bar4 | bar5 | rom ]",
48*d5ace945SErwin T Tsaur "	  (spaces added for clarity but are not allowed in the command)",
49*d5ace945SErwin T Tsaur "",
50*d5ace945SErwin T Tsaur "  -n and -d options may also include:",
51*d5ace945SErwin T Tsaur "",
52*d5ace945SErwin T Tsaur "  [ -w <value to write> ] [ -r ]",
53*d5ace945SErwin T Tsaur "  [ -o <offset> ]",
54*d5ace945SErwin T Tsaur "  [ -s 1 | 2 | 4 | 8 ]",
55*d5ace945SErwin T Tsaur "  [ -e b | l ]",
56*d5ace945SErwin T Tsaur "  [ -l ]",
57*d5ace945SErwin T Tsaur "  [ -b <number bytes to dump> [ -c ] [ -x ] ]",
58*d5ace945SErwin T Tsaur "  [ -v ]",
59*d5ace945SErwin T Tsaur "  [ -q ]",
60*d5ace945SErwin T Tsaur "",
61*d5ace945SErwin T Tsaur "  -n may also include:",
62*d5ace945SErwin T Tsaur "",
63*d5ace945SErwin T Tsaur "  [ -y ]",
64*d5ace945SErwin T Tsaur "",
65*d5ace945SErwin T Tsaur "Probe mode:",
66*d5ace945SErwin T Tsaur " %s [ <PCI nexus node> ] [ -a ] [ -p ] [ -v ] [ -q ]",
67*d5ace945SErwin T Tsaur "",
68*d5ace945SErwin T Tsaur " %s <PCI nexus node> [ -p [ bus=<bus>,dev=<dev>,func=<func> ] [ -v ] [ -q ]",
69*d5ace945SErwin T Tsaur " %s <PCI nexus node> [ -p [ bdf=<bus>.<dev>.<func> ] [ -v ] [-q ]",
70*d5ace945SErwin T Tsaur "",
71*d5ace945SErwin T Tsaur "Probe mode",
72*d5ace945SErwin T Tsaur "----------",
73*d5ace945SErwin T Tsaur "",
74*d5ace945SErwin T Tsaur "-p [ bus=<bus>,dev=<dev>,func=<func> | bdf=<bus>.<dev>.<func> ]",
75*d5ace945SErwin T Tsaur "     Specify bus, device and/or function of devices to search for and dump.",
76*d5ace945SErwin T Tsaur "",
77*d5ace945SErwin T Tsaur "-a Probe all buses.  By default, pcitool checks the PCI nexus node's",
78*d5ace945SErwin T Tsaur "bus-range property to restrict which buses are probed.  This option",
79*d5ace945SErwin T Tsaur "cannot be combined with an explicit bus specification.",
80*d5ace945SErwin T Tsaur "",
81*d5ace945SErwin T Tsaur "If a PCI nexus node is specified, pcitool looks only for devices",
82*d5ace945SErwin T Tsaur "under that node.  If no PCI nexus node is specified, pcitool looks",
83*d5ace945SErwin T Tsaur "for devices under all PCI nexus nodes.  PCI nexus nodes, which can",
84*d5ace945SErwin T Tsaur "be used for other pcitool commands, are printed at the top of each tree.",
85*d5ace945SErwin T Tsaur "",
86*d5ace945SErwin T Tsaur "Non-verbose probe mode prints config register data as follows:",
87*d5ace945SErwin T Tsaur "  aa bb c dddd eeee ffff gggg hh iiiiii jj kk ll mm",
88*d5ace945SErwin T Tsaur "  where...",
89*d5ace945SErwin T Tsaur "    a = pci bus number",
90*d5ace945SErwin T Tsaur "    b = pci device number",
91*d5ace945SErwin T Tsaur "    c = pci function number",
92*d5ace945SErwin T Tsaur "    d = vendor ID",
93*d5ace945SErwin T Tsaur "    e = device ID",
94*d5ace945SErwin T Tsaur "    f = command register",
95*d5ace945SErwin T Tsaur "    g = status register",
96*d5ace945SErwin T Tsaur "    h = revision ID",
97*d5ace945SErwin T Tsaur "    i = class code",
98*d5ace945SErwin T Tsaur "    j = cache line size",
99*d5ace945SErwin T Tsaur "    k = latency timer",
100*d5ace945SErwin T Tsaur "    l = header type",
101*d5ace945SErwin T Tsaur "    m = built in self test register (bist)",
102*d5ace945SErwin T Tsaur "",
103*d5ace945SErwin T Tsaur "Register peek/poke mode",
104*d5ace945SErwin T Tsaur "-----------------------",
105*d5ace945SErwin T Tsaur "",
106*d5ace945SErwin T Tsaur "-n requests nexus node info.",
107*d5ace945SErwin T Tsaur "   Specify desired nexus register using -o <register offset>",
108*d5ace945SErwin T Tsaur "",
109*d5ace945SErwin T Tsaur "-d requests device (leaf) node info.",
110*d5ace945SErwin T Tsaur "   Specify bus, dev, function bits (from probe mode) as hex numbers.",
111*d5ace945SErwin T Tsaur "   Bank is specified in one of the following ways:",
112*d5ace945SErwin T Tsaur "     By value: 0 == config space, 1 == BAR0, 2 == BAR1, ..., 6 == BAR5, "
113*d5ace945SErwin T Tsaur 	"7 == ROM",
114*d5ace945SErwin T Tsaur "     By BAR (bus addr reg): config, bar0, bar1, bar2, bar3, bar4, bar5, rom",
115*d5ace945SErwin T Tsaur "",
116*d5ace945SErwin T Tsaur "Above peek/poke mode selections take the following options:",
117*d5ace945SErwin T Tsaur "",
118*d5ace945SErwin T Tsaur "-r for reading (default)",
119*d5ace945SErwin T Tsaur "-w <value> for writing",
120*d5ace945SErwin T Tsaur "-w <value> -r for writing a value followed by a readback",
121*d5ace945SErwin T Tsaur "",
122*d5ace945SErwin T Tsaur "-o <offset> to specify an offset within the requested address space",
123*d5ace945SErwin T Tsaur "",
124*d5ace945SErwin T Tsaur "-s <size specifier>: 1, 2, 4 or 8 bytes, default 4",
125*d5ace945SErwin T Tsaur "   (8-byte transfers on supported platforms only)",
126*d5ace945SErwin T Tsaur "",
127*d5ace945SErwin T Tsaur "-e <endian specifier>: b or l (ell), default is l for little endian>",
128*d5ace945SErwin T Tsaur "",
129*d5ace945SErwin T Tsaur "-l to do repetitious accesses to/from the same location(s)",
130*d5ace945SErwin T Tsaur "",
131*d5ace945SErwin T Tsaur "-b <number of bytes to dump> [ -c ] to get a formatted multiple register dump",
132*d5ace945SErwin T Tsaur "   starting at the offset given.  Hex bytes are always dumped.",
133*d5ace945SErwin T Tsaur "   -c dumps characters as well.  "
134*d5ace945SErwin T Tsaur 	"Non-printable characters are dumped as \"@\".",
135*d5ace945SErwin T Tsaur "   -x keeps going on errors, and prints err characters as X",
136*d5ace945SErwin T Tsaur "",
137*d5ace945SErwin T Tsaur "Above nexus peek/poke mode selections take the following additional option:",
138*d5ace945SErwin T Tsaur "",
139*d5ace945SErwin T Tsaur "-y to confirm a base_addr without being prompted interactively",
140*d5ace945SErwin T Tsaur "",
141*d5ace945SErwin T Tsaur "NOTE: Some platforms (i.e. SPARC) return peek/poke errors as failed ioctls;",
142*d5ace945SErwin T Tsaur "    Other platforms (i.e. X86) return peek/poke errors as FF values.",
143*d5ace945SErwin T Tsaur "",
144*d5ace945SErwin T Tsaur "All numeric values are in HEX",
145*d5ace945SErwin T Tsaur NULL
146*d5ace945SErwin T Tsaur };
147*d5ace945SErwin T Tsaur 
148*d5ace945SErwin T Tsaur static char *pcitool_usage_intr[] = {
149*d5ace945SErwin T Tsaur "Usage:",
150*d5ace945SErwin T Tsaur "Interrupt mode:",
151*d5ace945SErwin T Tsaur " %s <PCI nexus node> -i [ ino=<ino> ] [ -r [ -c ] | -w cpu=<CPU> ]",
152*d5ace945SErwin T Tsaur "	[ -v ] [ -q ]",
153*d5ace945SErwin T Tsaur " (only on applicable platforms)",
154*d5ace945SErwin T Tsaur "",
155*d5ace945SErwin T Tsaur "where",
156*d5ace945SErwin T Tsaur "",
157*d5ace945SErwin T Tsaur "<PCI nexus node> is a node from /devices, with \"/devices\" stripped off.",
158*d5ace945SErwin T Tsaur "For example: /pci@1e,600000",
159*d5ace945SErwin T Tsaur "",
160*d5ace945SErwin T Tsaur "-v gives verbose output for all modes.",
161*d5ace945SErwin T Tsaur "",
162*d5ace945SErwin T Tsaur "-q suppresses error output (except for commandline parsing errors) for all "
163*d5ace945SErwin T Tsaur 	"modes",
164*d5ace945SErwin T Tsaur "   (Note that errno status is returned to the shell upon termination.)",
165*d5ace945SErwin T Tsaur "",
166*d5ace945SErwin T Tsaur "Online help mode:",
167*d5ace945SErwin T Tsaur " %s -h",
168*d5ace945SErwin T Tsaur "   Prints this message.",
169*d5ace945SErwin T Tsaur "",
170*d5ace945SErwin T Tsaur "Interrupt mode",
171*d5ace945SErwin T Tsaur "--------------",
172*d5ace945SErwin T Tsaur "",
173*d5ace945SErwin T Tsaur "-i [ ino=<ino> ] changes or retrieves current CPU for interrupts of given",
174*d5ace945SErwin T Tsaur "nexus and optionally given ino.  Ino must be selected if -w specified.",
175*d5ace945SErwin T Tsaur "If no ino is selected (as for displaying), all will be selected.",
176*d5ace945SErwin T Tsaur "",
177*d5ace945SErwin T Tsaur "-w cpu=<CPU> [ -g ] to change an ino<->CPU binding.",
178*d5ace945SErwin T Tsaur "",
179*d5ace945SErwin T Tsaur "   Note: On certain platforms (e.g. X86), multiple MSI interrupts of a single",
180*d5ace945SErwin T Tsaur "   function need to be moved together.  Use -g to do this.  -g works only on",
181*d5ace945SErwin T Tsaur "   supported platforms and only for groups of MSI interrupts.  When -g is",
182*d5ace945SErwin T Tsaur "   used, ino must be the lowest-numbered vector of the group.  (Use the mdb",
183*d5ace945SErwin T Tsaur "   ::interrupts dcmd to discover groups of MSI vectors.)  The size of the",
184*d5ace945SErwin T Tsaur "   group is determined internally.  (\"Groups\" of size 1 are accepted.)",
185*d5ace945SErwin T Tsaur "",
186*d5ace945SErwin T Tsaur "-r [ -c ] for displaying ino<->CPU bindings of all selected inos on a given",
187*d5ace945SErwin T Tsaur "   nexus.  -c optionally dumps controller information.",
188*d5ace945SErwin T Tsaur "",
189*d5ace945SErwin T Tsaur "   All relevant enabled inos supporting non-nexus device interrupts will be",
190*d5ace945SErwin T Tsaur "   printed.  For each printed ino, all supported devices and their CPU",
191*d5ace945SErwin T Tsaur "   binding will be displayed.  On some platforms, inos dedicated to the root",
192*d5ace945SErwin T Tsaur "   nexus will be shown and marked with \"(Internal)\".",
193*d5ace945SErwin T Tsaur "",
194*d5ace945SErwin T Tsaur "When neither -r nor -w are specified, -r is the default.",
195*d5ace945SErwin T Tsaur NULL
196*d5ace945SErwin T Tsaur };
197*d5ace945SErwin T Tsaur 
198*d5ace945SErwin T Tsaur 
199*d5ace945SErwin T Tsaur /*
200*d5ace945SErwin T Tsaur  * Print usage statement.
201*d5ace945SErwin T Tsaur  *
202*d5ace945SErwin T Tsaur  * Text is too large for many print statements.
203*d5ace945SErwin T Tsaur  *
204*d5ace945SErwin T Tsaur  * Instead, loop through the array of strings in pcitool_usage_text.
205*d5ace945SErwin T Tsaur  * Print program name when %s is in the text.
206*d5ace945SErwin T Tsaur  */
207*d5ace945SErwin T Tsaur void
208*d5ace945SErwin T Tsaur usage(char *name)
209*d5ace945SErwin T Tsaur {
210*d5ace945SErwin T Tsaur 	int i;
211*d5ace945SErwin T Tsaur 
212*d5ace945SErwin T Tsaur 	for (i = 0; pcitool_usage_intr[i] != NULL; i++) {
213*d5ace945SErwin T Tsaur 		/*LINTED*/
214*d5ace945SErwin T Tsaur 		(void) printf(pcitool_usage_intr[i], name);
215*d5ace945SErwin T Tsaur 		(void) printf("\n");
216*d5ace945SErwin T Tsaur 	}
217*d5ace945SErwin T Tsaur }
218*d5ace945SErwin T Tsaur 
219*d5ace945SErwin T Tsaur #endif	/* _PCITOOL_USAGE_TEXT_H */
220