root/net/ieee802154/sysfs.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dev_to_rdev
  2. name_show
  3. wpan_phy_release
  4. wpan_phy_suspend
  5. wpan_phy_resume
  6. wpan_phy_sysfs_init
  7. wpan_phy_sysfs_exit

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  *
   4  * Authors:
   5  * Alexander Aring <aar@pengutronix.de>
   6  *
   7  * Based on: net/wireless/sysfs.c
   8  */
   9 
  10 #include <linux/device.h>
  11 #include <linux/rtnetlink.h>
  12 
  13 #include <net/cfg802154.h>
  14 
  15 #include "core.h"
  16 #include "sysfs.h"
  17 #include "rdev-ops.h"
  18 
  19 static inline struct cfg802154_registered_device *
  20 dev_to_rdev(struct device *dev)
  21 {
  22         return container_of(dev, struct cfg802154_registered_device,
  23                             wpan_phy.dev);
  24 }
  25 
  26 #define SHOW_FMT(name, fmt, member)                                     \
  27 static ssize_t name ## _show(struct device *dev,                        \
  28                              struct device_attribute *attr,             \
  29                              char *buf)                                 \
  30 {                                                                       \
  31         return sprintf(buf, fmt "\n", dev_to_rdev(dev)->member);        \
  32 }                                                                       \
  33 static DEVICE_ATTR_RO(name)
  34 
  35 SHOW_FMT(index, "%d", wpan_phy_idx);
  36 
  37 static ssize_t name_show(struct device *dev,
  38                          struct device_attribute *attr,
  39                          char *buf)
  40 {
  41         struct wpan_phy *wpan_phy = &dev_to_rdev(dev)->wpan_phy;
  42 
  43         return sprintf(buf, "%s\n", dev_name(&wpan_phy->dev));
  44 }
  45 static DEVICE_ATTR_RO(name);
  46 
  47 static void wpan_phy_release(struct device *dev)
  48 {
  49         struct cfg802154_registered_device *rdev = dev_to_rdev(dev);
  50 
  51         cfg802154_dev_free(rdev);
  52 }
  53 
  54 static struct attribute *pmib_attrs[] = {
  55         &dev_attr_index.attr,
  56         &dev_attr_name.attr,
  57         NULL,
  58 };
  59 ATTRIBUTE_GROUPS(pmib);
  60 
  61 #ifdef CONFIG_PM_SLEEP
  62 static int wpan_phy_suspend(struct device *dev)
  63 {
  64         struct cfg802154_registered_device *rdev = dev_to_rdev(dev);
  65         int ret = 0;
  66 
  67         if (rdev->ops->suspend) {
  68                 rtnl_lock();
  69                 ret = rdev_suspend(rdev);
  70                 rtnl_unlock();
  71         }
  72 
  73         return ret;
  74 }
  75 
  76 static int wpan_phy_resume(struct device *dev)
  77 {
  78         struct cfg802154_registered_device *rdev = dev_to_rdev(dev);
  79         int ret = 0;
  80 
  81         if (rdev->ops->resume) {
  82                 rtnl_lock();
  83                 ret = rdev_resume(rdev);
  84                 rtnl_unlock();
  85         }
  86 
  87         return ret;
  88 }
  89 
  90 static SIMPLE_DEV_PM_OPS(wpan_phy_pm_ops, wpan_phy_suspend, wpan_phy_resume);
  91 #define WPAN_PHY_PM_OPS (&wpan_phy_pm_ops)
  92 #else
  93 #define WPAN_PHY_PM_OPS NULL
  94 #endif
  95 
  96 struct class wpan_phy_class = {
  97         .name = "ieee802154",
  98         .dev_release = wpan_phy_release,
  99         .dev_groups = pmib_groups,
 100         .pm = WPAN_PHY_PM_OPS,
 101 };
 102 
 103 int wpan_phy_sysfs_init(void)
 104 {
 105         return class_register(&wpan_phy_class);
 106 }
 107 
 108 void wpan_phy_sysfs_exit(void)
 109 {
 110         class_unregister(&wpan_phy_class);
 111 }

/* [<][>][^][v][top][bottom][index][help] */