Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
crypto4xx_sa.c
Go to the documentation of this file.
1 
22 #include <linux/kernel.h>
23 #include <linux/module.h>
24 #include <linux/moduleparam.h>
25 #include <linux/mod_devicetable.h>
26 #include <linux/interrupt.h>
27 #include <linux/spinlock_types.h>
28 #include <linux/highmem.h>
29 #include <linux/scatterlist.h>
30 #include <linux/crypto.h>
31 #include <crypto/algapi.h>
32 #include <crypto/des.h>
33 #include "crypto4xx_reg_def.h"
34 #include "crypto4xx_sa.h"
35 #include "crypto4xx_core.h"
36 
38 {
39  u32 offset;
40  union dynamic_sa_contents cts;
41 
42  if (ctx->direction == DIR_INBOUND)
43  cts.w = ((struct dynamic_sa_ctl *)(ctx->sa_in))->sa_contents;
44  else
45  cts.w = ((struct dynamic_sa_ctl *)(ctx->sa_out))->sa_contents;
46  offset = cts.bf.key_size
47  + cts.bf.inner_size
48  + cts.bf.outer_size
49  + cts.bf.spi
50  + cts.bf.seq_num0
51  + cts.bf.seq_num1
52  + cts.bf.seq_num_mask0
53  + cts.bf.seq_num_mask1
54  + cts.bf.seq_num_mask2
55  + cts.bf.seq_num_mask3;
56 
57  return sizeof(struct dynamic_sa_ctl) + offset * 4;
58 }
59 
61 {
62  u32 offset;
63  union dynamic_sa_contents cts;
64 
65  if (ctx->direction == DIR_INBOUND)
66  cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents;
67  else
68  cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents;
69  offset = cts.bf.key_size
70  + cts.bf.inner_size
71  + cts.bf.outer_size
72  + cts.bf.spi
73  + cts.bf.seq_num0
74  + cts.bf.seq_num1
75  + cts.bf.seq_num_mask0
76  + cts.bf.seq_num_mask1
77  + cts.bf.seq_num_mask2
78  + cts.bf.seq_num_mask3
79  + cts.bf.iv0
80  + cts.bf.iv1
81  + cts.bf.iv2
82  + cts.bf.iv3;
83 
84  return sizeof(struct dynamic_sa_ctl) + offset * 4;
85 }
86 
88 {
89  union dynamic_sa_contents cts;
90 
91  if (ctx->direction == DIR_INBOUND)
92  cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents;
93  else
94  cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents;
95  return (cts.bf.iv0 + cts.bf.iv1 + cts.bf.iv2 + cts.bf.iv3) * 4;
96 }
97 
99 {
100  union dynamic_sa_contents cts;
101 
102  if (ctx->direction == DIR_INBOUND)
103  cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents;
104  else
105  cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents;
106 
107  return sizeof(struct dynamic_sa_ctl);
108 }