forked from Minki/linux
ec8f5d8f6f
The driver is separated by functional parts. The core part implements a platform driver probe and remove callbaks. The probe enables clocks, checks crypto version, initialize and request dma channels, create done tasklet and init crypto queue and finally register the algorithms into crypto core subsystem. - DMA and SG helper functions implement dmaengine and sg-list helper functions used by other parts of the crypto driver. - ablkcipher algorithms implementation of AES, DES and 3DES crypto API callbacks, the crypto register alg function, the async request handler and its dma done callback function. - SHA and HMAC transforms implementation and registration of ahash crypto type. It includes sha1, sha256, hmac(sha1) and hmac(sha256). - infrastructure to setup the crypto hw contains functions used to setup/prepare hardware registers for all algorithms supported by the crypto block. It also exports few helper functions needed by algorithms: - to check hardware status - to start crypto hardware - to translate data stream to big endian form Adds register addresses and bit/masks used by the driver as well. Signed-off-by: Stanimir Varbanov <svarbanov@mm-sol.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
69 lines
1.8 KiB
C
69 lines
1.8 KiB
C
/*
|
|
* Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef _CIPHER_H_
|
|
#define _CIPHER_H_
|
|
|
|
#include "common.h"
|
|
#include "core.h"
|
|
|
|
#define QCE_MAX_KEY_SIZE 64
|
|
|
|
struct qce_cipher_ctx {
|
|
u8 enc_key[QCE_MAX_KEY_SIZE];
|
|
unsigned int enc_keylen;
|
|
struct crypto_ablkcipher *fallback;
|
|
};
|
|
|
|
/**
|
|
* struct qce_cipher_reqctx - holds private cipher objects per request
|
|
* @flags: operation flags
|
|
* @iv: pointer to the IV
|
|
* @ivsize: IV size
|
|
* @src_nents: source entries
|
|
* @dst_nents: destination entries
|
|
* @src_chained: is source chained
|
|
* @dst_chained: is destination chained
|
|
* @result_sg: scatterlist used for result buffer
|
|
* @dst_tbl: destination sg table
|
|
* @dst_sg: destination sg pointer table beginning
|
|
* @src_tbl: source sg table
|
|
* @src_sg: source sg pointer table beginning;
|
|
* @cryptlen: crypto length
|
|
*/
|
|
struct qce_cipher_reqctx {
|
|
unsigned long flags;
|
|
u8 *iv;
|
|
unsigned int ivsize;
|
|
int src_nents;
|
|
int dst_nents;
|
|
bool src_chained;
|
|
bool dst_chained;
|
|
struct scatterlist result_sg;
|
|
struct sg_table dst_tbl;
|
|
struct scatterlist *dst_sg;
|
|
struct sg_table src_tbl;
|
|
struct scatterlist *src_sg;
|
|
unsigned int cryptlen;
|
|
};
|
|
|
|
static inline struct qce_alg_template *to_cipher_tmpl(struct crypto_tfm *tfm)
|
|
{
|
|
struct crypto_alg *alg = tfm->__crt_alg;
|
|
return container_of(alg, struct qce_alg_template, alg.crypto);
|
|
}
|
|
|
|
extern const struct qce_algo_ops ablkcipher_ops;
|
|
|
|
#endif /* _CIPHER_H_ */
|