PPP: Add option to skip FCS table

Option PPP_FCS_TABLE is created which controls if PPPoS FCS calculation
should be done against precalculated table or by using a short algorithm.

Default value is 1, keeps old behaviour.
Setting it to 0 saves around 0.5 kB flash.
This commit is contained in:
Erik Ekman 2012-06-23 15:11:49 +02:00 committed by Sylvain Rochet
parent ba0c619844
commit 11a3057e8e
3 changed files with 27 additions and 2 deletions

View File

@ -1703,6 +1703,13 @@
#if PPP_SUPPORT
/**
* PPP_FCS_TABLE: Keep a 256*2 byte table to speed up FCS calculation
*/
#ifndef PPP_FCS_TABLE
#define PPP_FCS_TABLE 1
#endif
/**
* PAP_SUPPORT==1: Support PAP.
*/

View File

@ -750,9 +750,9 @@ out:
}
#if PPPOS_SUPPORT
#if PPP_FCS_TABLE
/*
* FCS lookup table as calculated by genfcstab.
* @todo: smaller, slower implementation for lower memory footprint?
*/
static const u_short fcstab[256] = {
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
@ -788,6 +788,19 @@ static const u_short fcstab[256] = {
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
};
#else /* PPP_FCS_TABLE */
/* The HDLC polynomial: X**0 + X**5 + X**12 + X**16 (0x8408) */
#define PPP_FCS_POLYNOMIAL 0x8408
u16_t ppp_get_fcs(u8_t byte) {
unsigned int octet;
int bit;
octet = byte;
for (bit = 8; bit-- > 0; ) {
octet = (octet & 0x01) ? ((octet >> 1) ^ PPP_FCS_POLYNOMIAL) : (octet >> 1);
}
return octet & 0xffff;
}
#endif /* PPP_FCS_TABLE */
/* PPP's Asynchronous-Control-Character-Map. The mask array is used
* to select the specific bit for a character. */

View File

@ -127,7 +127,12 @@
*/
#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])
#if PPP_FCS_TABLE
#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff])
#else
u16_t ppp_get_fcs(u8_t byte);
#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ ppp_get_fcs(((fcs) ^ (c)) & 0xff))
#endif
/*
* A 32-bit unsigned integral type.