Skip to contentSkip to conversation

More PCI Hotplug changes for 2.4.20-pre7

PATCH In review Greg KH 1 participant 8 messages Sep 20, 2002 PCI

lore
Share & tools
lore

Greg KH

author
#0 lore raw

PATCH 1/1 More PCI Hotplug changes for 2.4.20-pre7

Hi,

Here are some more PCI Hotplug updates.

Please pull from: bk://linuxusb.bkbits.net/pci_hp-2.4

Patches will follow.

thanks,

greg k-h

 drivers/hotplug/cpqphp.h           |    9 -
 drivers/hotplug/cpqphp_core.c      |   84 +++++++---
 drivers/hotplug/cpqphp_ctrl.c      |    4 
 drivers/hotplug/ibmphp_core.c      |   32 ++--
 drivers/hotplug/pci_hotplug.h      |   28 +++
 drivers/hotplug/pci_hotplug_core.c |  292 +++++++++++++++++++++++++++++++------
 drivers/pci/pci.c                  |    1 
 drivers/pci/proc.c                 |    2 
 include/linux/pci.h                |    1 
 kernel/ksyms.c                     |    2 
 10 files changed, 364 insertions(+), 91 deletions(-)

-----

[email protected], 2002-09-19 16:37:21-07:00, [email protected]
PCI Hotplug: created /proc/bus/pci/slots for pcihpfs to be mounted on.

proc_bus_pci_dir had to be exported for this to work properly.

 drivers/hotplug/pci_hotplug_core.c |   19 ++++++++++++++++++-
 drivers/pci/pci.c                  |    1 +
 drivers/pci/proc.c                 |    2 +-
 include/linux/pci.h                |    1 +
 4 files changed, 21 insertions(+), 2 deletions(-)

------

[email protected], 2002-09-19 15:47:45-07:00, [email protected]
PCI Hotplug Core: Add allocation sanity checks. Patch from Silvio Cesare

 drivers/hotplug/pci_hotplug_core.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

------

[email protected], 2002-09-18 17:55:45-07:00, [email protected]
add export for __inode_dir_notify so dnotify can be used from filesystems in a modules.

 kernel/ksyms.c |    2 ++
 1 files changed, 2 insertions(+)

------

[email protected], 2002-09-18 17:05:59-07:00, [email protected]
PCI Hotplug: added speed status to the Compaq driver.

 drivers/hotplug/cpqphp.h      |    9 +---
 drivers/hotplug/cpqphp_core.c |   84 +++++++++++++++++++++++++++++++-----------
 drivers/hotplug/cpqphp_ctrl.c |    4 +-
 3 files changed, 68 insertions(+), 29 deletions(-)

------

[email protected], 2002-09-18 17:05:06-07:00, [email protected]
PCI Hotplug: added speed status to the IBM driver.

 drivers/hotplug/ibmphp_core.c |   32 +++++++++++++++++---------------
 1 files changed, 17 insertions(+), 15 deletions(-)

------

[email protected], 2002-09-18 17:04:18-07:00, [email protected]
PCI Hotplug: added max bus speed and current bus speed files to the pci hotplug core.

Patch based on work done by Irene Zubarev <[email protected]>

 drivers/hotplug/pci_hotplug.h      |   28 ++++
 drivers/hotplug/pci_hotplug_core.c |  249 +++++++++++++++++++++++++++++++------
 2 files changed, 242 insertions(+), 35 deletions(-)

------

[email protected], 2002-09-18 15:53:50-07:00, [email protected]
[PATCH] Small pcihpfs dnotify fix

I've been working on a userspace daemon to go with my CompactPCI driver, and yesterday I discovered an oversight in pci_hp_change_slot_info - it doesn't call dnotify_parent, so dnotify based clients basically don't work against pcihpfs. The following patch (against 2.5 BK) reworks things to just update the mtime (since we're modifying the file after all), and then call dnotify_parent.

 drivers/hotplug/pci_hotplug_core.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

------

author
#1 lore raw

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.683 -> 1.684
# drivers/hotplug/pci_hotplug_core.c 1.5 -> 1.6
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/18 [email protected] 1.684
# [PATCH] Small pcihpfs dnotify fix
#
# I've been working on a userspace daemon to go with my CompactPCI driver,

# and yesterday I discovered an oversight in pci_hp_change_slot_info - it
# doesn't call dnotify_parent, so dnotify based clients basically don't
# work against pcihpfs.  The following patch (against 2.5 BK) reworks
# things to just update the mtime (since we're modifying the file after
# all), and then call dnotify_parent.
# --------------------------------------------
#
diff -Nru a/drivers/hotplug/pci_hotplug_core.c b/drivers/hotplug/pci_hotplug_core.c
--- a/drivers/hotplug/pci_hotplug_core.c	Thu Sep 19 17:19:10 2002
+++ b/drivers/hotplug/pci_hotplug_core.c	Thu Sep 19 17:19:10 2002
@@ -37,6 +37,7 @@
 #include <linux/smp_lock.h>
 #include <linux/init.h>
 #include <linux/pci.h>
+#include <linux/dnotify.h>
 #include <asm/uaccess.h>
 #include "pci_hotplug.h"

@@ -1006,10 +1007,13 @@
return 0;
}

-static inline void update_inode_time (struct inode *inode) +static inline void update_dentry_inode_time (struct dentry *dentry)
{
- if (inode)
- inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+ struct inode *inode = dentry->d_inode;
+ if (inode) {
+ inode->i_mtime = CURRENT_TIME;
+ dnotify_parent(dentry, DN_MODIFY);
+ }
}

/**
@@ -1044,16 +1048,16 @@
core = temp->core_priv;
if ((core->power_dentry) &&
(temp->info->power_status != info->power_status))
- update_inode_time (core->power_dentry->d_inode);
+ update_dentry_inode_time (core->power_dentry);
if ((core->attention_dentry) &&
(temp->info->attention_status != info->attention_status))
- update_inode_time (core->attention_dentry->d_inode);
+ update_dentry_inode_time (core->attention_dentry);
if ((core->latch_dentry) &&
(temp->info->latch_status != info->latch_status))
- update_inode_time (core->latch_dentry->d_inode);
+ update_dentry_inode_time (core->latch_dentry);
if ((core->adapter_dentry) &&
(temp->info->adapter_status != info->adapter_status))
- update_inode_time (core->adapter_dentry->d_inode);
+ update_dentry_inode_time (core->adapter_dentry);

memcpy (temp->info, info, sizeof (struct hotplug_slot_info)); spin_unlock (&list_lock);

author
#2 lore raw

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.684 -> 1.685
# drivers/hotplug/pci_hotplug_core.c 1.6 -> 1.7
# drivers/hotplug/pci_hotplug.h 1.1 -> 1.2
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/18 [email protected] 1.685
# PCI Hotplug: added max bus speed and current bus speed files to the pci hotplug core. #
# Patch based on work done by Irene Zubarev <[email protected]>
# --------------------------------------------
#

drivers/hotplug/pci_hotplug.h +27 -1
diff -Nru a/drivers/hotplug/pci_hotplug.h b/drivers/hotplug/pci_hotplug.h
@@ -29,6 +29,22 @@
 #define _PCI_HOTPLUG_H
 
 
+/* These values come from the PCI Hotplug Spec */
+enum pci_bus_speed {
+	PCI_SPEED_33MHz			= 0x00,
+	PCI_SPEED_66MHz			= 0x01,
+	PCI_SPEED_66MHz_PCIX		= 0x02,
+	PCI_SPEED_100MHz_PCIX		= 0x03,
+	PCI_SPEED_133MHz_PCIX		= 0x04,
+	PCI_SPEED_66MHz_PCIX_266	= 0x09,
+	PCI_SPEED_100MHz_PCIX_266	= 0x0a,
+	PCI_SPEED_133MHz_PCIX_266	= 0x0b,
+	PCI_SPEED_66MHz_PCIX_533	= 0x11,
+	PCI_SPEED_100MHz_PCIX_533	= 0X12,
+	PCI_SPEED_133MHz_PCIX_533	= 0x13,
+	PCI_SPEED_UNKNOWN		= 0xff,
+};
+
 struct hotplug_slot;
 struct hotplug_slot_core;
 
@@ -50,7 +66,13 @@
  * @get_latch_status: Called to get the current latch status of a slot.
  *	If this field is NULL, the value passed in the struct hotplug_slot_info
  *	will be used when this value is requested by a user.
- * @get_adapter_present: Called to get see if an adapter is present in the slot or not.
+ * @get_adapter_status: Called to get see if an adapter is present in the slot or not.
+ *	If this field is NULL, the value passed in the struct hotplug_slot_info
+ *	will be used when this value is requested by a user.
+ * @get_max_bus_speed: Called to get the max bus speed for a slot.
+ *	If this field is NULL, the value passed in the struct hotplug_slot_info
+ *	will be used when this value is requested by a user.
+ * @get_cur_bus_speed: Called to get the current bus speed for a slot.
  *	If this field is NULL, the value passed in the struct hotplug_slot_info
  *	will be used when this value is requested by a user.
  *
@@ -69,6 +91,8 @@
 	int (*get_attention_status)	(struct hotplug_slot *slot, u8 *value);
 	int (*get_latch_status)		(struct hotplug_slot *slot, u8 *value);
 	int (*get_adapter_status)	(struct hotplug_slot *slot, u8 *value);
+	int (*get_max_bus_speed)	(struct hotplug_slot *slot, enum pci_bus_speed *value);
+	int (*get_cur_bus_speed)	(struct hotplug_slot *slot, enum pci_bus_speed *value);
 };
 
 /**
@@ -85,6 +109,8 @@
 	u8	attention_status;
 	u8	latch_status;
 	u8	adapter_status;
+	enum pci_bus_speed	max_bus_speed;
+	enum pci_bus_speed	cur_bus_speed;
 };
 
 /**
drivers/hotplug/pci_hotplug_core.c +215 -34

320 lines not on this page · raw message

author
#3 lore raw

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.685 -> 1.686
# drivers/hotplug/ibmphp_core.c 1.6 -> 1.7
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/18 [email protected] 1.686
# PCI Hotplug: added speed status to the IBM driver.
# --------------------------------------------
#

drivers/hotplug/ibmphp_core.c +17 -15
diff -Nru a/drivers/hotplug/ibmphp_core.c b/drivers/hotplug/ibmphp_core.c
@@ -384,14 +384,15 @@
 	debug ("get_adapter_present - Exit rc[%d] hpcrc[%x] value[%x]\n", rc, hpcrc, *value);
 	return rc;
 }
-/*
-static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, u8 * value)
+
+static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value)
 {
 	int rc = -ENODEV;
 	struct slot *pslot;
 	u8 mode = 0;
 
-	debug ("get_max_bus_speed - Entry hotplug_slot[%lx] pvalue[%lx]\n", (ulong)hotplug_slot, (ulong) value);
+	debug ("%s - Entry hotplug_slot[%p] pvalue[%p]\n", __FUNCTION__,
+		hotplug_slot, value);
 
 	ibmphp_lock_operations ();
 
@@ -413,25 +414,26 @@
 				*value = pslot->supported_speed + 0x01;
 				break;
 			default:
-*/				/* Note (will need to change): there would be soon 256, 512 also */
-/*				rc = -ENODEV;
+				/* Note (will need to change): there would be soon 256, 512 also */
+				rc = -ENODEV;
 			}
 		}
 	} else
 		rc = -ENODEV;
 
 	ibmphp_unlock_operations ();
-	debug ("get_max_bus_speed - Exit rc[%d] value[%x]\n", rc, *value);
+	debug ("%s - Exit rc[%d] value[%x]\n", __FUNCTION__, rc, *value);
 	return rc;
 }
 
-static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, u8 * value)
+static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value)
 {
 	int rc = -ENODEV;
 	struct slot *pslot;
 	u8 mode = 0;
 
-	debug ("get_cur_bus_speed - Entry hotplug_slot[%lx] pvalue[%lx]\n", (ulong)hotplug_slot, (ulong) value);
+	debug ("%s - Entry hotplug_slot[%p] pvalue[%p]\n", __FUNCTION__,
+		hotplug_slot, value);
 
 	ibmphp_lock_operations ();
 
@@ -458,8 +460,8 @@
 					*value += 0x01;
 					break;
 				default:
-*/					/* Note of change: there would also be 256, 512 soon */
-/*					rc = -ENODEV;
+					/* Note of change: there would also be 256, 512 soon */
+					rc = -ENODEV;
 				}
 			}
 		}
@@ -467,10 +469,10 @@
 		rc = -ENODEV;
 
 	ibmphp_unlock_operations ();
-	debug ("get_cur_bus_speed - Exit rc[%d] value[%x]\n", rc, *value);
+	debug ("%s - Exit rc[%d] value[%x]\n", __FUNCTION__, rc, *value);
 	return rc;
 }
-
+/*
 static int get_max_adapter_speed_1 (struct hotplug_slot *hotplug_slot, u8 * value, u8 flag)
 {
 	int rc = -ENODEV;
@@ -1579,9 +1581,9 @@
 	.get_attention_status =		get_attention_status,
 	.get_latch_status =		get_latch_status,
 	.get_adapter_status =		get_adapter_present,
-/*	.get_max_bus_speed_status =	get_max_bus_speed,
-	.get_max_adapter_speed_status =	get_max_adapter_speed,
-	.get_cur_bus_speed_status =	get_cur_bus_speed,
+	.get_max_bus_speed =		get_max_bus_speed,
+	.get_cur_bus_speed =		get_cur_bus_speed,
+/*	.get_max_adapter_speed =	get_max_adapter_speed,
 	.get_bus_name_status =		get_bus_name,
 */
 };
author
#4 lore raw

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.686 -> 1.687
# drivers/hotplug/cpqphp_core.c 1.2 -> 1.3
# drivers/hotplug/cpqphp.h 1.1 -> 1.2
# drivers/hotplug/cpqphp_ctrl.c 1.2 -> 1.3
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/18 [email protected] 1.687
# PCI Hotplug: added speed status to the Compaq driver.
# --------------------------------------------
#

drivers/hotplug/cpqphp.h +3 -6
diff -Nru a/drivers/hotplug/cpqphp.h b/drivers/hotplug/cpqphp.h
@@ -307,8 +307,8 @@
 	u8 first_slot;
 	u8 add_support;
 	u8 push_flag;
-	u8 speed;			/* 0 = 33MHz, 1 = 66MHz */
-	u8 speed_capability;		/* 0 = 33MHz, 1 = 66MHz */
+	enum pci_bus_speed speed;
+	enum pci_bus_speed speed_capability;
 	u8 push_button;			/* 0 = no pushbutton, 1 = pushbutton present */
 	u8 slot_switch_type;		/* 0 = no switch, 1 = switch present */
 	u8 defeature_PHP;		/* 0 = PHP not supported, 1 = PHP supported */
@@ -323,9 +323,6 @@
 	wait_queue_head_t queue;	/* sleep & wake process */
 };
 
-#define CTRL_SPEED_33MHz	0
-#define CTRL_SPEED_66MHz	1
-
 struct irq_mapping {
 	u8 barber_pole;
 	u8 valid_INT;
@@ -637,7 +634,7 @@
 	u16 misc;
 	
 	misc = readw(ctrl->hpc_reg + MISC);
-	return (misc & 0x0800) ? 1 : 0;
+	return (misc & 0x0800) ? PCI_SPEED_66MHz : PCI_SPEED_33MHz;
 }
 
 
drivers/hotplug/cpqphp_core.c +63 -21

144 lines not on this page · raw message

drivers/hotplug/cpqphp_ctrl.c +2 -2
diff -Nru a/drivers/hotplug/cpqphp_ctrl.c b/drivers/hotplug/cpqphp_ctrl.c
@@ -1186,7 +1186,7 @@
 		//*********************************
 		rc = CARD_FUNCTIONING;
 	} else {
-		if (ctrl->speed == 1) {
+		if (ctrl->speed == PCI_SPEED_66MHz) {
 			// Wait for exclusive access to hardware
 			down(&ctrl->crit_sect);
 
@@ -1384,7 +1384,7 @@
 	dbg(__FUNCTION__": func->device, slot_offset, hp_slot = %d, %d ,%d\n",
 	    func->device, ctrl->slot_device_offset, hp_slot);
 
-	if (ctrl->speed == 1) {
+	if (ctrl->speed == PCI_SPEED_66MHz) {
 		// Wait for exclusive access to hardware
 		down(&ctrl->crit_sect);
 
author
#5 lore raw

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.687 -> 1.688
# kernel/ksyms.c 1.63 -> 1.64
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/18 [email protected] 1.688

# add export for __inode_dir_notify so dnotify can be used from filesystems in a modules.
# --------------------------------------------
#
diff -Nru a/kernel/ksyms.c b/kernel/ksyms.c
--- a/kernel/ksyms.c	Thu Sep 19 17:18:57 2002
+++ b/kernel/ksyms.c	Thu Sep 19 17:18:57 2002
@@ -47,6 +47,7 @@
 #include <linux/in6.h>
 #include <linux/completion.h>
 #include <linux/seq_file.h>
+#include <linux/dnotify.h>
 #include <asm/checksum.h>

#if defined(CONFIG_PROC_FS)
@@ -531,6 +532,7 @@
EXPORT_SYMBOL(is_bad_inode);
EXPORT_SYMBOL(event);
EXPORT_SYMBOL(brw_page);
+EXPORT_SYMBOL(__inode_dir_notify);

#ifdef CONFIG_UID16
EXPORT_SYMBOL(overflowuid);

author
#6 lore raw

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.688 -> 1.689
# drivers/hotplug/pci_hotplug_core.c 1.7 -> 1.8
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/19 [email protected] 1.689
# PCI Hotplug Core: Add allocation sanity checks. Patch from Silvio Cesare # --------------------------------------------
#

drivers/hotplug/pci_hotplug_core.c +3 -3
diff -Nru a/drivers/hotplug/pci_hotplug_core.c b/drivers/hotplug/pci_hotplug_core.c
@@ -615,7 +615,7 @@
 
 	if (*offset < 0)
 		return -EINVAL;
-	if (count <= 0)
+	if (count == 0 || count > 16384)
 		return 0;
 	if (*offset != 0)
 		return 0;
@@ -726,7 +726,7 @@
 
 	if (*offset < 0)
 		return -EINVAL;
-	if (count <= 0)
+	if (count == 0 || count > 16384)
 		return 0;
 	if (*offset != 0)
 		return 0;
@@ -964,7 +964,7 @@
 
 	if (*offset < 0)
 		return -EINVAL;
-	if (count <= 0)
+	if (count == 0 || count > 16384)
 		return 0;
 	if (*offset != 0)
 		return 0;
author
#7 lore raw

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.689 -> 1.690
# drivers/hotplug/pci_hotplug_core.c 1.8 -> 1.9

#	   drivers/pci/pci.c	1.35    -> 1.36   
#	 include/linux/pci.h	1.27    -> 1.28   
#	  drivers/pci/proc.c	1.6     -> 1.7    

#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/19 [email protected] 1.690
# PCI Hotplug: created /proc/bus/pci/slots for pcihpfs to be mounted on. #

# proc_bus_pci_dir had to be exported for this to work properly.
# --------------------------------------------
#
diff -Nru a/drivers/hotplug/pci_hotplug_core.c b/drivers/hotplug/pci_hotplug_core.c
--- a/drivers/hotplug/pci_hotplug_core.c	Thu Sep 19 17:18:53 2002
+++ b/drivers/hotplug/pci_hotplug_core.c	Thu Sep 19 17:18:53 2002
@@ -38,6 +38,7 @@
 #include <linux/init.h>
 #include <linux/pci.h>
 #include <linux/dnotify.h>
+#include <linux/proc_fs.h>
 #include <asm/uaccess.h>
 #include "pci_hotplug.h"

@@ -57,7 +58,7 @@
/* local variables */
static int debug;

-#define DRIVER_VERSION "0.4"
+#define DRIVER_VERSION "0.5"
#define DRIVER_AUTHOR "Greg Kroah-Hartman <[email protected]>"
#define DRIVER_DESC "PCI Hot Plug PCI Core"

@@ -126,6 +127,12 @@
return NULL;
}

+#ifdef CONFIG_PROC_FS
+extern struct proc_dir_entry *proc_bus_pci_dir;
+static struct proc_dir_entry *slotdir = NULL;
+static const char *slotdir_name = "slots";
+#endif
+
static struct inode *pcihpfs_get_inode (struct super_block *sb, int mode, int dev) {
struct inode *inode = new_inode(sb);
@@ -1259,6 +1266,11 @@
goto exit;
}

+#ifdef CONFIG_PROC_FS
+ /* create mount point for pcihpfs */
+ slotdir = proc_mkdir(slotdir_name, proc_bus_pci_dir);
+#endif
+
info (DRIVER_DESC " version: " DRIVER_VERSION "\n");

exit:
@@ -1268,6 +1280,11 @@
static void __exit pci_hotplug_exit (void)
{
unregister_filesystem(&pcihpfs_fs_type);
+
+#ifdef CONFIG_PROC_FS
+ if (slotdir)
+ remove_proc_entry(slotdir_name, proc_bus_pci_dir);
+#endif
}

module_init(pci_hotplug_init);

drivers/pci/pci.c +1 -0
diff -Nru a/drivers/pci/pci.c b/drivers/pci/pci.c
@@ -2158,6 +2158,7 @@
 EXPORT_SYMBOL(pci_proc_detach_device);
 EXPORT_SYMBOL(pci_proc_attach_bus);
 EXPORT_SYMBOL(pci_proc_detach_bus);
+EXPORT_SYMBOL(proc_bus_pci_dir);
 #endif
 #endif
 
drivers/pci/proc.c +1 -1
diff -Nru a/drivers/pci/proc.c b/drivers/pci/proc.c
@@ -369,7 +369,7 @@
 	show:	show_device
 };
 
-static struct proc_dir_entry *proc_bus_pci_dir;
+struct proc_dir_entry *proc_bus_pci_dir;
 
 int pci_proc_attach_device(struct pci_dev *dev)
 {
include/linux/pci.h +1 -0
diff -Nru a/include/linux/pci.h b/include/linux/pci.h
@@ -439,6 +439,7 @@
 extern struct list_head pci_root_buses;	/* list of all known PCI buses */
 extern struct list_head pci_devices;	/* list of all devices */
 
+extern struct proc_dir_entry *proc_bus_pci_dir;
 /*
  * Error values that may be returned by PCI functions.
  */