lantiq: fix lantiq applications kernel 4.14 compatiblity

This is fixing multiple compile problems with kernel 4.14 and updates the
code to take care of changes introduced between kernel 4.9 and 4.14.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Mathias Kresin <dev@kresin.me>
This commit is contained in:
Hauke Mehrtens 2017-11-13 22:18:00 +01:00 committed by Mathias Kresin
parent f8a6987cd1
commit 73ba5e11f7
13 changed files with 129 additions and 15 deletions

View File

@ -111,7 +111,11 @@ static inline long
ugly_hack_sleep_on_timeout(wait_queue_head_t *q, long timeout) ugly_hack_sleep_on_timeout(wait_queue_head_t *q, long timeout)
{ {
unsigned long flags; unsigned long flags;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0))
wait_queue_entry_t wait;
#else
wait_queue_t wait; wait_queue_t wait;
#endif
init_waitqueue_entry(&wait, current); init_waitqueue_entry(&wait, current);

View File

@ -812,7 +812,11 @@ struct sk_buff* atm_alloc_tx(struct atm_vcc *vcc, unsigned int size)
return NULL; return NULL;
} }
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0))
refcount_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc);
#else
atomic_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); atomic_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc);
#endif
return skb; return skb;
} }

View File

@ -39,6 +39,7 @@
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <linux/skbuff.h> #include <linux/skbuff.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/version.h>
// must match the size of memory block allocated for g_dma_block and g_dma_block2 // must match the size of memory block allocated for g_dma_block and g_dma_block2
#define DEU_MAX_PACKET_SIZE (PAGE_SIZE >> 1) #define DEU_MAX_PACKET_SIZE (PAGE_SIZE >> 1)
@ -53,7 +54,11 @@ typedef struct ifx_deu_device {
int recv_count; int recv_count;
int packet_size; int packet_size;
int packet_num; int packet_num;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0))
wait_queue_entry_t wait;
#else
wait_queue_t wait; wait_queue_t wait;
#endif
} _ifx_deu_device; } _ifx_deu_device;
extern _ifx_deu_device ifx_deu[1]; extern _ifx_deu_device ifx_deu[1];

View File

@ -0,0 +1,22 @@
--- a/src/linux/ifxos_linux_copy_user_space_drv.c
+++ b/src/linux/ifxos_linux_copy_user_space_drv.c
@@ -29,7 +29,7 @@
#ifdef MODULE
#include <linux/module.h>
#endif
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
#include "ifx_types.h"
#include "ifxos_rt_if_check.h"
--- a/src/linux/ifxos_linux_socket_drv.c
+++ b/src/linux/ifxos_linux_socket_drv.c
@@ -25,7 +25,7 @@
#endif
#include <linux/in.h>
#include <linux/net.h>
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
#include "ifx_types.h"
#include "ifxos_rt_if_check.h"

View File

@ -128,7 +128,9 @@ static int ptm_stop(struct net_device *);
static unsigned int ptm_poll(int, unsigned int); static unsigned int ptm_poll(int, unsigned int);
static int ptm_napi_poll(struct napi_struct *, int); static int ptm_napi_poll(struct napi_struct *, int);
static int ptm_hard_start_xmit(struct sk_buff *, struct net_device *); static int ptm_hard_start_xmit(struct sk_buff *, struct net_device *);
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
static int ptm_change_mtu(struct net_device *, int); static int ptm_change_mtu(struct net_device *, int);
#endif
static int ptm_ioctl(struct net_device *, struct ifreq *, int); static int ptm_ioctl(struct net_device *, struct ifreq *, int);
static void ptm_tx_timeout(struct net_device *); static void ptm_tx_timeout(struct net_device *);
@ -247,7 +249,9 @@ static struct net_device_ops g_ptm_netdev_ops = {
.ndo_start_xmit = ptm_hard_start_xmit, .ndo_start_xmit = ptm_hard_start_xmit,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_set_mac_address = eth_mac_addr, .ndo_set_mac_address = eth_mac_addr,
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
.ndo_change_mtu = ptm_change_mtu, .ndo_change_mtu = ptm_change_mtu,
#endif
.ndo_do_ioctl = ptm_ioctl, .ndo_do_ioctl = ptm_ioctl,
.ndo_tx_timeout = ptm_tx_timeout, .ndo_tx_timeout = ptm_tx_timeout,
}; };
@ -285,6 +289,10 @@ static void ptm_setup(struct net_device *dev, int ndev)
/* hook network operations */ /* hook network operations */
dev->netdev_ops = &g_ptm_netdev_ops; dev->netdev_ops = &g_ptm_netdev_ops;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
/* Allow up to 1508 bytes, for RFC4638 */
dev->max_mtu = ETH_DATA_LEN + 8;
#endif
netif_napi_add(dev, &g_ptm_priv_data.itf[ndev].napi, ptm_napi_poll, 25); netif_napi_add(dev, &g_ptm_priv_data.itf[ndev].napi, ptm_napi_poll, 25);
dev->watchdog_timeo = ETH_WATCHDOG_TIMEOUT; dev->watchdog_timeo = ETH_WATCHDOG_TIMEOUT;
@ -459,7 +467,7 @@ PTM_HARD_START_XMIT_FAIL:
g_ptm_priv_data.itf[ndev].stats.tx_dropped++; g_ptm_priv_data.itf[ndev].stats.tx_dropped++;
return NETDEV_TX_OK; return NETDEV_TX_OK;
} }
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
static int ptm_change_mtu(struct net_device *dev, int mtu) static int ptm_change_mtu(struct net_device *dev, int mtu)
{ {
/* Allow up to 1508 bytes, for RFC4638 */ /* Allow up to 1508 bytes, for RFC4638 */
@ -468,6 +476,7 @@ static int ptm_change_mtu(struct net_device *dev, int mtu)
dev->mtu = mtu; dev->mtu = mtu;
return 0; return 0;
} }
#endif
static int ptm_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) static int ptm_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{ {
@ -654,7 +663,9 @@ static INLINE int mailbox_rx_irq_handler(unsigned int ch) // return: < 0 - de
skb->dev = g_net_dev[ndev]; skb->dev = g_net_dev[ndev];
skb->protocol = eth_type_trans(skb, skb->dev); skb->protocol = eth_type_trans(skb, skb->dev);
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0))
g_net_dev[ndev]->last_rx = jiffies; g_net_dev[ndev]->last_rx = jiffies;
#endif
netif_rx_ret = netif_receive_skb(skb); netif_rx_ret = netif_receive_skb(skb);

View File

@ -74,7 +74,9 @@ static int ptm_stop(struct net_device *);
static unsigned int ptm_poll(int, unsigned int); static unsigned int ptm_poll(int, unsigned int);
static int ptm_napi_poll(struct napi_struct *, int); static int ptm_napi_poll(struct napi_struct *, int);
static int ptm_hard_start_xmit(struct sk_buff *, struct net_device *); static int ptm_hard_start_xmit(struct sk_buff *, struct net_device *);
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
static int ptm_change_mtu(struct net_device *, int); static int ptm_change_mtu(struct net_device *, int);
#endif
static int ptm_ioctl(struct net_device *, struct ifreq *, int); static int ptm_ioctl(struct net_device *, struct ifreq *, int);
static void ptm_tx_timeout(struct net_device *); static void ptm_tx_timeout(struct net_device *);
@ -115,7 +117,9 @@ static struct net_device_ops g_ptm_netdev_ops = {
.ndo_start_xmit = ptm_hard_start_xmit, .ndo_start_xmit = ptm_hard_start_xmit,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_set_mac_address = eth_mac_addr, .ndo_set_mac_address = eth_mac_addr,
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
.ndo_change_mtu = ptm_change_mtu, .ndo_change_mtu = ptm_change_mtu,
#endif
.ndo_do_ioctl = ptm_ioctl, .ndo_do_ioctl = ptm_ioctl,
.ndo_tx_timeout = ptm_tx_timeout, .ndo_tx_timeout = ptm_tx_timeout,
}; };
@ -141,6 +145,10 @@ static void ptm_setup(struct net_device *dev, int ndev)
netif_carrier_off(dev); netif_carrier_off(dev);
dev->netdev_ops = &g_ptm_netdev_ops; dev->netdev_ops = &g_ptm_netdev_ops;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
/* Allow up to 1508 bytes, for RFC4638 */
dev->max_mtu = ETH_DATA_LEN + 8;
#endif
netif_napi_add(dev, &g_ptm_priv_data.itf[ndev].napi, ptm_napi_poll, 16); netif_napi_add(dev, &g_ptm_priv_data.itf[ndev].napi, ptm_napi_poll, 16);
dev->watchdog_timeo = ETH_WATCHDOG_TIMEOUT; dev->watchdog_timeo = ETH_WATCHDOG_TIMEOUT;
@ -218,7 +226,9 @@ static unsigned int ptm_poll(int ndev, unsigned int work_to_do)
skb->dev = g_net_dev[0]; skb->dev = g_net_dev[0];
skb->protocol = eth_type_trans(skb, skb->dev); skb->protocol = eth_type_trans(skb, skb->dev);
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0))
g_net_dev[0]->last_rx = jiffies; g_net_dev[0]->last_rx = jiffies;
#endif
netif_receive_skb(skb); netif_receive_skb(skb);
@ -367,6 +377,7 @@ PTM_HARD_START_XMIT_FAIL:
return 0; return 0;
} }
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
static int ptm_change_mtu(struct net_device *dev, int mtu) static int ptm_change_mtu(struct net_device *dev, int mtu)
{ {
/* Allow up to 1508 bytes, for RFC4638 */ /* Allow up to 1508 bytes, for RFC4638 */
@ -375,6 +386,7 @@ static int ptm_change_mtu(struct net_device *dev, int mtu)
dev->mtu = mtu; dev->mtu = mtu;
return 0; return 0;
} }
#endif
static int ptm_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) static int ptm_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{ {

View File

@ -0,0 +1,22 @@
--- a/src/drv_tapi_linux.c
+++ b/src/drv_tapi_linux.c
@@ -54,6 +54,10 @@
#include <linux/workqueue.h> /* LINUX 2.6 We need work_struct */
#include <linux/device.h>
#include <linux/sched.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0))
+ #include <linux/sched/signal.h>
+ #include <linux/sched/types.h>
+#endif
#undef CONFIG_DEVFS_FS
#ifndef UTS_RELEASE
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33))
@@ -184,7 +188,7 @@ MODULE_PARM_DESC(block_egress_tasklet, "
MODULE_PARM_DESC(block_ingress_tasklet, "block the execution of the ingress tasklet, i.e. force to use the RT kernel thread");
/** The driver callbacks which will be registered with the kernel*/
-static struct file_operations tapi_fops = {0};
+static struct file_operations tapi_fops;
/* ============================= */
/* Global function definition */

View File

@ -1,6 +1,6 @@
--- a/src/drv_tapi_linux.c --- a/src/drv_tapi_linux.c
+++ b/src/drv_tapi_linux.c +++ b/src/drv_tapi_linux.c
@@ -552,7 +552,7 @@ static ssize_t ifx_tapi_write (struct fi @@ -556,7 +556,7 @@ static ssize_t ifx_tapi_write (struct fi
IFX_uint8_t *pData; IFX_uint8_t *pData;
IFX_size_t buf_size; IFX_size_t buf_size;
#endif /* TAPI_PACKET */ #endif /* TAPI_PACKET */

View File

@ -10,7 +10,7 @@
#include <asm/io.h> #include <asm/io.h>
#ifdef LINUX_2_6 #ifdef LINUX_2_6
@@ -65,7 +67,9 @@ @@ -69,7 +71,9 @@
#else #else
#include <linux/tqueue.h> #include <linux/tqueue.h>
#include <linux/sched.h> #include <linux/sched.h>
@ -20,7 +20,7 @@
#endif /* LINUX_2_6 */ #endif /* LINUX_2_6 */
#include "drv_tapi.h" #include "drv_tapi.h"
@@ -133,8 +137,13 @@ @@ -137,8 +141,13 @@ static ssize_t ifx_tapi_write(struct fil
size_t count, loff_t * ppos); size_t count, loff_t * ppos);
static ssize_t ifx_tapi_read(struct file * filp, char *buf, static ssize_t ifx_tapi_read(struct file * filp, char *buf,
size_t length, loff_t * ppos); size_t length, loff_t * ppos);
@ -34,7 +34,7 @@
static unsigned int ifx_tapi_poll (struct file *filp, poll_table *table); static unsigned int ifx_tapi_poll (struct file *filp, poll_table *table);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
@@ -218,7 +227,11 @@ @@ -222,7 +231,11 @@ IFX_return_t TAPI_OS_RegisterLLDrv (IFX_
IFX_char_t *pRegDrvName = IFX_NULL; IFX_char_t *pRegDrvName = IFX_NULL;
IFX_int32_t ret = 0; IFX_int32_t ret = 0;
@ -46,7 +46,7 @@
{ {
#ifdef MODULE #ifdef MODULE
tapi_fops.owner = THIS_MODULE; tapi_fops.owner = THIS_MODULE;
@@ -226,7 +239,11 @@ @@ -230,7 +243,11 @@ IFX_return_t TAPI_OS_RegisterLLDrv (IFX_
tapi_fops.read = ifx_tapi_read; tapi_fops.read = ifx_tapi_read;
tapi_fops.write = ifx_tapi_write; tapi_fops.write = ifx_tapi_write;
tapi_fops.poll = ifx_tapi_poll; tapi_fops.poll = ifx_tapi_poll;
@ -58,7 +58,7 @@
tapi_fops.open = ifx_tapi_open; tapi_fops.open = ifx_tapi_open;
tapi_fops.release = ifx_tapi_release; tapi_fops.release = ifx_tapi_release;
} }
@@ -881,8 +898,13 @@ @@ -885,8 +902,13 @@ static IFX_uint32_t ifx_tapi_poll (struc
- 0 and positive values - success - 0 and positive values - success
- negative value - ioctl failed - negative value - ioctl failed
*/ */
@ -72,7 +72,7 @@
{ {
TAPI_FD_PRIV_DATA_t *pTapiPriv; TAPI_FD_PRIV_DATA_t *pTapiPriv;
IFX_TAPI_ioctlCtx_t ctx; IFX_TAPI_ioctlCtx_t ctx;
@@ -3721,7 +3743,9 @@ @@ -3725,7 +3747,9 @@ IFX_void_t TAPI_OS_ThreadKill(IFXOS_Thre
kernel lock (lock_kernel()). The lock must be kernel lock (lock_kernel()). The lock must be
grabbed before changing the terminate grabbed before changing the terminate
flag and released after the down() call. */ flag and released after the down() call. */
@ -83,7 +83,7 @@
mb(); mb();
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
kill_proc(pThrCntrl->tid, SIGKILL, 1); kill_proc(pThrCntrl->tid, SIGKILL, 1);
@@ -3729,8 +3753,10 @@ @@ -3733,8 +3757,10 @@ IFX_void_t TAPI_OS_ThreadKill(IFXOS_Thre
kill_pid(find_vpid(pThrCntrl->tid), SIGKILL, 1); kill_pid(find_vpid(pThrCntrl->tid), SIGKILL, 1);
#endif #endif
/* release the big kernel lock */ /* release the big kernel lock */

View File

@ -1,8 +1,6 @@
Index: drv_tapi-3.13.0/src/drv_tapi_linux.c --- a/src/drv_tapi_linux.c
=================================================================== +++ b/src/drv_tapi_linux.c
--- drv_tapi-3.13.0.orig/src/drv_tapi_linux.c 2013-09-05 22:28:16.868419283 +0200 @@ -97,6 +97,8 @@
+++ drv_tapi-3.13.0/src/drv_tapi_linux.c 2013-09-05 22:32:37.396425814 +0200
@@ -93,6 +93,8 @@
#include "drv_tapi_announcements.h" #include "drv_tapi_announcements.h"
#endif /* TAPI_ANNOUNCEMENTS */ #endif /* TAPI_ANNOUNCEMENTS */

View File

@ -0,0 +1,24 @@
--- a/src/drv_mei_cpe_linux.h
+++ b/src/drv_mei_cpe_linux.h
@@ -31,6 +31,9 @@
#include <linux/module.h>
#include <linux/sched.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0))
+#include <linux/sched/signal.h>
+#endif
#include <linux/interrupt.h>
#include <linux/version.h>
#include <linux/crc32.h>
@@ -121,7 +124,11 @@ typedef int (*MEI_RequestIrq_WrapLinux_t
/**
Function typedef for the Linux free_irq()
*/
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0))
+typedef const void *(*MEI_FreeIrq_WrapLinux_t)( unsigned int usedIrq,
+#else
typedef void (*MEI_FreeIrq_WrapLinux_t)( unsigned int usedIrq,
+#endif
void *usedDevId );

View File

@ -10,7 +10,7 @@
--- a/src/drv_mei_cpe_linux.h --- a/src/drv_mei_cpe_linux.h
+++ b/src/drv_mei_cpe_linux.h +++ b/src/drv_mei_cpe_linux.h
@@ -57,12 +57,6 @@ @@ -60,12 +60,6 @@
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/types.h> #include <linux/types.h>

View File

@ -0,0 +1,12 @@
--- a/src/include/drv_dsl_cpe_os_linux.h
+++ b/src/include/drv_dsl_cpe_os_linux.h
@@ -33,6 +33,9 @@
#endif
#include <linux/sched.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0))
+#include <linux/sched/signal.h>
+#endif
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33))
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))