summaryrefslogtreecommitdiffstats
path: root/sys/opencrypto
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2006-06-04 22:15:13 +0000
committerpjd <pjd@FreeBSD.org>2006-06-04 22:15:13 +0000
commitf055dbf32be7adc2e1a1c946748849d8bc8817cb (patch)
treeeb23ce333a8decabbd11461c164ab6b666abb472 /sys/opencrypto
parent60fac157ecabb2906c29d54573d37a633a91fb32 (diff)
downloadFreeBSD-src-f055dbf32be7adc2e1a1c946748849d8bc8817cb.zip
FreeBSD-src-f055dbf32be7adc2e1a1c946748849d8bc8817cb.tar.gz
- Replace COPYDATA() and COPYBACK() macros with crypto_copydata() and
crypto_copyback() functions. - Add crypto_apply() function. This will allow for more code simplification.
Diffstat (limited to 'sys/opencrypto')
-rw-r--r--sys/opencrypto/criov.c40
-rw-r--r--sys/opencrypto/cryptodev.h34
2 files changed, 47 insertions, 27 deletions
diff --git a/sys/opencrypto/criov.c b/sys/opencrypto/criov.c
index fff52fb..96f0dfc 100644
--- a/sys/opencrypto/criov.c
+++ b/sys/opencrypto/criov.c
@@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
#include <sys/errno.h>
#include <sys/malloc.h>
#include <sys/kernel.h>
+#include <sys/mbuf.h>
#include <sys/uio.h>
#include <opencrypto/cryptodev.h>
@@ -156,3 +157,42 @@ cuio_apply(struct uio *uio, int off, int len, int (*f)(void *, void *, u_int),
}
return (0);
}
+
+void
+crypto_copyback(int flags, caddr_t buf, int off, int size, caddr_t in)
+{
+
+ if ((flags & CRYPTO_F_IMBUF) != 0)
+ m_copyback((struct mbuf *)buf, off, size, in);
+ else if ((flags & CRYPTO_F_IOV) != 0)
+ cuio_copyback((struct uio *)buf, off, size, in);
+ else
+ bcopy(in, buf + off, size);
+}
+
+void
+crypto_copydata(int flags, caddr_t buf, int off, int size, caddr_t out)
+{
+
+ if ((flags & CRYPTO_F_IMBUF) != 0)
+ m_copydata((struct mbuf *)buf, off, size, out);
+ else if ((flags & CRYPTO_F_IOV) != 0)
+ cuio_copydata((struct uio *)buf, off, size, out);
+ else
+ bcopy(buf + off, out, size);
+}
+
+int
+crypto_apply(int flags, caddr_t buf, int off, int len,
+ int (*f)(void *, void *, u_int), void *arg)
+{
+ int error;
+
+ if ((flags & CRYPTO_F_IMBUF) != 0)
+ error = m_apply((struct mbuf *)buf, off, len, f, arg);
+ else if ((flags & CRYPTO_F_IOV) != 0)
+ error = cuio_apply((struct uio *)buf, off, len, f, arg);
+ else
+ error = (*f)(arg, buf + off, len);
+ return (error);
+}
diff --git a/sys/opencrypto/cryptodev.h b/sys/opencrypto/cryptodev.h
index f106ef5..9c06187 100644
--- a/sys/opencrypto/cryptodev.h
+++ b/sys/opencrypto/cryptodev.h
@@ -413,32 +413,12 @@ extern void cuio_copyback(struct uio* uio, int off, int len, caddr_t cp);
extern struct iovec *cuio_getptr(struct uio *uio, int loc, int *off);
extern int cuio_apply(struct uio *uio, int off, int len,
int (*f)(void *, void *, u_int), void *arg);
-struct mbuf;
-#define COPYBACK(type, buf, off, size, in) do { \
- switch (type) { \
- case CRYPTO_BUF_CONTIG: \
- bcopy(in, (u_char *)(buf) + (off), size); \
- break; \
- case CRYPTO_BUF_MBUF: \
- m_copyback((struct mbuf *)(buf), off, size, in); \
- break; \
- case CRYPTO_BUF_IOV: \
- cuio_copyback((struct uio *)(buf), off, size, in); \
- break; \
- } \
-} while (0)
-#define COPYDATA(type, buf, off, size, out) do { \
- switch (type) { \
- case CRYPTO_BUF_CONTIG: \
- bcopy((u_char *)(buf) + (off), out, size); \
- break; \
- case CRYPTO_BUF_MBUF: \
- m_copydata((struct mbuf *)(buf), off, size, out); \
- break; \
- case CRYPTO_BUF_IOV: \
- cuio_copydata((struct uio *)(buf), off, size, out); \
- break; \
- } \
-} while (0)
+
+extern void crypto_copyback(int flags, caddr_t buf, int off, int size,
+ caddr_t in);
+extern void crypto_copydata(int flags, caddr_t buf, int off, int size,
+ caddr_t out);
+extern int crypto_apply(int flags, caddr_t buf, int off, int len,
+ int (*f)(void *, void *, u_int), void *arg);
#endif /* _KERNEL */
#endif /* _CRYPTO_CRYPTO_H_ */
OpenPOWER on IntegriCloud