Merge tag 'dmaengine-4.14-rc1' of git://git.infradead.org/users/vkoul/slave-dma
[sfrench/cifs-2.6.git] / drivers / dma / ioat / sysfs.c
index cb4a857ee21b79008bb4200f5e07a0c8cfbb4e64..3ac677f29e8f72680aff2053ad0194953d8340a9 100644 (file)
@@ -64,8 +64,24 @@ ioat_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
        return entry->show(&ioat_chan->dma_chan, page);
 }
 
+static ssize_t
+ioat_attr_store(struct kobject *kobj, struct attribute *attr,
+const char *page, size_t count)
+{
+       struct ioat_sysfs_entry *entry;
+       struct ioatdma_chan *ioat_chan;
+
+       entry = container_of(attr, struct ioat_sysfs_entry, attr);
+       ioat_chan = container_of(kobj, struct ioatdma_chan, kobj);
+
+       if (!entry->store)
+               return -EIO;
+       return entry->store(&ioat_chan->dma_chan, page, count);
+}
+
 const struct sysfs_ops ioat_sysfs_ops = {
        .show   = ioat_attr_show,
+       .store  = ioat_attr_store,
 };
 
 void ioat_kobject_add(struct ioatdma_device *ioat_dma, struct kobj_type *type)
@@ -121,11 +137,37 @@ static ssize_t ring_active_show(struct dma_chan *c, char *page)
 }
 static struct ioat_sysfs_entry ring_active_attr = __ATTR_RO(ring_active);
 
+static ssize_t intr_coalesce_show(struct dma_chan *c, char *page)
+{
+       struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
+
+       return sprintf(page, "%d\n", ioat_chan->intr_coalesce);
+}
+
+static ssize_t intr_coalesce_store(struct dma_chan *c, const char *page,
+size_t count)
+{
+       int intr_coalesce = 0;
+       struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
+
+       if (sscanf(page, "%du", &intr_coalesce) != -1) {
+               if ((intr_coalesce < 0) ||
+                   (intr_coalesce > IOAT_INTRDELAY_MASK))
+                       return -EINVAL;
+               ioat_chan->intr_coalesce = intr_coalesce;
+       }
+
+       return count;
+}
+
+static struct ioat_sysfs_entry intr_coalesce_attr = __ATTR_RW(intr_coalesce);
+
 static struct attribute *ioat_attrs[] = {
        &ring_size_attr.attr,
        &ring_active_attr.attr,
        &ioat_cap_attr.attr,
        &ioat_version_attr.attr,
+       &intr_coalesce_attr.attr,
        NULL,
 };