Commit 0ec34318 authored by Jens Korinth's avatar Jens Korinth
Browse files

Merge branch 'pcie_kernel_4.4' into '2017.2'

Adds support for older kernel Versions < 4.8

See merge request !13
parents 2f23b4aa 70440ffb
# Makefile to build the ffLink module, which can be loaded with 'sudo insmod ffLink.ko' afterwards
# make should not be run as root, otherwise generated files cannot be removed correctly
# Name of Kernel module
# Name of Kernel module
obj-m := ffLink.o
# composition of files needed to compile
......@@ -35,5 +35,5 @@ ccflags-y := $(COMPILEFLAGS) $(DEBUGFLAGS)
all:
#@ KCFLAGS+="$(COMPILEFLAGS) $(DEBUGFLAGS)" make -C $(LINUX_HOME) M=$(PWD) modules
@ make -C $(LINUX_HOME) M=$(PWD) modules
clean:
clean:
@ make -C $(LINUX_HOME) M=$(PWD) clean
......@@ -33,6 +33,15 @@
static struct pci_data_struct pci_data;
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
static struct msix_entry msix_entries[REQUIRED_INTERRUPTS];
u32 pci_irq_vector(struct pci_dev *pdev, int c) {
return msix_entries[c].vector;
}
#endif
/******************************************************************************/
/**
......@@ -125,7 +134,6 @@ static int register_intr_handler(struct pci_dev *pdev, int c)
/* Request interrupt line for unique function
* alternatively function will be called from free_irq as well with flag IRQF_SHARED */
if (c == 0) {
err = request_irq(pci_irq_vector(pdev, c), intr_handler_dma, IRQF_EARLY_RESUME, FFLINK_PCI_NAME, pdev);
}
......@@ -306,10 +314,17 @@ static int claim_msi(struct pci_dev *pdev)
for (i = 0; i < REQUIRED_INTERRUPTS; i++) {
pci_data.irq_mapping[i] = -1;
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
msix_entries[i].entry = i;
#endif
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
err = pci_enable_msix_range(pdev, msix_entries, REQUIRED_INTERRUPTS, REQUIRED_INTERRUPTS);
#else
/* set up MSI interrupt vector to max size */
err = pci_alloc_irq_vectors(pdev, REQUIRED_INTERRUPTS, REQUIRED_INTERRUPTS, PCI_IRQ_MSIX);
#endif
if (err <= 0) {
fflink_warn("Cannot set MSI vector (%d)\n", err);
......@@ -332,7 +347,11 @@ static int claim_msi(struct pci_dev *pdev)
error_pci_req_irq:
free_irqs(pdev);
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
pci_disable_msix(pdev);
#else
pci_free_irq_vectors(pdev);
#endif
error_no_msi:
return -ENOSPC;
}
......@@ -503,7 +522,11 @@ static void fflink_pci_remove(struct pci_dev *pdev)
fflink_info("Unload pci-device\n");
free_irqs(pdev);
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
pci_disable_msix(pdev);
#else
pci_free_irq_vectors(pdev);
#endif
iounmap(pci_data.kvirt_addr_bar0);
......
......@@ -62,7 +62,6 @@
#include "common/device_user.h"
#include "common/dma_ctrl.h"
#include "common/device_pcie.h"
/******************************************************************************/
#define FFLINK_PCI_NAME "FFLINK_PCI_DRIVER"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment