serial: Support Frame Check Sequence
According to DSP0253, implementing frame check sequence via
crc-16-ccitt calculation. crc-16-ccitt implementation refer
to RFC1662 Appendix C.
Tested:
Verified on sending/receiving mctp packets with mctp-serial
kernel driver.
Change-Id: I8417d521589e9f40a0ca68596cdcfd061fd919cc
Signed-off-by: John Chung <john.chung@arm.com>
diff --git a/tests/test_serial.c b/tests/test_serial.c
index e3a53a6..ac81f62 100644
--- a/tests/test_serial.c
+++ b/tests/test_serial.c
@@ -83,7 +83,23 @@
mctp_set_log_stdio(MCTP_LOG_DEBUG);
- memset(&mctp_msg_src[0], 0x5a, MCTP_BTU);
+ /*
+ * Adding data bytes (0x7e & 0x7d) for testing FCS calculation while the
+ * escaped data is presented.
+ *
+ * Refer to DSP0253 chapter 7, data byte 0x7e / 0x7d should be replaced
+ * to escape sequence 0x7d 0x5e / 0x7d 0x5d.
+ *
+ * For sender, FCS calculation should count data byte (0x7e / 0x7d) only,
+ * not the escape sequece. For receiver, the escape sequence should be
+ * translated back to data byte and put it in FCS calculation.
+ *
+ * If FCS calculation is not expected, similiar error msg
+ * `serial: invalid fcs : 0xf5c1, expect 0x1d3e` will be observed.
+ */
+ memset(&mctp_msg_src[0], 0x7e, 1);
+ memset(&mctp_msg_src[1], 0x7d, 1);
+ memset(&mctp_msg_src[2], 0x5a, MCTP_BTU - 2);
memset(&mctp_msg_src[MCTP_BTU], 0xa5, MCTP_BTU);
rc = pipe(p[0]);