diff options
Diffstat (limited to 'drivers/pci/hotplug/pci_hotplug_core.c')
| -rw-r--r-- | drivers/pci/hotplug/pci_hotplug_core.c | 131 | 
1 files changed, 57 insertions, 74 deletions
diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c index 6d2eea93298..56d8486dc16 100644 --- a/drivers/pci/hotplug/pci_hotplug_core.c +++ b/drivers/pci/hotplug/pci_hotplug_core.c @@ -41,6 +41,7 @@  #include <linux/pci_hotplug.h>  #include <asm/uaccess.h>  #include "../pci.h" +#include "cpci_hotplug.h"  #define MY_NAME	"pci_hotplug" @@ -51,29 +52,19 @@  /* local variables */ -static int debug; +static bool debug;  #define DRIVER_VERSION	"0.5"  #define DRIVER_AUTHOR	"Greg Kroah-Hartman <greg@kroah.com>, Scott Murray <scottm@somanetworks.com>"  #define DRIVER_DESC	"PCI Hot Plug PCI Core" -////////////////////////////////////////////////////////////////// -  static LIST_HEAD(pci_hotplug_slot_list);  static DEFINE_MUTEX(pci_hp_mutex); -#ifdef CONFIG_HOTPLUG_PCI_CPCI -extern int cpci_hotplug_init(int debug); -extern void cpci_hotplug_exit(void); -#else -static inline int cpci_hotplug_init(int debug) { return 0; } -static inline void cpci_hotplug_exit(void) { } -#endif -  /* Weee, fun with macros... */ -#define GET_STATUS(name,type)	\ -static int get_##name (struct hotplug_slot *slot, type *value)		\ +#define GET_STATUS(name, type)	\ +static int get_##name(struct hotplug_slot *slot, type *value)		\  {									\  	struct hotplug_slot_ops *ops = slot->ops;			\  	int retval = 0;							\ @@ -99,46 +90,45 @@ static ssize_t power_read_file(struct pci_slot *slot, char *buf)  	retval = get_power_status(slot->hotplug, &value);  	if (retval) -		goto exit; -	retval = sprintf (buf, "%d\n", value); -exit: -	return retval; +		return retval; + +	return sprintf(buf, "%d\n", value);  }  static ssize_t power_write_file(struct pci_slot *pci_slot, const char *buf, -		size_t count) +				size_t count)  {  	struct hotplug_slot *slot = pci_slot->hotplug;  	unsigned long lpower;  	u8 power;  	int retval = 0; -	lpower = simple_strtoul (buf, NULL, 10); +	lpower = simple_strtoul(buf, NULL, 10);  	power = (u8)(lpower & 0xff); -	dbg ("power = %d\n", power); +	dbg("power = %d\n", power);  	if (!try_module_get(slot->ops->owner)) {  		retval = -ENODEV;  		goto exit;  	}  	switch (power) { -		case 0: -			if (slot->ops->disable_slot) -				retval = slot->ops->disable_slot(slot); -			break; - -		case 1: -			if (slot->ops->enable_slot) -				retval = slot->ops->enable_slot(slot); -			break; - -		default: -			err ("Illegal value specified for power\n"); -			retval = -EINVAL; +	case 0: +		if (slot->ops->disable_slot) +			retval = slot->ops->disable_slot(slot); +		break; + +	case 1: +		if (slot->ops->enable_slot) +			retval = slot->ops->enable_slot(slot); +		break; + +	default: +		err("Illegal value specified for power\n"); +		retval = -EINVAL;  	}  	module_put(slot->ops->owner); -exit:	 +exit:  	if (retval)  		return retval;  	return count; @@ -157,24 +147,22 @@ static ssize_t attention_read_file(struct pci_slot *slot, char *buf)  	retval = get_attention_status(slot->hotplug, &value);  	if (retval) -		goto exit; -	retval = sprintf(buf, "%d\n", value); +		return retval; -exit: -	return retval; +	return sprintf(buf, "%d\n", value);  }  static ssize_t attention_write_file(struct pci_slot *slot, const char *buf, -		size_t count) +				    size_t count)  {  	struct hotplug_slot_ops *ops = slot->hotplug->ops;  	unsigned long lattention;  	u8 attention;  	int retval = 0; -	lattention = simple_strtoul (buf, NULL, 10); +	lattention = simple_strtoul(buf, NULL, 10);  	attention = (u8)(lattention & 0xff); -	dbg (" - attention = %d\n", attention); +	dbg(" - attention = %d\n", attention);  	if (!try_module_get(ops->owner)) {  		retval = -ENODEV; @@ -184,7 +172,7 @@ static ssize_t attention_write_file(struct pci_slot *slot, const char *buf,  		retval = ops->set_attention_status(slot->hotplug, attention);  	module_put(ops->owner); -exit:	 +exit:  	if (retval)  		return retval;  	return count; @@ -203,11 +191,9 @@ static ssize_t latch_read_file(struct pci_slot *slot, char *buf)  	retval = get_latch_status(slot->hotplug, &value);  	if (retval) -		goto exit; -	retval = sprintf (buf, "%d\n", value); +		return retval; -exit: -	return retval; +	return sprintf(buf, "%d\n", value);  }  static struct pci_slot_attribute hotplug_slot_attr_latch = { @@ -222,11 +208,9 @@ static ssize_t presence_read_file(struct pci_slot *slot, char *buf)  	retval = get_adapter_status(slot->hotplug, &value);  	if (retval) -		goto exit; -	retval = sprintf (buf, "%d\n", value); +		return retval; -exit: -	return retval; +	return sprintf(buf, "%d\n", value);  }  static struct pci_slot_attribute hotplug_slot_attr_presence = { @@ -235,7 +219,7 @@ static struct pci_slot_attribute hotplug_slot_attr_presence = {  };  static ssize_t test_write_file(struct pci_slot *pci_slot, const char *buf, -		size_t count) +			       size_t count)  {  	struct hotplug_slot *slot = pci_slot->hotplug;  	unsigned long ltest; @@ -244,7 +228,7 @@ static ssize_t test_write_file(struct pci_slot *pci_slot, const char *buf,  	ltest = simple_strtoul (buf, NULL, 10);  	test = (u32)(ltest & 0xffffffff); -	dbg ("test = %d\n", test); +	dbg("test = %d\n", test);  	if (!try_module_get(slot->ops->owner)) {  		retval = -ENODEV; @@ -254,7 +238,7 @@ static ssize_t test_write_file(struct pci_slot *pci_slot, const char *buf,  		retval = slot->ops->hardware_test(slot, test);  	module_put(slot->ops->owner); -exit:	 +exit:  	if (retval)  		return retval;  	return count; @@ -268,6 +252,7 @@ static struct pci_slot_attribute hotplug_slot_attr_test = {  static bool has_power_file(struct pci_slot *pci_slot)  {  	struct hotplug_slot *slot = pci_slot->hotplug; +  	if ((!slot) || (!slot->ops))  		return false;  	if ((slot->ops->enable_slot) || @@ -280,6 +265,7 @@ static bool has_power_file(struct pci_slot *pci_slot)  static bool has_attention_file(struct pci_slot *pci_slot)  {  	struct hotplug_slot *slot = pci_slot->hotplug; +  	if ((!slot) || (!slot->ops))  		return false;  	if ((slot->ops->set_attention_status) || @@ -291,6 +277,7 @@ static bool has_attention_file(struct pci_slot *pci_slot)  static bool has_latch_file(struct pci_slot *pci_slot)  {  	struct hotplug_slot *slot = pci_slot->hotplug; +  	if ((!slot) || (!slot->ops))  		return false;  	if (slot->ops->get_latch_status) @@ -301,6 +288,7 @@ static bool has_latch_file(struct pci_slot *pci_slot)  static bool has_adapter_file(struct pci_slot *pci_slot)  {  	struct hotplug_slot *slot = pci_slot->hotplug; +  	if ((!slot) || (!slot->ops))  		return false;  	if (slot->ops->get_adapter_status) @@ -311,6 +299,7 @@ static bool has_adapter_file(struct pci_slot *pci_slot)  static bool has_test_file(struct pci_slot *pci_slot)  {  	struct hotplug_slot *slot = pci_slot->hotplug; +  	if ((!slot) || (!slot->ops))  		return false;  	if (slot->ops->hardware_test) @@ -404,13 +393,13 @@ static void fs_remove_slot(struct pci_slot *slot)  	pci_hp_remove_module_link(slot);  } -static struct hotplug_slot *get_slot_from_name (const char *name) +static struct hotplug_slot *get_slot_from_name(const char *name)  {  	struct hotplug_slot *slot;  	struct list_head *tmp; -	list_for_each (tmp, &pci_hotplug_slot_list) { -		slot = list_entry (tmp, struct hotplug_slot, slot_list); +	list_for_each(tmp, &pci_hotplug_slot_list) { +		slot = list_entry(tmp, struct hotplug_slot, slot_list);  		if (strcmp(hotplug_slot_name(slot), name) == 0)  			return slot;  	} @@ -443,8 +432,7 @@ int __pci_hp_register(struct hotplug_slot *slot, struct pci_bus *bus,  	if ((slot->info == NULL) || (slot->ops == NULL))  		return -EINVAL;  	if (slot->release == NULL) { -		dbg("Why are you trying to register a hotplug slot " -		    "without a proper release function?\n"); +		dbg("Why are you trying to register a hotplug slot without a proper release function?\n");  		return -EINVAL;  	} @@ -475,6 +463,7 @@ out:  	mutex_unlock(&pci_hp_mutex);  	return result;  } +EXPORT_SYMBOL_GPL(__pci_hp_register);  /**   * pci_hp_deregister - deregister a hotplug_slot with the PCI hotplug subsystem @@ -513,47 +502,45 @@ int pci_hp_deregister(struct hotplug_slot *hotplug)  	return 0;  } +EXPORT_SYMBOL_GPL(pci_hp_deregister);  /**   * pci_hp_change_slot_info - changes the slot's information structure in the core   * @hotplug: pointer to the slot whose info has changed   * @info: pointer to the info copy into the slot's info structure   * - * @slot must have been registered with the pci  + * @slot must have been registered with the pci   * hotplug subsystem previously with a call to pci_hp_register().   *   * Returns 0 if successful, anything else for an error.   */ -int __must_check pci_hp_change_slot_info(struct hotplug_slot *hotplug, -					 struct hotplug_slot_info *info) +int pci_hp_change_slot_info(struct hotplug_slot *hotplug, +			    struct hotplug_slot_info *info)  { -	struct pci_slot *slot;  	if (!hotplug || !info)  		return -ENODEV; -	slot = hotplug->pci_slot;  	memcpy(hotplug->info, info, sizeof(struct hotplug_slot_info));  	return 0;  } +EXPORT_SYMBOL_GPL(pci_hp_change_slot_info); -static int __init pci_hotplug_init (void) +static int __init pci_hotplug_init(void)  {  	int result;  	result = cpci_hotplug_init(debug);  	if (result) { -		err ("cpci_hotplug_init with error %d\n", result); -		goto err_cpci; +		err("cpci_hotplug_init with error %d\n", result); +		return result;  	} -	info (DRIVER_DESC " version: " DRIVER_VERSION "\n"); - -err_cpci: +	info(DRIVER_DESC " version: " DRIVER_VERSION "\n");  	return result;  } -static void __exit pci_hotplug_exit (void) +static void __exit pci_hotplug_exit(void)  {  	cpci_hotplug_exit();  } @@ -566,7 +553,3 @@ MODULE_DESCRIPTION(DRIVER_DESC);  MODULE_LICENSE("GPL");  module_param(debug, bool, 0644);  MODULE_PARM_DESC(debug, "Debugging mode enabled or not"); - -EXPORT_SYMBOL_GPL(__pci_hp_register); -EXPORT_SYMBOL_GPL(pci_hp_deregister); -EXPORT_SYMBOL_GPL(pci_hp_change_slot_info);  | 
