83 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2// Copyright (c) 2021 Intel Corporation3 4#include <linux/device.h>5#include <linux/kernel.h>6#include <linux/peci.h>7 8#include "internal.h"9 10static int rescan_controller(struct device *dev, void *data)11{12 if (dev->type != &peci_controller_type)13 return 0;14 15 return peci_controller_scan_devices(to_peci_controller(dev));16}17 18static ssize_t rescan_store(const struct bus_type *bus, const char *buf, size_t count)19{20 bool res;21 int ret;22 23 ret = kstrtobool(buf, &res);24 if (ret)25 return ret;26 27 if (!res)28 return count;29 30 ret = bus_for_each_dev(&peci_bus_type, NULL, NULL, rescan_controller);31 if (ret)32 return ret;33 34 return count;35}36static BUS_ATTR_WO(rescan);37 38static struct attribute *peci_bus_attrs[] = {39 &bus_attr_rescan.attr,40 NULL41};42 43static const struct attribute_group peci_bus_group = {44 .attrs = peci_bus_attrs,45};46 47const struct attribute_group *peci_bus_groups[] = {48 &peci_bus_group,49 NULL50};51 52static ssize_t remove_store(struct device *dev, struct device_attribute *attr,53 const char *buf, size_t count)54{55 struct peci_device *device = to_peci_device(dev);56 bool res;57 int ret;58 59 ret = kstrtobool(buf, &res);60 if (ret)61 return ret;62 63 if (res && device_remove_file_self(dev, attr))64 peci_device_destroy(device);65 66 return count;67}68static DEVICE_ATTR_IGNORE_LOCKDEP(remove, 0200, NULL, remove_store);69 70static struct attribute *peci_device_attrs[] = {71 &dev_attr_remove.attr,72 NULL73};74 75static const struct attribute_group peci_device_group = {76 .attrs = peci_device_attrs,77};78 79const struct attribute_group *peci_device_groups[] = {80 &peci_device_group,81 NULL82};83