Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
crypto4xx_core.h
Go to the documentation of this file.
1 
22 #ifndef __CRYPTO4XX_CORE_H__
23 #define __CRYPTO4XX_CORE_H__
24 
25 #include <crypto/internal/hash.h>
26 
27 #define PPC460SX_SDR0_SRST 0x201
28 #define PPC405EX_SDR0_SRST 0x200
29 #define PPC460EX_SDR0_SRST 0x201
30 #define PPC460EX_CE_RESET 0x08000000
31 #define PPC460SX_CE_RESET 0x20000000
32 #define PPC405EX_CE_RESET 0x00000008
33 
34 #define CRYPTO4XX_CRYPTO_PRIORITY 300
35 #define PPC4XX_LAST_PD 63
36 #define PPC4XX_NUM_PD 64
37 #define PPC4XX_LAST_GD 1023
38 #define PPC4XX_NUM_GD 1024
39 #define PPC4XX_LAST_SD 63
40 #define PPC4XX_NUM_SD 64
41 #define PPC4XX_SD_BUFFER_SIZE 2048
42 
43 #define PD_ENTRY_INUSE 1
44 #define PD_ENTRY_FREE 0
45 #define ERING_WAS_FULL 0xffffffff
46 
47 struct crypto4xx_device;
48 
49 struct pd_uinfo {
53  u32 first_gd; /* first gather discriptor
54  used by this packet */
55  u32 num_gd; /* number of gather discriptor
56  used by this packet */
57  u32 first_sd; /* first scatter discriptor
58  used by this packet */
59  u32 num_sd; /* number of scatter discriptors
60  used by this packet */
61  void *sa_va; /* shadow sa, when using cp from ctx->sa */
63  void *sr_va; /* state record for shadow sa */
66  struct crypto_async_request *async_req; /* base crypto request
67  for this packet */
68 };
69 
72  char *name;
75 
76  void *pdr; /* base address of packet
77  descriptor ring */
78  dma_addr_t pdr_pa; /* physical address used to
79  program ce pdr_base_register */
80  void *gdr; /* gather descriptor ring */
81  dma_addr_t gdr_pa; /* physical address used to
82  program ce gdr_base_register */
83  void *sdr; /* scatter descriptor ring */
84  dma_addr_t sdr_pa; /* physical address used to
85  program ce sdr_base_register */
89 
90  void *shadow_sa_pool; /* pool of memory for sa in pd_uinfo */
92  void *shadow_sr_pool; /* pool of memory for sr in pd_uinfo */
100  void *pdr_uinfo;
101  struct list_head alg_list; /* List of algorithm supported
102  by this device */
103 };
104 
106  struct device *device;
113 };
114 
117  void *sa_in;
119  void *sa_out;
124  u32 offset_to_sr_ptr; /* offset to state ptr, in dynamic sa */
133 };
134 
136  struct crypto4xx_device *dev; /* Device in which
137  operation to send to */
138  void *sa;
141 };
142 
145  union {
147  struct ahash_alg hash;
148  } u;
149 };
150 
152  struct list_head entry;
155 };
156 
157 static inline struct crypto4xx_alg *crypto_alg_to_crypto4xx_alg(
158  struct crypto_alg *x)
159 {
160  switch (x->cra_flags & CRYPTO_ALG_TYPE_MASK) {
162  return container_of(__crypto_ahash_alg(x),
163  struct crypto4xx_alg, alg.u.hash);
164  }
165 
166  return container_of(x, struct crypto4xx_alg, alg.u.cipher);
167 }
168 
169 extern int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size);
170 extern void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
172  struct crypto4xx_ctx *rctx);
173 extern void crypto4xx_free_sa_rctx(struct crypto4xx_ctx *rctx);
174 extern void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
179 extern void crypto4xx_memcpy_le(unsigned int *dst,
180  const unsigned char *buf, int len);
182  struct crypto4xx_ctx *ctx,
183  struct scatterlist *src,
184  struct scatterlist *dst,
185  unsigned int datalen,
186  void *iv, u32 iv_len);
188  const u8 *key, unsigned int keylen);
189 extern int crypto4xx_encrypt(struct ablkcipher_request *req);
190 extern int crypto4xx_decrypt(struct ablkcipher_request *req);
191 extern int crypto4xx_sha1_alg_init(struct crypto_tfm *tfm);
192 extern int crypto4xx_hash_digest(struct ahash_request *req);
193 extern int crypto4xx_hash_final(struct ahash_request *req);
194 extern int crypto4xx_hash_update(struct ahash_request *req);
195 extern int crypto4xx_hash_init(struct ahash_request *req);
196 #endif