From owner-svn-src-user@FreeBSD.ORG Sat Jun 19 09:50:05 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 333B6106564A; Sat, 19 Jun 2010 09:50:05 +0000 (UTC) (envelope-from jmallett@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 212CD8FC12; Sat, 19 Jun 2010 09:50:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o5J9o5ZK041656; Sat, 19 Jun 2010 09:50:05 GMT (envelope-from jmallett@svn.freebsd.org) Received: (from jmallett@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o5J9o5lg041653; Sat, 19 Jun 2010 09:50:05 GMT (envelope-from jmallett@svn.freebsd.org) Message-Id: <201006190950.o5J9o5lg041653@svn.freebsd.org> From: Juli Mallett Date: Sat, 19 Jun 2010 09:50:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r209333 - in user/jmallett/octeon/sys/mips: cavium cavium/cryptocteon conf X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Jun 2010 09:50:05 -0000 Author: jmallett Date: Sat Jun 19 09:50:04 2010 New Revision: 209333 URL: http://svn.freebsd.org/changeset/base/209333 Log: Working towards making the cryptocteon code compile and work on FreeBSD. Some convoluted use of scatterlists has been replaced with direct use of pointers into a linear buffer since it appeared that only a single scatterlist entry was being used; I intend to make that use iovecs instead in the near future. The crypto device front-end is mostly commented out and is not compiled. Actual enabling and disabling of use of the crypto coprocessor within the kernel is unimplemented in this commit, but is trivial for kernel-only use. We need a mechanism that allows use of the coprocessor from userland at some point, but that's a stretch goal for me. Added: user/jmallett/octeon/sys/mips/cavium/cryptocteon/cryptocteonvar.h Modified: user/jmallett/octeon/sys/mips/cavium/cryptocteon/cavium_crypto.c user/jmallett/octeon/sys/mips/cavium/cryptocteon/cryptocteon.c user/jmallett/octeon/sys/mips/cavium/files.octeon1 user/jmallett/octeon/sys/mips/conf/OCTEON1-32 Modified: user/jmallett/octeon/sys/mips/cavium/cryptocteon/cavium_crypto.c ============================================================================== --- user/jmallett/octeon/sys/mips/cavium/cryptocteon/cavium_crypto.c Sat Jun 19 09:33:11 2010 (r209332) +++ user/jmallett/octeon/sys/mips/cavium/cryptocteon/cavium_crypto.c Sat Jun 19 09:50:04 2010 (r209333) @@ -1,4 +1,7 @@ /* + * vim:sw=4 ts=8 + */ +/* * Copyright (c) 2009 David McCullough * * Copyright (c) 2003-2007 Cavium Networks (support@cavium.com). All rights @@ -38,36 +41,40 @@ */ /****************************************************************************/ -#include -#include -#include "octeon-asm.h" +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +#include + +#include + +#include /****************************************************************************/ -extern unsigned long octeon_crypto_enable(struct octeon_cop2_state *); -extern void octeon_crypto_disable(struct octeon_cop2_state *, unsigned long); +/* + * XXX + * Not yet. + */ +struct octeon_cop2_state { +}; -#define SG_INIT(s, p, i, l) \ - { \ - (i) = 0; \ - (l) = (s)[0].length; \ - (p) = (typeof(p)) sg_virt((s)); \ - CVMX_PREFETCH0((p)); \ - } - -#define SG_CONSUME(s, p, i, l) \ - { \ - (p)++; \ - (l) -= sizeof(*(p)); \ - if ((l) < 0) { \ - dprintk("%s, %d: l = %d\n", __FILE__, __LINE__, l); \ - } else if ((l) == 0) { \ - (i)++; \ - (l) = (s)[0].length; \ - (p) = (typeof(p)) sg_virt(s); \ - CVMX_PREFETCH0((p)); \ - } \ - } +#define dprintf printf + +static inline unsigned long octeon_crypto_enable(struct octeon_cop2_state *state) +{ + return (0); +} + +static inline void octeon_crypto_disable(struct octeon_cop2_state *state, unsigned long flags) +{ +} #define ESP_HEADER_LENGTH 8 #define DES_CBC_IV_LENGTH 8 @@ -211,22 +218,8 @@ extern void octeon_crypto_disable(struct /****************************************************************************/ -static inline uint64_t -swap64(uint64_t a) -{ - return ((a >> 56) | - (((a >> 48) & 0xfful) << 8) | - (((a >> 40) & 0xfful) << 16) | - (((a >> 32) & 0xfful) << 24) | - (((a >> 24) & 0xfful) << 32) | - (((a >> 16) & 0xfful) << 40) | - (((a >> 8) & 0xfful) << 48) | (((a >> 0) & 0xfful) << 56)); -} - -/****************************************************************************/ - void -octo_calc_hash(__u8 auth, unsigned char *key, uint64_t *inner, uint64_t *outer) +octo_calc_hash(uint8_t auth, unsigned char *key, uint64_t *inner, uint64_t *outer) { uint8_t hash_key[64]; uint64_t *key1; @@ -235,8 +228,6 @@ octo_calc_hash(__u8 auth, unsigned char struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - memset(hash_key, 0, sizeof(hash_key)); memcpy(hash_key, (uint8_t *) key, (auth ? 20 : 16)); key1 = (uint64_t *) hash_key; @@ -323,28 +314,25 @@ octo_calc_hash(__u8 auth, unsigned char int octo_des_cbc_encrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) { uint64_t *data; - int data_i, data_l; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || ivp==NULL || - (crypt_off & 0x7) || (crypt_off + crypt_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + if (__predict_false(od == NULL || buf==NULL || buflen==0 || ivp==NULL || + (crypt_off & 0x7) || (crypt_off + crypt_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data, data_i, data_l); + data = buf; CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); @@ -361,22 +349,22 @@ octo_des_cbc_encrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { octeon_crypto_disable(&state, flags); - dprintk("%s: Bad key length %d\n", __FUNCTION__, od->octo_encklen); + dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } CVMX_MT_3DES_IV(* (uint64_t *) ivp); while (crypt_off > 0) { - SG_CONSUME(sg, data, data_i, data_l); - crypt_off -= 8; + data++; + crypt_off -= sizeof *data; } while (crypt_len > 0) { CVMX_MT_3DES_ENC_CBC(*data); CVMX_MF_3DES_RESULT(*data); - SG_CONSUME(sg, data, data_i, data_l); - crypt_len -= 8; + data++; + crypt_len -= sizeof *data; } octeon_crypto_disable(&state, flags); @@ -387,28 +375,25 @@ octo_des_cbc_encrypt( int octo_des_cbc_decrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) { uint64_t *data; - int data_i, data_l; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || ivp==NULL || - (crypt_off & 0x7) || (crypt_off + crypt_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + if (__predict_false(od == NULL || buf==NULL || buflen==0 || ivp==NULL || + (crypt_off & 0x7) || (crypt_off + crypt_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data, data_i, data_l); + data = buf; CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); @@ -425,22 +410,22 @@ octo_des_cbc_decrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { octeon_crypto_disable(&state, flags); - dprintk("%s: Bad key length %d\n", __FUNCTION__, od->octo_encklen); + dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } CVMX_MT_3DES_IV(* (uint64_t *) ivp); while (crypt_off > 0) { - SG_CONSUME(sg, data, data_i, data_l); - crypt_off -= 8; + data++; + crypt_off -= sizeof *data; } while (crypt_len > 0) { CVMX_MT_3DES_DEC_CBC(*data); CVMX_MF_3DES_RESULT(*data); - SG_CONSUME(sg, data, data_i, data_l); - crypt_len -= 8; + data++; + crypt_len -= sizeof *data; } octeon_crypto_disable(&state, flags); @@ -453,28 +438,25 @@ octo_des_cbc_decrypt( int octo_aes_cbc_encrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) { - uint64_t *data, *pdata; - int data_i, data_l; + uint64_t *data; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || ivp==NULL || - (crypt_off & 0x7) || (crypt_off + crypt_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + if (__predict_false(od == NULL || buf==NULL || buflen==0 || ivp==NULL || + (crypt_off & 0x7) || (crypt_off + crypt_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data, data_i, data_l); + data = buf; CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); @@ -496,7 +478,7 @@ octo_aes_cbc_encrypt( CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[3], 3); } else { octeon_crypto_disable(&state, flags); - dprintk("%s: Bad key length %d\n", __FUNCTION__, od->octo_encklen); + dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } CVMX_MT_AES_KEYLENGTH(od->octo_encklen / 8 - 1); @@ -505,19 +487,17 @@ octo_aes_cbc_encrypt( CVMX_MT_AES_IV(((uint64_t *) ivp)[1], 1); while (crypt_off > 0) { - SG_CONSUME(sg, data, data_i, data_l); - crypt_off -= 8; + data++; + crypt_off -= sizeof *data; } while (crypt_len > 0) { - pdata = data; - CVMX_MT_AES_ENC_CBC0(*data); - SG_CONSUME(sg, data, data_i, data_l); - CVMX_MT_AES_ENC_CBC1(*data); - CVMX_MF_AES_RESULT(*pdata, 0); - CVMX_MF_AES_RESULT(*data, 1); - SG_CONSUME(sg, data, data_i, data_l); - crypt_len -= 16; + CVMX_MT_AES_ENC_CBC0(data[0]); + CVMX_MT_AES_ENC_CBC1(data[1]); + CVMX_MF_AES_RESULT(data[0], 0); + CVMX_MF_AES_RESULT(data[1], 1); + data += 2; + crypt_len -= 2 * sizeof *data; } octeon_crypto_disable(&state, flags); @@ -528,28 +508,25 @@ octo_aes_cbc_encrypt( int octo_aes_cbc_decrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) { - uint64_t *data, *pdata; - int data_i, data_l; + uint64_t *data; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || ivp==NULL || - (crypt_off & 0x7) || (crypt_off + crypt_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + if (__predict_false(od == NULL || buf==NULL || buflen==0 || ivp==NULL || + (crypt_off & 0x7) || (crypt_off + crypt_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data, data_i, data_l); + data = buf; CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); @@ -571,7 +548,7 @@ octo_aes_cbc_decrypt( CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[3], 3); } else { octeon_crypto_disable(&state, flags); - dprintk("%s: Bad key length %d\n", __FUNCTION__, od->octo_encklen); + dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } CVMX_MT_AES_KEYLENGTH(od->octo_encklen / 8 - 1); @@ -580,19 +557,17 @@ octo_aes_cbc_decrypt( CVMX_MT_AES_IV(((uint64_t *) ivp)[1], 1); while (crypt_off > 0) { - SG_CONSUME(sg, data, data_i, data_l); - crypt_off -= 8; + data++; + crypt_off -= sizeof *data; } while (crypt_len > 0) { - pdata = data; - CVMX_MT_AES_DEC_CBC0(*data); - SG_CONSUME(sg, data, data_i, data_l); - CVMX_MT_AES_DEC_CBC1(*data); - CVMX_MF_AES_RESULT(*pdata, 0); - CVMX_MF_AES_RESULT(*data, 1); - SG_CONSUME(sg, data, data_i, data_l); - crypt_len -= 16; + CVMX_MT_AES_DEC_CBC0(data[0]); + CVMX_MT_AES_DEC_CBC1(data[1]); + CVMX_MF_AES_RESULT(data[0], 0); + CVMX_MF_AES_RESULT(data[1], 1); + data += 2; + crypt_len -= 2 * sizeof *data; } octeon_crypto_disable(&state, flags); @@ -605,7 +580,7 @@ octo_aes_cbc_decrypt( int octo_null_md5_encrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) @@ -613,22 +588,20 @@ octo_null_md5_encrypt( register int next = 0; uint64_t *data; uint64_t tmp1, tmp2; - int data_i, data_l, alen = auth_len; + int alen = auth_len; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || - (auth_off & 0x7) || (auth_off + auth_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + if (__predict_false(od == NULL || buf==NULL || buflen==0 || + (auth_off & 0x7) || (auth_off + auth_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data, data_i, data_l); + data = buf; flags = octeon_crypto_enable(&state); @@ -637,20 +610,20 @@ octo_null_md5_encrypt( CVMX_MT_HSH_IV(od->octo_hminner[1], 1); while (auth_off > 0) { - SG_CONSUME(sg, data, data_i, data_l); - auth_off -= 8; + data++; + auth_off -= sizeof *data; } while (auth_len > 0) { CVM_LOAD_MD5_UNIT(*data, next); - auth_len -= 8; - SG_CONSUME(sg, data, data_i, data_l); + data++; + auth_len -= sizeof *data; } /* finish the hash */ CVMX_PREFETCH0(od->octo_hmouter); #if 0 - if (unlikely(inplen)) { + if (__predict_false(inplen)) { uint64_t tmp = 0; uint8_t *p = (uint8_t *) & tmp; p[inplen] = 0x80; @@ -692,13 +665,13 @@ octo_null_md5_encrypt( CVMX_MT_HSH_STARTMD5(tmp1); /* save the HMAC */ - SG_INIT(sg, data, data_i, data_l); + data = buf; while (icv_off > 0) { - SG_CONSUME(sg, data, data_i, data_l); - icv_off -= 8; + data++; + icv_off -= sizeof *data; } CVMX_MF_HSH_IV(*data, 0); - SG_CONSUME(sg, data, data_i, data_l); + data++; CVMX_MF_HSH_IV(tmp1, 1); *(uint32_t *)data = (uint32_t) (tmp1 >> 32); @@ -712,7 +685,7 @@ octo_null_md5_encrypt( int octo_null_sha1_encrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) @@ -720,22 +693,20 @@ octo_null_sha1_encrypt( register int next = 0; uint64_t *data; uint64_t tmp1, tmp2, tmp3; - int data_i, data_l, alen = auth_len; + int alen = auth_len; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || - (auth_off & 0x7) || (auth_off + auth_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + if (__predict_false(od == NULL || buf==NULL || buflen==0 || + (auth_off & 0x7) || (auth_off + auth_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data, data_i, data_l); + data = buf; flags = octeon_crypto_enable(&state); @@ -745,20 +716,20 @@ octo_null_sha1_encrypt( CVMX_MT_HSH_IV(od->octo_hminner[2], 2); while (auth_off > 0) { - SG_CONSUME(sg, data, data_i, data_l); - auth_off -= 8; + data++; + auth_off -= sizeof *data; } while (auth_len > 0) { CVM_LOAD_SHA_UNIT(*data, next); - auth_len -= 8; - SG_CONSUME(sg, data, data_i, data_l); + data++; + auth_len -= sizeof *data; } /* finish the hash */ CVMX_PREFETCH0(od->octo_hmouter); #if 0 - if (unlikely(inplen)) { + if (__predict_false(inplen)) { uint64_t tmp = 0; uint8_t *p = (uint8_t *) & tmp; p[inplen] = 0x80; @@ -802,13 +773,13 @@ octo_null_sha1_encrypt( CVMX_MT_HSH_STARTSHA((uint64_t) ((64 + 20) << 3)); /* save the HMAC */ - SG_INIT(sg, data, data_i, data_l); + data = buf; while (icv_off > 0) { - SG_CONSUME(sg, data, data_i, data_l); - icv_off -= 8; + data++; + icv_off -= sizeof *data; } CVMX_MF_HSH_IV(*data, 0); - SG_CONSUME(sg, data, data_i, data_l); + data++; CVMX_MF_HSH_IV(tmp1, 1); *(uint32_t *)data = (uint32_t) (tmp1 >> 32); @@ -822,7 +793,7 @@ octo_null_sha1_encrypt( int octo_des_cbc_md5_encrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) @@ -835,25 +806,23 @@ octo_des_cbc_md5_encrypt( uint64_t *data = &mydata.data64[0]; uint32_t *data32; uint64_t tmp1, tmp2; - int data_i, data_l, alen = auth_len; + int alen = auth_len; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || ivp==NULL || - (crypt_off & 0x3) || (crypt_off + crypt_len > sg_len) || + if (__predict_false(od == NULL || buf==NULL || buflen==0 || ivp==NULL || + (crypt_off & 0x3) || (crypt_off + crypt_len > buflen) || (crypt_len & 0x7) || (auth_len & 0x7) || - (auth_off & 0x3) || (auth_off + auth_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + (auth_off & 0x3) || (auth_off + auth_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data32, data_i, data_l); + data32 = buf; CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); @@ -870,7 +839,7 @@ octo_des_cbc_md5_encrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { octeon_crypto_disable(&state, flags); - dprintk("%s: Bad key length %d\n", __FUNCTION__, od->octo_encklen); + dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -881,16 +850,14 @@ octo_des_cbc_md5_encrypt( CVMX_MT_HSH_IV(od->octo_hminner[1], 1); while (crypt_off > 0 && auth_off > 0) { - SG_CONSUME(sg, data32, data_i, data_l); - crypt_off -= 4; - auth_off -= 4; + data32++; + crypt_off -= sizeof *data32; + auth_off -= sizeof *data32; } while (crypt_len > 0 || auth_len > 0) { - uint32_t *first = data32; - mydata.data32[0] = *first; - SG_CONSUME(sg, data32, data_i, data_l); - mydata.data32[1] = *data32; + mydata.data32[0] = data32[0]; + mydata.data32[1] = data32[1]; if (crypt_off <= 0) { if (crypt_len > 0) { CVMX_MT_3DES_ENC_CBC(*data); @@ -906,15 +873,15 @@ octo_des_cbc_md5_encrypt( } } else auth_off -= 8; - *first = mydata.data32[0]; - *data32 = mydata.data32[1]; - SG_CONSUME(sg, data32, data_i, data_l); + data32[0] = mydata.data32[0]; + data32[1] = mydata.data32[1]; + data32 += 2; } /* finish the hash */ CVMX_PREFETCH0(od->octo_hmouter); #if 0 - if (unlikely(inplen)) { + if (__predict_false(inplen)) { uint64_t tmp = 0; uint8_t *p = (uint8_t *) & tmp; p[inplen] = 0x80; @@ -956,16 +923,14 @@ octo_des_cbc_md5_encrypt( CVMX_MT_HSH_STARTMD5(tmp1); /* save the HMAC */ - SG_INIT(sg, data32, data_i, data_l); + data32 = buf; while (icv_off > 0) { - SG_CONSUME(sg, data32, data_i, data_l); - icv_off -= 4; + data32++; + icv_off -= sizeof *data32; } CVMX_MF_HSH_IV(tmp1, 0); - *data32 = (uint32_t) (tmp1 >> 32); - SG_CONSUME(sg, data32, data_i, data_l); - *data32 = (uint32_t) tmp1; - SG_CONSUME(sg, data32, data_i, data_l); + *data32++ = (uint32_t) (tmp1 >> 32); + *data32++ = (uint32_t) tmp1; CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); @@ -976,7 +941,7 @@ octo_des_cbc_md5_encrypt( int octo_des_cbc_md5_decrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) @@ -989,25 +954,23 @@ octo_des_cbc_md5_decrypt( uint64_t *data = &mydata.data64[0]; uint32_t *data32; uint64_t tmp1, tmp2; - int data_i, data_l, alen = auth_len; + int alen = auth_len; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || ivp==NULL || - (crypt_off & 0x3) || (crypt_off + crypt_len > sg_len) || + if (__predict_false(od == NULL || buf==NULL || buflen==0 || ivp==NULL || + (crypt_off & 0x3) || (crypt_off + crypt_len > buflen) || (crypt_len & 0x7) || (auth_len & 0x7) || - (auth_off & 0x3) || (auth_off + auth_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + (auth_off & 0x3) || (auth_off + auth_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data32, data_i, data_l); + data32 = buf; CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); @@ -1024,7 +987,7 @@ octo_des_cbc_md5_decrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { octeon_crypto_disable(&state, flags); - dprintk("%s: Bad key length %d\n", __FUNCTION__, od->octo_encklen); + dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -1035,16 +998,14 @@ octo_des_cbc_md5_decrypt( CVMX_MT_HSH_IV(od->octo_hminner[1], 1); while (crypt_off > 0 && auth_off > 0) { - SG_CONSUME(sg, data32, data_i, data_l); - crypt_off -= 4; - auth_off -= 4; + data32++; + crypt_off -= sizeof *data32; + auth_off -= sizeof *data32; } while (crypt_len > 0 || auth_len > 0) { - uint32_t *first = data32; - mydata.data32[0] = *first; - SG_CONSUME(sg, data32, data_i, data_l); - mydata.data32[1] = *data32; + mydata.data32[0] = data32[0]; + mydata.data32[1] = data32[1]; if (auth_off <= 0) { if (auth_len > 0) { CVM_LOAD_MD5_UNIT(*data, next); @@ -1060,15 +1021,15 @@ octo_des_cbc_md5_decrypt( } } else crypt_off -= 8; - *first = mydata.data32[0]; - *data32 = mydata.data32[1]; - SG_CONSUME(sg, data32, data_i, data_l); + data32[0] = mydata.data32[0]; + data32[1] = mydata.data32[1]; + data32 += 2; } /* finish the hash */ CVMX_PREFETCH0(od->octo_hmouter); #if 0 - if (unlikely(inplen)) { + if (__predict_false(inplen)) { uint64_t tmp = 0; uint8_t *p = (uint8_t *) & tmp; p[inplen] = 0x80; @@ -1110,16 +1071,14 @@ octo_des_cbc_md5_decrypt( CVMX_MT_HSH_STARTMD5(tmp1); /* save the HMAC */ - SG_INIT(sg, data32, data_i, data_l); + data32 = buf; while (icv_off > 0) { - SG_CONSUME(sg, data32, data_i, data_l); - icv_off -= 4; + data32++; + icv_off -= sizeof *data32; } CVMX_MF_HSH_IV(tmp1, 0); - *data32 = (uint32_t) (tmp1 >> 32); - SG_CONSUME(sg, data32, data_i, data_l); - *data32 = (uint32_t) tmp1; - SG_CONSUME(sg, data32, data_i, data_l); + *data32++ = (uint32_t) (tmp1 >> 32); + *data32++ = (uint32_t) tmp1; CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); @@ -1133,7 +1092,7 @@ octo_des_cbc_md5_decrypt( int octo_des_cbc_sha1_encrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) @@ -1146,25 +1105,23 @@ octo_des_cbc_sha1_encrypt( uint64_t *data = &mydata.data64[0]; uint32_t *data32; uint64_t tmp1, tmp2, tmp3; - int data_i, data_l, alen = auth_len; + int alen = auth_len; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || ivp==NULL || - (crypt_off & 0x3) || (crypt_off + crypt_len > sg_len) || + if (__predict_false(od == NULL || buf==NULL || buflen==0 || ivp==NULL || + (crypt_off & 0x3) || (crypt_off + crypt_len > buflen) || (crypt_len & 0x7) || (auth_len & 0x7) || - (auth_off & 0x3) || (auth_off + auth_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + (auth_off & 0x3) || (auth_off + auth_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data32, data_i, data_l); + data32 = buf; CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); @@ -1181,7 +1138,7 @@ octo_des_cbc_sha1_encrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { octeon_crypto_disable(&state, flags); - dprintk("%s: Bad key length %d\n", __FUNCTION__, od->octo_encklen); + dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -1193,16 +1150,14 @@ octo_des_cbc_sha1_encrypt( CVMX_MT_HSH_IV(od->octo_hminner[2], 2); while (crypt_off > 0 && auth_off > 0) { - SG_CONSUME(sg, data32, data_i, data_l); - crypt_off -= 4; - auth_off -= 4; + data32++; + crypt_off -= sizeof *data32; + auth_off -= sizeof *data32; } while (crypt_len > 0 || auth_len > 0) { - uint32_t *first = data32; - mydata.data32[0] = *first; - SG_CONSUME(sg, data32, data_i, data_l); - mydata.data32[1] = *data32; + mydata.data32[0] = data32[0]; + mydata.data32[1] = data32[1]; if (crypt_off <= 0) { if (crypt_len > 0) { CVMX_MT_3DES_ENC_CBC(*data); @@ -1218,15 +1173,15 @@ octo_des_cbc_sha1_encrypt( } } else auth_off -= 8; - *first = mydata.data32[0]; - *data32 = mydata.data32[1]; - SG_CONSUME(sg, data32, data_i, data_l); + data32[0] = mydata.data32[0]; + data32[1] = mydata.data32[1]; + data32 += 2; } /* finish the hash */ CVMX_PREFETCH0(od->octo_hmouter); #if 0 - if (unlikely(inplen)) { + if (__predict_false(inplen)) { uint64_t tmp = 0; uint8_t *p = (uint8_t *) & tmp; p[inplen] = 0x80; @@ -1270,16 +1225,14 @@ octo_des_cbc_sha1_encrypt( CVMX_MT_HSH_STARTSHA((uint64_t) ((64 + 20) << 3)); /* save the HMAC */ - SG_INIT(sg, data32, data_i, data_l); + data32 = buf; while (icv_off > 0) { - SG_CONSUME(sg, data32, data_i, data_l); - icv_off -= 4; + data32++; + icv_off -= sizeof *data32; } CVMX_MF_HSH_IV(tmp1, 0); - *data32 = (uint32_t) (tmp1 >> 32); - SG_CONSUME(sg, data32, data_i, data_l); - *data32 = (uint32_t) tmp1; - SG_CONSUME(sg, data32, data_i, data_l); + *data32++ = (uint32_t) (tmp1 >> 32); + *data32++ = (uint32_t) tmp1; CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); @@ -1290,7 +1243,7 @@ octo_des_cbc_sha1_encrypt( int octo_des_cbc_sha1_decrypt( struct octo_sess *od, - struct scatterlist *sg, int sg_len, + void *buf, int buflen, int auth_off, int auth_len, int crypt_off, int crypt_len, int icv_off, uint8_t *ivp) @@ -1303,25 +1256,23 @@ octo_des_cbc_sha1_decrypt( uint64_t *data = &mydata.data64[0]; uint32_t *data32; uint64_t tmp1, tmp2, tmp3; - int data_i, data_l, alen = auth_len; + int alen = auth_len; struct octeon_cop2_state state; unsigned long flags; - dprintk("%s()\n", __FUNCTION__); - - if (unlikely(od == NULL || sg==NULL || sg_len==0 || ivp==NULL || - (crypt_off & 0x3) || (crypt_off + crypt_len > sg_len) || + if (__predict_false(od == NULL || buf==NULL || buflen==0 || ivp==NULL || + (crypt_off & 0x3) || (crypt_off + crypt_len > buflen) || (crypt_len & 0x7) || (auth_len & 0x7) || - (auth_off & 0x3) || (auth_off + auth_len > sg_len))) { - dprintk("%s: Bad parameters od=%p sg=%p sg_len=%d " + (auth_off & 0x3) || (auth_off + auth_len > buflen))) { + dprintf("%s: Bad parameters od=%p buf=%p buflen=%d " "auth_off=%d auth_len=%d crypt_off=%d crypt_len=%d " - "icv_off=%d ivp=%p\n", __FUNCTION__, od, sg, sg_len, + "icv_off=%d ivp=%p\n", __func__, od, buf, buflen, auth_off, auth_len, crypt_off, crypt_len, icv_off, ivp); return -EINVAL; } - SG_INIT(sg, data32, data_i, data_l); + data32 = buf; CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); @@ -1338,7 +1289,7 @@ octo_des_cbc_sha1_decrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { octeon_crypto_disable(&state, flags); - dprintk("%s: Bad key length %d\n", __FUNCTION__, od->octo_encklen); + dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -1350,16 +1301,14 @@ octo_des_cbc_sha1_decrypt( CVMX_MT_HSH_IV(od->octo_hminner[2], 2); while (crypt_off > 0 && auth_off > 0) { - SG_CONSUME(sg, data32, data_i, data_l); - crypt_off -= 4; - auth_off -= 4; + data32++; + crypt_off -= sizeof *data32; + auth_off -= sizeof *data32; } while (crypt_len > 0 || auth_len > 0) { - uint32_t *first = data32; - mydata.data32[0] = *first; - SG_CONSUME(sg, data32, data_i, data_l); - mydata.data32[1] = *data32; + mydata.data32[0] = data32[0]; + mydata.data32[1] = data32[1]; if (auth_off <= 0) { if (auth_len > 0) { CVM_LOAD_SHA_UNIT(*data, next); @@ -1375,15 +1324,15 @@ octo_des_cbc_sha1_decrypt( } } else crypt_off -= 8; - *first = mydata.data32[0]; - *data32 = mydata.data32[1]; - SG_CONSUME(sg, data32, data_i, data_l); + data32[0] = mydata.data32[0]; + data32[1] = mydata.data32[1]; + data32 += 2; } /* finish the hash */ CVMX_PREFETCH0(od->octo_hmouter); #if 0 - if (unlikely(inplen)) { + if (__predict_false(inplen)) { uint64_t tmp = 0; uint8_t *p = (uint8_t *) & tmp; p[inplen] = 0x80; @@ -1426,16 +1375,14 @@ octo_des_cbc_sha1_decrypt( CVMX_MT_HSH_DATZ(6); CVMX_MT_HSH_STARTSHA((uint64_t) ((64 + 20) << 3)); /* save the HMAC */ - SG_INIT(sg, data32, data_i, data_l); + data32 = buf; while (icv_off > 0) { - SG_CONSUME(sg, data32, data_i, data_l); - icv_off -= 4; + data32++; + icv_off -= sizeof *data32; } CVMX_MF_HSH_IV(tmp1, 0); - *data32 = (uint32_t) (tmp1 >> 32); - SG_CONSUME(sg, data32, data_i, data_l); - *data32 = (uint32_t) tmp1; *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***