?? bchhwsim.c
字號:
/* Simulaton of the ECC hardware */
/* These routines calculate BCH parity, BCH syndrome, */
/* Hamming parity and Hamming syndrome by software */
/* */
/* If ECC hardware exist these routines are not nesassary */
/* */
/* Algorithms and programming were written by : */
/* */
/* Itai Dror */
/* */
/* Fortress Security Division, Omer */
/* M - Systems, Flash Disk Pioneers */
/* email: itaid@m-sys.com */
/* */
/* version 1.0, Feb. 2, 2002 */
/* */
/* version 1.02, Dec 10, 2002 */
/* (Disk On Chip naming convention compliance) */
/* */
#include "bchhwsim.h"
/* #include "miniflbs.h" */
/* BCH 256 multiplications of g(X), Least Significant part */
static const FLDword dwLSGenpolyTable[256] = {
0x0,0xEE9DEF85,0x54A1838F,0xBA3C6C0A,
0x20D95B9B,0xCE44B41E,0x7478D814,0x9AE53791,
0x41B2B736,0xAF2F58B3,0x151334B9,0xFB8EDB3C,
0x616BECAD,0x8FF60328,0x35CA6F22,0xDB5780A7,
0x0AFF32E9,0xE462DD6C,0x5E5EB166,0xB0C35EE3,
0x2A266972,0xC4BB86F7,0x7E87EAFD,0x901A0578,
0x4B4D85DF,0xA5D06A5A,0x1FEC0650,0xF171E9D5,
0x6B94DE44,0x850931C1,0x3F355DCB,0xD1A8B24E,
0x15FE65D2,0xFB638A57,0x415FE65D,0xAFC209D8,
0x35273E49,0xDBBAD1CC,0x6186BDC6,0x8F1B5243,
0x544CD2E4,0xBAD13D61,0x00ED516B,0xEE70BEEE,
0x7495897F,0x9A0866FA,0x20340AF0,0xCEA9E575,
0x1F01573B,0xF19CB8BE,0x4BA0D4B4,0xA53D3B31,
0x3FD80CA0,0xD145E325,0x6B798F2F,0x85E460AA,
0x5EB3E00D,0xB02E0F88,0x0A126382,0xE48F8C07,
0x7E6ABB96,0x90F75413,0x2ACB3819,0xC456D79C,
0xA2669721,0x4CFB78A4,0xF6C714AE,0x185AFB2B,
0x82BFCCBA,0x6C22233F,0xD61E4F35,0x3883A0B0,
0xE3D42017,0x0D49CF92,0xB775A398,0x59E84C1D,
0xC30D7B8C,0x2D909409,0x97ACF803,0x79311786,
0xA899A5C8,0x46044A4D,0xFC382647,0x12A5C9C2,
0x8840FE53,0x66DD11D6,0xDCE17DDC,0x327C9259,
0xE92B12FE,0x7B6FD7B, 0xBD8A9171,0x53177EF4,
0xC9F24965,0x276FA6E0,0x9D53CAEA,0x73CE256F,
0xB798F2F3,0x59051D76,0xE339717C,0x0DA49EF9,
0x9741A968,0x79DC46ED,0xC3E02AE7,0x2D7DC562,
0xF62A45C5,0x18B7AA40,0xA28BC64A,0x4C1629CF,
0xD6F31E5E,0x386EF1DB,0x82529DD1,0x6CCF7254,
0xBD67C01A,0x53FA2F9F,0xE9C64395,0x075BAC10,
0x9DBE9B81,0x73237404,0xC91F180E,0x2782F78B,
0xFCD5772C,0x124898A9,0xA874F4A3,0x46E91B26,
0xDC0C2CB7,0x3291C332,0x88ADAF38,0x663040BD,
0x44CD2E42,0xAA50C1C7,0x106CADCD,0xFEF14248,
0x641475D9,0x8A899A5C,0x30B5F656,0xDE2819D3,
0x057F9974,0xEBE276F1,0x51DE1AFB,0xBF43F57E,
0x25A6C2EF,0xCB3B2D6A,0x71074160,0x9F9AAEE5,
0x4E321CAB,0xA0AFF32E,0x1A939F24,0xF40E70A1,
0x6EEB4730,0x8076A8B5,0x3A4AC4BF,0xD4D72B3A,
0x0F80AB9D,0xE11D4418,0x5B212812,0xB5BCC797,
0x2F59F006,0xC1C41F83,0x7BF87389,0x95659C0C,
0x51334B90,0xBFAEA415,0x0592C81F,0xEB0F279A,
0x71EA100B,0x9F77FF8E,0x254B9384,0xCBD67C01,
0x1081FCA6,0xFE1C1323,0x44207F29,0xAABD90AC,
0x3058A73D,0xDEC548B8,0x64F924B2,0x8A64CB37,
0x5BCC7979,0xB55196FC,0x0F6DFAF6,0xE1F01573,
0x7B1522E2,0x9588CD67,0x2FB4A16D,0xC1294EE8,
0x1A7ECE4F,0xF4E321CA,0x4EDF4DC0,0xA042A245,
0x3AA795D4,0xD43A7A51,0x6E06165B,0x809BF9DE,
0xE6ABB963,0x083656E6,0xB20A3AEC,0x5C97D569,
0xC672E2F8,0x28EF0D7D,0x92D36177,0x7C4E8EF2,
0xA7190E55,0x4984E1D0,0xF3B88DDA,0x1D25625F,
0x87C055CE,0x695DBA4B,0xD361D641,0x3DFC39C4,
0xEC548B8A,0x02C9640F,0xB8F50805,0x5668E780,
0xCC8DD011,0x22103F94,0x982C539E,0x76B1BC1B,
0xADE63CBC,0x437BD339,0xF947BF33,0x17DA50B6,
0x8D3F6727,0x63A288A2,0xD99EE4A8,0x37030B2D,
0xF355DCB1,0x1DC83334,0xA7F45F3E,0x4969B0BB,
0xD38C872A,0x3D1168AF,0x872D04A5,0x69B0EB20,
0xB2E76B87,0x5C7A8402,0xE646E808,0x08DB078D,
0x923E301C,0x7CA3DF99,0xC69FB393,0x28025C16,
0xF9AAEE58,0x173701DD,0xAD0B6DD7,0x43968252,
0xD973B5C3,0x37EE5A46,0x8DD2364C,0x634FD9C9,
0xB818596E,0x5685B6EB,0xECB9DAE1,0x02243564,
0x98C102F5,0x765CED70,0xCC60817A,0x22FD6EFF,
} ;
/* BCH 256 multiplications of g(X), Most Significant part */
static const FLDword dwMSGenpolyTable[256] = {
0x00000000,0x00B53485,0x00F12181,0x00441504,
0x00790B88,0x00CC3F0D,0x00882A09,0x003D1E8C,
0x00F21710,0x00472395,0x00033691,0x00B60214,
0x008B1C98,0x003E281D,0x007A3D19,0x00CF099C,
0x007F66AA,0x00CA522F,0x008E472B,0x003B73AE,
0x00066D22,0x00B359A7,0x00F74CA3,0x00427826,
0x008D71BA,0x0038453F,0x007C503B,0x00C964BE,
0x00F47A32,0x00414EB7,0x00055BB3,0x00B06F36,
0x00FECD54,0x004BF9D1,0x000FECD5,0x00BAD850,
0x0087C6DC,0x0032F259,0x0076E75D,0x00C3D3D8,
0x000CDA44,0x00B9EEC1,0x00FDFBC5,0x0048CF40,
0x0075D1CC,0x00C0E549,0x0084F04D,0x0031C4C8,
0x0081ABFE,0x00349F7B,0x00708A7F,0x00C5BEFA,
0x00F8A076,0x004D94F3,0x000981F7,0x00BCB572,
0x0073BCEE,0x00C6886B,0x00829D6F,0x0037A9EA,
0x000AB766,0x00BF83E3,0x00FB96E7,0x004EA262,
0x0066D222,0x00D3E6A7,0x0097F3A3,0x0022C726,
0x001FD9AA,0x00AAED2F,0x00EEF82B,0x005BCCAE,
0x0094C532,0x0021F1B7,0x0065E4B3,0x00D0D036,
0x00EDCEBA,0x0058FA3F,0x001CEF3B,0x00A9DBBE,
0x0019B488,0x00AC800D,0x00E89509,0x005DA18C,
0x0060BF00,0x00D58B85,0x00919E81,0x0024AA04,
0x00EBA398,0x005E971D,0x001A8219,0x00AFB69C,
0x0092A810,0x00279C95,0x00638991,0x00D6BD14,
0x00981F76,0x002D2BF3,0x00693EF7,0x00DC0A72,
0x00E114FE,0x0054207B,0x0010357F,0x00A501FA,
0x006A0866,0x00DF3CE3,0x009B29E7,0x002E1D62,
0x001303EE,0x00A6376B,0x00E2226F,0x005716EA,
0x00E779DC,0x00524D59,0x0016585D,0x00A36CD8,
0x009E7254,0x002B46D1,0x006F53D5,0x00DA6750,
0x00156ECC,0x00A05A49,0x00E44F4D,0x00517BC8,
0x006C6544,0x00D951C1,0x009D44C5,0x00287040,
0x00CDA445,0x007890C0,0x003C85C4,0x0089B141,
0x00B4AFCD,0x00019B48,0x00458E4C,0x00F0BAC9,
0x003FB355,0x008A87D0,0x00CE92D4,0x007BA651,
0x0046B8DD,0x00F38C58,0x00B7995C,0x0002ADD9,
0x00B2C2EF,0x0007F66A,0x0043E36E,0x00F6D7EB,
0x00CBC967,0x007EFDE2,0x003AE8E6,0x008FDC63,
0x0040D5FF,0x00F5E17A,0x00B1F47E,0x0004C0FB,
0x0039DE77,0x008CEAF2,0x00C8FFF6,0x007DCB73,
0x00336911,0x00865D94,0x00C24890,0x00777C15,
0x004A6299,0x00FF561C,0x00BB4318,0x000E779D,
0x00C17E01,0x00744A84,0x00305F80,0x00856B05,
0x00B87589,0x000D410C,0x00495408,0x00FC608D,
0x004C0FBB,0x00F93B3E,0x00BD2E3A,0x00081ABF,
0x00350433,0x008030B6,0x00C425B2,0x00711137,
0x00BE18AB,0x000B2C2E,0x004F392A,0x00FA0DAF,
0x00C71323,0x007227A6,0x003632A2,0x00830627,
0x00AB7667,0x001E42E2,0x005A57E6,0x00EF6363,
0x00D27DEF,0x0067496A,0x00235C6E,0x009668EB,
0x00596177,0x00EC55F2,0x00A840F6,0x001D7473,
0x00206AFF,0x00955E7A,0x00D14B7E,0x00647FFB,
0x00D410CD,0x00612448,0x0025314C,0x009005C9,
0x00AD1B45,0x00182FC0,0x005C3AC4,0x00E90E41,
0x002607DD,0x00933358,0x00D7265C,0x006212D9,
0x005F0C55,0x00EA38D0,0x00AE2DD4,0x001B1951,
0x0055BB33,0x00E08FB6,0x00A49AB2,0x0011AE37,
0x002CB0BB,0x0099843E,0x00DD913A,0x0068A5BF,
0x00A7AC23,0x001298A6,0x00568DA2,0x00E3B927,
0x00DEA7AB,0x006B932E,0x002F862A,0x009AB2AF,
0x002ADD99,0x009FE91C,0x00DBFC18,0x006EC89D,
0x0053D611,0x00E6E294,0x00A2F790,0x0017C315,
0x00D8CA89,0x006DFE0C,0x0029EB08,0x009CDF8D,
0x00A1C101,0x0014F584,0x0050E080,0x00E5D405,
} ;
/* ------------------------------------------------------------------------- */
/* Hamming multiplications of g(X) */
static const FLByte bHammingTable[256] =
{
0x00,0x91,0x61,0xF0,0xC2,0x53,0xA3,0x32,
0xC7,0x56,0xA6,0x37,0x05,0x94,0x64,0xF5,
0xCD,0x5C,0xAC,0x3D,0x0F,0x9E,0x6E,0xFF,
0x0A,0x9B,0x6B,0xFA,0xC8,0x59,0xA9,0x38,
0xD9,0x48,0xB8,0x29,0x1B,0x8A,0x7A,0xEB,
0x1E,0x8F,0x7F,0xEE,0xDC,0x4D,0xBD,0x2C,
0x14,0x85,0x75,0xE4,0xD6,0x47,0xB7,0x26,
0xD3,0x42,0xB2,0x23,0x11,0x80,0x70,0xE1,
0xF1,0x60,0x90,0x01,0x33,0xA2,0x52,0xC3,
0x36,0xA7,0x57,0xC6,0xF4,0x65,0x95,0x04,
0x3C,0xAD,0x5D,0xCC,0xFE,0x6F,0x9F,0x0E,
0xFB,0x6A,0x9A,0x0B,0x39,0xA8,0x58,0xC9,
0x28,0xB9,0x49,0xD8,0xEA,0x7B,0x8B,0x1A,
0xEF,0x7E,0x8E,0x1F,0x2D,0xBC,0x4C,0xDD,
0xE5,0x74,0x84,0x15,0x27,0xB6,0x46,0xD7,
0x22,0xB3,0x43,0xD2,0xE0,0x71,0x81,0x10,
0xA1,0x30,0xC0,0x51,0x63,0xF2,0x02,0x93,
0x66,0xF7,0x07,0x96,0xA4,0x35,0xC5,0x54,
0x6C,0xFD,0x0D,0x9C,0xAE,0x3F,0xCF,0x5E,
0xAB,0x3A,0xCA,0x5B,0x69,0xF8,0x08,0x99,
0x78,0xE9,0x19,0x88,0xBA,0x2B,0xDB,0x4A,
0xBF,0x2E,0xDE,0x4F,0x7D,0xEC,0x1C,0x8D,
0xB5,0x24,0xD4,0x45,0x77,0xE6,0x16,0x87,
0x72,0xE3,0x13,0x82,0xB0,0x21,0xD1,0x40,
0x50,0xC1,0x31,0xA0,0x92,0x03,0xF3,0x62,
0x97,0x06,0xF6,0x67,0x55,0xC4,0x34,0xA5,
0x9D,0x0C,0xFC,0x6D,0x5F,0xCE,0x3E,0xAF,
0x5A,0xCB,0x3B,0xAA,0x98,0x09,0xF9,0x68,
0x89,0x18,0xE8,0x79,0x4B,0xDA,0x2A,0xBB,
0x4E,0xDF,0x2F,0xBE,0x8C,0x1D,0xED,0x7C,
0x44,0xD5,0x25,0xB4,0x86,0x17,0xE7,0x76,
0x83,0x12,0xE2,0x73,0x41,0xD0,0x20,0xB1,
} ;
/* ------------------------------------------------------------------------- */
/* */
/* function: */
/* */
/* void BCH_Parity(FLByte bU[], FLSNative nsnumbytes, FLByte bP[]) */
/* */
/* description: Calculate parity bits for BCH 4 error correction code */
/* */
/* */
/* Perfomance in accelerated using multiplication tables of g(X) */
/* */
/* Input: */
/* bU[] - Page of data */
/* nsnumbytes - Number of data bytes */
/* 1 <= numbytes <= 2040 */
/* */
/* Output: */
/* bP[] - 7 bytes of BCH 4 ECC parity bits */
/* */
/* */
/* ------------------------------------------------------------------------- */
void BCH_Parity(FLByte bU[], FLSNative nsnumbytes, FLByte bP[])
{
/* Calculate parity bits by C software */
/* Store parity at dwRH:dwRL, bits 25 to 32 of dwRH are zeros */
FLDword dwRL = 0, dwRH = 0 ;
/* RH:RL accumulate the intermediate division result */
/* in the 56 right most bits */
FLSNative nsi = 0 ;
FLSNative nsind ;
dwRL = 0 ;
dwRH = 0 ;
/* Iterate on bytes of page */
while ( nsi < nsnumbytes )
{
nsind = ( FLByte ) dwRL ^ bU[nsi] ;
dwRL = ( dwRL >> 8 ) | ( dwRH << 24 ) ;
dwRL ^= dwLSGenpolyTable[nsind] ;
dwRH = ( dwRH >> 8 ) ^ dwMSGenpolyTable[nsind] ;
nsi++ ;
}
/* P[0] to P[6] are the 56 parity bits */
bP[0] = ( FLByte ) dwRL ;
bP[1] = ( FLByte ) ( dwRL >> 8 ) ;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -