Lines Matching refs:test
140 static inline u32 pci_endpoint_test_readl(struct pci_endpoint_test *test, in pci_endpoint_test_readl() argument
143 return readl(test->base + offset); in pci_endpoint_test_readl()
146 static inline void pci_endpoint_test_writel(struct pci_endpoint_test *test, in pci_endpoint_test_writel() argument
149 writel(value, test->base + offset); in pci_endpoint_test_writel()
154 struct pci_endpoint_test *test = dev_id; in pci_endpoint_test_irqhandler() local
157 reg = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); in pci_endpoint_test_irqhandler()
159 test->last_irq = irq; in pci_endpoint_test_irqhandler()
160 complete(&test->irq_raised); in pci_endpoint_test_irqhandler()
166 static void pci_endpoint_test_free_irq_vectors(struct pci_endpoint_test *test) in pci_endpoint_test_free_irq_vectors() argument
168 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_free_irq_vectors()
171 test->irq_type = PCITEST_IRQ_TYPE_UNDEFINED; in pci_endpoint_test_free_irq_vectors()
174 static int pci_endpoint_test_alloc_irq_vectors(struct pci_endpoint_test *test, in pci_endpoint_test_alloc_irq_vectors() argument
178 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_alloc_irq_vectors()
211 test->irq_type = type; in pci_endpoint_test_alloc_irq_vectors()
212 test->num_irqs = irq; in pci_endpoint_test_alloc_irq_vectors()
217 static void pci_endpoint_test_release_irq(struct pci_endpoint_test *test) in pci_endpoint_test_release_irq() argument
220 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_release_irq()
222 for (i = 0; i < test->num_irqs; i++) in pci_endpoint_test_release_irq()
223 free_irq(pci_irq_vector(pdev, i), test); in pci_endpoint_test_release_irq()
225 test->num_irqs = 0; in pci_endpoint_test_release_irq()
228 static int pci_endpoint_test_request_irq(struct pci_endpoint_test *test) in pci_endpoint_test_request_irq() argument
232 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_request_irq()
235 for (i = 0; i < test->num_irqs; i++) { in pci_endpoint_test_request_irq()
238 test->name, test); in pci_endpoint_test_request_irq()
246 switch (test->irq_type) { in pci_endpoint_test_request_irq()
263 test->num_irqs = i; in pci_endpoint_test_request_irq()
264 pci_endpoint_test_release_irq(test); in pci_endpoint_test_request_irq()
278 static int pci_endpoint_test_bar_memcmp(struct pci_endpoint_test *test, in pci_endpoint_test_bar_memcmp() argument
284 memcpy_toio(test->bar[barno] + offset, write_buf, size); in pci_endpoint_test_bar_memcmp()
286 memcpy_fromio(read_buf, test->bar[barno] + offset, size); in pci_endpoint_test_bar_memcmp()
291 static int pci_endpoint_test_bar(struct pci_endpoint_test *test, in pci_endpoint_test_bar() argument
297 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_bar()
304 if (!test->bar[barno]) in pci_endpoint_test_bar()
307 if (barno == test->test_reg_bar) in pci_endpoint_test_bar()
325 if (pci_endpoint_test_bar_memcmp(test, barno, offset, write_buf, in pci_endpoint_test_bar()
346 static void pci_endpoint_test_bars_write_bar(struct pci_endpoint_test *test, in pci_endpoint_test_bars_write_bar() argument
349 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_bars_write_bar()
354 if (barno == test->test_reg_bar) in pci_endpoint_test_bars_write_bar()
359 test->bar[barno] + j); in pci_endpoint_test_bars_write_bar()
362 static int pci_endpoint_test_bars_read_bar(struct pci_endpoint_test *test, in pci_endpoint_test_bars_read_bar() argument
365 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_bars_read_bar()
372 if (barno == test->test_reg_bar) in pci_endpoint_test_bars_read_bar()
378 val = readl_relaxed(test->bar[barno] + j); in pci_endpoint_test_bars_read_bar()
390 static int pci_endpoint_test_bars(struct pci_endpoint_test *test) in pci_endpoint_test_bars() argument
397 if (test->bar[bar]) in pci_endpoint_test_bars()
398 pci_endpoint_test_bars_write_bar(test, bar); in pci_endpoint_test_bars()
407 if (test->bar[bar]) { in pci_endpoint_test_bars()
408 ret = pci_endpoint_test_bars_read_bar(test, bar); in pci_endpoint_test_bars()
417 static int pci_endpoint_test_intx_irq(struct pci_endpoint_test *test) in pci_endpoint_test_intx_irq() argument
421 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, in pci_endpoint_test_intx_irq()
423 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 0); in pci_endpoint_test_intx_irq()
424 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_intx_irq()
426 val = wait_for_completion_timeout(&test->irq_raised, in pci_endpoint_test_intx_irq()
434 static int pci_endpoint_test_msi_irq(struct pci_endpoint_test *test, in pci_endpoint_test_msi_irq() argument
437 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_msi_irq()
441 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, in pci_endpoint_test_msi_irq()
444 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, msi_num); in pci_endpoint_test_msi_irq()
445 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_msi_irq()
448 val = wait_for_completion_timeout(&test->irq_raised, in pci_endpoint_test_msi_irq()
457 if (ret != test->last_irq) in pci_endpoint_test_msi_irq()
479 static int pci_endpoint_test_copy(struct pci_endpoint_test *test, in pci_endpoint_test_copy() argument
490 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_copy()
497 size_t alignment = test->alignment; in pci_endpoint_test_copy()
498 int irq_type = test->irq_type; in pci_endpoint_test_copy()
549 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_LOWER_SRC_ADDR, in pci_endpoint_test_copy()
552 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_UPPER_SRC_ADDR, in pci_endpoint_test_copy()
581 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_LOWER_DST_ADDR, in pci_endpoint_test_copy()
583 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_UPPER_DST_ADDR, in pci_endpoint_test_copy()
586 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, in pci_endpoint_test_copy()
589 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_FLAGS, flags); in pci_endpoint_test_copy()
590 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); in pci_endpoint_test_copy()
591 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); in pci_endpoint_test_copy()
592 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_copy()
595 wait_for_completion(&test->irq_raised); in pci_endpoint_test_copy()
616 static int pci_endpoint_test_write(struct pci_endpoint_test *test, in pci_endpoint_test_write() argument
625 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_write()
630 size_t alignment = test->alignment; in pci_endpoint_test_write()
631 int irq_type = test->irq_type; in pci_endpoint_test_write()
684 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_CHECKSUM, in pci_endpoint_test_write()
687 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_LOWER_SRC_ADDR, in pci_endpoint_test_write()
689 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_UPPER_SRC_ADDR, in pci_endpoint_test_write()
692 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, size); in pci_endpoint_test_write()
694 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_FLAGS, flags); in pci_endpoint_test_write()
695 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); in pci_endpoint_test_write()
696 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); in pci_endpoint_test_write()
697 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_write()
700 wait_for_completion(&test->irq_raised); in pci_endpoint_test_write()
702 reg = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); in pci_endpoint_test_write()
714 static int pci_endpoint_test_read(struct pci_endpoint_test *test, in pci_endpoint_test_read() argument
723 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_read()
728 size_t alignment = test->alignment; in pci_endpoint_test_read()
729 int irq_type = test->irq_type; in pci_endpoint_test_read()
778 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_LOWER_DST_ADDR, in pci_endpoint_test_read()
780 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_UPPER_DST_ADDR, in pci_endpoint_test_read()
783 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, size); in pci_endpoint_test_read()
785 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_FLAGS, flags); in pci_endpoint_test_read()
786 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); in pci_endpoint_test_read()
787 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); in pci_endpoint_test_read()
788 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_read()
791 wait_for_completion(&test->irq_raised); in pci_endpoint_test_read()
797 if (crc32 != pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_CHECKSUM)) in pci_endpoint_test_read()
805 static int pci_endpoint_test_clear_irq(struct pci_endpoint_test *test) in pci_endpoint_test_clear_irq() argument
807 pci_endpoint_test_release_irq(test); in pci_endpoint_test_clear_irq()
808 pci_endpoint_test_free_irq_vectors(test); in pci_endpoint_test_clear_irq()
813 static int pci_endpoint_test_set_irq(struct pci_endpoint_test *test, in pci_endpoint_test_set_irq() argument
816 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_set_irq()
827 if (test->ep_caps & CAP_MSI) in pci_endpoint_test_set_irq()
829 else if (test->ep_caps & CAP_MSIX) in pci_endpoint_test_set_irq()
831 else if (test->ep_caps & CAP_INTX) in pci_endpoint_test_set_irq()
838 if (test->irq_type == req_irq_type) in pci_endpoint_test_set_irq()
841 pci_endpoint_test_release_irq(test); in pci_endpoint_test_set_irq()
842 pci_endpoint_test_free_irq_vectors(test); in pci_endpoint_test_set_irq()
844 ret = pci_endpoint_test_alloc_irq_vectors(test, req_irq_type); in pci_endpoint_test_set_irq()
848 ret = pci_endpoint_test_request_irq(test); in pci_endpoint_test_set_irq()
850 pci_endpoint_test_free_irq_vectors(test); in pci_endpoint_test_set_irq()
857 static int pci_endpoint_test_doorbell(struct pci_endpoint_test *test) in pci_endpoint_test_doorbell() argument
859 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_doorbell()
861 int irq_type = test->irq_type; in pci_endpoint_test_doorbell()
873 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); in pci_endpoint_test_doorbell()
874 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); in pci_endpoint_test_doorbell()
875 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_doorbell()
878 left = wait_for_completion_timeout(&test->irq_raised, msecs_to_jiffies(1000)); in pci_endpoint_test_doorbell()
880 status = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); in pci_endpoint_test_doorbell()
886 data = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_DB_DATA); in pci_endpoint_test_doorbell()
887 addr = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_DB_OFFSET); in pci_endpoint_test_doorbell()
888 bar = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_DB_BAR); in pci_endpoint_test_doorbell()
890 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); in pci_endpoint_test_doorbell()
891 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); in pci_endpoint_test_doorbell()
893 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_STATUS, 0); in pci_endpoint_test_doorbell()
895 bar = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_DB_BAR); in pci_endpoint_test_doorbell()
897 writel(data, test->bar[bar] + addr); in pci_endpoint_test_doorbell()
899 left = wait_for_completion_timeout(&test->irq_raised, msecs_to_jiffies(1000)); in pci_endpoint_test_doorbell()
901 status = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); in pci_endpoint_test_doorbell()
906 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_doorbell()
909 wait_for_completion_timeout(&test->irq_raised, msecs_to_jiffies(1000)); in pci_endpoint_test_doorbell()
911 status |= pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); in pci_endpoint_test_doorbell()
929 struct pci_endpoint_test *test = to_endpoint_test(file->private_data); in pci_endpoint_test_ioctl() local
930 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_ioctl()
932 mutex_lock(&test->mutex); in pci_endpoint_test_ioctl()
934 reinit_completion(&test->irq_raised); in pci_endpoint_test_ioctl()
935 test->last_irq = -ENODATA; in pci_endpoint_test_ioctl()
944 ret = pci_endpoint_test_bar(test, bar); in pci_endpoint_test_ioctl()
947 ret = pci_endpoint_test_bars(test); in pci_endpoint_test_ioctl()
950 ret = pci_endpoint_test_intx_irq(test); in pci_endpoint_test_ioctl()
954 ret = pci_endpoint_test_msi_irq(test, arg, cmd == PCITEST_MSIX); in pci_endpoint_test_ioctl()
957 ret = pci_endpoint_test_write(test, arg); in pci_endpoint_test_ioctl()
960 ret = pci_endpoint_test_read(test, arg); in pci_endpoint_test_ioctl()
963 ret = pci_endpoint_test_copy(test, arg); in pci_endpoint_test_ioctl()
966 ret = pci_endpoint_test_set_irq(test, arg); in pci_endpoint_test_ioctl()
969 ret = test->irq_type; in pci_endpoint_test_ioctl()
972 ret = pci_endpoint_test_clear_irq(test); in pci_endpoint_test_ioctl()
975 ret = pci_endpoint_test_doorbell(test); in pci_endpoint_test_ioctl()
980 mutex_unlock(&test->mutex); in pci_endpoint_test_ioctl()
989 static void pci_endpoint_test_get_capabilities(struct pci_endpoint_test *test) in pci_endpoint_test_get_capabilities() argument
991 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_get_capabilities()
994 test->ep_caps = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_CAPS); in pci_endpoint_test_get_capabilities()
995 dev_dbg(dev, "PCI_ENDPOINT_TEST_CAPS: %#x\n", test->ep_caps); in pci_endpoint_test_get_capabilities()
998 if (test->ep_caps & CAP_UNALIGNED_ACCESS) in pci_endpoint_test_get_capabilities()
999 test->alignment = 0; in pci_endpoint_test_get_capabilities()
1011 struct pci_endpoint_test *test; in pci_endpoint_test_probe() local
1019 test = devm_kzalloc(dev, sizeof(*test), GFP_KERNEL); in pci_endpoint_test_probe()
1020 if (!test) in pci_endpoint_test_probe()
1023 test->test_reg_bar = 0; in pci_endpoint_test_probe()
1024 test->alignment = 0; in pci_endpoint_test_probe()
1025 test->pdev = pdev; in pci_endpoint_test_probe()
1026 test->irq_type = PCITEST_IRQ_TYPE_UNDEFINED; in pci_endpoint_test_probe()
1031 test->test_reg_bar = test_reg_bar; in pci_endpoint_test_probe()
1032 test->alignment = data->alignment; in pci_endpoint_test_probe()
1035 init_completion(&test->irq_raised); in pci_endpoint_test_probe()
1036 mutex_init(&test->mutex); in pci_endpoint_test_probe()
1061 test->bar[bar] = base; in pci_endpoint_test_probe()
1065 test->base = test->bar[test_reg_bar]; in pci_endpoint_test_probe()
1066 if (!test->base) { in pci_endpoint_test_probe()
1073 pci_set_drvdata(pdev, test); in pci_endpoint_test_probe()
1083 test->name = kstrdup(name, GFP_KERNEL); in pci_endpoint_test_probe()
1084 if (!test->name) { in pci_endpoint_test_probe()
1089 pci_endpoint_test_get_capabilities(test); in pci_endpoint_test_probe()
1091 misc_device = &test->miscdev; in pci_endpoint_test_probe()
1113 kfree(test->name); in pci_endpoint_test_probe()
1120 if (test->bar[bar]) in pci_endpoint_test_probe()
1121 pci_iounmap(pdev, test->bar[bar]); in pci_endpoint_test_probe()
1136 struct pci_endpoint_test *test = pci_get_drvdata(pdev); in pci_endpoint_test_remove() local
1137 struct miscdevice *misc_device = &test->miscdev; in pci_endpoint_test_remove()
1144 pci_endpoint_test_release_irq(test); in pci_endpoint_test_remove()
1145 pci_endpoint_test_free_irq_vectors(test); in pci_endpoint_test_remove()
1147 misc_deregister(&test->miscdev); in pci_endpoint_test_remove()
1149 kfree(test->name); in pci_endpoint_test_remove()
1152 if (test->bar[bar]) in pci_endpoint_test_remove()
1153 pci_iounmap(pdev, test->bar[bar]); in pci_endpoint_test_remove()