tty: n_smux: Add support for broadcast logical channel ID
Add support for broadcast logical channel ID used with the dedicated
power-control commands.
Without this support, power commands sent on the broadcast channel may
get dropped which is currently only a test case issue.
Change-Id: I798ed8a315b3f864fa9afa20ef073b2ab5cab293
Signed-off-by: Eric Holmberg <eholmber@codeaurora.org>
diff --git a/drivers/tty/smux_loopback.c b/drivers/tty/smux_loopback.c
index bf6d50b..c4374bb 100644
--- a/drivers/tty/smux_loopback.c
+++ b/drivers/tty/smux_loopback.c
@@ -174,13 +174,15 @@
}
lcid = pkt->hdr.lcid;
- if (smux_assert_lch_id(lcid)) {
- pr_err("%s: invalid channel id %d\n", __func__, lcid);
- return;
- }
switch (pkt->hdr.cmd) {
case SMUX_CMD_OPEN_LCH:
+ if (smux_assert_lch_id(lcid)) {
+ pr_err("%s: invalid channel id %d\n",
+ __func__, lcid);
+ break;
+ }
+
if (pkt->hdr.flags & SMUX_CMD_OPEN_ACK)
break;
@@ -207,6 +209,12 @@
break;
case SMUX_CMD_CLOSE_LCH:
+ if (smux_assert_lch_id(lcid)) {
+ pr_err("%s: invalid channel id %d\n",
+ __func__, lcid);
+ break;
+ }
+
if (pkt->hdr.flags == SMUX_CMD_CLOSE_ACK)
break;
@@ -232,6 +240,12 @@
break;
case SMUX_CMD_DATA:
+ if (smux_assert_lch_id(lcid)) {
+ pr_err("%s: invalid channel id %d\n",
+ __func__, lcid);
+ break;
+ }
+
/* Echo back received data */
smux_init_pkt(&reply_pkt);
reply_pkt.hdr.lcid = lcid;
@@ -245,6 +259,12 @@
break;
case SMUX_CMD_STATUS:
+ if (smux_assert_lch_id(lcid)) {
+ pr_err("%s: invalid channel id %d\n",
+ __func__, lcid);
+ break;
+ }
+
/* Echo back received status */
smux_init_pkt(&reply_pkt);
reply_pkt.hdr.lcid = lcid;
@@ -260,7 +280,7 @@
case SMUX_CMD_PWR_CTL:
/* reply with ack */
smux_init_pkt(&reply_pkt);
- reply_pkt.hdr.lcid = lcid;
+ reply_pkt.hdr.lcid = SMUX_BROADCAST_LCID;
reply_pkt.hdr.cmd = SMUX_CMD_PWR_CTL;
reply_pkt.hdr.flags = SMUX_CMD_PWR_CTL_ACK;
reply_pkt.hdr.payload_len = 0;