From f055dbf32be7adc2e1a1c946748849d8bc8817cb Mon Sep 17 00:00:00 2001 From: pjd Date: Sun, 4 Jun 2006 22:15:13 +0000 Subject: - Replace COPYDATA() and COPYBACK() macros with crypto_copydata() and crypto_copyback() functions. - Add crypto_apply() function. This will allow for more code simplification. --- sys/opencrypto/criov.c | 40 ++++++++++++++++++++++++++++++++++++++++ sys/opencrypto/cryptodev.h | 34 +++++++--------------------------- 2 files changed, 47 insertions(+), 27 deletions(-) (limited to 'sys/opencrypto') 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 #include #include +#include #include #include @@ -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_ */ -- cgit v1.1