Commit fadd23d8 authored by Andrey Panin's avatar Andrey Panin Committed by Linus Torvalds

[PATCH] crc: use it in ISDN drivers

This patch makes various ISDN drivers use common crc16 code.
Signed-off-by: default avatarAndrey Panin <pazke@donpac.ru>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a0c09d01
...@@ -4,6 +4,7 @@ menu "Passive cards" ...@@ -4,6 +4,7 @@ menu "Passive cards"
config ISDN_DRV_HISAX config ISDN_DRV_HISAX
tristate "HiSax SiemensChipSet driver support" tristate "HiSax SiemensChipSet driver support"
select CRC16
---help--- ---help---
This is a driver supporting the Siemens chipset on various This is a driver supporting the Siemens chipset on various
ISDN-cards (like AVM A1, Elsa ISDN cards, Teles S0-16.0, Teles ISDN-cards (like AVM A1, Elsa ISDN cards, Teles S0-16.0, Teles
...@@ -399,6 +400,7 @@ comment "HiSax sub driver modules" ...@@ -399,6 +400,7 @@ comment "HiSax sub driver modules"
config HISAX_ST5481 config HISAX_ST5481
tristate "ST5481 USB ISDN modem (EXPERIMENTAL)" tristate "ST5481 USB ISDN modem (EXPERIMENTAL)"
depends on USB && EXPERIMENTAL depends on USB && EXPERIMENTAL
select CRC16
help help
This enables the driver for ST5481 based USB ISDN adapters, This enables the driver for ST5481 based USB ISDN adapters,
e.g. the BeWan Gazel 128 USB e.g. the BeWan Gazel 128 USB
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/crc16.h>
#include "isdnhdlc.h" #include "isdnhdlc.h"
/*-------------------------------------------------------------------*/ /*-------------------------------------------------------------------*/
...@@ -58,43 +59,6 @@ const unsigned char isdnhdlc_bit_rev_tab[256] = { ...@@ -58,43 +59,6 @@ const unsigned char isdnhdlc_bit_rev_tab[256] = {
0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF 0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF
}; };
/* Table for CRC16. Internal used only. */
static const unsigned short int crc16_tab[] = {
0x0000,0x1189,0x2312,0x329b,0x4624,0x57ad,0x6536,0x74bf,
0x8c48,0x9dc1,0xaf5a,0xbed3,0xca6c,0xdbe5,0xe97e,0xf8f7,
0x1081,0x0108,0x3393,0x221a,0x56a5,0x472c,0x75b7,0x643e,
0x9cc9,0x8d40,0xbfdb,0xae52,0xdaed,0xcb64,0xf9ff,0xe876,
0x2102,0x308b,0x0210,0x1399,0x6726,0x76af,0x4434,0x55bd,
0xad4a,0xbcc3,0x8e58,0x9fd1,0xeb6e,0xfae7,0xc87c,0xd9f5,
0x3183,0x200a,0x1291,0x0318,0x77a7,0x662e,0x54b5,0x453c,
0xbdcb,0xac42,0x9ed9,0x8f50,0xfbef,0xea66,0xd8fd,0xc974,
0x4204,0x538d,0x6116,0x709f,0x0420,0x15a9,0x2732,0x36bb,
0xce4c,0xdfc5,0xed5e,0xfcd7,0x8868,0x99e1,0xab7a,0xbaf3,
0x5285,0x430c,0x7197,0x601e,0x14a1,0x0528,0x37b3,0x263a,
0xdecd,0xcf44,0xfddf,0xec56,0x98e9,0x8960,0xbbfb,0xaa72,
0x6306,0x728f,0x4014,0x519d,0x2522,0x34ab,0x0630,0x17b9,
0xef4e,0xfec7,0xcc5c,0xddd5,0xa96a,0xb8e3,0x8a78,0x9bf1,
0x7387,0x620e,0x5095,0x411c,0x35a3,0x242a,0x16b1,0x0738,
0xffcf,0xee46,0xdcdd,0xcd54,0xb9eb,0xa862,0x9af9,0x8b70,
0x8408,0x9581,0xa71a,0xb693,0xc22c,0xd3a5,0xe13e,0xf0b7,
0x0840,0x19c9,0x2b52,0x3adb,0x4e64,0x5fed,0x6d76,0x7cff,
0x9489,0x8500,0xb79b,0xa612,0xd2ad,0xc324,0xf1bf,0xe036,
0x18c1,0x0948,0x3bd3,0x2a5a,0x5ee5,0x4f6c,0x7df7,0x6c7e,
0xa50a,0xb483,0x8618,0x9791,0xe32e,0xf2a7,0xc03c,0xd1b5,
0x2942,0x38cb,0x0a50,0x1bd9,0x6f66,0x7eef,0x4c74,0x5dfd,
0xb58b,0xa402,0x9699,0x8710,0xf3af,0xe226,0xd0bd,0xc134,
0x39c3,0x284a,0x1ad1,0x0b58,0x7fe7,0x6e6e,0x5cf5,0x4d7c,
0xc60c,0xd785,0xe51e,0xf497,0x8028,0x91a1,0xa33a,0xb2b3,
0x4a44,0x5bcd,0x6956,0x78df,0x0c60,0x1de9,0x2f72,0x3efb,
0xd68d,0xc704,0xf59f,0xe416,0x90a9,0x8120,0xb3bb,0xa232,
0x5ac5,0x4b4c,0x79d7,0x685e,0x1ce1,0x0d68,0x3ff3,0x2e7a,
0xe70e,0xf687,0xc41c,0xd595,0xa12a,0xb0a3,0x8238,0x93b1,
0x6b46,0x7acf,0x4854,0x59dd,0x2d62,0x3ceb,0x0e70,0x1ff9,
0xf78f,0xe606,0xd49d,0xc514,0xb1ab,0xa022,0x92b9,0x8330,
0x7bc7,0x6a4e,0x58d5,0x495c,0x3de3,0x2c6a,0x1ef1,0x0f78
};
enum { enum {
HDLC_FAST_IDLE,HDLC_GET_FLAG_B0,HDLC_GETFLAG_B1A6,HDLC_GETFLAG_B7, HDLC_FAST_IDLE,HDLC_GET_FLAG_B0,HDLC_GETFLAG_B1A6,HDLC_GETFLAG_B7,
HDLC_GET_DATA,HDLC_FAST_FLAG HDLC_GET_DATA,HDLC_FAST_FLAG
...@@ -339,12 +303,10 @@ int isdnhdlc_decode (struct isdnhdlc_vars *hdlc, const unsigned char *src, ...@@ -339,12 +303,10 @@ int isdnhdlc_decode (struct isdnhdlc_vars *hdlc, const unsigned char *src,
return status; return status;
} }
if(hdlc->data_bits==8){ if(hdlc->data_bits==8){
unsigned cval;
hdlc->data_bits = 0; hdlc->data_bits = 0;
hdlc->data_received = 1; hdlc->data_received = 1;
cval = (hdlc->crc^hdlc->shift_reg) & 0xff; hdlc->crc = crc16_byte(hdlc->crc, hdlc->shift_reg);
hdlc->crc = (hdlc->crc>>8)^crc16_tab[cval];
// good byte received // good byte received
if (dsize--) { if (dsize--) {
dst[hdlc->dstpos++] = hdlc->shift_reg; dst[hdlc->dstpos++] = hdlc->shift_reg;
...@@ -520,10 +482,7 @@ int isdnhdlc_encode(struct isdnhdlc_vars *hdlc, const unsigned char *src, ...@@ -520,10 +482,7 @@ int isdnhdlc_encode(struct isdnhdlc_vars *hdlc, const unsigned char *src,
break; break;
} }
if(hdlc->bit_shift==8){ if(hdlc->bit_shift==8){
unsigned cval; hdlc->crc = crc16_byte(hdlc->crc, hdlc->shift_reg);
cval = (hdlc->crc^hdlc->shift_reg) & 0xff;
hdlc->crc = (hdlc->crc>>8)^crc16_tab[cval];
} }
if(hdlc->shift_reg & 0x01){ if(hdlc->shift_reg & 0x01){
hdlc->hdlc_bits1++; hdlc->hdlc_bits1++;
......
...@@ -58,42 +58,6 @@ NETjet_ReadICfifo(struct IsdnCardState *cs, u_char *data, int size) ...@@ -58,42 +58,6 @@ NETjet_ReadICfifo(struct IsdnCardState *cs, u_char *data, int size)
insb(cs->hw.njet.isac, data, size); insb(cs->hw.njet.isac, data, size);
} }
__u16 fcstab[256] =
{
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
};
void void
NETjet_WriteICfifo(struct IsdnCardState *cs, u_char *data, int size) NETjet_WriteICfifo(struct IsdnCardState *cs, u_char *data, int size)
{ {
......
...@@ -10,44 +10,9 @@ ...@@ -10,44 +10,9 @@
* *
*/ */
#include <linux/crc16.h>
#include "st5481_hdlc.h" #include "st5481_hdlc.h"
static const unsigned short int crc16_tab[] = {
0x0000,0x1189,0x2312,0x329b,0x4624,0x57ad,0x6536,0x74bf,
0x8c48,0x9dc1,0xaf5a,0xbed3,0xca6c,0xdbe5,0xe97e,0xf8f7,
0x1081,0x0108,0x3393,0x221a,0x56a5,0x472c,0x75b7,0x643e,
0x9cc9,0x8d40,0xbfdb,0xae52,0xdaed,0xcb64,0xf9ff,0xe876,
0x2102,0x308b,0x0210,0x1399,0x6726,0x76af,0x4434,0x55bd,
0xad4a,0xbcc3,0x8e58,0x9fd1,0xeb6e,0xfae7,0xc87c,0xd9f5,
0x3183,0x200a,0x1291,0x0318,0x77a7,0x662e,0x54b5,0x453c,
0xbdcb,0xac42,0x9ed9,0x8f50,0xfbef,0xea66,0xd8fd,0xc974,
0x4204,0x538d,0x6116,0x709f,0x0420,0x15a9,0x2732,0x36bb,
0xce4c,0xdfc5,0xed5e,0xfcd7,0x8868,0x99e1,0xab7a,0xbaf3,
0x5285,0x430c,0x7197,0x601e,0x14a1,0x0528,0x37b3,0x263a,
0xdecd,0xcf44,0xfddf,0xec56,0x98e9,0x8960,0xbbfb,0xaa72,
0x6306,0x728f,0x4014,0x519d,0x2522,0x34ab,0x0630,0x17b9,
0xef4e,0xfec7,0xcc5c,0xddd5,0xa96a,0xb8e3,0x8a78,0x9bf1,
0x7387,0x620e,0x5095,0x411c,0x35a3,0x242a,0x16b1,0x0738,
0xffcf,0xee46,0xdcdd,0xcd54,0xb9eb,0xa862,0x9af9,0x8b70,
0x8408,0x9581,0xa71a,0xb693,0xc22c,0xd3a5,0xe13e,0xf0b7,
0x0840,0x19c9,0x2b52,0x3adb,0x4e64,0x5fed,0x6d76,0x7cff,
0x9489,0x8500,0xb79b,0xa612,0xd2ad,0xc324,0xf1bf,0xe036,
0x18c1,0x0948,0x3bd3,0x2a5a,0x5ee5,0x4f6c,0x7df7,0x6c7e,
0xa50a,0xb483,0x8618,0x9791,0xe32e,0xf2a7,0xc03c,0xd1b5,
0x2942,0x38cb,0x0a50,0x1bd9,0x6f66,0x7eef,0x4c74,0x5dfd,
0xb58b,0xa402,0x9699,0x8710,0xf3af,0xe226,0xd0bd,0xc134,
0x39c3,0x284a,0x1ad1,0x0b58,0x7fe7,0x6e6e,0x5cf5,0x4d7c,
0xc60c,0xd785,0xe51e,0xf497,0x8028,0x91a1,0xa33a,0xb2b3,
0x4a44,0x5bcd,0x6956,0x78df,0x0c60,0x1de9,0x2f72,0x3efb,
0xd68d,0xc704,0xf59f,0xe416,0x90a9,0x8120,0xb3bb,0xa232,
0x5ac5,0x4b4c,0x79d7,0x685e,0x1ce1,0x0d68,0x3ff3,0x2e7a,
0xe70e,0xf687,0xc41c,0xd595,0xa12a,0xb0a3,0x8238,0x93b1,
0x6b46,0x7acf,0x4854,0x59dd,0x2d62,0x3ceb,0x0e70,0x1ff9,
0xf78f,0xe606,0xd49d,0xc514,0xb1ab,0xa022,0x92b9,0x8330,
0x7bc7,0x6a4e,0x58d5,0x495c,0x3de3,0x2c6a,0x1ef1,0x0f78
};
enum { enum {
HDLC_FAST_IDLE,HDLC_GET_FLAG_B0,HDLC_GETFLAG_B1A6,HDLC_GETFLAG_B7, HDLC_FAST_IDLE,HDLC_GET_FLAG_B0,HDLC_GETFLAG_B1A6,HDLC_GETFLAG_B7,
...@@ -295,12 +260,10 @@ int hdlc_decode(struct hdlc_vars *hdlc, const unsigned char *src, ...@@ -295,12 +260,10 @@ int hdlc_decode(struct hdlc_vars *hdlc, const unsigned char *src,
return status; return status;
} }
if(hdlc->data_bits==8){ if(hdlc->data_bits==8){
unsigned cval;
hdlc->data_bits = 0; hdlc->data_bits = 0;
hdlc->data_received = 1; hdlc->data_received = 1;
cval = (hdlc->crc^hdlc->shift_reg) & 0xff; hdlc->crc = crc16_byte(hdlc->crc, hdlc->shift_reg);
hdlc->crc = (hdlc->crc>>8)^crc16_tab[cval];
// good byte received // good byte received
if (dsize--) { if (dsize--) {
dst[hdlc->dstpos++] = hdlc->shift_reg; dst[hdlc->dstpos++] = hdlc->shift_reg;
...@@ -476,10 +439,7 @@ int hdlc_encode(struct hdlc_vars *hdlc, const unsigned char *src, ...@@ -476,10 +439,7 @@ int hdlc_encode(struct hdlc_vars *hdlc, const unsigned char *src,
break; break;
} }
if(hdlc->bit_shift==8){ if(hdlc->bit_shift==8){
unsigned cval; hdlc->crc = crc16_byte(hdlc->crc, hdlc->shift_reg);
cval = (hdlc->crc^hdlc->shift_reg) & 0xff;
hdlc->crc = (hdlc->crc>>8)^crc16_tab[cval];
} }
if(hdlc->shift_reg & 0x01){ if(hdlc->shift_reg & 0x01){
hdlc->hdlc_bits1++; hdlc->hdlc_bits1++;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
config ISDN_DRV_TPAM config ISDN_DRV_TPAM
tristate "Auvertech TurboPAM support (EXPERIMENTAL)" tristate "Auvertech TurboPAM support (EXPERIMENTAL)"
depends on EXPERIMENTAL && ISDN_I4L && PCI depends on EXPERIMENTAL && ISDN_I4L && PCI
select CRC16
help help
This enables support for the Auvertech TurboPAM ISDN-card. This enables support for the Auvertech TurboPAM ISDN-card.
For running this card, additional firmware is necessary, which has For running this card, additional firmware is necessary, which has
......
...@@ -27,6 +27,7 @@ Revision History: ...@@ -27,6 +27,7 @@ Revision History:
---------------------------------------------------------------------------*/ ---------------------------------------------------------------------------*/
#include <linux/crc16.h>
#include "tpam.h" #include "tpam.h"
#define HDLC_CTRL_CHAR_CMPL_MASK 0x20 /* HDLC control character complement mask */ #define HDLC_CTRL_CHAR_CMPL_MASK 0x20 /* HDLC control character complement mask */
...@@ -38,41 +39,6 @@ Revision History: ...@@ -38,41 +39,6 @@ Revision History:
#define TRUE 1 #define TRUE 1
#define FALSE 0 #define FALSE 0
static u16 t_ap_hdlc_like_fcs [256] = {
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
};
static u8 ap_t_ctrl_char_complemented[256]; /* list of characters to complement */ static u8 ap_t_ctrl_char_complemented[256]; /* list of characters to complement */
static void ap_hdlc_like_ctrl_char_list (u32 ctrl_char) { static void ap_hdlc_like_ctrl_char_list (u32 ctrl_char) {
...@@ -119,7 +85,7 @@ void hdlc_encode_modem(u8 *buffer_in, u32 lng_in, ...@@ -119,7 +85,7 @@ void hdlc_encode_modem(u8 *buffer_in, u32 lng_in,
/* /*
* FCS calculation * FCS calculation
*/ */
fcs = (fcs>>8) ^ t_ap_hdlc_like_fcs[((u8)(fcs^data)) & 0xff]; fcs = crc16_byte(fcs, data);
ESCAPE_CHAR(p_data_out, data); ESCAPE_CHAR(p_data_out, data);
} }
...@@ -155,7 +121,7 @@ void hdlc_no_accm_encode(u8 *buffer_in, u32 lng_in, ...@@ -155,7 +121,7 @@ void hdlc_no_accm_encode(u8 *buffer_in, u32 lng_in,
while (lng_in--) { while (lng_in--) {
data = *buffer_in++; data = *buffer_in++;
/* calculate FCS */ /* calculate FCS */
fcs = (fcs>>8) ^ t_ap_hdlc_like_fcs[((u8)(fcs^data)) & 0xff]; fcs = crc16_byte(fcs, data);
*p_data_out++ = data; *p_data_out++ = data;
} }
...@@ -185,7 +151,7 @@ u32 hdlc_no_accm_decode(u8 *buffer_in, u32 lng_in) { ...@@ -185,7 +151,7 @@ u32 hdlc_no_accm_decode(u8 *buffer_in, u32 lng_in) {
while (lng_in--) { while (lng_in--) {
data = *buffer_in++; data = *buffer_in++;
/* calculate FCS */ /* calculate FCS */
fcs = (fcs>>8) ^ t_ap_hdlc_like_fcs[((u8)(fcs^data)) & 0xff]; fcs = crc16_byte(fcs, data);
} }
if (fcs == HDLC_FCS_OK) if (fcs == HDLC_FCS_OK)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment