btrfs-progs: raid56: Allow raid6 to recover data and P
[platform/upstream/btrfs-progs.git] / kernel-lib / raid56.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public
4  * License v2 as published by the Free Software Foundation.
5  *
6  * This program is distributed in the hope that it will be useful,
7  * but WITHOUT ANY WARRANTY; without even the implied warranty of
8  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
9  * General Public License for more details.
10  *
11  * You should have received a copy of the GNU General Public
12  * License along with this program; if not, write to the
13  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
14  * Boston, MA 021110-1307, USA.
15  */
16
17 /*
18  * Original headers from kernel library for RAID5/6 calculations, not from
19  * btrfs kernel header.
20  */
21
22 #ifndef __BTRFS_PROGS_RAID56_H__
23 #define __BTRFS_PROGS_RAID56_H__
24
25 void raid6_gen_syndrome(int disks, size_t bytes, void **ptrs);
26 int raid5_gen_result(int nr_devs, size_t stripe_len, int dest, void **data);
27
28 /*
29  * Headers synchronized from kernel include/linux/raid/pq.h
30  * No modification at all.
31  *
32  * Galois field tables.
33  */
34 extern const u8 raid6_gfmul[256][256] __attribute__((aligned(256)));
35 extern const u8 raid6_vgfmul[256][32] __attribute__((aligned(256)));
36 extern const u8 raid6_gfexp[256]      __attribute__((aligned(256)));
37 extern const u8 raid6_gfinv[256]      __attribute__((aligned(256)));
38 extern const u8 raid6_gfexi[256]      __attribute__((aligned(256)));
39
40 /* Recover raid6 with 2 data stripes corrupted */
41 int raid6_recov_data2(int nr_devs, size_t stripe_len, int dest1, int dest2,
42                       void **data);
43
44 /* Recover data and P */
45 int raid6_recov_datap(int nr_devs, size_t stripe_len, int dest1, void **data);
46
47 #endif