obj-$(CONFIG_CRYPTO_DEV_PPC4XX) += crypto4xx.o
-crypto4xx-y :=  crypto4xx_core.o crypto4xx_alg.o crypto4xx_sa.o
+crypto4xx-y :=  crypto4xx_core.o crypto4xx_alg.o
 crypto4xx-$(CONFIG_HW_RANDOM_PPC4XX) += crypto4xx_trng.o
 
 #include <crypto/aes.h>
 #include <crypto/sha.h>
 #include "crypto4xx_reg_def.h"
-#include "crypto4xx_sa.h"
 #include "crypto4xx_core.h"
+#include "crypto4xx_sa.h"
 
 static void set_dynamic_sa_command_0(struct dynamic_sa_ctl *sa, u32 save_h,
                                     u32 save_iv, u32 ld_h, u32 ld_iv,
        ctx->pd_ctl = 0x1;
 
        return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-                                 req->nbytes, req->info,
-                                 get_dynamic_sa_iv_size(ctx));
+               req->nbytes, req->info,
+               crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(req)));
 }
 
 int crypto4xx_decrypt(struct ablkcipher_request *req)
        ctx->pd_ctl = 1;
 
        return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-                                 req->nbytes, req->info,
-                                 get_dynamic_sa_iv_size(ctx));
+               req->nbytes, req->info,
+               crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(req)));
 }
 
 /**
                                 SA_SEQ_MASK_OFF, SA_MC_ENABLE,
                                 SA_NOT_COPY_PAD, SA_NOT_COPY_PAYLOAD,
                                 SA_NOT_COPY_HDR);
-       crypto4xx_memcpy_le(ctx->sa_in + get_dynamic_sa_offset_key_field(ctx),
+       crypto4xx_memcpy_le(get_dynamic_sa_key_field(sa),
                            key, keylen);
        sa->sa_contents.w = SA_AES_CONTENTS | (keylen << 2);
        sa->sa_command_1.bf.key_len = keylen >> 3;
        ctx->is_hash = 0;
        ctx->direction = DIR_INBOUND;
-       memcpy(ctx->sa_in + get_dynamic_sa_offset_state_ptr_field(ctx),
-                       (void *)&ctx->state_record_dma_addr, 4);
-       ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(ctx);
+       memcpy(sa + get_dynamic_sa_offset_state_ptr_field(sa),
+              (void *)&ctx->state_record_dma_addr, 4);
+       ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
 
        memcpy(ctx->sa_out, ctx->sa_in, ctx->sa_len * 4);
        sa = (struct dynamic_sa_ctl *) ctx->sa_out;
        memset(sa_in->inner_digest, 0, sizeof(sa_in->inner_digest));
        memset(sa_in->outer_digest, 0, sizeof(sa_in->outer_digest));
        sa_in->state_ptr = ctx->state_record_dma_addr;
-       ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(ctx);
+       ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
 
        return 0;
 }
 
 void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
 void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
 u32 crypto4xx_alloc_state_record(struct crypto4xx_ctx *ctx);
-u32 get_dynamic_sa_offset_state_ptr_field(struct crypto4xx_ctx *ctx);
-u32 get_dynamic_sa_offset_key_field(struct crypto4xx_ctx *ctx);
-u32 get_dynamic_sa_iv_size(struct crypto4xx_ctx *ctx);
 void crypto4xx_memcpy_le(unsigned int *dst,
                         const unsigned char *buf, int len);
 u32 crypto4xx_build_pd(struct crypto_async_request *req,
 
+++ /dev/null
-/**
- * AMCC SoC PPC4xx Crypto Driver
- *
- * Copyright (c) 2008 Applied Micro Circuits Corporation.
- * All rights reserved. James Hsiao <jhsiao@amcc.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * @file crypto4xx_sa.c
- *
- * This file implements the security context
- * associate format.
- */
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/mod_devicetable.h>
-#include <linux/interrupt.h>
-#include <linux/spinlock_types.h>
-#include <linux/highmem.h>
-#include <linux/scatterlist.h>
-#include <linux/crypto.h>
-#include <crypto/algapi.h>
-#include <crypto/des.h>
-#include "crypto4xx_reg_def.h"
-#include "crypto4xx_sa.h"
-#include "crypto4xx_core.h"
-
-u32 get_dynamic_sa_offset_state_ptr_field(struct crypto4xx_ctx *ctx)
-{
-       u32 offset;
-       union dynamic_sa_contents cts;
-
-       if (ctx->direction == DIR_INBOUND)
-               cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
-       else
-               cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
-       offset = cts.bf.key_size
-               + cts.bf.inner_size
-               + cts.bf.outer_size
-               + cts.bf.spi
-               + cts.bf.seq_num0
-               + cts.bf.seq_num1
-               + cts.bf.seq_num_mask0
-               + cts.bf.seq_num_mask1
-               + cts.bf.seq_num_mask2
-               + cts.bf.seq_num_mask3
-               + cts.bf.iv0
-               + cts.bf.iv1
-               + cts.bf.iv2
-               + cts.bf.iv3;
-
-       return sizeof(struct dynamic_sa_ctl) + offset * 4;
-}
-
-u32 get_dynamic_sa_iv_size(struct crypto4xx_ctx *ctx)
-{
-       union dynamic_sa_contents cts;
-
-       if (ctx->direction == DIR_INBOUND)
-               cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
-       else
-               cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
-       return (cts.bf.iv0 + cts.bf.iv1 + cts.bf.iv2 + cts.bf.iv3) * 4;
-}
-
-u32 get_dynamic_sa_offset_key_field(struct crypto4xx_ctx *ctx)
-{
-       union dynamic_sa_contents cts;
-
-       if (ctx->direction == DIR_INBOUND)
-               cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
-       else
-               cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
-
-       return sizeof(struct dynamic_sa_ctl);
-}
 
 #define SA_HASH160_LEN         (sizeof(struct dynamic_sa_hash160)/4)
 #define SA_HASH160_CONTENTS     0x2000a502
 
+static inline u32
+get_dynamic_sa_offset_state_ptr_field(struct dynamic_sa_ctl *cts)
+{
+       u32 offset;
+
+       offset = cts->sa_contents.bf.key_size
+               + cts->sa_contents.bf.inner_size
+               + cts->sa_contents.bf.outer_size
+               + cts->sa_contents.bf.spi
+               + cts->sa_contents.bf.seq_num0
+               + cts->sa_contents.bf.seq_num1
+               + cts->sa_contents.bf.seq_num_mask0
+               + cts->sa_contents.bf.seq_num_mask1
+               + cts->sa_contents.bf.seq_num_mask2
+               + cts->sa_contents.bf.seq_num_mask3
+               + cts->sa_contents.bf.iv0
+               + cts->sa_contents.bf.iv1
+               + cts->sa_contents.bf.iv2
+               + cts->sa_contents.bf.iv3;
+
+       return sizeof(struct dynamic_sa_ctl) + offset * 4;
+}
+
+static inline u8 *get_dynamic_sa_key_field(struct dynamic_sa_ctl *cts)
+{
+       return (u8 *) ((unsigned long)cts + sizeof(struct dynamic_sa_ctl));
+}
+
 #endif