git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This commit was generated by cvs2svn to compensate for changes in r632,
[linux-2.6.git]
/
drivers
/
base
/
firmware_class.c
diff --git
a/drivers/base/firmware_class.c
b/drivers/base/firmware_class.c
index
a57ba84
..
26c9464
100644
(file)
--- a/
drivers/base/firmware_class.c
+++ b/
drivers/base/firmware_class.c
@@
-12,7
+12,7
@@
#include <linux/init.h>
#include <linux/timer.h>
#include <linux/vmalloc.h>
#include <linux/init.h>
#include <linux/timer.h>
#include <linux/vmalloc.h>
-#include <
asm/hardirq
.h>
+#include <
linux/interrupt
.h>
#include <linux/bitops.h>
#include <asm/semaphore.h>
#include <linux/bitops.h>
#include <asm/semaphore.h>
@@
-94,19
+94,17
@@
firmware_class_hotplug(struct class_device *class_dev, char **envp,
int num_envp, char *buffer, int buffer_size)
{
struct firmware_priv *fw_priv = class_get_devdata(class_dev);
int num_envp, char *buffer, int buffer_size)
{
struct firmware_priv *fw_priv = class_get_devdata(class_dev);
- int i = 0;
- char *scratch = buffer;
+ int i = 0, len = 0;
if (!test_bit(FW_STATUS_READY, &fw_priv->status))
return -ENODEV;
if (!test_bit(FW_STATUS_READY, &fw_priv->status))
return -ENODEV;
- if (buffer_size < (FIRMWARE_NAME_MAX + 10))
- return -ENOMEM;
- if (num_envp < 1)
+ if (add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, &len,
+ "FIRMWARE=%s", fw_priv->fw_id))
return -ENOMEM;
return -ENOMEM;
- envp[i
++] = scratch
;
- scratch += sprintf(scratch, "FIRMWARE=%s", fw_priv->fw_id) + 1;
+ envp[i
] = NULL
;
+
return 0;
}
return 0;
}
@@
-235,6
+233,8
@@
firmware_data_write(struct kobject *kobj,
struct firmware *fw;
ssize_t retval;
struct firmware *fw;
ssize_t retval;
+ if (!capable(CAP_SYS_RAWIO))
+ return -EPERM;
down(&fw_lock);
fw = fw_priv->fw;
if (test_bit(FW_STATUS_DONE, &fw_priv->status)) {
down(&fw_lock);
fw = fw_priv->fw;
if (test_bit(FW_STATUS_DONE, &fw_priv->status)) {
@@
-420,7
+420,7
@@
request_firmware(const struct firmware **firmware_p, const char *name,
add_timer(&fw_priv->timeout);
}
add_timer(&fw_priv->timeout);
}
- kobject_hotplug(
"add", &class_dev->kobj
);
+ kobject_hotplug(
&class_dev->kobj, KOBJ_ADD
);
wait_for_completion(&fw_priv->completion);
set_bit(FW_STATUS_DONE, &fw_priv->status);
wait_for_completion(&fw_priv->completion);
set_bit(FW_STATUS_DONE, &fw_priv->status);
@@
-439,6
+439,7
@@
request_firmware(const struct firmware **firmware_p, const char *name,
error_kfree_fw:
kfree(firmware);
error_kfree_fw:
kfree(firmware);
+ *firmware_p = NULL;
out:
return retval;
}
out:
return retval;
}
@@
-580,4
+581,3
@@
EXPORT_SYMBOL(release_firmware);
EXPORT_SYMBOL(request_firmware);
EXPORT_SYMBOL(request_firmware_nowait);
EXPORT_SYMBOL(register_firmware);
EXPORT_SYMBOL(request_firmware);
EXPORT_SYMBOL(request_firmware_nowait);
EXPORT_SYMBOL(register_firmware);
-EXPORT_SYMBOL(firmware_class);