From: "D. Starke" <daniel.starke@siemens.com>
To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org,
jirislaby@kernel.org
Cc: linux-kernel@vger.kernel.org, Daniel Starke <daniel.starke@siemens.com>
Subject: [PATCH 13/20] tty: n_gsm: fix wrong signal octets encoding in MSC
Date: Thu, 14 Apr 2022 02:42:18 -0700 [thread overview]
Message-ID: <20220414094225.4527-13-daniel.starke@siemens.com> (raw)
In-Reply-To: <20220414094225.4527-1-daniel.starke@siemens.com>
From: Daniel Starke <daniel.starke@siemens.com>
n_gsm is based on the 3GPP 07.010 and its newer version is the 3GPP 27.010.
See https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1516
The changes from 07.010 to 27.010 are non-functional. Therefore, I refer to
the newer 27.010 here. The value of the modem status command (MSC) frame
contains an address field, control signal and optional break signal octet.
The address field is encoded as described in chapter 5.2.1.2 with only one
octet (may be extended to more in future versions of the standard). Whereas
the control signal and break signal octet are always one byte each. This is
strange at first glance as it makes the EA bit redundant. However, the same
two octets are also encoded as header in convergence layer type 2 as
described in chapter 5.5.2. No header length field is given and the only
way to test if there is an optional break signal octet is via the EA flag
which extends the control signal octet with a break signal octet. Now it
becomes obvious how the EA bit for those two octets shall be encoded in the
MSC frame. The current implementation treats the signal octet different for
MSC frame and convergence layer type 2 header even though the standard
describes it for both in the same way.
Use the EA bit to encode the signal octets not only in the convergence
layer type 2 header but also in the MSC frame in the same way with either
1 or 2 bytes in case of an optional break signal. Adjust the receiving path
accordingly in gsm_control_modem().
Fixes: 3ac06b905655 ("tty: n_gsm: Fix for modems with brk in modem status control")
Cc: stable@vger.kernel.org
Signed-off-by: Daniel Starke <daniel.starke@siemens.com>
---
drivers/tty/n_gsm.c | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index 903278145078..23418ee93156 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -1094,7 +1094,6 @@ static void gsm_control_modem(struct gsm_mux *gsm, const u8 *data, int clen)
{
unsigned int addr = 0;
unsigned int modem = 0;
- unsigned int brk = 0;
struct gsm_dlci *dlci;
int len = clen;
int slen;
@@ -1124,17 +1123,8 @@ static void gsm_control_modem(struct gsm_mux *gsm, const u8 *data, int clen)
return;
}
len--;
- if (len > 0) {
- while (gsm_read_ea(&brk, *dp++) == 0) {
- len--;
- if (len == 0)
- return;
- }
- modem <<= 7;
- modem |= (brk & 0x7f);
- }
tty = tty_port_tty_get(&dlci->port);
- gsm_process_modem(tty, dlci, modem, slen);
+ gsm_process_modem(tty, dlci, modem, slen - len);
if (tty) {
tty_wakeup(tty);
tty_kref_put(tty);
@@ -2963,8 +2953,10 @@ static int gsmtty_modem_update(struct gsm_dlci *dlci, u8 brk)
int len = 2;
modembits[0] = (dlci->addr << 2) | 2 | EA; /* DLCI, Valid, EA */
- modembits[1] = (gsm_encode_modem(dlci) << 1) | EA;
- if (brk) {
+ if (!brk) {
+ modembits[1] = (gsm_encode_modem(dlci) << 1) | EA;
+ } else {
+ modembits[1] = gsm_encode_modem(dlci) << 1;
modembits[2] = (brk << 4) | 2 | EA; /* Length, Break, EA */
len++;
}
--
2.25.1
next prev parent reply other threads:[~2022-04-14 9:44 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-14 9:42 [PATCH 01/20] tty: n_gsm: fix missing mux reset on config change at responder D. Starke
2022-04-14 9:42 ` [PATCH 02/20] tty: n_gsm: fix restart handling via CLD command D. Starke
2022-04-14 9:42 ` [PATCH 03/20] tty: n_gsm: fix decoupled mux resource D. Starke
2022-04-14 9:42 ` [PATCH 04/20] tty: n_gsm: fix mux cleanup after unregister tty device D. Starke
2022-04-14 9:42 ` [PATCH 05/20] tty: n_gsm: fix wrong signal octet encoding in convergence layer type 2 D. Starke
2022-04-14 9:42 ` [PATCH 06/20] tty: n_gsm: fix frame reception handling D. Starke
2022-04-14 9:42 ` [PATCH 07/20] tty: n_gsm: fix malformed counter for out of frame data D. Starke
2022-04-14 9:42 ` [PATCH 08/20] tty: n_gsm: fix insufficient txframe size D. Starke
2022-04-14 9:42 ` [PATCH 09/20] tty: n_gsm: fix wrong DLCI release order D. Starke
2022-04-14 9:42 ` [PATCH 10/20] tty: n_gsm: fix missing explicit ldisc flush D. Starke
2022-04-14 9:42 ` [PATCH 11/20] tty: n_gsm: fix wrong command retry handling D. Starke
2022-04-14 9:42 ` [PATCH 12/20] tty: n_gsm: fix wrong command frame length field encoding D. Starke
2022-04-14 9:42 ` D. Starke [this message]
2022-04-14 9:42 ` [PATCH 14/20] tty: n_gsm: fix missing tty wakeup in convergence layer type 2 D. Starke
2022-04-14 9:42 ` [PATCH 15/20] tty: n_gsm: fix missing update of modem controls after DLCI open D. Starke
2022-04-15 6:29 ` Greg KH
2022-04-19 8:07 ` [PATCH v2 " D. Starke
2022-04-19 10:07 ` Greg KH
2022-04-14 9:42 ` [PATCH 16/20] tty: n_gsm: fix invalid command/response bit check for UI/UIH frames D. Starke
2022-04-15 6:31 ` Greg KH
2022-04-19 8:17 ` [PATCH v2 16/20] tty: n_gsm: clean up dead code in gsm_queue() D. Starke
2022-04-19 10:06 ` Greg KH
2022-04-19 10:07 ` Greg KH
2022-04-14 9:42 ` [PATCH 17/20] tty: n_gsm: fix reset fifo race condition D. Starke
2022-04-14 9:42 ` [PATCH 18/20] tty: n_gsm: fix implicit CR bit encoding in address field D. Starke
2022-04-15 6:33 ` Greg KH
2022-04-19 8:19 ` [PATCH v2 18/20] tty: n_gsm: clean up " D. Starke
2022-04-19 10:06 ` Greg KH
2022-04-14 9:42 ` [PATCH 19/20] tty: n_gsm: fix wrong behavior of gsm_carrier_raised() on debug D. Starke
2022-04-15 6:34 ` Greg KH
2022-04-14 9:42 ` [PATCH 20/20] tty: n_gsm: fix incorrect UA handling D. Starke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220414094225.4527-13-daniel.starke@siemens.com \
--to=daniel.starke@siemens.com \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®