Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
reed_solomon
encode_rs.c
Go to the documentation of this file.
1
/*
2
* lib/reed_solomon/encode_rs.c
3
*
4
* Overview:
5
* Generic Reed Solomon encoder / decoder library
6
*
7
* Copyright 2002, Phil Karn, KA9Q
8
* May be used under the terms of the GNU General Public License (GPL)
9
*
10
* Adaption to the kernel by Thomas Gleixner (
[email protected]
)
11
*
12
* $Id: encode_rs.c,v 1.5 2005/11/07 11:14:59 gleixner Exp $
13
*
14
*/
15
16
/* Generic data width independent code which is included by the
17
* wrappers.
18
* int encode_rsX (struct rs_control *rs, uintX_t *data, int len, uintY_t *par)
19
*/
20
{
21
int
i
,
j
,
pad
;
22
int
nn
=
rs
->nn;
23
int
nroots
=
rs
->nroots;
24
uint16_t
*
alpha_to
=
rs
->alpha_to;
25
uint16_t
*
index_of
=
rs
->index_of;
26
uint16_t
*
genpoly
=
rs
->genpoly;
27
uint16_t
fb
;
28
uint16_t
msk
= (
uint16_t
)
rs
->nn;
29
30
/* Check length parameter for validity */
31
pad = nn - nroots - len;
32
if
(pad < 0 || pad >= nn)
33
return
-
ERANGE
;
34
35
for
(i = 0; i <
len
; i++) {
36
fb = index_of[((((
uint16_t
)
data
[i])^invmsk) & msk) ^ par[0]];
37
/* feedback term is non-zero */
38
if
(fb != nn) {
39
for
(j = 1; j <
nroots
; j++) {
40
par[
j
] ^= alpha_to[rs_modnn(
rs
, fb +
41
genpoly[nroots - j])];
42
}
43
}
44
/* Shift */
45
memmove
(&par[0], &par[1],
sizeof
(
uint16_t
) * (nroots - 1));
46
if
(fb != nn) {
47
par[nroots - 1] = alpha_to[rs_modnn(
rs
,
48
fb + genpoly[0])];
49
}
else
{
50
par[nroots - 1] = 0;
51
}
52
}
53
return
0;
54
}
Generated on Thu Jan 10 2013 14:55:52 for Linux Kernel by
1.8.2