80 lines
2.6 KiB
C
80 lines
2.6 KiB
C
/*******************************************************************************
|
|
|
|
|
|
Filename: new_rs.h
|
|
Description: Global definitions for Reed-Solomon encoder/decoder
|
|
|
|
|
|
Author: STMicroelectronics
|
|
|
|
|
|
|
|
You have a license to reproduce, display, perform, produce derivative works of,
|
|
and distribute (in original or modified form) the Program, provided that you
|
|
explicitly agree to the following disclaimer:
|
|
|
|
THIS PROGRAM IS PROVIDED "AS IT IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
|
EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTY
|
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK
|
|
AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
|
REPAIR OR CORRECTION.
|
|
|
|
********************************************************************************/
|
|
|
|
#ifndef __MTD_NAND_ECC_RS_H__
|
|
#define __MTD_NAND_ECC_RS_H__
|
|
#include <common.h>
|
|
|
|
//typedef unsigned int dtype;
|
|
typedef u_short dtype;
|
|
|
|
|
|
/* Initialization function */
|
|
void init_rs(void);
|
|
|
|
/* These two functions *must* be called in this order (e.g.,
|
|
* by init_rs()) before any encoding/decoding
|
|
*/
|
|
|
|
void generate_gf(void); /* Generate Galois Field */
|
|
void gen_poly(void); /* Generate generator polynomial */
|
|
|
|
/* Reed-Solomon encoding
|
|
* data[] is the input block, parity symbols are placed in bb[]
|
|
* bb[] may lie past the end of the data, e.g., for (255,223):
|
|
* encode_rs(&data[0],&data[223]);
|
|
*/
|
|
char encode_rs(dtype data[], dtype bb[]);
|
|
|
|
|
|
/* Reed-Solomon errors decoding
|
|
* The received block goes into data[]
|
|
*
|
|
* The decoder corrects the symbols in place, if possible and returns
|
|
* the number of corrected symbols. If the codeword is illegal or
|
|
* uncorrectible, the data array is unchanged and -1 is returned
|
|
*/
|
|
int decode_rs(dtype data[]);
|
|
|
|
/**
|
|
* nand_calculate_ecc - [NAND Interface] Calculate 3 byte ECC code for 256 byte block
|
|
* @mtd: MTD block structure
|
|
* @dat: raw data
|
|
* @ecc_code: buffer for ECC
|
|
*/
|
|
int nand_calculate_ecc_rs(struct mtd_info *mtd, const u_char *data, u_char *ecc_code);
|
|
|
|
/**
|
|
* nand_correct_data - [NAND Interface] Detect and correct bit error(s)
|
|
* @mtd: MTD block structure
|
|
* @dat: raw data read from the chip
|
|
* @store_ecc: ECC from the chip
|
|
* @calc_ecc: the ECC calculated from raw data
|
|
*
|
|
* Detect and correct a 1 bit error for 256 byte block
|
|
*/
|
|
int nand_correct_data_rs(struct mtd_info *mtd, u_char *data, u_char *store_ecc, u_char *calc_ecc);
|
|
|
|
#endif
|