[PATCH] PnP Fixes for 2.6.0-test5

From: Adam Belay
Date: Sun Sep 21 2003 - 19:18:41 EST


# --------------------------------------------
# 03/09/21 ambx1@xxxxxxxxxx 1.1354
# [PNPBIOS] compilation fix for pnpbios without proc support
#
# Here's an updated patch that will correct the compile error when PROC
# FS is disabled. It also introduces better proc error recovery and
# moves the local proc functions to the local include file. Thanks to
# Daniele Bellucci for finding the problem and contributing to this
# patch.
#
# --------------------------------------------
#
diff -Nru a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c
--- a/drivers/pnp/pnpbios/core.c Sun Sep 21 19:46:16 2003
+++ b/drivers/pnp/pnpbios/core.c Sun Sep 21 19:46:16 2003
@@ -431,14 +431,15 @@
}

/* register with the pnp layer */
- pnp_register_protocol(&pnpbios_protocol);
+ if (pnp_register_protocol(&pnpbios_protocol)) {
+ printk(KERN_ERR "PnPBIOS: Unable to register driver. Aborting.\n");
+ return -EIO;
+ }

-#ifdef CONFIG_PROC_FS
/* start the proc interface */
ret = pnpbios_proc_init();
if (ret)
- return ret;
-#endif
+ printk(KERN_ERR "PnPBIOS: Failed to create proc interface.\n");

/* scan for pnpbios devices */
build_devlist();
diff -Nru a/drivers/pnp/pnpbios/pnpbios.h b/drivers/pnp/pnpbios/pnpbios.h
--- a/drivers/pnp/pnpbios/pnpbios.h Sun Sep 21 19:46:16 2003
+++ b/drivers/pnp/pnpbios/pnpbios.h Sun Sep 21 19:46:16 2003
@@ -9,3 +9,13 @@

extern void pnpbios_print_status(const char * module, u16 status);
extern int pnpbios_probe_installation(void);
+
+#ifdef CONFIG_PROC_FS
+extern int pnpbios_interface_attach_device(struct pnp_bios_node * node);
+extern int pnpbios_proc_init (void);
+extern void pnpbios_proc_exit (void);
+#else
+static inline int pnpbios_interface_attach_device(struct pnp_bios_node * node) { return 0; }
+static inline int pnpbios_proc_init (void) { return 0; }
+static inline void pnpbios_proc_exit (void) { ; }
+#endif /* CONFIG_PROC */
diff -Nru a/drivers/pnp/pnpbios/proc.c b/drivers/pnp/pnpbios/proc.c
--- a/drivers/pnp/pnpbios/proc.c Sun Sep 21 19:46:16 2003
+++ b/drivers/pnp/pnpbios/proc.c Sun Sep 21 19:46:16 2003
@@ -31,6 +31,8 @@

#include <asm/uaccess.h>

+#include "pnpbios.h"
+
static struct proc_dir_entry *proc_pnp = NULL;
static struct proc_dir_entry *proc_pnp_boot = NULL;

@@ -213,6 +215,9 @@
struct proc_dir_entry *ent;

sprintf(name, "%02x", node->handle);
+
+ if (!proc_pnp)
+ return -EIO;
if ( !pnpbios_dont_use_current_config ) {
ent = create_proc_entry(name, 0, proc_pnp);
if (ent) {
@@ -221,6 +226,9 @@
ent->data = (void *)(long)(node->handle);
}
}
+
+ if (!proc_pnp_boot)
+ return -EIO;
ent = create_proc_entry(name, 0, proc_pnp_boot);
if (ent) {
ent->read_proc = proc_read_node;
@@ -228,6 +236,7 @@
ent->data = (void *)(long)(node->handle+0x100);
return 0;
}
+
return -EIO;
}

@@ -257,8 +266,9 @@
{
int i;
char name[3];
-
- if (!proc_pnp) return;
+
+ if (!proc_pnp)
+ return;

for (i=0; i<0xff; i++) {
sprintf(name, "%02x", i);
diff -Nru a/include/linux/pnpbios.h b/include/linux/pnpbios.h
--- a/include/linux/pnpbios.h Sun Sep 21 19:46:16 2003
+++ b/include/linux/pnpbios.h Sun Sep 21 19:46:16 2003
@@ -26,7 +26,7 @@
#ifdef __KERNEL__

#include <linux/types.h>
-#include <linux/pci.h>
+#include <linux/pnp.h>

/*
* Return codes
@@ -135,9 +135,6 @@
extern struct pnp_dev_node_info node_info;
extern void *pnpbios_kmalloc(size_t size, int f);
extern int pnpbios_init (void);
-extern int pnpbios_interface_attach_device(struct pnp_bios_node * node);
-extern int pnpbios_proc_init (void);
-extern void pnpbios_proc_exit (void);

extern int pnp_bios_dev_node_info (struct pnp_dev_node_info *data);
extern int pnp_bios_get_dev_node (u8 *nodenum, char config, struct pnp_bios_node *data);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/