summaryrefslogtreecommitdiffstats
path: root/driver/ioctl.c
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@suren.me>2015-11-19 03:19:51 +0100
committerSuren A. Chilingaryan <csa@suren.me>2015-11-19 03:19:51 +0100
commit6191a86bf2de5413cc9100e1450b541e5dfcb8f9 (patch)
treec4edeb5e91aa4098c55d01a00f2d292d0635ae61 /driver/ioctl.c
parent46754246bddd1c15d61e915bd860448bab8d7400 (diff)
downloadpcitool-6191a86bf2de5413cc9100e1450b541e5dfcb8f9.tar.gz
pcitool-6191a86bf2de5413cc9100e1450b541e5dfcb8f9.tar.bz2
pcitool-6191a86bf2de5413cc9100e1450b541e5dfcb8f9.tar.xz
pcitool-6191a86bf2de5413cc9100e1450b541e5dfcb8f9.zip
Support setting payload size
Diffstat (limited to 'driver/ioctl.c')
-rw-r--r--driver/ioctl.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/driver/ioctl.c b/driver/ioctl.c
index e003476..67cdc52 100644
--- a/driver/ioctl.c
+++ b/driver/ioctl.c
@@ -433,7 +433,6 @@ static int ioctl_version(pcidriver_privdata_t *privdata, unsigned long arg)
return 0;
}
-
/**
*
* Gets current device and driver configuration
@@ -448,6 +447,7 @@ static int ioctl_device_state(pcidriver_privdata_t *privdata, unsigned long arg)
info = (pcilib_device_state_t) {
.iommu = iommu_present(privdata->pdev->dev.bus),
+ .mps = pcidriver_pcie_get_mps(privdata->pdev),
.dma_mask = privdata->pdev->dma_mask
};
@@ -468,7 +468,7 @@ static int ioctl_set_dma_mask(pcidriver_privdata_t *privdata, unsigned long arg)
{
int err;
- if ((arg < 24) && (arg > 63))
+ if ((arg < 24) || (arg > 64))
return -EINVAL;
err = pci_set_dma_mask(privdata->pdev, DMA_BIT_MASK(arg));
@@ -477,8 +477,29 @@ static int ioctl_set_dma_mask(pcidriver_privdata_t *privdata, unsigned long arg)
return err;
}
- printk(KERN_ERR "pci_set_dma_mask(%lu) successeded\n", arg);
+ return 0;
+}
+
+/**
+ *
+ * Sets Max Payload Size.
+ *
+ * @param arg Not a pointer, but payload size in bits
+ *
+ */
+static int ioctl_set_mps(pcidriver_privdata_t *privdata, unsigned long arg)
+{
+ int err;
+ if ((arg != 128) && (arg != 256) && (arg != 512))
+ return -EINVAL;
+
+ err = pcidriver_pcie_set_mps(privdata->pdev, arg);
+ if (err < 0) {
+ printk(KERN_ERR "pcie_set_mps(%lu) failed\n", arg);
+ return err;
+ }
+
return 0;
}
@@ -551,6 +572,9 @@ long pcidriver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
case PCIDRIVER_IOC_DMA_MASK:
return ioctl_set_dma_mask(privdata, arg);
+ case PCIDRIVER_IOC_MPS:
+ return ioctl_set_mps(privdata, arg);
+
default:
return -EINVAL;
}