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