blob: 20e70946f6e3fe23706acd59add9e5b7214eb012 [file] [log] [blame]
/*******************************************************************************
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