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: (60 commits) uio: make uio_info's name and version const UIO: Documentation for UIO ioport info handling UIO: Pass information about ioports to userspace (V2) UIO: uio_pdrv_genirq: allow custom irq_flags UIO: use pci_ioremap_bar() in drivers/uio arm: struct device - replace bus_id with dev_name(), dev_set_name() libata: struct device - replace bus_id with dev_name(), dev_set_name() avr: struct device - replace bus_id with dev_name(), dev_set_name() block: struct device - replace bus_id with dev_name(), dev_set_name() chris: struct device - replace bus_id with dev_name(), dev_set_name() dmi: struct device - replace bus_id with dev_name(), dev_set_name() gadget: struct device - replace bus_id with dev_name(), dev_set_name() gpio: struct device - replace bus_id with dev_name(), dev_set_name() gpu: struct device - replace bus_id with dev_name(), dev_set_name() hwmon: struct device - replace bus_id with dev_name(), dev_set_name() i2o: struct device - replace bus_id with dev_name(), dev_set_name() IA64: struct device - replace bus_id with dev_name(), dev_set_name() i7300_idle: struct device - replace bus_id with dev_name(), dev_set_name() infiniband: struct device - replace bus_id with dev_name(), dev_set_name() ISDN: struct device - replace bus_id with dev_name(), dev_set_name() ...
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#define BUS_ID_SIZE 20
|
||||
|
||||
struct device;
|
||||
struct device_private;
|
||||
struct device_driver;
|
||||
struct driver_private;
|
||||
struct class;
|
||||
@@ -65,7 +66,7 @@ struct bus_type {
|
||||
int (*resume_early)(struct device *dev);
|
||||
int (*resume)(struct device *dev);
|
||||
|
||||
struct pm_ext_ops *pm;
|
||||
struct dev_pm_ops *pm;
|
||||
|
||||
struct bus_type_private *p;
|
||||
};
|
||||
@@ -133,7 +134,7 @@ struct device_driver {
|
||||
int (*resume) (struct device *dev);
|
||||
struct attribute_group **groups;
|
||||
|
||||
struct pm_ops *pm;
|
||||
struct dev_pm_ops *pm;
|
||||
|
||||
struct driver_private *p;
|
||||
};
|
||||
@@ -198,7 +199,7 @@ struct class {
|
||||
int (*suspend)(struct device *dev, pm_message_t state);
|
||||
int (*resume)(struct device *dev);
|
||||
|
||||
struct pm_ops *pm;
|
||||
struct dev_pm_ops *pm;
|
||||
struct class_private *p;
|
||||
};
|
||||
|
||||
@@ -291,7 +292,7 @@ struct device_type {
|
||||
int (*suspend)(struct device *dev, pm_message_t state);
|
||||
int (*resume)(struct device *dev);
|
||||
|
||||
struct pm_ops *pm;
|
||||
struct dev_pm_ops *pm;
|
||||
};
|
||||
|
||||
/* interface for exporting device attributes */
|
||||
@@ -365,17 +366,15 @@ struct device_dma_parameters {
|
||||
};
|
||||
|
||||
struct device {
|
||||
struct klist klist_children;
|
||||
struct klist_node knode_parent; /* node in sibling list */
|
||||
struct klist_node knode_driver;
|
||||
struct klist_node knode_bus;
|
||||
struct device *parent;
|
||||
|
||||
struct device_private *p;
|
||||
|
||||
struct kobject kobj;
|
||||
char bus_id[BUS_ID_SIZE]; /* position on parent bus */
|
||||
unsigned uevent_suppress:1;
|
||||
const char *init_name; /* initial name of the device */
|
||||
struct device_type *type;
|
||||
unsigned uevent_suppress:1;
|
||||
|
||||
struct semaphore sem; /* semaphore to synchronize calls to
|
||||
* its driver.
|
||||
@@ -408,12 +407,13 @@ struct device {
|
||||
/* arch specific additions */
|
||||
struct dev_archdata archdata;
|
||||
|
||||
dev_t devt; /* dev_t, creates the sysfs "dev" */
|
||||
|
||||
spinlock_t devres_lock;
|
||||
struct list_head devres_head;
|
||||
|
||||
struct klist_node knode_class;
|
||||
struct class *class;
|
||||
dev_t devt; /* dev_t, creates the sysfs "dev" */
|
||||
struct attribute_group **groups; /* optional groups */
|
||||
|
||||
void (*release)(struct device *dev);
|
||||
@@ -482,6 +482,17 @@ extern struct device *device_find_child(struct device *dev, void *data,
|
||||
extern int device_rename(struct device *dev, char *new_name);
|
||||
extern int device_move(struct device *dev, struct device *new_parent);
|
||||
|
||||
/*
|
||||
* Root device objects for grouping under /sys/devices
|
||||
*/
|
||||
extern struct device *__root_device_register(const char *name,
|
||||
struct module *owner);
|
||||
static inline struct device *root_device_register(const char *name)
|
||||
{
|
||||
return __root_device_register(name, THIS_MODULE);
|
||||
}
|
||||
extern void root_device_unregister(struct device *root);
|
||||
|
||||
/*
|
||||
* Manual binding of a device to driver. See drivers/base/bus.c
|
||||
* for information on use.
|
||||
@@ -553,13 +564,13 @@ extern const char *dev_driver_string(const struct device *dev);
|
||||
#define dev_info(dev, format, arg...) \
|
||||
dev_printk(KERN_INFO , dev , format , ## arg)
|
||||
|
||||
#if defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
|
||||
#if defined(DEBUG)
|
||||
#define dev_dbg(dev, format, arg...) \
|
||||
dev_printk(KERN_DEBUG , dev , format , ## arg)
|
||||
#elif defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
|
||||
#define dev_dbg(dev, format, ...) do { \
|
||||
dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#elif defined(DEBUG)
|
||||
#define dev_dbg(dev, format, arg...) \
|
||||
dev_printk(KERN_DEBUG , dev , format , ## arg)
|
||||
#else
|
||||
#define dev_dbg(dev, format, arg...) \
|
||||
({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
|
||||
|
@@ -355,13 +355,13 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
|
||||
printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
|
||||
|
||||
/* If you are writing a driver, please use dev_dbg instead */
|
||||
#if defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
|
||||
#if defined(DEBUG)
|
||||
#define pr_debug(fmt, ...) \
|
||||
printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
||||
#elif defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
|
||||
#define pr_debug(fmt, ...) do { \
|
||||
dynamic_pr_debug(pr_fmt(fmt), ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#elif defined(DEBUG)
|
||||
#define pr_debug(fmt, ...) \
|
||||
printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
||||
#else
|
||||
#define pr_debug(fmt, ...) \
|
||||
({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; })
|
||||
|
@@ -13,7 +13,6 @@
|
||||
#define _LINUX_KLIST_H
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
@@ -41,7 +40,6 @@ struct klist_node {
|
||||
void *n_klist; /* never access directly */
|
||||
struct list_head n_node;
|
||||
struct kref n_ref;
|
||||
struct completion n_removed;
|
||||
};
|
||||
|
||||
extern void klist_add_tail(struct klist_node *n, struct klist *k);
|
||||
|
@@ -13,7 +13,7 @@
|
||||
struct mtd_info *mtd_concat_create(
|
||||
struct mtd_info *subdev[], /* subdevices to concatenate */
|
||||
int num_devs, /* number of subdevices */
|
||||
char *name); /* name for the new device */
|
||||
const char *name); /* name for the new device */
|
||||
|
||||
void mtd_concat_destroy(struct mtd_info *mtd);
|
||||
|
||||
|
@@ -421,7 +421,6 @@ struct pci_driver {
|
||||
int (*resume_early) (struct pci_dev *dev);
|
||||
int (*resume) (struct pci_dev *dev); /* Device woken up */
|
||||
void (*shutdown) (struct pci_dev *dev);
|
||||
struct pm_ext_ops *pm;
|
||||
struct pci_error_handlers *err_handler;
|
||||
struct device_driver driver;
|
||||
struct pci_dynids dynids;
|
||||
|
@@ -55,7 +55,6 @@ struct platform_driver {
|
||||
int (*suspend_late)(struct platform_device *, pm_message_t state);
|
||||
int (*resume_early)(struct platform_device *);
|
||||
int (*resume)(struct platform_device *);
|
||||
struct pm_ext_ops *pm;
|
||||
struct device_driver driver;
|
||||
};
|
||||
|
||||
|
@@ -41,7 +41,7 @@ typedef struct pm_message {
|
||||
} pm_message_t;
|
||||
|
||||
/**
|
||||
* struct pm_ops - device PM callbacks
|
||||
* struct dev_pm_ops - device PM callbacks
|
||||
*
|
||||
* Several driver power state transitions are externally visible, affecting
|
||||
* the state of pending I/O queues and (for drivers that touch hardware)
|
||||
@@ -126,46 +126,6 @@ typedef struct pm_message {
|
||||
* On most platforms, there are no restrictions on availability of
|
||||
* resources like clocks during @restore().
|
||||
*
|
||||
* All of the above callbacks, except for @complete(), return error codes.
|
||||
* However, the error codes returned by the resume operations, @resume(),
|
||||
* @thaw(), and @restore(), do not cause the PM core to abort the resume
|
||||
* transition during which they are returned. The error codes returned in
|
||||
* that cases are only printed by the PM core to the system logs for debugging
|
||||
* purposes. Still, it is recommended that drivers only return error codes
|
||||
* from their resume methods in case of an unrecoverable failure (i.e. when the
|
||||
* device being handled refuses to resume and becomes unusable) to allow us to
|
||||
* modify the PM core in the future, so that it can avoid attempting to handle
|
||||
* devices that failed to resume and their children.
|
||||
*
|
||||
* It is allowed to unregister devices while the above callbacks are being
|
||||
* executed. However, it is not allowed to unregister a device from within any
|
||||
* of its own callbacks.
|
||||
*/
|
||||
|
||||
struct pm_ops {
|
||||
int (*prepare)(struct device *dev);
|
||||
void (*complete)(struct device *dev);
|
||||
int (*suspend)(struct device *dev);
|
||||
int (*resume)(struct device *dev);
|
||||
int (*freeze)(struct device *dev);
|
||||
int (*thaw)(struct device *dev);
|
||||
int (*poweroff)(struct device *dev);
|
||||
int (*restore)(struct device *dev);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct pm_ext_ops - extended device PM callbacks
|
||||
*
|
||||
* Some devices require certain operations related to suspend and hibernation
|
||||
* to be carried out with interrupts disabled. Thus, 'struct pm_ext_ops' below
|
||||
* is defined, adding callbacks to be executed with interrupts disabled to
|
||||
* 'struct pm_ops'.
|
||||
*
|
||||
* The following callbacks included in 'struct pm_ext_ops' are executed with
|
||||
* the nonboot CPUs switched off and with interrupts disabled on the only
|
||||
* functional CPU. They also are executed with the PM core list of devices
|
||||
* locked, so they must NOT unregister any devices.
|
||||
*
|
||||
* @suspend_noirq: Complete the operations of ->suspend() by carrying out any
|
||||
* actions required for suspending the device that need interrupts to be
|
||||
* disabled
|
||||
@@ -190,18 +150,32 @@ struct pm_ops {
|
||||
* actions required for restoring the operations of the device that need
|
||||
* interrupts to be disabled
|
||||
*
|
||||
* All of the above callbacks return error codes, but the error codes returned
|
||||
* by the resume operations, @resume_noirq(), @thaw_noirq(), and
|
||||
* @restore_noirq(), do not cause the PM core to abort the resume transition
|
||||
* during which they are returned. The error codes returned in that cases are
|
||||
* only printed by the PM core to the system logs for debugging purposes.
|
||||
* Still, as stated above, it is recommended that drivers only return error
|
||||
* codes from their resume methods if the device being handled fails to resume
|
||||
* and is not usable any more.
|
||||
* All of the above callbacks, except for @complete(), return error codes.
|
||||
* However, the error codes returned by the resume operations, @resume(),
|
||||
* @thaw(), @restore(), @resume_noirq(), @thaw_noirq(), and @restore_noirq() do
|
||||
* not cause the PM core to abort the resume transition during which they are
|
||||
* returned. The error codes returned in that cases are only printed by the PM
|
||||
* core to the system logs for debugging purposes. Still, it is recommended
|
||||
* that drivers only return error codes from their resume methods in case of an
|
||||
* unrecoverable failure (i.e. when the device being handled refuses to resume
|
||||
* and becomes unusable) to allow us to modify the PM core in the future, so
|
||||
* that it can avoid attempting to handle devices that failed to resume and
|
||||
* their children.
|
||||
*
|
||||
* It is allowed to unregister devices while the above callbacks are being
|
||||
* executed. However, it is not allowed to unregister a device from within any
|
||||
* of its own callbacks.
|
||||
*/
|
||||
|
||||
struct pm_ext_ops {
|
||||
struct pm_ops base;
|
||||
struct dev_pm_ops {
|
||||
int (*prepare)(struct device *dev);
|
||||
void (*complete)(struct device *dev);
|
||||
int (*suspend)(struct device *dev);
|
||||
int (*resume)(struct device *dev);
|
||||
int (*freeze)(struct device *dev);
|
||||
int (*thaw)(struct device *dev);
|
||||
int (*poweroff)(struct device *dev);
|
||||
int (*restore)(struct device *dev);
|
||||
int (*suspend_noirq)(struct device *dev);
|
||||
int (*resume_noirq)(struct device *dev);
|
||||
int (*freeze_noirq)(struct device *dev);
|
||||
@@ -278,7 +252,7 @@ struct pm_ext_ops {
|
||||
#define PM_EVENT_SLEEP (PM_EVENT_SUSPEND | PM_EVENT_HIBERNATE)
|
||||
#define PM_EVENT_USER_SUSPEND (PM_EVENT_USER | PM_EVENT_SUSPEND)
|
||||
#define PM_EVENT_USER_RESUME (PM_EVENT_USER | PM_EVENT_RESUME)
|
||||
#define PM_EVENT_REMOTE_WAKEUP (PM_EVENT_REMOTE | PM_EVENT_RESUME)
|
||||
#define PM_EVENT_REMOTE_RESUME (PM_EVENT_REMOTE | PM_EVENT_RESUME)
|
||||
#define PM_EVENT_AUTO_SUSPEND (PM_EVENT_AUTO | PM_EVENT_SUSPEND)
|
||||
#define PM_EVENT_AUTO_RESUME (PM_EVENT_AUTO | PM_EVENT_RESUME)
|
||||
|
||||
@@ -291,15 +265,15 @@ struct pm_ext_ops {
|
||||
#define PMSG_THAW ((struct pm_message){ .event = PM_EVENT_THAW, })
|
||||
#define PMSG_RESTORE ((struct pm_message){ .event = PM_EVENT_RESTORE, })
|
||||
#define PMSG_RECOVER ((struct pm_message){ .event = PM_EVENT_RECOVER, })
|
||||
#define PMSG_USER_SUSPEND ((struct pm_messge) \
|
||||
#define PMSG_USER_SUSPEND ((struct pm_message) \
|
||||
{ .event = PM_EVENT_USER_SUSPEND, })
|
||||
#define PMSG_USER_RESUME ((struct pm_messge) \
|
||||
#define PMSG_USER_RESUME ((struct pm_message) \
|
||||
{ .event = PM_EVENT_USER_RESUME, })
|
||||
#define PMSG_REMOTE_RESUME ((struct pm_messge) \
|
||||
#define PMSG_REMOTE_RESUME ((struct pm_message) \
|
||||
{ .event = PM_EVENT_REMOTE_RESUME, })
|
||||
#define PMSG_AUTO_SUSPEND ((struct pm_messge) \
|
||||
#define PMSG_AUTO_SUSPEND ((struct pm_message) \
|
||||
{ .event = PM_EVENT_AUTO_SUSPEND, })
|
||||
#define PMSG_AUTO_RESUME ((struct pm_messge) \
|
||||
#define PMSG_AUTO_RESUME ((struct pm_message) \
|
||||
{ .event = PM_EVENT_AUTO_RESUME, })
|
||||
|
||||
/**
|
||||
|
@@ -38,6 +38,24 @@ struct uio_mem {
|
||||
|
||||
#define MAX_UIO_MAPS 5
|
||||
|
||||
struct uio_portio;
|
||||
|
||||
/**
|
||||
* struct uio_port - description of a UIO port region
|
||||
* @start: start of port region
|
||||
* @size: size of port region
|
||||
* @porttype: type of port (see UIO_PORT_* below)
|
||||
* @portio: for use by the UIO core only.
|
||||
*/
|
||||
struct uio_port {
|
||||
unsigned long start;
|
||||
unsigned long size;
|
||||
int porttype;
|
||||
struct uio_portio *portio;
|
||||
};
|
||||
|
||||
#define MAX_UIO_PORT_REGIONS 5
|
||||
|
||||
struct uio_device;
|
||||
|
||||
/**
|
||||
@@ -46,6 +64,7 @@ struct uio_device;
|
||||
* @name: device name
|
||||
* @version: device driver version
|
||||
* @mem: list of mappable memory regions, size==0 for end of list
|
||||
* @port: list of port regions, size==0 for end of list
|
||||
* @irq: interrupt number or UIO_IRQ_CUSTOM
|
||||
* @irq_flags: flags for request_irq()
|
||||
* @priv: optional private data
|
||||
@@ -57,9 +76,10 @@ struct uio_device;
|
||||
*/
|
||||
struct uio_info {
|
||||
struct uio_device *uio_dev;
|
||||
char *name;
|
||||
char *version;
|
||||
const char *name;
|
||||
const char *version;
|
||||
struct uio_mem mem[MAX_UIO_MAPS];
|
||||
struct uio_port port[MAX_UIO_PORT_REGIONS];
|
||||
long irq;
|
||||
unsigned long irq_flags;
|
||||
void *priv;
|
||||
@@ -92,4 +112,10 @@ extern void uio_event_notify(struct uio_info *info);
|
||||
#define UIO_MEM_LOGICAL 2
|
||||
#define UIO_MEM_VIRTUAL 3
|
||||
|
||||
/* defines for uio_port->porttype */
|
||||
#define UIO_PORT_NONE 0
|
||||
#define UIO_PORT_X86 1
|
||||
#define UIO_PORT_GPIO 2
|
||||
#define UIO_PORT_OTHER 3
|
||||
|
||||
#endif /* _LINUX_UIO_DRIVER_H_ */
|
||||
|
Reference in New Issue
Block a user