2.6.7-mm2, Add common CRC16 module
Subsystems (4)
cover 2.6.7-mm2, Add common CRC16 module
Currently we have 8 copies of CRC16 calculation table in different device drivers, this patch creates common crc16.c module to replace them.
Please take a look.
include/linux/crc16.h | 15 ++++++++++ lib/Kconfig | 8 +++++ lib/Makefile | 1 lib/crc16.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 93 insertions(+)
include/linux/crc16.h +15 -0
@@ -0,0 +1,15 @@ +#ifndef _LINUX_CRC16_H +#define _LINUX_CRC16_H + +#include <linux/types.h> + +extern u16 const crc16_table[256 ]; + +extern u16 crc16 (u16 crc,const u8 *buffer,size_t len); + +static inline u16 crc16_byte (u16 crc,const u8 c) +{ +return (crc >>8 ) ^ crc16_table[(crc ^ c) &0xff ]; +} + +#endif /* _LINUX_CRC16_H */
lib/crc16.c +69 -0
69 lines not on this page · raw message
lib/Kconfig +8 -0
@@ -4,6 +4,14 @@ menu "Library routines" +config CRC16 + tristate "CRC16 functions" + help + This option is provided for the case where no in-kernel-tree + modules require CRC16 functions, but a module built outside the + kernel tree does. Such modules that use library CRC16 functions + require M here. + config CRC32 tristate "CRC32 functions" help
lib/Makefile +1 -0
@@ -18,6 +18,7 @@ ifneq ($(CONFIG_HAVE_DEC_LOCK),y) lib-y += dec_and_lock.o endif +obj-$(CONFIG_CRC16) += crc16.o obj-$(CONFIG_CRC32) += crc32.o obj-$(CONFIG_LIBCRC32C) += libcrc32c.o
PATCH 1/4 2.6.7-mm2, Use it in async PPP driver
This patch makes async PPP driver use common crc16 code.
drivers/net/Kconfig | 1 + drivers/net/ppp_async.c | 38 +------------------------------------- include/linux/ppp_defs.h | 4 +++- 3 files changed, 5 insertions(+), 38 deletions(-)
drivers/net/Kconfig +1 -0
@@ -2413,6 +2413,7 @@ config PPP_FILTER config PPP_ASYNC tristate "PPP support for async serial ports" depends on PPP + select CRC16 ---help--- Say Y (or M) here if you want to be able to use PPP over standard asynchronous serial ports, such as COM1 or COM2 on a PC. If you use
drivers/net/ppp_async.c +1 -37
@@ -24,6 +24,7 @@#include <linux/tty.h> #include <linux/netdevice.h> #include <linux/poll.h> +#include <linux/crc16.h> #include <linux/ppp_defs.h> #include <linux/if_ppp.h> #include <linux/ppp_channel.h>
@@ -501,43 +502,6 @@ static void ppp_async_process(unsigned l* Procedures for encapsulation and framing. */ -u16 ppp_crc16_table[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 -}; -EXPORT_SYMBOL (ppp_crc16_table); -#define fcstab ppp_crc16_table/* for PPP_FCS macro */ -/* * Procedure to encode the data for async serial transmission. * Does octet stuffing (escaping), puts the address/control bytes
include/linux/ppp_defs.h +3 -1
@@ -42,6 +42,8 @@#ifndef _PPP_DEFS_H_#define _PPP_DEFS_H_ +#include <linux/crc16.h> +/* * The basic PPP frame. */
@@ -95,7 +97,7 @@#define PPP_INITFCS 0xffff/* Initial FCS value */ #define PPP_GOODFCS 0xf0b8/* Good final FCS value */ -#define PPP_FCS (fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff]) +#define PPP_FCS (fcs, c) crc16_byte(fcs, c)/* * Extended asyncmap - allows any character to be escaped.
PATCH 2/4 2.6.7-mm2, Use it in IRDA drivers
This patch makes IRDA subsystem use common crc16 code.
include/net/irda/crc.h | 10 ++----- net/irda/Kconfig | 1 net/irda/Makefile | 2 - net/irda/crc.c | 68 ------------------------------------------------- 4 files changed, 5 insertions(+), 76 deletions(-)
include/net/irda/crc.h +3 -7
@@ -15,19 +15,15 @@#define IRDA_CRC_H #include <linux/types.h> +#include <linux/crc16.h> #define INIT_FCS 0xffff/* Initial FCS value */ #define GOOD_FCS 0xf0b8/* Good final FCS value */ -extern __u16 const irda_crc16_table[]; -/* Recompute the FCS with one more character appended. */ -static inline __u16 irda_fcs (__u16 fcs,__u8 c) -{ -return (((fcs) >>8 ) ^ irda_crc16_table[((fcs) ^ (c)) &0xff ]); -} +#define irda_fcs (fcs, c) crc16_byte(fcs, c)/* Recompute the FCS with len bytes appended. */ -__u16 irda_calc_crc16 (__u16 fcs,__u8 const *buf,size_t len); +#define irda_calc_crc16 (fcs, buf, len) crc16(fcs, buf, len)#endif
net/irda/Kconfig +1 -0
@@ -5,6 +5,7 @@ menuconfig IRDA depends on NET tristate "IrDA (infrared) subsystem support" + select CRC16 ---help--- Say Y here if you want to build support for the IrDA (TM) protocols. The Infrared Data Associations (tm) specifies standards for wireless
net/irda/Makefile +1 -1
@@ -9,7 +9,7 @@ obj-$(CONFIG_IRCOMM) += ircomm/ irda-y := iriap.o iriap_event.o irlmp.o irlmp_event.o irlmp_frame.o \ irlap.o irlap_event.o irlap_frame.o timer.o qos.o irqueue.o \ - irttp.o irda_device.o irias_object.o crc.o wrapper.o af_irda.o \ + irttp.o irda_device.o irias_object.o wrapper.o af_irda.o \ discovery.o parameters.o irmod.o irda-$(CONFIG_PROC_FS) += irproc.o irda-$(CONFIG_SYSCTL) += irsysctl.o
net/irda/crc.c +0 -68
68 lines not on this page · raw message
PATCH 3/4 2.6.7-mm2, Use it in ISDN drivers
This patch makes various ISDN drivers use common crc16 code.
drivers/isdn/hisax/Kconfig | 2 + drivers/isdn/hisax/isdnhdlc.c | 49 +++------------------------------------ drivers/isdn/hisax/netjet.c | 36 ---------------------------- drivers/isdn/hisax/st5481_hdlc.c | 48 +++----------------------------------- drivers/isdn/tpam/Kconfig | 1 drivers/isdn/tpam/tpam_crcpc.c | 42 +++------------------------------ 6 files changed, 15 insertions(+), 163 deletions(-)
drivers/isdn/hisax/Kconfig +2 -0
@@ -4,6 +4,7 @@ menu "Passive cards" config ISDN_DRV_HISAX tristate "HiSax SiemensChipSet driver support" + select CRC16 ---help--- This is a driver supporting the Siemens chipset on various ISDN-cards (like AVM A1, Elsa ISDN cards, Teles S0-16.0, Teles
@@ -399,6 +400,7 @@ comment "HiSax sub driver modules" config HISAX_ST5481 tristate "ST5481 USB ISDN modem (EXPERIMENTAL)" depends on USB && EXPERIMENTAL + select CRC16 help This enables the driver for ST5481 based USB ISDN adapters, e.g. the BeWan Gazel 128 USB
drivers/isdn/hisax/isdnhdlc.c +4 -45
75 lines not on this page · raw message
drivers/isdn/hisax/netjet.c +0 -36
@@ -58,42 +58,6 @@ NETjet_ReadICfifo(struct IsdnCardState *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 NETjet_WriteICfifo (struct IsdnCardState *cs,u_char *data,int size) {
drivers/isdn/hisax/st5481_hdlc.c +4 -44
70 lines not on this page · raw message
drivers/isdn/tpam/Kconfig +1 -0
@@ -4,6 +4,7 @@ config ISDN_DRV_TPAM tristate "Auvertech TurboPAM support (EXPERIMENTAL)" depends on EXPERIMENTAL && ISDN_I4L && PCI + select CRC16 help This enables support for the Auvertech TurboPAM ISDN-card. For running this card, additional firmware is necessary, which has
drivers/isdn/tpam/tpam_crcpc.c +4 -38
72 lines not on this page · raw message
PATCH 4/4 2.6.7-mm2, Use it in AX.25 drivers
This patch makes AX.25 drivers use common crc16 code.
drivers/net/hamradio/Kconfig | 4 +++ drivers/net/hamradio/baycom_epp.c | 48 ++------------------------------------ drivers/net/hamradio/hdlcdrv.c | 47 ++----------------------------------- 3 files changed, 10 insertions(+), 89 deletions(-)
drivers/net/hamradio/Kconfig +4 -0
@@ -113,6 +113,7 @@ config SCC_TRXECHO config BAYCOM_SER_FDX tristate "BAYCOM ser12 fullduplex driver for AX.25" depends on AX25 + select CRC16 ---help--- This is one of two drivers for Baycom style simple amateur radio modems that connect to a serial interface. The driver supports the
@@ -132,6 +133,7 @@ config BAYCOM_SER_FDX config BAYCOM_SER_HDX tristate "BAYCOM ser12 halfduplex driver for AX.25" depends on AX25 + select CRC16 ---help--- This is one of two drivers for Baycom style simple amateur radio modems that connect to a serial interface. The driver supports the
@@ -149,6 +151,7 @@ config BAYCOM_SER_HDX config BAYCOM_PAR tristate "BAYCOM picpar and par96 driver for AX.25" depends on PARPORT && AX25 + select CRC16 ---help--- This is a driver for Baycom style simple amateur radio modems that connect to a parallel interface. The driver supports the picpar and
@@ -163,6 +166,7 @@ config BAYCOM_PAR config BAYCOM_EPP tristate "BAYCOM epp driver for AX.25" depends on PARPORT && AX25 && !64BIT + select CRC16 ---help--- This is a driver for Baycom style simple amateur radio modems that connect to a parallel interface. The driver supports the EPP
drivers/net/hamradio/baycom_epp.c +3 -45
72 lines not on this page · raw message
drivers/net/hamradio/hdlcdrv.c +3 -44
70 lines not on this page · raw message
Re: [PATCH 4/4] 2.6.7-mm2, Use it in AX.25 drivers
Quoted 1 line · Andrey Panin
This patch makes AX.25 drivers use common crc16 code.
Hrm, isn't this bit of a misnamer?
While the polynomial usually known as "CCITT" or "X25" is x^16+x^12+x^5+x^0, CRC-16 usually means the polynomial x^16+x^15+x^2+x^0. So to avoid confusion I suggest renaming it from CRC16 to CRCCCITT or similar...
Tom
Re: [PATCH 4/4] 2.6.7-mm2, Use it in AX.25 drivers
Quoted 9 lines · Thomas Sailer
Quoted 1 line · Andrey Panin
This patch makes AX.25 drivers use common crc16 code.
Hrm, isn't this bit of a misnamer?
While the polynomial usually known as "CCITT" or "X25" is x^16+x^12+x^5+x^0, CRC-16 usually means the polynomial x^16+x^15+x^2+x^0. So to avoid confusion I suggest renaming it from CRC16 to CRCCCITT or similar...
Yeah I see, it's really CCITT CRC and it's really misnamed :( I'll post a patch to fix it (probably tomorrow).
Signature · 2 lines
Andrey Panin | Linux and UNIX system administrator [email protected] | PGP key: wwwkeys.pgp.net