diff options
Diffstat (limited to 'include/linux/device.h')
| -rw-r--r-- | include/linux/device.h | 76 |
1 files changed, 45 insertions, 31 deletions
diff --git a/include/linux/device.h b/include/linux/device.h index 2a9d6ed59579..952b01033c32 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <linux/atomic.h> | 26 | #include <linux/atomic.h> |
| 27 | #include <linux/ratelimit.h> | 27 | #include <linux/ratelimit.h> |
| 28 | #include <linux/uidgid.h> | 28 | #include <linux/uidgid.h> |
| 29 | #include <linux/gfp.h> | ||
| 29 | #include <asm/device.h> | 30 | #include <asm/device.h> |
| 30 | 31 | ||
| 31 | struct device; | 32 | struct device; |
| @@ -63,9 +64,7 @@ extern void bus_remove_file(struct bus_type *, struct bus_attribute *); | |||
| 63 | * @name: The name of the bus. | 64 | * @name: The name of the bus. |
| 64 | * @dev_name: Used for subsystems to enumerate devices like ("foo%u", dev->id). | 65 | * @dev_name: Used for subsystems to enumerate devices like ("foo%u", dev->id). |
| 65 | * @dev_root: Default device to use as the parent. | 66 | * @dev_root: Default device to use as the parent. |
| 66 | * @bus_attrs: Default attributes of the bus. | ||
| 67 | * @dev_attrs: Default attributes of the devices on the bus. | 67 | * @dev_attrs: Default attributes of the devices on the bus. |
| 68 | * @drv_attrs: Default attributes of the device drivers on the bus. | ||
| 69 | * @bus_groups: Default attributes of the bus. | 68 | * @bus_groups: Default attributes of the bus. |
| 70 | * @dev_groups: Default attributes of the devices on the bus. | 69 | * @dev_groups: Default attributes of the devices on the bus. |
| 71 | * @drv_groups: Default attributes of the device drivers on the bus. | 70 | * @drv_groups: Default attributes of the device drivers on the bus. |
| @@ -106,9 +105,7 @@ struct bus_type { | |||
| 106 | const char *name; | 105 | const char *name; |
| 107 | const char *dev_name; | 106 | const char *dev_name; |
| 108 | struct device *dev_root; | 107 | struct device *dev_root; |
| 109 | struct bus_attribute *bus_attrs; /* use bus_groups instead */ | ||
| 110 | struct device_attribute *dev_attrs; /* use dev_groups instead */ | 108 | struct device_attribute *dev_attrs; /* use dev_groups instead */ |
| 111 | struct driver_attribute *drv_attrs; /* use drv_groups instead */ | ||
| 112 | const struct attribute_group **bus_groups; | 109 | const struct attribute_group **bus_groups; |
| 113 | const struct attribute_group **dev_groups; | 110 | const struct attribute_group **dev_groups; |
| 114 | const struct attribute_group **drv_groups; | 111 | const struct attribute_group **drv_groups; |
| @@ -329,8 +326,6 @@ int subsys_virtual_register(struct bus_type *subsys, | |||
| 329 | * @owner: The module owner. | 326 | * @owner: The module owner. |
| 330 | * @class_attrs: Default attributes of this class. | 327 | * @class_attrs: Default attributes of this class. |
| 331 | * @dev_groups: Default attributes of the devices that belong to the class. | 328 | * @dev_groups: Default attributes of the devices that belong to the class. |
| 332 | * @dev_attrs: Default attributes of the devices belong to the class. | ||
| 333 | * @dev_bin_attrs: Default binary attributes of the devices belong to the class. | ||
| 334 | * @dev_kobj: The kobject that represents this class and links it into the hierarchy. | 329 | * @dev_kobj: The kobject that represents this class and links it into the hierarchy. |
| 335 | * @dev_uevent: Called when a device is added, removed from this class, or a | 330 | * @dev_uevent: Called when a device is added, removed from this class, or a |
| 336 | * few other things that generate uevents to add the environment | 331 | * few other things that generate uevents to add the environment |
| @@ -358,9 +353,7 @@ struct class { | |||
| 358 | struct module *owner; | 353 | struct module *owner; |
| 359 | 354 | ||
| 360 | struct class_attribute *class_attrs; | 355 | struct class_attribute *class_attrs; |
| 361 | struct device_attribute *dev_attrs; /* use dev_groups instead */ | ||
| 362 | const struct attribute_group **dev_groups; | 356 | const struct attribute_group **dev_groups; |
| 363 | struct bin_attribute *dev_bin_attrs; | ||
| 364 | struct kobject *dev_kobj; | 357 | struct kobject *dev_kobj; |
| 365 | 358 | ||
| 366 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); | 359 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); |
| @@ -427,8 +420,6 @@ struct class_attribute { | |||
| 427 | char *buf); | 420 | char *buf); |
| 428 | ssize_t (*store)(struct class *class, struct class_attribute *attr, | 421 | ssize_t (*store)(struct class *class, struct class_attribute *attr, |
| 429 | const char *buf, size_t count); | 422 | const char *buf, size_t count); |
| 430 | const void *(*namespace)(struct class *class, | ||
| 431 | const struct class_attribute *attr); | ||
| 432 | }; | 423 | }; |
| 433 | 424 | ||
| 434 | #define CLASS_ATTR(_name, _mode, _show, _store) \ | 425 | #define CLASS_ATTR(_name, _mode, _show, _store) \ |
| @@ -438,10 +429,24 @@ struct class_attribute { | |||
| 438 | #define CLASS_ATTR_RO(_name) \ | 429 | #define CLASS_ATTR_RO(_name) \ |
| 439 | struct class_attribute class_attr_##_name = __ATTR_RO(_name) | 430 | struct class_attribute class_attr_##_name = __ATTR_RO(_name) |
| 440 | 431 | ||
| 441 | extern int __must_check class_create_file(struct class *class, | 432 | extern int __must_check class_create_file_ns(struct class *class, |
| 442 | const struct class_attribute *attr); | 433 | const struct class_attribute *attr, |
| 443 | extern void class_remove_file(struct class *class, | 434 | const void *ns); |
| 444 | const struct class_attribute *attr); | 435 | extern void class_remove_file_ns(struct class *class, |
| 436 | const struct class_attribute *attr, | ||
| 437 | const void *ns); | ||
| 438 | |||
| 439 | static inline int __must_check class_create_file(struct class *class, | ||
| 440 | const struct class_attribute *attr) | ||
| 441 | { | ||
| 442 | return class_create_file_ns(class, attr, NULL); | ||
| 443 | } | ||
| 444 | |||
| 445 | static inline void class_remove_file(struct class *class, | ||
| 446 | const struct class_attribute *attr) | ||
| 447 | { | ||
| 448 | return class_remove_file_ns(class, attr, NULL); | ||
| 449 | } | ||
| 445 | 450 | ||
| 446 | /* Simple class attribute that is just a static string */ | 451 | /* Simple class attribute that is just a static string */ |
| 447 | struct class_attribute_string { | 452 | struct class_attribute_string { |
| @@ -602,8 +607,24 @@ extern void devres_close_group(struct device *dev, void *id); | |||
| 602 | extern void devres_remove_group(struct device *dev, void *id); | 607 | extern void devres_remove_group(struct device *dev, void *id); |
| 603 | extern int devres_release_group(struct device *dev, void *id); | 608 | extern int devres_release_group(struct device *dev, void *id); |
| 604 | 609 | ||
| 605 | /* managed kzalloc/kfree for device drivers, no kmalloc, always use kzalloc */ | 610 | /* managed devm_k.alloc/kfree for device drivers */ |
| 606 | extern void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp); | 611 | extern void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp); |
| 612 | static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp) | ||
| 613 | { | ||
| 614 | return devm_kmalloc(dev, size, gfp | __GFP_ZERO); | ||
| 615 | } | ||
| 616 | static inline void *devm_kmalloc_array(struct device *dev, | ||
| 617 | size_t n, size_t size, gfp_t flags) | ||
| 618 | { | ||
| 619 | if (size != 0 && n > SIZE_MAX / size) | ||
| 620 | return NULL; | ||
| 621 | return devm_kmalloc(dev, n * size, flags); | ||
| 622 | } | ||
| 623 | static inline void *devm_kcalloc(struct device *dev, | ||
| 624 | size_t n, size_t size, gfp_t flags) | ||
| 625 | { | ||
| 626 | return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO); | ||
| 627 | } | ||
| 607 | extern void devm_kfree(struct device *dev, void *p); | 628 | extern void devm_kfree(struct device *dev, void *p); |
| 608 | 629 | ||
| 609 | void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); | 630 | void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); |
| @@ -623,9 +644,11 @@ struct device_dma_parameters { | |||
| 623 | unsigned long segment_boundary_mask; | 644 | unsigned long segment_boundary_mask; |
| 624 | }; | 645 | }; |
| 625 | 646 | ||
| 647 | struct acpi_device; | ||
| 648 | |||
| 626 | struct acpi_dev_node { | 649 | struct acpi_dev_node { |
| 627 | #ifdef CONFIG_ACPI | 650 | #ifdef CONFIG_ACPI |
| 628 | void *handle; | 651 | struct acpi_device *companion; |
| 629 | #endif | 652 | #endif |
| 630 | }; | 653 | }; |
| 631 | 654 | ||
| @@ -769,14 +792,6 @@ static inline struct device *kobj_to_dev(struct kobject *kobj) | |||
| 769 | return container_of(kobj, struct device, kobj); | 792 | return container_of(kobj, struct device, kobj); |
| 770 | } | 793 | } |
| 771 | 794 | ||
| 772 | #ifdef CONFIG_ACPI | ||
| 773 | #define ACPI_HANDLE(dev) ((dev)->acpi_node.handle) | ||
| 774 | #define ACPI_HANDLE_SET(dev, _handle_) (dev)->acpi_node.handle = (_handle_) | ||
| 775 | #else | ||
| 776 | #define ACPI_HANDLE(dev) (NULL) | ||
| 777 | #define ACPI_HANDLE_SET(dev, _handle_) do { } while (0) | ||
| 778 | #endif | ||
| 779 | |||
| 780 | /* Get the wakeup routines, which depend on struct device */ | 795 | /* Get the wakeup routines, which depend on struct device */ |
| 781 | #include <linux/pm_wakeup.h> | 796 | #include <linux/pm_wakeup.h> |
| 782 | 797 | ||
| @@ -1149,16 +1164,15 @@ do { \ | |||
| 1149 | #endif | 1164 | #endif |
| 1150 | 1165 | ||
| 1151 | /* | 1166 | /* |
| 1152 | * dev_WARN*() acts like dev_printk(), but with the key difference | 1167 | * dev_WARN*() acts like dev_printk(), but with the key difference of |
| 1153 | * of using a WARN/WARN_ON to get the message out, including the | 1168 | * using WARN/WARN_ONCE to include file/line information and a backtrace. |
| 1154 | * file/line information and a backtrace. | ||
| 1155 | */ | 1169 | */ |
| 1156 | #define dev_WARN(dev, format, arg...) \ | 1170 | #define dev_WARN(dev, format, arg...) \ |
| 1157 | WARN(1, "Device: %s\n" format, dev_driver_string(dev), ## arg); | 1171 | WARN(1, "%s %s: " format, dev_driver_string(dev), dev_name(dev), ## arg); |
| 1158 | 1172 | ||
| 1159 | #define dev_WARN_ONCE(dev, condition, format, arg...) \ | 1173 | #define dev_WARN_ONCE(dev, condition, format, arg...) \ |
| 1160 | WARN_ONCE(condition, "Device %s\n" format, \ | 1174 | WARN_ONCE(condition, "%s %s: " format, \ |
| 1161 | dev_driver_string(dev), ## arg) | 1175 | dev_driver_string(dev), dev_name(dev), ## arg) |
| 1162 | 1176 | ||
| 1163 | /* Create alias, so I can be autoloaded. */ | 1177 | /* Create alias, so I can be autoloaded. */ |
| 1164 | #define MODULE_ALIAS_CHARDEV(major,minor) \ | 1178 | #define MODULE_ALIAS_CHARDEV(major,minor) \ |
