aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sipc/miscdev.c
diff options
context:
space:
mode:
authorJonathan Bakker <xc-racer2@live.ca>2020-03-19 16:43:30 -0700
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-11-25 14:20:26 +0100
commitd7c10b74ef2f4236ba5bddfe4311a4e43da859e3 (patch)
treeca3a9b4ff49b626686f2d7d726a3b7a06ce9fc3e /drivers/net/sipc/miscdev.c
parent18d28816714daef24f72bf0c1ca055aecec2168a (diff)
downloadkernel_replicant_linux-d7c10b74ef2f4236ba5bddfe4311a4e43da859e3.tar.gz
kernel_replicant_linux-d7c10b74ef2f4236ba5bddfe4311a4e43da859e3.tar.bz2
kernel_replicant_linux-d7c10b74ef2f4236ba5bddfe4311a4e43da859e3.zip
sipc: misc: Fixes for packet transmission
-HDLC_END needs to be sent at the end of each packet, except for ramdump. -Actually queue the work when we received a packet Tested on S5PV210 Signed-off-by: Jonathan Bakker <xc-racer2@live.ca>
Diffstat (limited to 'drivers/net/sipc/miscdev.c')
-rw-r--r--drivers/net/sipc/miscdev.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/sipc/miscdev.c b/drivers/net/sipc/miscdev.c
index 33c50a6b327c..1f4ebe20c729 100644
--- a/drivers/net/sipc/miscdev.c
+++ b/drivers/net/sipc/miscdev.c
@@ -99,6 +99,8 @@ static ssize_t sipc_misc_write(struct file *filp, const char __user *buf,
if (chan->format != SAMSUNG_IPC_FORMAT_RAMDUMP) {
data = skb_put(skb, sizeof(HDLC_START));
data[0] = HDLC_START;
+
+ /* RFS header is sent separately, as needs to be untouched */
if (chan->format != SAMSUNG_IPC_FORMAT_RFS) {
header_size = sipc_get_header(chan, &hdr, count);
memcpy(skb_put(skb, header_size), &hdr, header_size);
@@ -110,6 +112,11 @@ static ssize_t sipc_misc_write(struct file *filp, const char __user *buf,
return -EFAULT;
}
+ if (chan->format != SAMSUNG_IPC_FORMAT_RAMDUMP) {
+ data = skb_put(skb, sizeof(HDLC_END));
+ data[0] = HDLC_END;
+ };
+
switch (chan->format) {
case SAMSUNG_IPC_FORMAT_FMT:
skb_queue_tail(&chan->sipc->tx_queue_fmt, skb);
@@ -124,6 +131,8 @@ static ssize_t sipc_misc_write(struct file *filp, const char __user *buf,
dev_err(chan->sipc->dev, "Don't know how to tx format %d\n", chan->format);
}
+ queue_delayed_work(chan->sipc->tx_wq, &chan->sipc->tx_work, msecs_to_jiffies(5));
+
return count;
}