Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (79 commits) arm: bus_id -> dev_name() and dev_set_name() conversions sparc64: fix up bus_id changes in sparc core code 3c59x: handle pci_name() being const MTD: handle pci_name() being const HP iLO driver sysdev: Convert the x86 mce tolerant sysdev attribute to generic attribute sysdev: Add utility functions for simple int/ulong variable sysdev attributes sysdev: Pass the attribute to the low level sysdev show/store function driver core: Suppress sysfs warnings for device_rename(). kobject: Transmit return value of call_usermodehelper() to caller sysfs-rules.txt: reword API stability statement debugfs: Implement debugfs_remove_recursive() HOWTO: change email addresses of James in HOWTO always enable FW_LOADER unless EMBEDDED=y uio-howto.tmpl: use unique output names uio-howto.tmpl: use standard copyright/legal markings sysfs: don't call notify_change sysdev: fix debugging statements in registration code. kobject: should use kobject_put() in kset-example kobject: reorder kobject to save space on 64 bit builds ...
This commit is contained in:
@@ -44,6 +44,7 @@ struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
|
||||
const char *dest);
|
||||
|
||||
void debugfs_remove(struct dentry *dentry);
|
||||
void debugfs_remove_recursive(struct dentry *dentry);
|
||||
|
||||
struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
|
||||
struct dentry *new_dir, const char *new_name);
|
||||
@@ -101,6 +102,9 @@ static inline struct dentry *debugfs_create_symlink(const char *name,
|
||||
static inline void debugfs_remove(struct dentry *dentry)
|
||||
{ }
|
||||
|
||||
static inline void debugfs_remove_recursive(struct dentry *dentry)
|
||||
{ }
|
||||
|
||||
static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
|
||||
struct dentry *new_dir, char *new_name)
|
||||
{
|
||||
|
||||
+36
-22
@@ -16,6 +16,7 @@
|
||||
#include <linux/kobject.h>
|
||||
#include <linux/klist.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
@@ -24,17 +25,13 @@
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/device.h>
|
||||
|
||||
#define DEVICE_NAME_SIZE 50
|
||||
/* DEVICE_NAME_HALF is really less than half to accommodate slop */
|
||||
#define DEVICE_NAME_HALF __stringify(20)
|
||||
#define DEVICE_ID_SIZE 32
|
||||
#define BUS_ID_SIZE KOBJ_NAME_LEN
|
||||
|
||||
#define BUS_ID_SIZE 20
|
||||
|
||||
struct device;
|
||||
struct device_driver;
|
||||
struct driver_private;
|
||||
struct class;
|
||||
struct class_private;
|
||||
struct bus_type;
|
||||
struct bus_type_private;
|
||||
|
||||
@@ -186,13 +183,9 @@ struct class {
|
||||
const char *name;
|
||||
struct module *owner;
|
||||
|
||||
struct kset subsys;
|
||||
struct list_head devices;
|
||||
struct list_head interfaces;
|
||||
struct kset class_dirs;
|
||||
struct semaphore sem; /* locks children, devices, interfaces */
|
||||
struct class_attribute *class_attrs;
|
||||
struct device_attribute *dev_attrs;
|
||||
struct kobject *dev_kobj;
|
||||
|
||||
int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
|
||||
|
||||
@@ -203,13 +196,28 @@ struct class {
|
||||
int (*resume)(struct device *dev);
|
||||
|
||||
struct pm_ops *pm;
|
||||
struct class_private *p;
|
||||
};
|
||||
|
||||
extern int __must_check class_register(struct class *class);
|
||||
extern struct kobject *sysfs_dev_block_kobj;
|
||||
extern struct kobject *sysfs_dev_char_kobj;
|
||||
extern int __must_check __class_register(struct class *class,
|
||||
struct lock_class_key *key);
|
||||
extern void class_unregister(struct class *class);
|
||||
extern int class_for_each_device(struct class *class, void *data,
|
||||
|
||||
/* This is a #define to keep the compiler from merging different
|
||||
* instances of the __key variable */
|
||||
#define class_register(class) \
|
||||
({ \
|
||||
static struct lock_class_key __key; \
|
||||
__class_register(class, &__key); \
|
||||
})
|
||||
|
||||
extern int class_for_each_device(struct class *class, struct device *start,
|
||||
void *data,
|
||||
int (*fn)(struct device *dev, void *data));
|
||||
extern struct device *class_find_device(struct class *class, void *data,
|
||||
extern struct device *class_find_device(struct class *class,
|
||||
struct device *start, void *data,
|
||||
int (*match)(struct device *, void *));
|
||||
|
||||
struct class_attribute {
|
||||
@@ -237,9 +245,19 @@ struct class_interface {
|
||||
extern int __must_check class_interface_register(struct class_interface *);
|
||||
extern void class_interface_unregister(struct class_interface *);
|
||||
|
||||
extern struct class *class_create(struct module *owner, const char *name);
|
||||
extern struct class * __must_check __class_create(struct module *owner,
|
||||
const char *name,
|
||||
struct lock_class_key *key);
|
||||
extern void class_destroy(struct class *cls);
|
||||
|
||||
/* This is a #define to keep the compiler from merging different
|
||||
* instances of the __key variable */
|
||||
#define class_create(owner, name) \
|
||||
({ \
|
||||
static struct lock_class_key __key; \
|
||||
__class_create(owner, name, &__key); \
|
||||
})
|
||||
|
||||
/*
|
||||
* The type of device, "struct device" is embedded in. A class
|
||||
* or bus can contain devices of different types
|
||||
@@ -468,14 +486,10 @@ extern struct device *device_create_vargs(struct class *cls,
|
||||
const char *fmt,
|
||||
va_list vargs);
|
||||
extern struct device *device_create(struct class *cls, struct device *parent,
|
||||
dev_t devt, const char *fmt, ...)
|
||||
__attribute__((format(printf, 4, 5)));
|
||||
extern struct device *device_create_drvdata(struct class *cls,
|
||||
struct device *parent,
|
||||
dev_t devt,
|
||||
void *drvdata,
|
||||
const char *fmt, ...)
|
||||
dev_t devt, void *drvdata,
|
||||
const char *fmt, ...)
|
||||
__attribute__((format(printf, 5, 6)));
|
||||
#define device_create_drvdata device_create
|
||||
extern void device_destroy(struct class *cls, dev_t devt);
|
||||
|
||||
/*
|
||||
|
||||
@@ -40,7 +40,7 @@ struct eisa_device {
|
||||
u64 dma_mask;
|
||||
struct device dev; /* generic device */
|
||||
#ifdef CONFIG_EISA_NAMES
|
||||
char pretty_name[DEVICE_NAME_SIZE];
|
||||
char pretty_name[50];
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <linux/wait.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#define KOBJ_NAME_LEN 20
|
||||
#define UEVENT_HELPER_PATH_LEN 256
|
||||
#define UEVENT_NUM_ENVP 32 /* number of env pointers */
|
||||
#define UEVENT_BUFFER_SIZE 2048 /* buffer for the variables */
|
||||
@@ -59,12 +58,12 @@ enum kobject_action {
|
||||
|
||||
struct kobject {
|
||||
const char *name;
|
||||
struct kref kref;
|
||||
struct list_head entry;
|
||||
struct kobject *parent;
|
||||
struct kset *kset;
|
||||
struct kobj_type *ktype;
|
||||
struct sysfs_dirent *sd;
|
||||
struct kref kref;
|
||||
unsigned int state_initialized:1;
|
||||
unsigned int state_in_sysfs:1;
|
||||
unsigned int state_add_uevent_sent:1;
|
||||
|
||||
@@ -189,7 +189,7 @@ typedef union {
|
||||
*/
|
||||
|
||||
struct map_info {
|
||||
char *name;
|
||||
const char *name;
|
||||
unsigned long size;
|
||||
resource_size_t phys;
|
||||
#define NO_XIP (-1UL)
|
||||
|
||||
@@ -121,7 +121,7 @@ struct mtd_info {
|
||||
u_int32_t oobavail; // Available OOB bytes per block
|
||||
|
||||
// Kernel-only stuff starts here.
|
||||
char *name;
|
||||
const char *name;
|
||||
int index;
|
||||
|
||||
/* ecc layout structure pointer - read only ! */
|
||||
|
||||
@@ -733,7 +733,7 @@ struct spi_board_info {
|
||||
* controller_data goes to spi_device.controller_data,
|
||||
* irq is copied too
|
||||
*/
|
||||
char modalias[KOBJ_NAME_LEN];
|
||||
char modalias[32];
|
||||
const void *platform_data;
|
||||
void *controller_data;
|
||||
int irq;
|
||||
|
||||
+37
-2
@@ -99,8 +99,9 @@ extern void sysdev_unregister(struct sys_device *);
|
||||
|
||||
struct sysdev_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct sys_device *, char *);
|
||||
ssize_t (*store)(struct sys_device *, const char *, size_t);
|
||||
ssize_t (*show)(struct sys_device *, struct sysdev_attribute *, char *);
|
||||
ssize_t (*store)(struct sys_device *, struct sysdev_attribute *,
|
||||
const char *, size_t);
|
||||
};
|
||||
|
||||
|
||||
@@ -118,4 +119,38 @@ struct sysdev_attribute {
|
||||
extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *);
|
||||
extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *);
|
||||
|
||||
struct sysdev_ext_attribute {
|
||||
struct sysdev_attribute attr;
|
||||
void *var;
|
||||
};
|
||||
|
||||
/*
|
||||
* Support for simple variable sysdev attributes.
|
||||
* The pointer to the variable is stored in a sysdev_ext_attribute
|
||||
*/
|
||||
|
||||
/* Add more types as needed */
|
||||
|
||||
extern ssize_t sysdev_show_ulong(struct sys_device *, struct sysdev_attribute *,
|
||||
char *);
|
||||
extern ssize_t sysdev_store_ulong(struct sys_device *,
|
||||
struct sysdev_attribute *, const char *, size_t);
|
||||
extern ssize_t sysdev_show_int(struct sys_device *, struct sysdev_attribute *,
|
||||
char *);
|
||||
extern ssize_t sysdev_store_int(struct sys_device *,
|
||||
struct sysdev_attribute *, const char *, size_t);
|
||||
|
||||
#define _SYSDEV_ULONG_ATTR(_name, _mode, _var) \
|
||||
{ _SYSDEV_ATTR(_name, _mode, sysdev_show_ulong, sysdev_store_ulong), \
|
||||
&(_var) }
|
||||
#define SYSDEV_ULONG_ATTR(_name, _mode, _var) \
|
||||
struct sysdev_ext_attribute attr_##_name = \
|
||||
_SYSDEV_ULONG_ATTR(_name, _mode, _var);
|
||||
#define _SYSDEV_INT_ATTR(_name, _mode, _var) \
|
||||
{ _SYSDEV_ATTR(_name, _mode, sysdev_show_int, sysdev_store_int), \
|
||||
&(_var) }
|
||||
#define SYSDEV_INT_ATTR(_name, _mode, _var) \
|
||||
struct sysdev_ext_attribute attr_##_name = \
|
||||
_SYSDEV_INT_ATTR(_name, _mode, _var);
|
||||
|
||||
#endif /* _SYSDEV_H_ */
|
||||
|
||||
@@ -101,6 +101,9 @@ void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
|
||||
|
||||
int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target,
|
||||
const char *name);
|
||||
int __must_check sysfs_create_link_nowarn(struct kobject *kobj,
|
||||
struct kobject *target,
|
||||
const char *name);
|
||||
void sysfs_remove_link(struct kobject *kobj, const char *name);
|
||||
|
||||
int __must_check sysfs_create_group(struct kobject *kobj,
|
||||
@@ -180,6 +183,13 @@ static inline int sysfs_create_link(struct kobject *kobj,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int sysfs_create_link_nowarn(struct kobject *kobj,
|
||||
struct kobject *target,
|
||||
const char *name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ struct uio_mem {
|
||||
struct uio_map *map;
|
||||
};
|
||||
|
||||
#define MAX_UIO_MAPS 5
|
||||
#define MAX_UIO_MAPS 5
|
||||
|
||||
struct uio_device;
|
||||
|
||||
@@ -53,6 +53,7 @@ struct uio_device;
|
||||
* @mmap: mmap operation for this uio device
|
||||
* @open: open operation for this uio device
|
||||
* @release: release operation for this uio device
|
||||
* @irqcontrol: disable/enable irqs when 0/1 is written to /dev/uioX
|
||||
*/
|
||||
struct uio_info {
|
||||
struct uio_device *uio_dev;
|
||||
@@ -66,6 +67,7 @@ struct uio_info {
|
||||
int (*mmap)(struct uio_info *info, struct vm_area_struct *vma);
|
||||
int (*open)(struct uio_info *info, struct inode *inode);
|
||||
int (*release)(struct uio_info *info, struct inode *inode);
|
||||
int (*irqcontrol)(struct uio_info *info, s32 irq_on);
|
||||
};
|
||||
|
||||
extern int __must_check
|
||||
@@ -80,11 +82,11 @@ static inline int __must_check
|
||||
extern void uio_unregister_device(struct uio_info *info);
|
||||
extern void uio_event_notify(struct uio_info *info);
|
||||
|
||||
/* defines for uio_device->irq */
|
||||
/* defines for uio_info->irq */
|
||||
#define UIO_IRQ_CUSTOM -1
|
||||
#define UIO_IRQ_NONE -2
|
||||
|
||||
/* defines for uio_device->memtype */
|
||||
/* defines for uio_mem->memtype */
|
||||
#define UIO_MEM_NONE 0
|
||||
#define UIO_MEM_PHYS 1
|
||||
#define UIO_MEM_LOGICAL 2
|
||||
|
||||
Reference in New Issue
Block a user