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