[PATCH 2/5] crypto/nx: Create nx842_cfg_crb function

Configure CRB is moved to nx842_cfg_crb() so that it can be
used for icswx function and VAS function which will be added
later.

Signed-off-by: Haren Myneni <ha...@us.ibm.com>
---
 drivers/crypto/nx/nx-842-powernv.c | 57 +++++++++++++++++++++++++-------------
 1 file changed, 38 insertions(+), 19 deletions(-)

diff --git a/drivers/crypto/nx/nx-842-powernv.c 
b/drivers/crypto/nx/nx-842-powernv.c
index 125f1dc..4cd6a6f 100644
--- a/drivers/crypto/nx/nx-842-powernv.c
+++ b/drivers/crypto/nx/nx-842-powernv.c
@@ -362,6 +362,40 @@ static int wait_for_csb(struct nx842_workmem *wmem,
        return 0;
 }
 
+static int nx842_cfg_crb(const unsigned char *in, unsigned int inlen,
+                       unsigned char *out, unsigned int outlen,
+                       struct nx842_workmem *wmem)
+{
+       struct coprocessor_request_block *crb;
+       struct coprocessor_status_block *csb;
+       u64 csb_addr;
+       int ret;
+
+       crb = &wmem->crb;
+       csb = &crb->csb;
+
+       /* Clear any previous values */
+       memset(crb, 0, sizeof(*crb));
+
+       /* set up DDLs */
+       ret = setup_ddl(&crb->source, wmem->ddl_in,
+                       (unsigned char *)in, inlen, true);
+       if (ret)
+               return ret;
+
+       ret = setup_ddl(&crb->target, wmem->ddl_out,
+                       out, outlen, false);
+       if (ret)
+               return ret;
+
+       /* set up CRB's CSB addr */
+       csb_addr = nx842_get_pa(csb) & CRB_CSB_ADDRESS;
+       csb_addr |= CRB_CSB_AT; /* Addrs are phys */
+       crb->csb_addr = cpu_to_be64(csb_addr);
+
+       return 0;
+}
+
 /**
  * nx842_icswx_function - compress/decompress data using the 842 algorithm
  *
@@ -401,7 +435,6 @@ static int nx842_icswx_function(const unsigned char *in, 
unsigned int inlen,
        struct coprocessor_status_block *csb;
        struct nx842_workmem *wmem;
        int ret;
-       u64 csb_addr;
        u32 ccw;
        unsigned int outlen = *outlenp;
 
@@ -415,33 +448,19 @@ static int nx842_icswx_function(const unsigned char *in, 
unsigned int inlen,
                return -ENODEV;
        }
 
-       crb = &wmem->crb;
-       csb = &crb->csb;
-
-       /* Clear any previous values */
-       memset(crb, 0, sizeof(*crb));
-
-       /* set up DDLs */
-       ret = setup_ddl(&crb->source, wmem->ddl_in,
-                       (unsigned char *)in, inlen, true);
-       if (ret)
-               return ret;
-       ret = setup_ddl(&crb->target, wmem->ddl_out,
-                       out, outlen, false);
+       ret = nx842_cfg_crb(in, inlen, out, outlen, wmem);
        if (ret)
                return ret;
 
+       crb = &wmem->crb;
+       csb = &crb->csb;
+
        /* set up CCW */
        ccw = 0;
        ccw = SET_FIELD(CCW_CT, ccw, nx842_ct);
        ccw = SET_FIELD(CCW_CI_842, ccw, 0); /* use 0 for hw auto-selection */
        ccw = SET_FIELD(CCW_FC_842, ccw, fc);
 
-       /* set up CRB's CSB addr */
-       csb_addr = nx842_get_pa(csb) & CRB_CSB_ADDRESS;
-       csb_addr |= CRB_CSB_AT; /* Addrs are phys */
-       crb->csb_addr = cpu_to_be64(csb_addr);
-
        wmem->start = ktime_get();
 
        /* do ICSWX */
-- 
1.8.3.1



Reply via email to