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