18fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang/*
28fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * Cryptographic API.
38fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang *
48fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
58fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang *
68fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * This program is free software; you can redistribute it and/or modify it
78fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * under the terms of the GNU General Public License as published by the Free
88fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * Software Foundation; either version 2 of the License, or (at your option)
98fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang * any later version.
108fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang *
118fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang */
128fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#ifndef _CRYPTO_INTERNAL_H
138fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define _CRYPTO_INTERNAL_H
148fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
158fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
168fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//#include <linux/crypto.h>
178fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include "rtl_crypto.h"
188fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include <linux/mm.h>
198fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include <linux/highmem.h>
208fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include <linux/init.h>
218fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include <asm/hardirq.h>
228fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include <asm/softirq.h>
238fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#include <asm/kmap_types.h>
248fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
258fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
268fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstatic inline void crypto_yield(struct crypto_tfm *tfm)
278fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang{
288fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	if (!in_softirq())
298fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		cond_resched();
308fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}
318fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
328fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstatic inline void *crypto_tfm_ctx(struct crypto_tfm *tfm)
338fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang{
348fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	return (void *)&tfm[1];
358fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}
368fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
378fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstruct crypto_alg *crypto_alg_lookup(const char *name);
388fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
398fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#ifdef CONFIG_KMOD
408fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid crypto_alg_autoload(const char *name);
418fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstruct crypto_alg *crypto_alg_mod_lookup(const char *name);
428fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#else
438fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstatic inline struct crypto_alg *crypto_alg_mod_lookup(const char *name)
448fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang{
458fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	return crypto_alg_lookup(name);
468fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}
478fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#endif
488fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
498fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#ifdef CONFIG_CRYPTO_HMAC
508fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangint crypto_alloc_hmac_block(struct crypto_tfm *tfm);
518fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid crypto_free_hmac_block(struct crypto_tfm *tfm);
528fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#else
538fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstatic inline int crypto_alloc_hmac_block(struct crypto_tfm *tfm)
548fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang{
558fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	return 0;
568fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}
578fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
588fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstatic inline void crypto_free_hmac_block(struct crypto_tfm *tfm)
598fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang{ }
608fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#endif
618fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
628fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#ifdef CONFIG_PROC_FS
638fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid __init crypto_init_proc(void);
648fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#else
658fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangstatic inline void crypto_init_proc(void)
668fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang{ }
678fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#endif
688fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
698fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangint crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags);
708fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangint crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags);
718fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangint crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags);
728fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
738fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangint crypto_init_digest_ops(struct crypto_tfm *tfm);
748fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangint crypto_init_cipher_ops(struct crypto_tfm *tfm);
758fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangint crypto_init_compress_ops(struct crypto_tfm *tfm);
768fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
778fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid crypto_exit_digest_ops(struct crypto_tfm *tfm);
788fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid crypto_exit_cipher_ops(struct crypto_tfm *tfm);
798fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangvoid crypto_exit_compress_ops(struct crypto_tfm *tfm);
808fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
818fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#endif	/* _CRYPTO_INTERNAL_H */
828fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
83