From eb1a5c64729d636fc1ff13939001bc49c9b67613 Mon Sep 17 00:00:00 2001 From: Jeremy Sowden Date: Fri, 31 May 2019 11:52:30 +0100 Subject: [PATCH] staging: kpc2000: export more device attributes via sysfs. Added more read-only device attributes in order to expose all the information about the hardware which is available by calling read() or ioct() on the misc device associated with it. Signed-off-by: Jeremy Sowden Signed-off-by: Greg Kroah-Hartman --- drivers/staging/kpc2000/kpc2000/core.c | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/drivers/staging/kpc2000/kpc2000/core.c b/drivers/staging/kpc2000/kpc2000/core.c index a84cf82..4d6a443 100644 --- a/drivers/staging/kpc2000/kpc2000/core.c +++ b/drivers/staging/kpc2000/kpc2000/core.c @@ -127,6 +127,58 @@ static ssize_t cpld_reconfigure(struct device *dev, } static DEVICE_ATTR(cpld_reconfigure, 0220, NULL, cpld_reconfigure); +static ssize_t irq_mask_reg_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct kp2000_device *pcard = dev_get_drvdata(dev); + u64 val; + + val = readq(pcard->sysinfo_regs_base + REG_INTERRUPT_MASK); + return sprintf(buf, "%016llx\n", val); +} +static DEVICE_ATTR_RO(irq_mask_reg); + +static ssize_t irq_active_reg_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct kp2000_device *pcard = dev_get_drvdata(dev); + u64 val; + + val = readq(pcard->sysinfo_regs_base + REG_INTERRUPT_ACTIVE); + return sprintf(buf, "%016llx\n", val); +} +static DEVICE_ATTR_RO(irq_active_reg); + +static ssize_t pcie_error_count_reg_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct kp2000_device *pcard = dev_get_drvdata(dev); + u64 val; + + val = readq(pcard->sysinfo_regs_base + REG_PCIE_ERROR_COUNT); + return sprintf(buf, "%016llx\n", val); +} +static DEVICE_ATTR_RO(pcie_error_count_reg); + +static ssize_t core_table_offset_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct kp2000_device *pcard = dev_get_drvdata(dev); + + return sprintf(buf, "%08x\n", pcard->core_table_offset); +} +static DEVICE_ATTR_RO(core_table_offset); + +static ssize_t core_table_length_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct kp2000_device *pcard = dev_get_drvdata(dev); + + return sprintf(buf, "%08x\n", pcard->core_table_length); +} +static DEVICE_ATTR_RO(core_table_length); + static const struct attribute *kp_attr_list[] = { &dev_attr_ssid.attr, &dev_attr_ddna.attr, @@ -137,6 +189,11 @@ static const struct attribute *kp_attr_list[] = { &dev_attr_build_time.attr, &dev_attr_cpld_reg.attr, &dev_attr_cpld_reconfigure.attr, + &dev_attr_irq_mask_reg.attr, + &dev_attr_irq_active_reg.attr, + &dev_attr_pcie_error_count_reg.attr, + &dev_attr_core_table_offset.attr, + &dev_attr_core_table_length.attr, NULL, }; -- 2.7.4