]> mj.ucw.cz Git - pciutils.git/commitdiff
Reorganized the pci.ids file. Subsystems are listed under devices, classes
authorMartin Mares <mj@ucw.cz>
Sat, 9 Oct 1999 13:25:57 +0000 (13:25 +0000)
committerMartin Mares <mj@ucw.cz>
Fri, 5 May 2006 12:10:14 +0000 (14:10 +0200)
can optionally contain prog-if information. Adapted the library and lspci
to this new format. Added few ID's, as usually.

ChangeLog
Makefile
lib/names.c
lib/pci.h
lspci.c
pci.ids
setpci.man

index b4becf7605c4a48771895117bedf201765cc9a1f..970465c8a880926953148fbbdc9266e6220d6951 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Sat Oct  9 14:32:28 1999  Martin Mares  <mj@albireo.ucw.cz>
+
+       * setpci.man: Better example.
+
+       * lspci.c: Resolve prog-if names.
+
+       * lib/names.c: Adapted to new pci.ids syntax.
+
+       * pci.ids: Reorganized the pci.ids file. Subsystems are listed
+       under devices, classes can optionally contain prog-if information.
+       New ID's, as usually.
+
 Wed Sep 22 09:45:24 1999  Martin Mares  <mj@albireo.ucw.cz>
 
        * pci.ids: New ID's. As usually.
 Wed Sep 22 09:45:24 1999  Martin Mares  <mj@albireo.ucw.cz>
 
        * pci.ids: New ID's. As usually.
index 21669a1d2b1f3f9e78aecf4eb25bd2f5ae3938b1..7898c11c4fef5ce142d9a86f8ac94753bc77b8f0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.22 1999/09/22 08:00:51 mj Exp $
+# $Id: Makefile,v 1.23 1999/10/09 13:25:59 mj Exp $
 # Makefile for Linux PCI Utilities
 # (c) 1998--1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
 
 # Makefile for Linux PCI Utilities
 # (c) 1998--1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
 
@@ -6,10 +6,10 @@ OPT=-O2 -fomit-frame-pointer
 #OPT=-O2 -g
 CFLAGS=$(OPT) -Wall -W -Wno-parentheses -Wstrict-prototypes -Werror
 
 #OPT=-O2 -g
 CFLAGS=$(OPT) -Wall -W -Wno-parentheses -Wstrict-prototypes -Werror
 
-VERSION=2.1-pre6
+VERSION=2.1-pre7
 SUFFIX=
 #SUFFIX=-alpha
 SUFFIX=
 #SUFFIX=-alpha
-DATE=1999-09-22
+DATE=1999-10-09
 
 ifeq ($(shell uname),FreeBSD)
 ROOT=/usr/local
 
 ifeq ($(shell uname),FreeBSD)
 ROOT=/usr/local
index a052f4bb07250581a1aded789079eaefdc22f51b..8e39f75f57896388bf649baacdc6ea89048df694 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- *     $Id: names.c,v 1.2 1999/06/21 20:17:19 mj Exp $
+ *     $Id: names.c,v 1.3 1999/10/09 13:26:12 mj Exp $
  *
  *     The PCI Library -- ID to Name Translation
  *
  *
  *     The PCI Library -- ID to Name Translation
  *
 
 struct nl_entry {
   struct nl_entry *next;
 
 struct nl_entry {
   struct nl_entry *next;
-  word id1, id2;
+  word id1, id2, id3, id4;
   int cat;
   byte *name;
 };
 
 #define NL_VENDOR 0
 #define NL_DEVICE 1
   int cat;
   byte *name;
 };
 
 #define NL_VENDOR 0
 #define NL_DEVICE 1
-#define NL_CLASS 2
-#define NL_SUBCLASS 3
-#define NL_SUBSYSTEM_VENDOR 4
-#define NL_SUBSYSTEM_DEVICE 5
+#define NL_SUBSYSTEM 2
+#define NL_CLASS 3
+#define NL_SUBCLASS 4
+#define NL_PROGIF 5
 
 #define HASH_SIZE 1024
 
 
 #define HASH_SIZE 1024
 
-static inline unsigned int nl_calc_hash(int cat, int id1, int id2)
+static inline unsigned int nl_calc_hash(int cat, int id1, int id2, int id3, int id4)
 {
   unsigned int h;
 
 {
   unsigned int h;
 
-  h = id1 ^ id2 ^ (cat << 5);
+  h = id1 ^ id2 ^ id3 ^ id4 ^ (cat << 5);
   h += (h >> 6);
   return h & (HASH_SIZE-1);
 }
 
   h += (h >> 6);
   return h & (HASH_SIZE-1);
 }
 
-static struct nl_entry *nl_lookup(struct pci_access *a, int num, int cat, int id1, int id2)
+static struct nl_entry *nl_lookup(struct pci_access *a, int num, int cat, int id1, int id2, int id3, int id4)
 {
   unsigned int h;
   struct nl_entry *n;
 
   if (num)
     return NULL;
 {
   unsigned int h;
   struct nl_entry *n;
 
   if (num)
     return NULL;
-  h = nl_calc_hash(cat, id1, id2);
+  h = nl_calc_hash(cat, id1, id2, id3, id4);
   n = a->nl_hash[h];
   n = a->nl_hash[h];
-  while (n && (n->id1 != id1 || n->id2 != id2 || n->cat != cat))
+  while (n && (n->id1 != id1 || n->id2 != id2 || n->id3 != id3 || n->id4 != id4 || n->cat != cat))
     n = n->next;
   return n;
 }
 
     n = n->next;
   return n;
 }
 
-static int nl_add(struct pci_access *a, int cat, int id1, int id2, byte *text)
+static int nl_add(struct pci_access *a, int cat, int id1, int id2, int id3, int id4, byte *text)
 {
 {
-  unsigned int h = nl_calc_hash(cat, id1, id2);
+  unsigned int h = nl_calc_hash(cat, id1, id2, id3, id4);
   struct nl_entry *n = a->nl_hash[h];
 
   struct nl_entry *n = a->nl_hash[h];
 
-  while (n && (n->id1 != id1 || n->id2 != id2 || n->cat != cat))
+  while (n && (n->id1 != id1 || n->id2 != id2 || n->id3 != id3 || n->id4 != id4 || n->cat != cat))
     n = n->next;
   if (n)
     return 1;
   n = pci_malloc(a, sizeof(struct nl_entry));
   n->id1 = id1;
   n->id2 = id2;
     n = n->next;
   if (n)
     return 1;
   n = pci_malloc(a, sizeof(struct nl_entry));
   n->id1 = id1;
   n->id2 = id2;
+  n->id3 = id3;
+  n->id4 = id4;
   n->cat = cat;
   n->name = text;
   n->next = a->nl_hash[h];
   n->cat = cat;
   n->name = text;
   n->next = a->nl_hash[h];
@@ -88,8 +90,8 @@ parse_name_list(struct pci_access *a)
   byte *p = a->nl_list;
   byte *q, *r;
   int lino = 0;
   byte *p = a->nl_list;
   byte *q, *r;
   int lino = 0;
-  unsigned int id1=0, id2=0;
-  int cat, last_cat = -1;
+  unsigned int id1=0, id2=0, id3=0, id4=0;
+  int cat = -1;
 
   while (*p)
     {
 
   while (*p)
     {
@@ -104,8 +106,6 @@ parse_name_list(struct pci_access *a)
                p++;
              break;
            }
                p++;
              break;
            }
-         if (*p == '\t')
-           *p = ' ';
          p++;
        }
       if (*p == '\n')
          p++;
        }
       if (*p == '\n')
@@ -116,9 +116,9 @@ parse_name_list(struct pci_access *a)
       while (r > q && r[-1] == ' ')
        *--r = 0;
       r = q;
       while (r > q && r[-1] == ' ')
        *--r = 0;
       r = q;
-      while (*q == ' ')
+      while (*q == '\t')
        q++;
        q++;
-      if (r == q)
+      if (q == r)
        {
          if (q[0] == 'C' && q[1] == ' ')
            {
        {
          if (q[0] == 'C' && q[1] == ' ')
            {
@@ -126,16 +126,7 @@ parse_name_list(struct pci_access *a)
                  q[4] != ' ' ||
                  sscanf(q+2, "%x", &id1) != 1)
                goto parserr;
                  q[4] != ' ' ||
                  sscanf(q+2, "%x", &id1) != 1)
                goto parserr;
-             cat = last_cat = NL_CLASS;
-           }
-         else if (q[0] == 'S' && q[1] == ' ')
-           {
-             if (strlen(q+2) < 5 ||
-                 q[6] != ' ' ||
-                 sscanf(q+2, "%x", &id1) != 1)
-               goto parserr;
-             cat = last_cat = NL_SUBSYSTEM_VENDOR;
-             q += 2;
+             cat = NL_CLASS;
            }
          else
            {
            }
          else
            {
@@ -143,27 +134,64 @@ parse_name_list(struct pci_access *a)
                  q[4] != ' ' ||
                  sscanf(q, "%x", &id1) != 1)
                goto parserr;
                  q[4] != ' ' ||
                  sscanf(q, "%x", &id1) != 1)
                goto parserr;
-             cat = last_cat = NL_VENDOR;
+             cat = NL_VENDOR;
            }
            }
-         id2 = 0;
+         id2 = id3 = id4 = 0;
+         q += 4;
        }
        }
-      else
-       {
-         if (sscanf(q, "%x", &id2) != 1)
+      else if (q == r+1) 
+       switch (cat)
+         {
+         case NL_VENDOR:
+         case NL_DEVICE:
+         case NL_SUBSYSTEM:
+           if (sscanf(q, "%x", &id2) != 1 || q[4] != ' ')
+             goto parserr;
+           q += 5;
+           cat = NL_DEVICE;
+           id3 = id4 = 0;
+           break;
+         case NL_CLASS:
+         case NL_SUBCLASS:
+         case NL_PROGIF:
+           if (sscanf(q, "%x", &id2) != 1 || q[2] != ' ')
+             goto parserr;
+           q += 3;
+           cat = NL_SUBCLASS;
+           id3 = id4 = 0;
+           break;
+         default:
            goto parserr;
            goto parserr;
-         if (last_cat < 0)
+         }
+      else if (q == r+2)
+       switch (cat)
+         {
+         case NL_DEVICE:
+         case NL_SUBSYSTEM:
+           if (sscanf(q, "%x%x", &id3, &id4) != 2 || q[9] != ' ')
+             goto parserr;
+           q += 10;
+           cat = NL_SUBSYSTEM;
+           break;
+         case NL_CLASS:
+         case NL_SUBCLASS:
+         case NL_PROGIF:
+           if (sscanf(q, "%x", &id3) != 1 || q[2] != ' ')
+             goto parserr;
+           q += 3;
+           cat = NL_PROGIF;
+           id4 = 0;
+           break;
+         default:
            goto parserr;
            goto parserr;
-         if (last_cat == NL_CLASS)
-           cat = NL_SUBCLASS;
-         else
-           cat = last_cat+1;
-       }
-      q += 4;
+         }
+      else
+       goto parserr;
       while (*q == ' ')
        q++;
       if (!*q)
        goto parserr;
       while (*q == ' ')
        q++;
       if (!*q)
        goto parserr;
-      if (nl_add(a, cat, id1, id2, q))
+      if (nl_add(a, cat, id1, id2, id3, id4, q))
        a->error("%s, line %d: duplicate entry", a->id_file_name, lino);
     }
   return;
        a->error("%s, line %d: duplicate entry", a->id_file_name, lino);
     }
   return;
@@ -205,28 +233,8 @@ pci_free_name_list(struct pci_access *a)
   a->nl_hash = NULL;
 }
 
   a->nl_hash = NULL;
 }
 
-static int
-compound_name(struct pci_access *a, int num, char *buf, int size, int cat, int v, int i)
-{
-  if (!num)
-    {
-      struct nl_entry *e, *e2;
-
-      e = nl_lookup(a, 0, cat, v, 0);
-      e2 = nl_lookup(a, 0, cat+1, v, i);
-      if (!e)
-       return snprintf(buf, size, "Unknown device %04x:%04x", v, i);
-      else if (!e2)
-       return snprintf(buf, size, "%s: Unknown device %04x", e->name, i);
-      else
-       return snprintf(buf, size, "%s %s", e->name, e2->name);
-    }
-  else
-    return snprintf(buf, size, "%04x:%04x", v, i);
-}
-
 char *
 char *
-pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, u32 arg1, u32 arg2)
+pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, u32 arg1, u32 arg2, u32 arg3, u32 arg4)
 {
   int num = a->numeric_ids;
   int res;
 {
   int num = a->numeric_ids;
   int res;
@@ -245,43 +253,88 @@ pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, u32 arg1,
   switch (flags)
     {
     case PCI_LOOKUP_VENDOR:
   switch (flags)
     {
     case PCI_LOOKUP_VENDOR:
-      if (n = nl_lookup(a, num, NL_VENDOR, arg1, 0))
+      if (n = nl_lookup(a, num, NL_VENDOR, arg1, 0, 0, 0))
        return n->name;
       else
        res = snprintf(buf, size, "%04x", arg1);
       break;
     case PCI_LOOKUP_DEVICE:
        return n->name;
       else
        res = snprintf(buf, size, "%04x", arg1);
       break;
     case PCI_LOOKUP_DEVICE:
-      if (n = nl_lookup(a, num, NL_DEVICE, arg1, arg2))
+      if (n = nl_lookup(a, num, NL_DEVICE, arg1, arg2, 0, 0))
        return n->name;
       else
        res = snprintf(buf, size, "%04x", arg2);
       break;
     case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE:
        return n->name;
       else
        res = snprintf(buf, size, "%04x", arg2);
       break;
     case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE:
-      res = compound_name(a, num, buf, size, NL_VENDOR, arg1, arg2);
+      if (!num)
+       {
+         struct nl_entry *e, *e2;
+         e = nl_lookup(a, 0, NL_VENDOR, arg1, 0, 0, 0);
+         e2 = nl_lookup(a, 0, NL_DEVICE, arg1, arg2, 0, 0);
+         if (!e)
+           res = snprintf(buf, size, "Unknown device %04x:%04x", arg1, arg2);
+         else if (!e2)
+           res = snprintf(buf, size, "%s: Unknown device %04x", e->name, arg2);
+         else
+           res = snprintf(buf, size, "%s %s", e->name, e2->name);
+       }
+      else
+       res = snprintf(buf, size, "%04x:%04x", arg1, arg2);
       break;
     case PCI_LOOKUP_VENDOR | PCI_LOOKUP_SUBSYSTEM:
       break;
     case PCI_LOOKUP_VENDOR | PCI_LOOKUP_SUBSYSTEM:
-      if (n = nl_lookup(a, num, NL_SUBSYSTEM_VENDOR, arg1, 0))
+      if (n = nl_lookup(a, num, NL_VENDOR, arg3, 0, 0, 0))
        return n->name;
       else
        res = snprintf(buf, size, "%04x", arg1);
       break;
     case PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
        return n->name;
       else
        res = snprintf(buf, size, "%04x", arg1);
       break;
     case PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
-      if (n = nl_lookup(a, num, NL_SUBSYSTEM_DEVICE, arg1, arg2))
+      if (n = nl_lookup(a, num, NL_SUBSYSTEM, arg1, arg2, arg3, arg4))
        return n->name;
       else
        res = snprintf(buf, size, "%04x", arg2);
       break;
     case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
        return n->name;
       else
        res = snprintf(buf, size, "%04x", arg2);
       break;
     case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
-      res = compound_name(a, num, buf, size, NL_SUBSYSTEM_VENDOR, arg1, arg2);
+      if (!num)
+       {
+         struct nl_entry *e, *e2;
+         e = nl_lookup(a, 0, NL_VENDOR, arg3, 0, 0, 0);
+         e2 = nl_lookup(a, 0, NL_SUBSYSTEM, arg1, arg2, arg3, arg4);
+         if (!e)
+           res = snprintf(buf, size, "Unknown device %04x:%04x", arg1, arg2);
+         else if (!e2)
+           res = snprintf(buf, size, "%s: Unknown device %04x", e->name, arg2);
+         else
+           res = snprintf(buf, size, "%s %s", e->name, e2->name);
+       }
+      else
+       res = snprintf(buf, size, "%04x:%04x", arg3, arg4);
       break;
     case PCI_LOOKUP_CLASS:
       break;
     case PCI_LOOKUP_CLASS:
-      if (n = nl_lookup(a, num, NL_SUBCLASS, arg1 >> 8, arg1 & 0xff))
+      if (n = nl_lookup(a, num, NL_SUBCLASS, arg1 >> 8, arg1 & 0xff, 0, 0))
        return n->name;
        return n->name;
-      else if (n = nl_lookup(a, num, NL_CLASS, arg1, 0))
+      else if (n = nl_lookup(a, num, NL_CLASS, arg1, 0, 0, 0))
        res = snprintf(buf, size, "%s [%04x]", n->name, arg1);
       else
        res = snprintf(buf, size, "Class %04x", arg1);
       break;
        res = snprintf(buf, size, "%s [%04x]", n->name, arg1);
       else
        res = snprintf(buf, size, "Class %04x", arg1);
       break;
+    case PCI_LOOKUP_PROGIF:
+      if (n = nl_lookup(a, num, NL_PROGIF, arg1 >> 8, arg1 & 0xff, arg2, 0))
+       return n->name;
+      if (arg1 == 0x0101)
+       {
+         /* IDE controllers have complex prog-if semantics */
+         if (arg2 & 0x70)
+           return NULL;
+         res = snprintf(buf, size, "%s%s%s%s%s",
+                        (arg2 & 0x80) ? "Master " : "",
+                        (arg2 & 0x08) ? "SecP " : "",
+                        (arg2 & 0x04) ? "SecO " : "",
+                        (arg2 & 0x02) ? "PriP " : "",
+                        (arg2 & 0x01) ? "PriO " : "");
+         if (res)
+           buf[--res] = 0;
+         break;
+       }
+      return NULL;
     default:
       return "<pci_lookup_name: invalid request>";
     }
     default:
       return "<pci_lookup_name: invalid request>";
     }
index fbf41d424b19bec7f573187a6ca073c57b117c05..e37f8e205a90079758ae588653df9f0494e4bea7 100644 (file)
--- a/lib/pci.h
+++ b/lib/pci.h
@@ -1,5 +1,5 @@
 /*
 /*
- *     $Id: pci.h,v 1.6 1999/07/20 14:01:35 mj Exp $
+ *     $Id: pci.h,v 1.7 1999/10/09 13:26:14 mj Exp $
  *
  *     The PCI Library
  *
  *
  *     The PCI Library
  *
@@ -170,13 +170,14 @@ int pci_filter_match(struct pci_filter *, struct pci_dev *);
  *     Device names
  */
 
  *     Device names
  */
 
-char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, u32 arg1, u32 arg2);
+char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, u32 arg1, u32 arg2, u32 arg3, u32 arg4);
 void pci_free_name_list(struct pci_access *a);
 
 #define PCI_LOOKUP_VENDOR 1
 #define PCI_LOOKUP_DEVICE 2
 #define PCI_LOOKUP_CLASS 4
 #define PCI_LOOKUP_SUBSYSTEM 8
 void pci_free_name_list(struct pci_access *a);
 
 #define PCI_LOOKUP_VENDOR 1
 #define PCI_LOOKUP_DEVICE 2
 #define PCI_LOOKUP_CLASS 4
 #define PCI_LOOKUP_SUBSYSTEM 8
+#define PCI_LOOKUP_PROGIF 16
 #define PCI_LOOKUP_NUMERIC 0x10000
 
 #endif
 #define PCI_LOOKUP_NUMERIC 0x10000
 
 #endif
diff --git a/lspci.c b/lspci.c
index 88353e8dcb61aa8dbdae77a5456bc1d8be5ba1cd..41b88d32e89f8505c004f700a1c864e41bcae4de 100644 (file)
--- a/lspci.c
+++ b/lspci.c
@@ -1,5 +1,5 @@
 /*
 /*
- *     $Id: lspci.c,v 1.29 1999/09/22 08:00:53 mj Exp $
+ *     $Id: lspci.c,v 1.30 1999/10/09 13:26:02 mj Exp $
  *
  *     Linux PCI Utilities -- List All PCI Devices
  *
  *
  *     Linux PCI Utilities -- List All PCI Devices
  *
@@ -234,14 +234,22 @@ show_terse(struct device *d)
         p->func,
         pci_lookup_name(pacc, classbuf, sizeof(classbuf),
                         PCI_LOOKUP_CLASS,
         p->func,
         pci_lookup_name(pacc, classbuf, sizeof(classbuf),
                         PCI_LOOKUP_CLASS,
-                        get_conf_word(d, PCI_CLASS_DEVICE), 0),
+                        get_conf_word(d, PCI_CLASS_DEVICE), 0, 0, 0),
         pci_lookup_name(pacc, devbuf, sizeof(devbuf),
                         PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
         pci_lookup_name(pacc, devbuf, sizeof(devbuf),
                         PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
-                        p->vendor_id, p->device_id));
+                        p->vendor_id, p->device_id, 0, 0));
   if (c = get_conf_byte(d, PCI_REVISION_ID))
     printf(" (rev %02x)", c);
   if (verbose && (c = get_conf_byte(d, PCI_CLASS_PROG)))
   if (c = get_conf_byte(d, PCI_REVISION_ID))
     printf(" (rev %02x)", c);
   if (verbose && (c = get_conf_byte(d, PCI_CLASS_PROG)))
-    printf(" (prog-if %02x)", c);
+    {
+      char *x = pci_lookup_name(pacc, devbuf, sizeof(devbuf),
+                               PCI_LOOKUP_PROGIF,
+                               get_conf_word(d, PCI_CLASS_DEVICE), c, 0, 0);
+      printf(" (prog-if %02x", c);
+      if (x)
+       printf(" [%s]", x);
+      putchar(')');
+    }
   putchar('\n');
 }
 
   putchar('\n');
 }
 
@@ -723,7 +731,7 @@ show_verbose(struct device *d)
     printf("\tSubsystem: %s\n",
           pci_lookup_name(pacc, ssnamebuf, sizeof(ssnamebuf),
                           PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
     printf("\tSubsystem: %s\n",
           pci_lookup_name(pacc, ssnamebuf, sizeof(ssnamebuf),
                           PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
-                          subsys_v, subsys_d));
+                          p->vendor_id, p->device_id, subsys_v, subsys_d));
 
   if (verbose > 1)
     {
 
   if (verbose > 1)
     {
@@ -855,17 +863,17 @@ show_machine(struct device *d)
     {
       printf("Device:\t%02x:%02x.%x\n", p->bus, p->dev, p->func);
       printf("Class:\t%s\n",
     {
       printf("Device:\t%02x:%02x.%x\n", p->bus, p->dev, p->func);
       printf("Class:\t%s\n",
-            pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS, get_conf_word(d, PCI_CLASS_DEVICE), 0));
+            pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS, get_conf_word(d, PCI_CLASS_DEVICE), 0, 0, 0));
       printf("Vendor:\t%s\n",
       printf("Vendor:\t%s\n",
-            pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR, p->vendor_id, p->device_id));
+            pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR, p->vendor_id, p->device_id, 0, 0));
       printf("Device:\t%s\n",
       printf("Device:\t%s\n",
-            pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE, p->vendor_id, p->device_id));
+            pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE, p->vendor_id, p->device_id, 0, 0));
       if (sv_id && sv_id != 0xffff)
        {
          printf("SVendor:\t%s\n",
       if (sv_id && sv_id != 0xffff)
        {
          printf("SVendor:\t%s\n",
-                pci_lookup_name(pacc, svbuf, sizeof(svbuf), PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR, sv_id, sd_id));
+                pci_lookup_name(pacc, svbuf, sizeof(svbuf), PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR, p->vendor_id, p->device_id, sv_id, sd_id));
          printf("SDevice:\t%s\n",
          printf("SDevice:\t%s\n",
-                pci_lookup_name(pacc, sdbuf, sizeof(sdbuf), PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE, sv_id, sd_id));
+                pci_lookup_name(pacc, sdbuf, sizeof(sdbuf), PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE, p->vendor_id, p->device_id, sv_id, sd_id));
        }
       if (c = get_conf_byte(d, PCI_REVISION_ID))
        printf("Rev:\t%02x\n", c);
        }
       if (c = get_conf_byte(d, PCI_REVISION_ID))
        printf("Rev:\t%02x\n", c);
@@ -877,19 +885,19 @@ show_machine(struct device *d)
       printf("%02x:%02x.%x ", p->bus, p->dev, p->func);
       printf("\"%s\" \"%s\" \"%s\"",
             pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS,
       printf("%02x:%02x.%x ", p->bus, p->dev, p->func);
       printf("\"%s\" \"%s\" \"%s\"",
             pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS,
-                            get_conf_word(d, PCI_CLASS_DEVICE), 0),
+                            get_conf_word(d, PCI_CLASS_DEVICE), 0, 0, 0),
             pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR,
             pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR,
-                            p->vendor_id, p->device_id),
+                            p->vendor_id, p->device_id, 0, 0),
             pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE,
             pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE,
-                            p->vendor_id, p->device_id));
+                            p->vendor_id, p->device_id, 0, 0));
       if (c = get_conf_byte(d, PCI_REVISION_ID))
        printf(" -r%02x", c);
       if (c = get_conf_byte(d, PCI_CLASS_PROG))
        printf(" -p%02x", c);
       if (sv_id && sv_id != 0xffff)
        printf(" \"%s\" \"%s\"",
       if (c = get_conf_byte(d, PCI_REVISION_ID))
        printf(" -r%02x", c);
       if (c = get_conf_byte(d, PCI_CLASS_PROG))
        printf(" -p%02x", c);
       if (sv_id && sv_id != 0xffff)
        printf(" \"%s\" \"%s\"",
-              pci_lookup_name(pacc, svbuf, sizeof(svbuf), PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR, sv_id, sd_id),
-              pci_lookup_name(pacc, sdbuf, sizeof(sdbuf), PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE, sv_id, sd_id));
+              pci_lookup_name(pacc, svbuf, sizeof(svbuf), PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR, p->vendor_id, p->device_id, sv_id, sd_id),
+              pci_lookup_name(pacc, sdbuf, sizeof(sdbuf), PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE, p->vendor_id, p->device_id, sv_id, sd_id));
       else
        printf(" \"\" \"\"");
       putchar('\n');
       else
        printf(" \"\" \"\"");
       putchar('\n');
@@ -1094,7 +1102,7 @@ show_tree_dev(struct device *d, byte *line, byte *p)
     p += sprintf(p, "  %s",
                 pci_lookup_name(pacc, namebuf, sizeof(namebuf),
                                 PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
     p += sprintf(p, "  %s",
                 pci_lookup_name(pacc, namebuf, sizeof(namebuf),
                                 PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
-                                q->vendor_id, q->device_id));
+                                q->vendor_id, q->device_id, 0, 0));
   print_it(line, p);
 }
 
   print_it(line, p);
 }
 
diff --git a/pci.ids b/pci.ids
index b064a8cdd5b3276b0d1cb51faa3a8bcabce87f6a..5d851ecdb7766999a4374b9753e53df281ffe3cc 100644 (file)
--- a/pci.ids
+++ b/pci.ids
@@ -4,10 +4,15 @@
 #      Maintained by Martin Mares <pci-ids@ucw.cz>
 #      If you have any new entries, send them to the maintainer.
 #
 #      Maintained by Martin Mares <pci-ids@ucw.cz>
 #      If you have any new entries, send them to the maintainer.
 #
-#      $Id: pci.ids,v 1.37 1999/09/22 08:00:55 mj Exp $
+#      $Id: pci.ids,v 1.38 1999/10/09 13:26:05 mj Exp $
 #
 
 #
 
-# Vendors and devices. Please keep sorted.
+# Vendors, devices and subsystems. Please keep sorted.
+
+# Syntax:
+# vendor  vendor_name
+#      device  device_name                             <-- single tab
+#              subvendor subdevice  subsystem_name     <-- two tabs
 
 0000  Gammagraphx, Inc.
 001a  Ascend Communications, Inc.
 
 0000  Gammagraphx, Inc.
 001a  Ascend Communications, Inc.
@@ -72,7 +77,6 @@
        4354  215CT [Mach64 CT]
        4358  210888CX [Mach64 CX]
        4554  210888ET [Mach64 ET]
        4354  215CT [Mach64 CT]
        4358  210888CX [Mach64 CX]
        4554  210888ET [Mach64 ET]
-       4654  Mach64 VT
        4742  3D Rage Pro AGP 1X/2X
        4744  3D Rage Pro AGP 1X
        4747  3D Rage Pro
        4742  3D Rage Pro AGP 1X/2X
        4744  3D Rage Pro AGP 1X
        4747  3D Rage Pro
        4c52  3D Rage P/M Mobility
        4c53  3D Rage L Mobility
        4c54  264LT [Mach64 LT]
        4c52  3D Rage P/M Mobility
        4c53  3D Rage L Mobility
        4c54  264LT [Mach64 LT]
-       5041  Rage 128 Pro
-       5042  Rage 128 Pro AGP 2x
-       5043  Rage 128 Pro AGP 4x
-       5044  Rage 128 Pro
-       5045  Rage 128 Pro AGP 2x
-       5046  Rage 128 Pro AGP 4x
-       5047  Rage 128 Pro
-       5048  Rage 128 Pro AGP 2x
-       5049  Rage 128 Pro AGP 4x
-       504a  Rage 128 Pro
-       504b  Rage 128 Pro AGP 2x
-       504c  Rage 128 Pro AGP 4x
-       504d  Rage 128 Pro
-       504e  Rage 128 Pro AGP 2x
-       504f  Rage 128 Pro AGP 4x
-       5050  Rage 128 Pro
-       5051  Rage 128 Pro AGP 2x
-       5052  Rage 128 Pro AGP 4x
-       5053  Rage 128 Pro
-       5054  Rage 128 Pro AGP 2x
-       5055  Rage 128 Pro AGP 4x
-       5056  Rage 128 Pro
-       5057  Rage 128 Pro AGP 2x
-       5058  Rage 128 Pro AGP 4x
-       5245  Rage 128 GL
-       5246  Rage 128 GL AGP 1x/2x
-       524b  Rage 128 VR
-       524c  Rage 128 VR AGP 1x/2x
-       5345  Rage 128 4x
-       5346  Rage 128 4x AGP 2x
-       5347  Rage 128 4x AGP 4x
-       5348  Rage 128 4x
-       534b  Rage 128 4x
-       534c  Rage 128 4x AGP 2x
-       534d  Rage 128 4x AGP 4x
-       534e  Rage 128 4x
+       5041  Rage 128 PA
+       5042  Rage 128 PB
+       5043  Rage 128 PC
+       5044  Rage 128 PD
+       5045  Rage 128 PE
+       5046  Rage 128 PF
+       5047  Rage 128 PG
+       5048  Rage 128 PH
+       5049  Rage 128 PI
+       504A  Rage 128 PJ
+       504B  Rage 128 PK
+       504C  Rage 128 PL
+       504D  Rage 128 PM
+       504E  Rage 128 PN
+       504F  Rage 128 PO
+       5050  Rage 128 PP
+       5051  Rage 128 PQ
+       5052  Rage 128 PR
+       5053  Rage 128 PS
+       5054  Rage 128 PT
+       5055  Rage 128 PU
+       5056  Rage 128 PV
+       5057  Rage 128 PW
+       5058  Rage 128 PX
+       5245  Rage 128 RE
+       5246  Rage 128 RF
+       524b  Rage 128 RK
+       524c  Rage 128 RL
+       5345  Rage 128 SE
+       5346  Rage 128 SF
+       5347  Rage 128 SG
+       534B  Rage 128 SK
+       534C  Rage 128 SL
+       534D  Rage 128 SM
        5354  Mach64 ST
        5654  264VT [Mach64 VT]
        5655  264VT3 [Mach64 VT3]
        5354  Mach64 ST
        5654  264VT [Mach64 VT]
        5655  264VT3 [Mach64 VT3]
 1046  IPC Corporation, Ltd.
 1047  Genoa Systems Corp
 1048  Elsa AG
 1046  IPC Corporation, Ltd.
 1047  Genoa Systems Corp
 1048  Elsa AG
-       1000  QuickStep 1000pro
+       1000  QuickStep 1000
+       3000  QuickStep 3000
 1049  Fountain Technologies, Inc.
 104a  SGS Thomson Microelectronics
        0008  STG 2000X
 1049  Fountain Technologies, Inc.
 104a  SGS Thomson Microelectronics
        0008  STG 2000X
 1507  Motorola Computer Group
        0001  MPC105 [Eagle]
        0002  MPC106 [Grackle]
 1507  Motorola Computer Group
        0001  MPC105 [Eagle]
        0002  MPC106 [Grackle]
+       0100  MC145575 [HFC-PCI]
        0431  KTI829c 100VG
        4801  Raven
        4802  Falcon
        0431  KTI829c 100VG
        4801  Raven
        4802  Falcon
 1057  Motorola Computer Group
        0001  MPC105 [Eagle]
        0002  MPC106 [Grackle]
 1057  Motorola Computer Group
        0001  MPC105 [Eagle]
        0002  MPC106 [Grackle]
+       0100  MC145575 [HFC-PCI]
        0431  KTI829c 100VG
        4801  Raven
        4802  Falcon
        0431  KTI829c 100VG
        4801  Raven
        4802  Falcon
        b106  DB87144
 10b4  STB Systems Inc
        1b1d  Velocity 128 3D
        b106  DB87144
 10b4  STB Systems Inc
        1b1d  Velocity 128 3D
+               10b4 237e  Velocity 4400
 10b5  PLX Technology, Inc.
        0001  i960 PCI bus interface
        1076  VScom 800 8 port serial adaptor
 10b5  PLX Technology, Inc.
        0001  i960 PCI bus interface
        1076  VScom 800 8 port serial adaptor
        9050  PCI <-> IOBus Bridge
        9060  9060
        906d  9060SD
        9050  PCI <-> IOBus Bridge
        9060  9060
        906d  9060SD
+               125c 0640  Aries 16000P
        906e  9060ES
        9080  9080
        906e  9060ES
        9080  9080
+               10b5 9080  9080 [real subsystem ID not set]
 10b6  Madge Networks
        0001  Smart 16/4 Ringnode
        0002  Smart 16/4 BM Mk2 Ringnode
 10b6  Madge Networks
        0001  Smart 16/4 Ringnode
        0002  Smart 16/4 BM Mk2 Ringnode
        0008  NV1 EDGE 3D
        0009  NV1 EDGE 3D
        0020  Riva TNT 128
        0008  NV1 EDGE 3D
        0009  NV1 EDGE 3D
        0020  Riva TNT 128
+               1102 1015  Graphics Blaster CT6710
        0028  Riva TNT2
        0029  Riva TNT2 Ultra
        002c  Vanta
        0028  Riva TNT2
        0029  Riva TNT2 Ultra
        002c  Vanta
 11c6  Dainippon Screen Mfg. Co. Ltd
 11c7  D.C.M. Data Systems
 11c8  Dolphin Interconnect Solutions AS
 11c6  Dainippon Screen Mfg. Co. Ltd
 11c7  D.C.M. Data Systems
 11c8  Dolphin Interconnect Solutions AS
-       0658  PSB
+       0658  PSB32 SCI-Adapter D31x
+       d665  PSB64 SCI-Adapter D32x
+       d667  PSB66 SCI-Adapter D33x
 11c9  Magma
        0010  16-line serial port w/- DMA
        0011  4-line serial port w/- DMA
 11c9  Magma
        0010  16-line serial port w/- DMA
        0011  4-line serial port w/- DMA
 125a  ABB Power Systems
 125b  Asix Electronics Corporation
 125c  Aurora Technologies, Inc.
 125a  ABB Power Systems
 125b  Asix Electronics Corporation
 125c  Aurora Technologies, Inc.
-       0640  Aries 16000P
 125d  ESS Technology
        0000  ES336H PCI Fax Modem (Early Model)
        1948  Solo?
 125d  ESS Technology
        0000  ES336H PCI Fax Modem (Early Model)
        1948  Solo?
 1317  Bridgecom, Inc
 1318  Packet Engines Inc.
 1319  Fortemedia, Inc
 1317  Bridgecom, Inc
 1318  Packet Engines Inc.
 1319  Fortemedia, Inc
+       0801  Xwave QS3000A [FM801]
+       0802  Xwave QS3000A [FM801 game port]
 131a  Finisar Corp.
 131c  Nippon Electro-Sensory Devices Corp
 131d  Sysmic, Inc.
 131a  Finisar Corp.
 131c  Nippon Electro-Sensory Devices Corp
 131d  Sysmic, Inc.
 1395  Ambicom Inc
 1396  Cipher Systems Inc
 1397  Cologne Chip Designs GmbH
 1395  Ambicom Inc
 1396  Cipher Systems Inc
 1397  Cologne Chip Designs GmbH
+       2bd0  PCI ISDN network controller
 1398  Clarion co. Ltd
 1399  Rios systems Co Ltd
 139a  Alacritech Inc
 1398  Clarion co. Ltd
 1399  Rios systems Co Ltd
 139a  Alacritech Inc
 14ef  CARRY Computer ENG. CO Ltd
 14f0  CANON RESEACH CENTRE FRANCE
 14f1  CONEXANT
 14ef  CARRY Computer ENG. CO Ltd
 14f0  CANON RESEACH CENTRE FRANCE
 14f1  CONEXANT
+       2013  HSP MicroModem 56K
 14f2  MOBILITY Electronics
 14f3  BROADLOGIC
 14f4  TOKYO Electronic Industry CO Ltd
 14f2  MOBILITY Electronics
 14f3  BROADLOGIC
 14f4  TOKYO Electronic Industry CO Ltd
 155b  PROTAC INTERNATIONAL Corp
 1668  Action Tec Electronics Inc
 1a08  Sierra semiconductor
 155b  PROTAC INTERNATIONAL Corp
 1668  Action Tec Electronics Inc
 1a08  Sierra semiconductor
-    0000  SC15064
+       0000  SC15064
 1b13  Jaton Corp
 1c1c  Symphony
        0001  82C101
 1b13  Jaton Corp
 1c1c  Symphony
        0001  82C101
 6409  Logitec Corp.
 6666  Decision Computer International Co.
        0001  PCCOM4
 6409  Logitec Corp.
 6666  Decision Computer International Co.
        0001  PCCOM4
+       0002  PCCOM8
 7604  O.N. Electronic Co Ltd.
 7bde  MIDAC Corporation
 8008  Quancom Electronic GmbH
 7604  O.N. Electronic Co Ltd.
 7bde  MIDAC Corporation
 8008  Quancom Electronic GmbH
@@ -2968,88 +2983,152 @@ fffe  VMWare Inc
 ffff  Illegal Vendor ID
 
 
 ffff  Illegal Vendor ID
 
 
-# List of known device classes and subclasses
+# List of known device classes, subclasses and programming interfaces
+
+# Syntax:
+# C class  class_name
+#      subclass  subclass_name                 <-- single tab
+#              prog-if  prog-if_name           <-- two tabs
 
 C 00  Unclassified device
 
 C 00  Unclassified device
-       0000  Non-VGA unclassified device
-       0001  VGA compatible unclassified device
+       00  Non-VGA unclassified device
+       01  VGA compatible unclassified device
 C 01  Mass storage controller
 C 01  Mass storage controller
-       0000  SCSI storage controller
-       0001  IDE interface
-       0002  Floppy disk controller
-       0003  IPI bus controller
-       0004  RAID bus controller
-       0080  Unknown mass storage controller
+       00  SCSI storage controller
+       01  IDE interface
+       02  Floppy disk controller
+       03  IPI bus controller
+       04  RAID bus controller
+       80  Unknown mass storage controller
 C 02  Network controller
 C 02  Network controller
-       0000  Ethernet controller
-       0001  Token ring network controller
-       0002  FDDI network controller
-       0003  ATM network controller
-       0080  Network controller
+       00  Ethernet controller
+       01  Token ring network controller
+       02  FDDI network controller
+       03  ATM network controller
+       80  Network controller
 C 03  Display controller
 C 03  Display controller
-       0000  VGA compatible controller
-       0001  XGA compatible controller
-       0080  Display controller
+       00  VGA compatible controller
+               00  VGA
+               01  8514
+       01  XGA compatible controller
+       02  3D controller
+       80  Display controller
 C 04  Multimedia controller
 C 04  Multimedia controller
-       0000  Multimedia video controller
-       0001  Multimedia audio controller
-       0080  Multimedia controller
+       00  Multimedia video controller
+       01  Multimedia audio controller
+       02  Computer telephony device
+       80  Multimedia controller
 C 05  Memory controller
 C 05  Memory controller
-       0000  RAM memory
-       0001  FLASH memory
-       0080  Memory
+       00  RAM memory
+       01  FLASH memory
+       80  Memory controller
 C 06  Bridge
 C 06  Bridge
-       0000  Host bridge
-       0001  ISA bridge
-       0002  EISA bridge
-       0003  MicroChannel bridge
-       0004  PCI bridge
-       0005  PCMCIA bridge
-       0006  NuBus bridge
-       0007  CardBus bridge
-       0080  Bridge
+       00  Host bridge
+       01  ISA bridge
+       02  EISA bridge
+       03  MicroChannel bridge
+       04  PCI bridge
+               00  Normal decode
+               01  Subtractive decode
+       05  PCMCIA bridge
+       06  NuBus bridge
+       07  CardBus bridge
+       08  RACEway bridge
+               00  Transparent mode
+               01  Endpoint mode
+       80  Bridge
 C 07  Communication controller
 C 07  Communication controller
-       0000  Serial controller
-       0001  Parallel controller
-       0080  Communication controller
+       00  Serial controller
+               00  8250
+               01  16450
+               02  16550
+               03  16650
+               04  16750
+               05  16850
+               06  16950
+       01  Parallel controller
+               00  SPP
+               01  BiDir
+               02  ECP
+               03  IEEE1284
+               FE  IEEE1284 Target
+       02  Multiport serial controller
+       03  Modem
+               00  Generic
+               01  Hayes/16450
+               02  Hayes/16550
+               03  Hayes/16650
+               04  Hayes/16750
+       80  Communication controller
 C 08  Generic system peripheral
 C 08  Generic system peripheral
-       0000  PIC
-       0001  DMA controller
-       0002  Timer
-       0003  RTC
-       0080  System peripheral
+       00  PIC
+               00  8259
+               01  ISA PIC
+               02  EISA PIC
+               10  IO-APIC
+               20  IO(X)-APIC
+       01  DMA controller
+               00  8237
+               01  ISA DMA
+               02  EISA DMA
+       02  Timer
+               00  8254
+               01  ISA Timer
+               02  EISA Timers
+       03  RTC
+               00  Generic
+               01  ISA RTC
+       04  PCI Hot-plug controller
+       80  System peripheral
 C 09  Input device controller
 C 09  Input device controller
-       0000  Keyboard controller
-       0001  Digitizer Pen
-       0002  Mouse controller
-       0080  Input device controller
+       00  Keyboard controller
+       01  Digitizer Pen
+       02  Mouse controller
+       03  Scanner controller
+       04  Gameport controller
+               00  Generic
+               10  Extended
+       80  Input device controller
 C 0A  Docking station
 C 0A  Docking station
-       0000  Generic Docking Station
-       0080  Docking Station
+       00  Generic Docking Station
+       80  Docking Station
 C 0B  Processor
 C 0B  Processor
-       0000  386
-       0001  486
-       0002  Pentium
-       0010  Alpha
-       0020  Power PC
-       0040  Co-processor
+       00  386
+       01  486
+       02  Pentium
+       10  Alpha
+       20  Power PC
+       30  MIPS
+       40  Co-processor
 C 0C  Serial bus controller
 C 0C  Serial bus controller
-       0000  FireWire (IEEE 1394)
-       0001  ACCESS Bus
-       0002  SSA
-       0003  USB Controller
-       0004  Fiber Channel
+       00  FireWire (IEEE 1394)
+               00  Generic
+               10  OHCI
+       01  ACCESS Bus
+       02  SSA
+       03  USB Controller
+               00  UHCI
+               10  OHCI
+               80  Unspecified
+               FE  USB Device
+       04  Fiber Channel
+       05  SMBus
+C 0D  Wireless controller
+       00  IRDA controller
+       01  Consumer IR controller
+       10  RF controller
+       80  Wireless controller
 C 0E  Intelligent controller
 C 0E  Intelligent controller
-       0000  I2O
-
-S 1092 Diamond Multimedia
-       8760  Fireport 40 Dual SCSI Host Adapter
-       4820  Viper V550 Graphics Accelerator
-S 10b4  STB Systems Inc
-       273e  Velocity 4400
-S 10b5 PLX Technology, Inc.
-       9080  9080 [real subsystem ID not set]
-S 1102  Creative Labs
-       1015  Graphics Blaster CT6710
-S 125c  Aurora Technologies, Inc.
-       0640  Aries 16000P
+       00  I2O
+C 0F  Satellite communications controller
+       00  Satellite TV controller
+       01  Satellite audio communication controller
+       03  Satellite voice communication controller
+       04  Satellite data communication controller
+C 10  Encryption controller
+       00  Network and computing encryption device
+       01  Entertainment encryption device
+       80  Encryption controller
+C 11  Signal processing controller
+       00  DPIO module
+       80  Signal processing controller
index 865e9b624728c4563fdf481cdc5dd2164aa102ab..b9b044699bca32f6d13fdad026bbe1fc8182ec3c 100644 (file)
@@ -192,8 +192,8 @@ Increase debug level of the library. (All systems)
 .PP
 `setpci -s 0 device_id vendor_id' lists ID's of devices in slot 0 in all busses.
 .PP
 .PP
 `setpci -s 0 device_id vendor_id' lists ID's of devices in slot 0 in all busses.
 .PP
-`setpci -s 12:3.4 34.l=1,2,3' writes longword 1 to register 34, 2 to register 35
-and 3 to register 35 of device at bus 12, slot 3, function 4.
+`setpci -s 12:3.4 3c.l=1,2,3' writes longword 1 to register 3c, 2 to register 3d
+and 3 to register 3e of device at bus 12, slot 3, function 4.
 
 .SH SEE ALSO
 .BR lspci (8)
 
 .SH SEE ALSO
 .BR lspci (8)