Date: Thu, 19 Oct 2000 16:28:37 +0100 (BST) From: Steve.Roome@sse0691.bri.hp.com To: FreeBSD-gnats-submit@freebsd.org Subject: bin/22124: patch to update pciconf to give a -v option Message-ID: <200010191528.QAA34743@sse0691.bri.hp.com>
next in thread | raw e-mail | index | archive | help
>Number: 22124 >Category: bin >Synopsis: patch to update pciconf to give a -v option >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Oct 19 08:30:00 PDT 2000 >Closed-Date: >Last-Modified: >Originator: Steve Roome >Release: FreeBSD 4.1-STABLE i386 >Organization: >Environment: 4.1-stable pciconf >Description: This patch gives a -v option to pciconf, it's documented in the changed manpage, it shows device types in english to save hassle for ppl who don't have a device using a particular pci resource but want to know what it is without searching through include files to find out what type of type the class is saying it is. >How-To-Repeat: use pciconf -l and guess what the classes mean! >Fix: *** /usr/src/usr.sbin/pciconf/pciconf.8.orig Wed Mar 1 14:08:12 2000 --- /usr/src/usr.sbin/pciconf/pciconf.8 Thu Oct 19 16:23:45 2000 *************** *** 32,37 **** --- 32,38 ---- .Nd diagnostic utility for the PCI bus .Sh SYNOPSIS .Nm pciconf Fl l + .Op Fl v .Nm pciconf Fl a Ar selector .Nm pciconf Fl r Ar selector .Op Fl b | Fl h *************** *** 50,58 **** .Fl l option, it lists all devices found by the boot probe in the following format: .Bd -literal ! foo0@pci0:4:0: class=0x010000 card=0x00000000 chip=0x000f1000 rev=0x01 hdr=0x00 ! bar0@pci0:5:0: class=0x000100 card=0x00000000 chip=0x88c15333 rev=0x00 hdr=0x00 ! none0@pci0:6:0: class=0x020000 card=0x00000000 chip=0x802910ec rev=0x00 hdr=0x00 .Ed .Pp The first column gives the --- 51,73 ---- .Fl l option, it lists all devices found by the boot probe in the following format: .Bd -literal ! atapci0@pci0:1:0: class=0x01018a card=0x00000000 chip=0x06461095 rev=0x01 hdr=0x00 ! ahc0@pci0:2:0: class=0x010000 card=0x00000000 chip=0x80789004 rev=0x00 hdr=0x00 ! .Ed ! .Pp ! With both the ! .Fl v ! and ! .Fl l ! options a more verbose listing is shown with the device type: ! .Bd -literal ! atapci0@pci0:1:0 ! class=0x01018a card=0x00000000 chip=0x06461095 rev=0x01 hdr=0x00 ! IDE storage controller ! ! ahc0@pci0:2:0 ! class=0x010000 card=0x00000000 chip=0x80789004 rev=0x00 hdr=0x00 ! SCSI storage controller .Ed .Pp The first column gives the *************** *** 171,180 **** .Sh AUTHORS The .Nm ! facility was written by .An Stefan Esser and ! .An Garrett Wollman . .Sh BUGS The .Fl b --- 186,197 ---- .Sh AUTHORS The .Nm ! facility was originally written by .An Stefan Esser and ! .An Garrett Wollman. ! .An Steve Roome ! added the verbose option. .Sh BUGS The .Fl b *** /usr/src/usr.sbin/pciconf/pciconf.c.orig Wed Dec 8 17:43:20 1999 --- /usr/src/usr.sbin/pciconf/pciconf.c Thu Oct 19 15:44:42 2000 *************** *** 29,35 **** #ifndef lint static const char rcsid[] = ! "$FreeBSD: src/usr.sbin/pciconf/pciconf.c,v 1.11 1999/12/08 17:43:20 ken Exp $"; #endif /* not lint */ #include <sys/types.h> --- 29,35 ---- #ifndef lint static const char rcsid[] = ! "$FreeBSD: /c/ncvs/src/usr.sbin/pciconf/pciconf.c,v 1.11 1999/12/08 17:43:20 ken Exp $"; #endif /* not lint */ #include <sys/types.h> *************** *** 44,50 **** #include "pathnames.h" ! static void list_devs(void); static void readit(const char *, const char *, int); static void writeit(const char *, const char *, const char *, int); static void chkattached(const char *, int); --- 44,50 ---- #include "pathnames.h" ! static void list_devs(int); static void readit(const char *, const char *, int); static void writeit(const char *, const char *, const char *, int); static void chkattached(const char *, int); *************** *** 55,61 **** usage() { fprintf(stderr, "%s\n%s\n%s\n%s\n", ! "usage: pciconf -l", " pciconf -a sel", " pciconf -r [-b | -h] sel addr", " pciconf -w [-b | -h] sel addr [value]"); --- 55,61 ---- usage() { fprintf(stderr, "%s\n%s\n%s\n%s\n", ! "usage: pciconf -l [-v]", " pciconf -a sel", " pciconf -r [-b | -h] sel addr", " pciconf -w [-b | -h] sel addr [value]"); *************** *** 66,77 **** main(int argc, char **argv) { int c; ! int listmode, readmode, writemode, attachedmode; int byte, isshort; ! listmode = readmode = writemode = attachedmode = byte = isshort = 0; ! while ((c = getopt(argc, argv, "alrwbh")) != -1) { switch(c) { case 'a': attachedmode = 1; --- 66,77 ---- main(int argc, char **argv) { int c; ! int listmode, readmode, writemode, attachedmode, verbose; int byte, isshort; ! verbose = listmode = readmode = writemode = attachedmode = byte = isshort = 0; ! while ((c = getopt(argc, argv, "alvrwbh")) != -1) { switch(c) { case 'a': attachedmode = 1; *************** *** 97,102 **** --- 97,106 ---- isshort = 1; break; + case 'v': + verbose = 1; + break; + default: usage(); } *************** *** 109,115 **** usage(); if (listmode) { ! list_devs(); } else if(attachedmode) { chkattached(argv[optind], byte ? 1 : isshort ? 2 : 4); --- 113,119 ---- usage(); if (listmode) { ! list_devs(verbose); } else if(attachedmode) { chkattached(argv[optind], byte ? 1 : isshort ? 2 : 4); *************** *** 127,133 **** } static void ! list_devs(void) { int fd; struct pci_conf_io pc; --- 131,137 ---- } static void ! list_devs(int verbose) { int fd; struct pci_conf_io pc; *************** *** 166,187 **** return; } for (p = conf; p < &conf[pc.num_matches]; p++) { ! ! printf("%s%d@pci%d:%d:%d:\tclass=0x%06x card=0x%08x " "chip=0x%08x rev=0x%02x hdr=0x%02x\n", (p->pd_name && *p->pd_name) ? p->pd_name : "none", (p->pd_name && *p->pd_name) ? (int)p->pd_unit : none_count++, p->pc_sel.pc_bus, p->pc_sel.pc_dev, ! p->pc_sel.pc_func, (p->pc_class << 16) | (p->pc_subclass << 8) | p->pc_progif, (p->pc_subdevice << 16) | p->pc_subvendor, (p->pc_device << 16) | p->pc_vendor, p->pc_revid, p->pc_hdr); } } while (pc.status == PCI_GETCONF_MORE_DEVS); - close(fd); } --- 170,357 ---- return; } for (p = conf; p < &conf[pc.num_matches]; p++) { ! if (!verbose) { ! int char_count; ! char_count=printf("%s%d@pci%d:%d:%d:", ! (p->pd_name && *p->pd_name) ? p->pd_name : ! "none", ! (p->pd_name && *p->pd_name) ? (int)p->pd_unit : ! none_count++, ! p->pc_sel.pc_bus, p->pc_sel.pc_dev, ! p->pc_sel.pc_func); ! if (char_count<20) while (char_count++<20) printf(" "); ! printf("class=0x%06x card=0x%08x " "chip=0x%08x rev=0x%02x hdr=0x%02x\n", + (p->pc_class << 16) | + (p->pc_subclass << 8) | p->pc_progif, + (p->pc_subdevice << 16) | p->pc_subvendor, + (p->pc_device << 16) | p->pc_vendor, + p->pc_revid, p->pc_hdr); + } else { + int char_count; + printf("%s%d@pci%d:%d:%d\n\t", (p->pd_name && *p->pd_name) ? p->pd_name : "none", (p->pd_name && *p->pd_name) ? (int)p->pd_unit : none_count++, p->pc_sel.pc_bus, p->pc_sel.pc_dev, ! p->pc_sel.pc_func); ! printf("class=0x%06x card=0x%08x " ! "chip=0x%08x rev=0x%02x hdr=0x%02x\n", ! (p->pc_class << 16) | (p->pc_subclass << 8) | p->pc_progif, (p->pc_subdevice << 16) | p->pc_subvendor, (p->pc_device << 16) | p->pc_vendor, p->pc_revid, p->pc_hdr); + + printf("\t"); + switch (p->pc_class) + { + case (0) : printf("Device not classified.\n"); break; + case (1) : + switch(p->pc_subclass) + { + case(0x00): printf("SCSI"); break; + case(0x01): printf("IDE"); break; + case(0x02): printf("FLOPPY"); break; + case(0x03): printf("IPI"); break; + case(0x04): printf("RAID"); break; + case(0x80): printf("OTHER"); break; + default : printf("Unknown"); break; + } + printf(" storage controller\n"); + break; + case (2) : + switch(p->pc_subclass) + { + case (0x00) : printf("Ethernet"); break; + case (0x01) : printf("Tokenring"); break; + case (0x02) : printf("FDDI"); break; + case (0x03) : printf("ATM"); break; + case (0x80) : printf("Other"); break; + default : printf("Unknown"); break; + } + printf(" network device\n"); + break; + case (3) : + switch (p->pc_subclass) + { + case (0x00) : printf ("VGA"); break; + case (0x01) : printf ("XGA"); break; + case (0x80) : printf ("Other"); break; + default : printf ("Unknown"); break; + } + printf(" display device\n"); + break; + case (4) : printf("Multimedia device - "); + switch (p->pc_subclass) + { + case (0x00) : printf("video\n"); break; + case (0x01) : printf("audio\n"); break; + case (0x80) : printf("other\n"); break; + default : printf("unkown type\n"); break; + } + break; + case (5) : + switch (p->pc_subclass) + { + case (0x00) : printf("RAM "); break; + case (0x01) : printf("Flash "); break; + case (0x80) : printf("'Other' "); break; + default : printf("Unknown type\n"); break; + } + printf("Memory\n"); + break; + case (6) : + switch (p->pc_subclass) + { + case (0x00) : printf("Host"); break; + case (0x01) : printf("ISA"); break; + case (0x02) : printf("EISA"); break; + case (0x03) : printf("MCA"); break; + case (0x04) : printf("PCI"); break; + case (0x05) : printf("PCMCIA"); break; + case (0x06) : printf("NUBUS"); break; + case (0x07) : printf("Cardbus"); break; + case (0x80) : printf("Other"); break; + default : printf("Unknown"); break; + } + printf(" bridge device\n"); + break; + case (7) : + switch (p->pc_subclass) + { + case (0x00) : printf("UART"); break; + case (0x01) : printf("PAR"); break; + case (0x80) : printf("Other"); break; + default : printf ("Unknown"); break; + } + printf(" simple communications device\n"); + break; + case (8) : + switch (p->pc_subclass) + { + case (0x00) : printf("PIC"); break; + case (0x01) : printf("DMA"); break; + case (0x02) : printf("Timer"); break; + case (0x03) : printf("RTC"); break; + case (0x80) : printf("other"); break; + default : printf("unknown"); break; + } + printf(" base peripheral device\n"); + break; + case (9) : + switch (p->pc_subclass) + { + case (0x00) : printf("keyboard"); break; + case (0x01) : printf("digitizer"); break; + case (0x02) : printf("mouse"); break; + case (0x80) : printf("other"); break; + default : printf("unknown"); break; + } + printf(" input device\n"); + break; + case (10) : + switch (p->pc_subclass) + { + case (0x00) : printf("generic"); break; + case (0x80) : printf("other"); break; + default : printf("unkown"); break; + } + printf(" docking device\n"); + break; + case (11) : + switch (p->pc_subclass) + { + case (0x00) : printf ("386"); break; + case (0x01) : printf ("486"); break; + case (0x02) : printf ("Pentium"); break; + case (0x10) : printf ("Alpha"); break; + case (0x20) : printf ("PowerPC"); break; + case (0x40) : printf ("Coprocessor"); break; + default : printf ("unkown"); + } + printf(" processor device\n"); + break; + case (12) : + switch (p->pc_subclass) + { + case (0x00) : printf ("Firewire"); break; + case (0x01) : printf ("Access"); break; + case (0x02) : printf ("SSA"); break; + case (0x03) : printf ("USB"); break; + case (0x04) : printf ("Fibrechannel"); break; + default : printf ("unkown"); + } + printf("Serial Bus device\n"); + break; + case (15) : printf ("'Other' device type\n"); break; + default : printf("Unknown device type\n"); break; + } + printf("\n"); + } } } while (pc.status == PCI_GETCONF_MORE_DEVS); close(fd); } >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200010191528.QAA34743>