summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/sllin/files/0006-Fix-build-with-5.14-kernel.patch
blob: bb0049f0932de99e2c6a82bab0e843c2c9655ef2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Updates for 5.14

The 5.14 kernel reworked the tty register and unregister call
arguments, and made one of the arguments to the receive_buf
callback const, add some kernel version conditionals to handle
those.

Upstream-Status: Inappropriate [no upstream]
Signed-off-by: Scott Murray <scott.murray@konsulko.com>

---
 sllin/sllin.c | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/sllin/sllin.c b/sllin/sllin.c
index 904cff9..b89d06d 100644
--- a/sllin/sllin.c
+++ b/sllin/sllin.c
@@ -72,6 +72,12 @@
 #include <linux/version.h>
 #include "linux/lin_bus.h"
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,14,0)
+#define FP_CONST const
+#else
+#define FP_CONST
+#endif
+
 /* Should be in include/linux/tty.h */
 #define N_SLLIN			25
 /* -------------------------------- */
@@ -185,9 +191,9 @@ struct sllin {
 static struct net_device **sllin_devs;
 static int sllin_configure_frame_cache(struct sllin *sl, struct can_frame *cf);
 static void sllin_slave_receive_buf(struct tty_struct *tty,
-			      const unsigned char *cp, char *fp, int count);
+			      const unsigned char *cp, FP_CONST char *fp, int count);
 static void sllin_master_receive_buf(struct tty_struct *tty,
-			      const unsigned char *cp, char *fp, int count);
+			      const unsigned char *cp, FP_CONST char *fp, int count);
 
 
 /* Values of two parity bits in LIN Protected
@@ -492,7 +498,7 @@ static void sll_setup(struct net_device *dev)
   Routines looking at TTY side.
  ******************************************/
 static void sllin_master_receive_buf(struct tty_struct *tty,
-			      const unsigned char *cp, char *fp, int count)
+			      const unsigned char *cp, FP_CONST char *fp, int count)
 {
 	struct sllin *sl = (struct sllin *) tty->disc_data;
 
@@ -735,7 +741,7 @@ static void sllin_slave_finish_rx_msg(struct sllin *sl)
 }
 
 static void sllin_slave_receive_buf(struct tty_struct *tty,
-			      const unsigned char *cp, char *fp, int count)
+			      const unsigned char *cp, FP_CONST char *fp, int count)
 {
 	struct sllin *sl = (struct sllin *) tty->disc_data;
 	int lin_id;
@@ -842,7 +848,7 @@ static void sllin_slave_receive_buf(struct tty_struct *tty,
 }
 
 static void sllin_receive_buf(struct tty_struct *tty,
-			      const unsigned char *cp, char *fp, int count)
+			      const unsigned char *cp, FP_CONST char *fp, int count)
 {
 	struct sllin *sl = (struct sllin *) tty->disc_data;
 	netdev_dbg(sl->dev, "sllin_receive_buf invoked, count = %u\n", count);
@@ -1619,6 +1625,9 @@ static int sllin_ioctl(struct tty_struct *tty, struct file *file,
 
 static struct tty_ldisc_ops sll_ldisc = {
 	.owner		= THIS_MODULE,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,14,0)
+	.num		= N_SLLIN,
+#endif
 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,13,0)
 	.magic		= TTY_LDISC_MAGIC,
 #endif
@@ -1648,7 +1657,11 @@ static int __init sllin_init(void)
 	}
 
 	/* Fill in our line protocol discipline, and register it */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,14,0)
+	status = tty_register_ldisc(&sll_ldisc);
+#else
 	status = tty_register_ldisc(N_SLLIN, &sll_ldisc);
+#endif
 	if (status)  {
 		pr_err("sllin: can't register line discipline\n");
 		kfree(sllin_devs);
@@ -1719,9 +1732,15 @@ static void __exit sllin_exit(void)
 	kfree(sllin_devs);
 	sllin_devs = NULL;
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,14,0)
+	tty_unregister_ldisc(&sll_ldisc);
+
+#else
 	i = tty_unregister_ldisc(N_SLLIN);
+
 	if (i)
 		pr_err("sllin: can't unregister ldisc (err %d)\n", i);
+#endif
 }
 
 module_init(sllin_init);