111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**************************************************************************** 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert **************************************************************************** 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** This header was automatically generated from a Linux kernel header 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** of the same name, to make information necessary for userspace to 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** call into the kernel available to libc. It contains only constants, 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** structures, and macros generated from the original header, and thus, 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** contains no copyrightable information. 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert **************************************************************************** 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/ 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _DEVICE_H_ 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _DEVICE_H_ 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/ioport.h> 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/kobject.h> 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/klist.h> 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/list.h> 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/types.h> 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/module.h> 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/pm.h> 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/semaphore.h> 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/atomic.h> 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DEVICE_NAME_SIZE 50 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DEVICE_NAME_HALF __stringify(20) 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DEVICE_ID_SIZE 32 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BUS_ID_SIZE KOBJ_NAME_LEN 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct device; 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct device_driver; 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct class; 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct class_device; 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct bus_type { 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char * name; 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct subsystem subsys; 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct kset drivers; 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct kset devices; 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct klist klist_devices; 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct klist klist_drivers; 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct bus_attribute * bus_attrs; 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct device_attribute * dev_attrs; 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct driver_attribute * drv_attrs; 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*match)(struct device * dev, struct device_driver * drv); 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*uevent)(struct device *dev, char **envp, 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int num_envp, char *buffer, int buffer_size); 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*probe)(struct device * dev); 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*remove)(struct device * dev); 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*shutdown)(struct device * dev); 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*suspend)(struct device * dev, pm_message_t state); 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*resume)(struct device * dev); 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct device * bus_find_device(struct bus_type *bus, struct device *start, 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *data, int (*match)(struct device *, void *)); 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct bus_attribute { 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct attribute attr; 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*show)(struct bus_type *, char * buf); 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*store)(struct bus_type *, const char * buf, size_t count); 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BUS_ATTR(_name,_mode,_show,_store) struct bus_attribute bus_attr_##_name = __ATTR(_name,_mode,_show,_store) 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct device_driver { 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char * name; 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct bus_type * bus; 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct completion unloaded; 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct kobject kobj; 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct klist klist_devices; 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct klist_node knode_bus; 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct module * owner; 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*probe) (struct device * dev); 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*remove) (struct device * dev); 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*shutdown) (struct device * dev); 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*suspend) (struct device * dev, pm_message_t state); 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*resume) (struct device * dev); 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct driver_attribute { 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct attribute attr; 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*show)(struct device_driver *, char * buf); 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*store)(struct device_driver *, const char * buf, size_t count); 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DRIVER_ATTR(_name,_mode,_show,_store) struct driver_attribute driver_attr_##_name = __ATTR(_name,_mode,_show,_store) 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct device * driver_find_device(struct device_driver *drv, 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct device *start, void *data, 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*match)(struct device *, void *)); 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct class { 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char * name; 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct module * owner; 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct subsystem subsys; 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head children; 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head devices; 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head interfaces; 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct semaphore sem; 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class_attribute * class_attrs; 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class_device_attribute * class_dev_attrs; 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*uevent)(struct class_device *dev, char **envp, 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int num_envp, char *buffer, int buffer_size); 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*release)(struct class_device *dev); 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*class_release)(struct class *class); 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct class_attribute { 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct attribute attr; 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*show)(struct class *, char * buf); 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*store)(struct class *, const char * buf, size_t count); 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CLASS_ATTR(_name,_mode,_show,_store) struct class_attribute class_attr_##_name = __ATTR(_name,_mode,_show,_store) 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct class_device_attribute { 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct attribute attr; 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*show)(struct class_device *, char * buf); 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*store)(struct class_device *, const char * buf, size_t count); 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CLASS_DEVICE_ATTR(_name,_mode,_show,_store) struct class_device_attribute class_device_attr_##_name = __ATTR(_name,_mode,_show,_store) 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct class_device { 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head node; 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct kobject kobj; 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class * class; 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dev_t devt; 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class_device_attribute *devt_attr; 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class_device_attribute uevent_attr; 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct device * dev; 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void * class_data; 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class_device *parent; 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct attribute_group ** groups; 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*release)(struct class_device *dev); 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*uevent)(struct class_device *dev, char **envp, 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int num_envp, char *buffer, int buffer_size); 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char class_id[BUS_ID_SIZE]; 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct class_interface { 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head node; 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class *class; 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*add) (struct class_device *, struct class_interface *); 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*remove) (struct class_device *, struct class_interface *); 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct device_attribute { 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct attribute attr; 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*show)(struct device *dev, struct device_attribute *attr, 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char *buf); 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ssize_t (*store)(struct device *dev, struct device_attribute *attr, 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char *buf, size_t count); 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DEVICE_ATTR(_name,_mode,_show,_store) struct device_attribute dev_attr_##_name = __ATTR(_name,_mode,_show,_store) 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct device { 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct klist klist_children; 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct klist_node knode_parent; 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct klist_node knode_driver; 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct klist_node knode_bus; 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct device * parent; 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct kobject kobj; 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char bus_id[BUS_ID_SIZE]; 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct device_attribute uevent_attr; 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct device_attribute *devt_attr; 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct semaphore sem; 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct bus_type * bus; 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct device_driver *driver; 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *driver_data; 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *platform_data; 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *firmware_data; 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct dev_pm_info power; 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u64 *dma_mask; 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u64 coherent_dma_mask; 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head dma_pools; 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct dma_coherent_mem *dma_mem; 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head node; 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct class *class; 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dev_t devt; 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*release)(struct device * dev); 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define dev_printk(level, dev, format, arg...) printk(level "%s %s: " format , dev_driver_string(dev) , (dev)->bus_id , ## arg) 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef DEBUG 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define dev_dbg(dev, format, arg...) dev_printk(KERN_DEBUG , dev , format , ## arg) 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define dev_dbg(dev, format, arg...) do { (void)(dev); } while (0) 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define dev_err(dev, format, arg...) dev_printk(KERN_ERR , dev , format , ## arg) 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define dev_info(dev, format, arg...) dev_printk(KERN_INFO , dev , format , ## arg) 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define dev_warn(dev, format, arg...) dev_printk(KERN_WARNING , dev , format , ## arg) 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define dev_notice(dev, format, arg...) dev_printk(KERN_NOTICE , dev , format , ## arg) 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MODULE_ALIAS_CHARDEV(major,minor) MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor)) 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MODULE_ALIAS_CHARDEV_MAJOR(major) MODULE_ALIAS("char-major-" __stringify(major) "-*") 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 223