Driver for PCI Endpoint Test Function

This driver should be used as a host side driver if the root complex is
connected to a configurable PCI endpoint running *pci_epf_test* function
driver configured according to [1].

The "pci_endpoint_test" driver can be used to perform the following tests.

The PCI driver for the test device performs the following tests
	*) verifying addresses programmed in BAR
	*) raise legacy IRQ
	*) raise MSI IRQ
	*) raise MSI-X IRQ
	*) read data
	*) write data
	*) copy data

This misc driver creates /dev/pci-endpoint-test.<num> for every
*pci_epf_test* function connected to the root complex and "ioctls"
should be used to perform the above tests.

ioctl
-----
 PCITEST_BAR: Tests the BAR. The number of the BAR to be tested
	      should be passed as argument.
 PCITEST_LEGACY_IRQ: Tests legacy IRQ
 PCITEST_MSI: Tests message signalled interrupts. The MSI number
	      to be tested should be passed as argument.
 PCITEST_MSIX: Tests message signalled interrupts. The MSI-X number
	      to be tested should be passed as argument.
 PCITEST_SET_IRQTYPE: Changes driver IRQ type configuration. The IRQ type
	      should be passed as argument (0: Legacy, 1:MSI, 2:MSI-X).
 PCITEST_GET_IRQTYPE: Gets driver IRQ type configuration.
 PCITEST_WRITE: Perform write tests. The size of the buffer should be passed
		as argument.
 PCITEST_READ: Perform read tests. The size of the buffer should be passed
	       as argument.
 PCITEST_COPY: Perform read tests. The size of the buffer should be passed
	       as argument.

[1] -> Documentation/PCI/endpoint/function/binding/pci-test.txt
