cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sysfs.c (2208B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * PPS sysfs support
      4 *
      5 * Copyright (C) 2007-2009   Rodolfo Giometti <giometti@linux.it>
      6 */
      7
      8
      9#include <linux/device.h>
     10#include <linux/module.h>
     11#include <linux/string.h>
     12#include <linux/pps_kernel.h>
     13
     14/*
     15 * Attribute functions
     16 */
     17
     18static ssize_t assert_show(struct device *dev, struct device_attribute *attr,
     19			   char *buf)
     20{
     21	struct pps_device *pps = dev_get_drvdata(dev);
     22
     23	if (!(pps->info.mode & PPS_CAPTUREASSERT))
     24		return 0;
     25
     26	return sprintf(buf, "%lld.%09d#%d\n",
     27			(long long) pps->assert_tu.sec, pps->assert_tu.nsec,
     28			pps->assert_sequence);
     29}
     30static DEVICE_ATTR_RO(assert);
     31
     32static ssize_t clear_show(struct device *dev, struct device_attribute *attr,
     33			  char *buf)
     34{
     35	struct pps_device *pps = dev_get_drvdata(dev);
     36
     37	if (!(pps->info.mode & PPS_CAPTURECLEAR))
     38		return 0;
     39
     40	return sprintf(buf, "%lld.%09d#%d\n",
     41			(long long) pps->clear_tu.sec, pps->clear_tu.nsec,
     42			pps->clear_sequence);
     43}
     44static DEVICE_ATTR_RO(clear);
     45
     46static ssize_t mode_show(struct device *dev, struct device_attribute *attr,
     47			 char *buf)
     48{
     49	struct pps_device *pps = dev_get_drvdata(dev);
     50
     51	return sprintf(buf, "%4x\n", pps->info.mode);
     52}
     53static DEVICE_ATTR_RO(mode);
     54
     55static ssize_t echo_show(struct device *dev, struct device_attribute *attr,
     56			 char *buf)
     57{
     58	struct pps_device *pps = dev_get_drvdata(dev);
     59
     60	return sprintf(buf, "%d\n", !!pps->info.echo);
     61}
     62static DEVICE_ATTR_RO(echo);
     63
     64static ssize_t name_show(struct device *dev, struct device_attribute *attr,
     65			 char *buf)
     66{
     67	struct pps_device *pps = dev_get_drvdata(dev);
     68
     69	return sprintf(buf, "%s\n", pps->info.name);
     70}
     71static DEVICE_ATTR_RO(name);
     72
     73static ssize_t path_show(struct device *dev, struct device_attribute *attr,
     74			 char *buf)
     75{
     76	struct pps_device *pps = dev_get_drvdata(dev);
     77
     78	return sprintf(buf, "%s\n", pps->info.path);
     79}
     80static DEVICE_ATTR_RO(path);
     81
     82static struct attribute *pps_attrs[] = {
     83	&dev_attr_assert.attr,
     84	&dev_attr_clear.attr,
     85	&dev_attr_mode.attr,
     86	&dev_attr_echo.attr,
     87	&dev_attr_name.attr,
     88	&dev_attr_path.attr,
     89	NULL,
     90};
     91
     92static const struct attribute_group pps_group = {
     93	.attrs = pps_attrs,
     94};
     95
     96const struct attribute_group *pps_groups[] = {
     97	&pps_group,
     98	NULL,
     99};