summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTushar Gohad <tushar.gohad@intel.com>2014-05-03 23:47:50 -0700
committerTushar Gohad <tushar.gohad@intel.com>2014-05-05 22:25:21 -0700
commit1d6b2bcf1cc2cc66725c14fe6df12d0e93e87d6e (patch)
treef253cc19e8f1f42d4085cc996998a0166d962846
parent8a98a16dd44ab98dc0f6184895ce7874c9b69a38 (diff)
downloadpyeclib-1d6b2bcf1cc2cc66725c14fe6df12d0e93e87d6e.tar.gz
c_eclib: Add init routine for rs_vand_isa_l
-rw-r--r--src/c/pyeclib_c/pyeclib_c.c32
-rw-r--r--src/c/pyeclib_c/pyeclib_c.h1
2 files changed, 29 insertions, 4 deletions
diff --git a/src/c/pyeclib_c/pyeclib_c.c b/src/c/pyeclib_c/pyeclib_c.c
index 2fb1f42..49f4e70 100644
--- a/src/c/pyeclib_c/pyeclib_c.c
+++ b/src/c/pyeclib_c/pyeclib_c.c
@@ -38,6 +38,11 @@
#include <pyeclib_c.h>
#include <bytesobject.h>
+/* ISA-L includes */
+#include <erasure_code.h>
+#include <types.h>
+
+#define talloc(type, num) (type *) malloc(sizeof(type)*(num))
/* Python 3 compatibility macros */
#if PY_MAJOR_VERSION >= 3
@@ -576,6 +581,24 @@ static int get_decoding_info(pyeclib_t *pyeclib_handle,
return 0;
}
+static int
+pyeclib_c_init_rs_vand_isa_l(pyeclib_t *pyeclib_handle)
+{
+ int k = pyeclib_handle->k;
+ int m = pyeclib_handle->m;
+
+ // Force w = 8 for ISA-L
+ pyeclib_handle->w = 8;
+
+ // Generate encode matrix encode_matrix
+ // The matrix generated by gf_gen_rs_matrix
+ // is not always invertable.
+ pyeclib_handle->matrix = talloc(int, k * m);
+ gf_gen_rs_matrix((unsigned char *) pyeclib_handle->matrix, k + m, k);
+
+ return 0;
+}
+
static PyObject *
pyeclib_c_init(PyObject *self, PyObject *args)
{
@@ -619,15 +642,13 @@ pyeclib_c_init(PyObject *self, PyObject *args)
pyeclib_handle->algsig_chksum = use_algsig_chksum;
switch (type) {
- case PYECC_RS_VAND_ISA_L:
- break;
- case PYECC_RS_CAUCHY_ISA_L:
- break;
case PYECC_RS_CAUCHY_ORIG:
pyeclib_handle->matrix = cauchy_original_coding_matrix(k, m, w);
pyeclib_handle->bitmatrix = jerasure_matrix_to_bitmatrix(k, m, w, pyeclib_handle->matrix);
pyeclib_handle->schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, pyeclib_handle->bitmatrix);
break;
+ case PYECC_RS_CAUCHY_ISA_L:
+ break;
case PYECC_XOR_HD_3:
pyeclib_handle->xor_code_desc = init_xor_hd_code(k, m, 3);
if (pyeclib_handle->algsig_chksum) {
@@ -640,6 +661,9 @@ pyeclib_c_init(PyObject *self, PyObject *args)
pyeclib_handle->alg_sig_desc = init_alg_sig(32, 16);
}
break;
+ case PYECC_RS_VAND_ISA_L:
+ pyeclib_c_init_rs_vand_isa_l(pyeclib_handle);
+ break;
case PYECC_RS_VAND:
default:
pyeclib_handle->matrix = reed_sol_vandermonde_coding_matrix(k, m, w);
diff --git a/src/c/pyeclib_c/pyeclib_c.h b/src/c/pyeclib_c/pyeclib_c.h
index 9f92442..04cd6f8 100644
--- a/src/c/pyeclib_c/pyeclib_c.h
+++ b/src/c/pyeclib_c/pyeclib_c.h
@@ -78,6 +78,7 @@ typedef struct pyeclib_s
int m;
int w;
int *matrix;
+ // TODO move ec_type-specific members into unions
int *bitmatrix;
int **schedule;
xor_code_t *xor_code_desc;