Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branches 'pci/hotplug', 'pci/msi', 'pci/virtualization' and 'pci/misc' into next

* pci/hotplug:
PCI: rphahp: Fix endianess issues
PCI: Allow hotplug service drivers to operate in polling mode
PCI: pciehp: Acknowledge spurious "cmd completed" event
PCI: pciehp: Use PCI_EXP_SLTCAP_PSN define
PCI: hotplug: Remove unnecessary "dev->bus" test

* pci/msi:
GenWQE: Use pci_enable_msi_exact() instead of pci_enable_msi_block()
PCI/MSI: Simplify populate_msi_sysfs()
PCI/portdrv: Use pci_enable_msix_exact() instead of pci_enable_msix()

* pci/virtualization:
PCI: Add Patsburg (X79) to Intel PCH root port ACS quirk

* pci/misc:
PCI: Fix use of uninitialized MPS value
PCI: Remove dead code
MAINTAINERS: Add arch/x86/kernel/quirks.c to PCI file patterns
PCI: Remove unnecessary __ref annotations
PCI: Fail new_id for vendor/device values already built into driver
PCI: Add new ID for Intel GPU "spurious interrupt" quirk
PCI: Update my email address
PCI: Fix incorrect vgaarb conditional in WARN_ON()
PCI: Use designated initialization in PCI_VDEVICE
PCI: Remove old serial device IDs
PCI: Remove unnecessary includes of <linux/init.h>
powerpc/PCI: Fix NULL dereference in sys_pciconfig_iobase() list traversal

+90 -75
+1 -1
Documentation/ABI/testing/sysfs-bus-pci
··· 117 117 118 118 What: /sys/bus/pci/devices/.../vpd 119 119 Date: February 2008 120 - Contact: Ben Hutchings <bhutchings@solarflare.com> 120 + Contact: Ben Hutchings <bwh@kernel.org> 121 121 Description: 122 122 A file named vpd in a device directory will be a 123 123 binary file containing the Vital Product Data for the
+1
MAINTAINERS
··· 6693 6693 F: drivers/pci/ 6694 6694 F: include/linux/pci* 6695 6695 F: arch/x86/pci/ 6696 + F: arch/x86/kernel/quirks.c 6696 6697 6697 6698 PCI DRIVER FOR IMX6 6698 6699 M: Richard Zhu <r65037@freescale.com>
+6 -4
arch/powerpc/kernel/pci_64.c
··· 208 208 unsigned long in_devfn) 209 209 { 210 210 struct pci_controller* hose; 211 - struct pci_bus *bus = NULL; 211 + struct pci_bus *tmp_bus, *bus = NULL; 212 212 struct device_node *hose_node; 213 213 214 214 /* Argh ! Please forgive me for that hack, but that's the ··· 229 229 * used on pre-domains setup. We return the first match 230 230 */ 231 231 232 - list_for_each_entry(bus, &pci_root_buses, node) { 233 - if (in_bus >= bus->number && in_bus <= bus->busn_res.end) 232 + list_for_each_entry(tmp_bus, &pci_root_buses, node) { 233 + if (in_bus >= tmp_bus->number && 234 + in_bus <= tmp_bus->busn_res.end) { 235 + bus = tmp_bus; 234 236 break; 235 - bus = NULL; 237 + } 236 238 } 237 239 if (bus == NULL || bus->dev.of_node == NULL) 238 240 return -ENODEV;
+1 -1
drivers/misc/genwqe/card_utils.c
··· 628 628 int rc; 629 629 struct pci_dev *pci_dev = cd->pci_dev; 630 630 631 - rc = pci_enable_msi_block(pci_dev, count); 631 + rc = pci_enable_msi_exact(pci_dev, count); 632 632 if (rc == 0) 633 633 cd->flags |= GENWQE_FLAG_MSI_ENABLED; 634 634 return rc;
-1
drivers/pci/bus.c
··· 13 13 #include <linux/errno.h> 14 14 #include <linux/ioport.h> 15 15 #include <linux/proc_fs.h> 16 - #include <linux/init.h> 17 16 #include <linux/slab.h> 18 17 19 18 #include "pci.h"
-1
drivers/pci/host-bridge.c
··· 3 3 */ 4 4 5 5 #include <linux/kernel.h> 6 - #include <linux/init.h> 7 6 #include <linux/pci.h> 8 7 #include <linux/module.h> 9 8
+1 -1
drivers/pci/hotplug-pci.c
··· 4 4 #include <linux/export.h> 5 5 #include "pci.h" 6 6 7 - int __ref pci_hp_add_bridge(struct pci_dev *dev) 7 + int pci_hp_add_bridge(struct pci_dev *dev) 8 8 { 9 9 struct pci_bus *parent = dev->bus; 10 10 int pass, busnr, start = parent->busn_res.start;
+1 -2
drivers/pci/hotplug/acpiphp_glue.c
··· 41 41 42 42 #define pr_fmt(fmt) "acpiphp_glue: " fmt 43 43 44 - #include <linux/init.h> 45 44 #include <linux/module.h> 46 45 47 46 #include <linux/kernel.h> ··· 500 501 * This function should be called per *physical slot*, 501 502 * not per each slot object in ACPI namespace. 502 503 */ 503 - static void __ref enable_slot(struct acpiphp_slot *slot) 504 + static void enable_slot(struct acpiphp_slot *slot) 504 505 { 505 506 struct pci_dev *dev; 506 507 struct pci_bus *bus = slot->bus;
+1 -1
drivers/pci/hotplug/cpci_hotplug_pci.c
··· 250 250 * Device configuration functions 251 251 */ 252 252 253 - int __ref cpci_configure_slot(struct slot *slot) 253 + int cpci_configure_slot(struct slot *slot) 254 254 { 255 255 struct pci_dev *dev; 256 256 struct pci_bus *parent;
-1
drivers/pci/hotplug/cpqphp_nvram.c
··· 34 34 #include <linux/workqueue.h> 35 35 #include <linux/pci.h> 36 36 #include <linux/pci_hotplug.h> 37 - #include <linux/init.h> 38 37 #include <asm/uaccess.h> 39 38 #include "cpqphp.h" 40 39 #include "cpqphp_nvram.h"
+1 -1
drivers/pci/hotplug/pciehp.h
··· 127 127 #define HP_SUPR_RM(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_HPS) 128 128 #define EMI(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_EIP) 129 129 #define NO_CMD_CMPL(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_NCCS) 130 - #define PSN(ctrl) ((ctrl)->slot_cap >> 19) 130 + #define PSN(ctrl) (((ctrl)->slot_cap & PCI_EXP_SLTCAP_PSN) >> 19) 131 131 132 132 int pciehp_sysfs_enable_slot(struct slot *slot); 133 133 int pciehp_sysfs_disable_slot(struct slot *slot);
+2
drivers/pci/hotplug/pciehp_hpc.c
··· 159 159 160 160 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status); 161 161 if (slot_status & PCI_EXP_SLTSTA_CC) { 162 + pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, 163 + PCI_EXP_SLTSTA_CC); 162 164 if (!ctrl->no_cmd_complete) { 163 165 /* 164 166 * After 1 sec and CMD_COMPLETED still not set, just
+1 -2
drivers/pci/hotplug/pcihp_slot.c
··· 160 160 (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI))) 161 161 return; 162 162 163 - if (dev->bus) 164 - pcie_bus_configure_settings(dev->bus); 163 + pcie_bus_configure_settings(dev->bus); 165 164 166 165 memset(&hpp, 0, sizeof(hpp)); 167 166 ret = pci_get_hp_params(dev, &hpp);
+9 -6
drivers/pci/hotplug/rpaphp_core.c
··· 223 223 type_tmp = (char *) &types[1]; 224 224 225 225 /* Iterate through parent properties, looking for my-drc-index */ 226 - for (i = 0; i < indexes[0]; i++) { 226 + for (i = 0; i < be32_to_cpu(indexes[0]); i++) { 227 227 if ((unsigned int) indexes[i + 1] == *my_index) { 228 228 if (drc_name) 229 229 *drc_name = name_tmp; 230 230 if (drc_type) 231 231 *drc_type = type_tmp; 232 232 if (drc_index) 233 - *drc_index = *my_index; 233 + *drc_index = be32_to_cpu(*my_index); 234 234 if (drc_power_domain) 235 - *drc_power_domain = domains[i+1]; 235 + *drc_power_domain = be32_to_cpu(domains[i+1]); 236 236 return 0; 237 237 } 238 238 name_tmp += (strlen(name_tmp) + 1); ··· 321 321 /* register PCI devices */ 322 322 name = (char *) &names[1]; 323 323 type = (char *) &types[1]; 324 - for (i = 0; i < indexes[0]; i++) { 324 + for (i = 0; i < be32_to_cpu(indexes[0]); i++) { 325 + int index; 325 326 326 - slot = alloc_slot_struct(dn, indexes[i + 1], name, power_domains[i + 1]); 327 + index = be32_to_cpu(indexes[i + 1]); 328 + slot = alloc_slot_struct(dn, index, name, 329 + be32_to_cpu(power_domains[i + 1])); 327 330 if (!slot) 328 331 return -ENOMEM; 329 332 330 333 slot->type = simple_strtoul(type, NULL, 10); 331 334 332 335 dbg("Found drc-index:0x%x drc-name:%s drc-type:%s\n", 333 - indexes[i + 1], name, type); 336 + index, name, type); 334 337 335 338 retval = rpaphp_enable_slot(slot); 336 339 if (!retval)
-1
drivers/pci/hotplug/s390_pci_hpc.c
··· 15 15 #include <linux/slab.h> 16 16 #include <linux/pci.h> 17 17 #include <linux/pci_hotplug.h> 18 - #include <linux/init.h> 19 18 #include <asm/pci_debug.h> 20 19 #include <asm/sclp.h> 21 20
+1 -1
drivers/pci/hotplug/shpchp_pci.c
··· 34 34 #include "../pci.h" 35 35 #include "shpchp.h" 36 36 37 - int __ref shpchp_configure_device(struct slot *p_slot) 37 + int shpchp_configure_device(struct slot *p_slot) 38 38 { 39 39 struct pci_dev *dev; 40 40 struct controller *ctrl = p_slot->ctrl;
+6 -11
drivers/pci/msi.c
··· 10 10 #include <linux/mm.h> 11 11 #include <linux/irq.h> 12 12 #include <linux/interrupt.h> 13 - #include <linux/init.h> 14 13 #include <linux/export.h> 15 14 #include <linux/ioport.h> 16 15 #include <linux/pci.h> ··· 543 544 if (!msi_attrs) 544 545 return -ENOMEM; 545 546 list_for_each_entry(entry, &pdev->msi_list, list) { 546 - char *name = kmalloc(20, GFP_KERNEL); 547 - if (!name) 548 - goto error_attrs; 549 - 550 547 msi_dev_attr = kzalloc(sizeof(*msi_dev_attr), GFP_KERNEL); 551 - if (!msi_dev_attr) { 552 - kfree(name); 548 + if (!msi_dev_attr) 553 549 goto error_attrs; 554 - } 550 + msi_attrs[count] = &msi_dev_attr->attr; 555 551 556 - sprintf(name, "%d", entry->irq); 557 552 sysfs_attr_init(&msi_dev_attr->attr); 558 - msi_dev_attr->attr.name = name; 553 + msi_dev_attr->attr.name = kasprintf(GFP_KERNEL, "%d", 554 + entry->irq); 555 + if (!msi_dev_attr->attr.name) 556 + goto error_attrs; 559 557 msi_dev_attr->attr.mode = S_IRUGO; 560 558 msi_dev_attr->show = msi_mode_show; 561 - msi_attrs[count] = &msi_dev_attr->attr; 562 559 ++count; 563 560 } 564 561
+22 -3
drivers/pci/pci-driver.c
··· 107 107 subdevice=PCI_ANY_ID, class=0, class_mask=0; 108 108 unsigned long driver_data=0; 109 109 int fields=0; 110 - int retval; 110 + int retval = 0; 111 111 112 112 fields = sscanf(buf, "%x %x %x %x %x %x %lx", 113 113 &vendor, &device, &subvendor, &subdevice, 114 114 &class, &class_mask, &driver_data); 115 115 if (fields < 2) 116 116 return -EINVAL; 117 + 118 + if (fields != 7) { 119 + struct pci_dev *pdev = kzalloc(sizeof(*pdev), GFP_KERNEL); 120 + if (!pdev) 121 + return -ENOMEM; 122 + 123 + pdev->vendor = vendor; 124 + pdev->device = device; 125 + pdev->subsystem_vendor = subvendor; 126 + pdev->subsystem_device = subdevice; 127 + pdev->class = class; 128 + 129 + if (pci_match_id(pdrv->id_table, pdev)) 130 + retval = -EEXIST; 131 + 132 + kfree(pdev); 133 + 134 + if (retval) 135 + return retval; 136 + } 117 137 118 138 /* Only accept driver_data values that match an existing id_table 119 139 entry */ ··· 1345 1325 return -ENODEV; 1346 1326 1347 1327 pdev = to_pci_dev(dev); 1348 - if (!pdev) 1349 - return -ENODEV; 1350 1328 1351 1329 if (add_uevent_var(env, "PCI_CLASS=%04X", pdev->class)) 1352 1330 return -ENOMEM; ··· 1365 1347 (u8)(pdev->class >> 16), (u8)(pdev->class >> 8), 1366 1348 (u8)(pdev->class))) 1367 1349 return -ENOMEM; 1350 + 1368 1351 return 0; 1369 1352 } 1370 1353
+1 -1
drivers/pci/pci.c
··· 4125 4125 u16 cmd; 4126 4126 int rc; 4127 4127 4128 - WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) & (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY))); 4128 + WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) && (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY))); 4129 4129 4130 4130 /* ARCH specific VGA enables */ 4131 4131 rc = pci_set_vga_state_arch(dev, decode, command_bits, flags);
+4 -4
drivers/pci/pci.h
··· 201 201 struct resource *res, unsigned int reg); 202 202 int pci_resource_bar(struct pci_dev *dev, int resno, enum pci_bar_type *type); 203 203 void pci_configure_ari(struct pci_dev *dev); 204 - void __ref __pci_bus_size_bridges(struct pci_bus *bus, 204 + void __pci_bus_size_bridges(struct pci_bus *bus, 205 205 struct list_head *realloc_head); 206 - void __ref __pci_bus_assign_resources(const struct pci_bus *bus, 207 - struct list_head *realloc_head, 208 - struct list_head *fail_head); 206 + void __pci_bus_assign_resources(const struct pci_bus *bus, 207 + struct list_head *realloc_head, 208 + struct list_head *fail_head); 209 209 210 210 /** 211 211 * pci_ari_enabled - query ARI forwarding status
+6 -3
drivers/pci/pcie/portdrv_core.c
··· 99 99 for (i = 0; i < nr_entries; i++) 100 100 msix_entries[i].entry = i; 101 101 102 - status = pci_enable_msix(dev, msix_entries, nr_entries); 102 + status = pci_enable_msix_exact(dev, msix_entries, nr_entries); 103 103 if (status) 104 104 goto Exit; 105 105 ··· 171 171 pci_disable_msix(dev); 172 172 173 173 /* Now allocate the MSI-X vectors for real */ 174 - status = pci_enable_msix(dev, msix_entries, nvec); 174 + status = pci_enable_msix_exact(dev, msix_entries, nvec); 175 175 if (status) 176 176 goto Exit; 177 177 } ··· 379 379 /* 380 380 * Initialize service irqs. Don't use service devices that 381 381 * require interrupts if there is no way to generate them. 382 + * However, some drivers may have a polling mode (e.g. pciehp_poll_mode) 383 + * that can be used in the absence of irqs. Allow them to determine 384 + * if that is to be used. 382 385 */ 383 386 status = init_service_irqs(dev, irqs, capabilities); 384 387 if (status) { 385 - capabilities &= PCIE_PORT_SERVICE_VC; 388 + capabilities &= PCIE_PORT_SERVICE_VC | PCIE_PORT_SERVICE_HP; 386 389 if (!capabilities) 387 390 goto error_disable; 388 391 }
+5 -5
drivers/pci/probe.c
··· 719 719 return child; 720 720 } 721 721 722 - struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr) 722 + struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr) 723 723 { 724 724 struct pci_bus *child; 725 725 ··· 1369 1369 WARN_ON(ret < 0); 1370 1370 } 1371 1371 1372 - struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn) 1372 + struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn) 1373 1373 { 1374 1374 struct pci_dev *dev; 1375 1375 ··· 1617 1617 */ 1618 1618 void pcie_bus_configure_settings(struct pci_bus *bus) 1619 1619 { 1620 - u8 smpss; 1620 + u8 smpss = 0; 1621 1621 1622 1622 if (!bus->self) 1623 1623 return; ··· 1958 1958 * 1959 1959 * Returns the max number of subordinate bus discovered. 1960 1960 */ 1961 - unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge) 1961 + unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge) 1962 1962 { 1963 1963 unsigned int max; 1964 1964 struct pci_bus *bus = bridge->subordinate; ··· 1981 1981 * 1982 1982 * Returns the max number of subordinate bus discovered. 1983 1983 */ 1984 - unsigned int __ref pci_rescan_bus(struct pci_bus *bus) 1984 + unsigned int pci_rescan_bus(struct pci_bus *bus) 1985 1985 { 1986 1986 unsigned int max; 1987 1987
+3
drivers/pci/quirks.c
··· 2954 2954 } 2955 2955 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq); 2956 2956 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); 2957 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); 2957 2958 2958 2959 /* 2959 2960 * PCI devices which are on Intel chips can skip the 10ms delay ··· 3454 3453 /* Wildcat PCH */ 3455 3454 0x9c90, 0x9c91, 0x9c92, 0x9c93, 0x9c94, 0x9c95, 0x9c96, 0x9c97, 3456 3455 0x9c98, 0x9c99, 0x9c9a, 0x9c9b, 3456 + /* Patsburg (X79) PCH */ 3457 + 0x1d10, 0x1d12, 0x1d14, 0x1d16, 0x1d18, 0x1d1a, 0x1d1c, 0x1d1e, 3457 3458 }; 3458 3459 3459 3460 static bool pci_quirk_intel_pch_acs_match(struct pci_dev *dev)
-1
drivers/pci/search.c
··· 7 7 * Copyright (C) 2003 -- 2004 Greg Kroah-Hartman <greg@kroah.com> 8 8 */ 9 9 10 - #include <linux/init.h> 11 10 #include <linux/pci.h> 12 11 #include <linux/slab.h> 13 12 #include <linux/module.h>
+12 -13
drivers/pci/setup-bus.c
··· 1113 1113 ; 1114 1114 } 1115 1115 1116 - void __ref __pci_bus_size_bridges(struct pci_bus *bus, 1117 - struct list_head *realloc_head) 1116 + void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) 1118 1117 { 1119 1118 struct pci_dev *dev; 1120 1119 unsigned long mask, prefmask; ··· 1177 1178 } 1178 1179 } 1179 1180 1180 - void __ref pci_bus_size_bridges(struct pci_bus *bus) 1181 + void pci_bus_size_bridges(struct pci_bus *bus) 1181 1182 { 1182 1183 __pci_bus_size_bridges(bus, NULL); 1183 1184 } 1184 1185 EXPORT_SYMBOL(pci_bus_size_bridges); 1185 1186 1186 - void __ref __pci_bus_assign_resources(const struct pci_bus *bus, 1187 - struct list_head *realloc_head, 1188 - struct list_head *fail_head) 1187 + void __pci_bus_assign_resources(const struct pci_bus *bus, 1188 + struct list_head *realloc_head, 1189 + struct list_head *fail_head) 1189 1190 { 1190 1191 struct pci_bus *b; 1191 1192 struct pci_dev *dev; ··· 1217 1218 } 1218 1219 } 1219 1220 1220 - void __ref pci_bus_assign_resources(const struct pci_bus *bus) 1221 + void pci_bus_assign_resources(const struct pci_bus *bus) 1221 1222 { 1222 1223 __pci_bus_assign_resources(bus, NULL, NULL); 1223 1224 } 1224 1225 EXPORT_SYMBOL(pci_bus_assign_resources); 1225 1226 1226 - static void __ref __pci_bridge_assign_resources(const struct pci_dev *bridge, 1227 - struct list_head *add_head, 1228 - struct list_head *fail_head) 1227 + static void __pci_bridge_assign_resources(const struct pci_dev *bridge, 1228 + struct list_head *add_head, 1229 + struct list_head *fail_head) 1229 1230 { 1230 1231 struct pci_bus *b; 1231 1232 ··· 1303 1304 * try to release pci bridge resources that is from leaf bridge, 1304 1305 * so we can allocate big new one later 1305 1306 */ 1306 - static void __ref pci_bus_release_bridge_resources(struct pci_bus *bus, 1307 - unsigned long type, 1308 - enum release_type rel_type) 1307 + static void pci_bus_release_bridge_resources(struct pci_bus *bus, 1308 + unsigned long type, 1309 + enum release_type rel_type) 1309 1310 { 1310 1311 struct pci_dev *dev; 1311 1312 bool is_leaf_bridge = true;
-1
drivers/pci/setup-irq.c
··· 10 10 */ 11 11 12 12 13 - #include <linux/init.h> 14 13 #include <linux/kernel.h> 15 14 #include <linux/pci.h> 16 15 #include <linux/errno.h>
-1
drivers/pci/setup-res.c
··· 16 16 * Resource sorting 17 17 */ 18 18 19 - #include <linux/init.h> 20 19 #include <linux/kernel.h> 21 20 #include <linux/export.h> 22 21 #include <linux/pci.h>
+5 -5
include/linux/pci.h
··· 680 680 681 681 /** 682 682 * PCI_VDEVICE - macro used to describe a specific pci device in short form 683 - * @vendor: the vendor name 684 - * @device: the 16 bit PCI Device ID 683 + * @vend: the vendor name 684 + * @dev: the 16 bit PCI Device ID 685 685 * 686 686 * This macro is used to create a struct pci_device_id that matches a 687 687 * specific PCI device. The subvendor, and subdevice fields will be set ··· 689 689 * private data. 690 690 */ 691 691 692 - #define PCI_VDEVICE(vendor, device) \ 693 - PCI_VENDOR_ID_##vendor, (device), \ 694 - PCI_ANY_ID, PCI_ANY_ID, 0, 0 692 + #define PCI_VDEVICE(vend, dev) \ 693 + .vendor = PCI_VENDOR_ID_##vend, .device = (dev), \ 694 + .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0 695 695 696 696 /* these external functions are only available when PCI support is enabled */ 697 697 #ifdef CONFIG_PCI
-3
include/linux/pci_ids.h
··· 1631 1631 #define PCI_DEVICE_ID_ATT_VENUS_MODEM 0x480 1632 1632 1633 1633 #define PCI_VENDOR_ID_SPECIALIX 0x11cb 1634 - #define PCI_DEVICE_ID_SPECIALIX_IO8 0x2000 1635 - #define PCI_DEVICE_ID_SPECIALIX_RIO 0x8000 1636 1634 #define PCI_SUBDEVICE_ID_SPECIALIX_SPEED4 0xa004 1637 1635 1638 1636 #define PCI_VENDOR_ID_ANALOG_DEVICES 0x11d4 ··· 2872 2874 #define PCI_DEVICE_ID_SCALEMP_VSMP_CTL 0x1010 2873 2875 2874 2876 #define PCI_VENDOR_ID_COMPUTONE 0x8e0e 2875 - #define PCI_DEVICE_ID_COMPUTONE_IP2EX 0x0291 2876 2877 #define PCI_DEVICE_ID_COMPUTONE_PG 0x0302 2877 2878 #define PCI_SUBVENDOR_ID_COMPUTONE 0x8e0e 2878 2879 #define PCI_SUBDEVICE_ID_COMPUTONE_PG4 0x0001