From owner-svn-src-user@FreeBSD.ORG Mon Jun 21 03:05:31 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 67993106566B; Mon, 21 Jun 2010 03:05:31 +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 557298FC19; Mon, 21 Jun 2010 03:05:31 +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 o5L35VCG096497; Mon, 21 Jun 2010 03:05:31 GMT (envelope-from jmallett@svn.freebsd.org) Received: (from jmallett@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o5L35VkK096495; Mon, 21 Jun 2010 03:05:31 GMT (envelope-from jmallett@svn.freebsd.org) Message-Id: <201006210305.o5L35VkK096495@svn.freebsd.org> From: Juli Mallett Date: Mon, 21 Jun 2010 03:05:31 +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: r209381 - user/jmallett/octeon/sys/mips/cavium/cryptocteon 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: Mon, 21 Jun 2010 03:05:31 -0000 Author: jmallett Date: Mon Jun 21 03:05:31 2010 New Revision: 209381 URL: http://svn.freebsd.org/changeset/base/209381 Log: o) We always run with COP2 access enabled, as far as I can tell, so we just need to disable interrupts for now for safe use of the crypto coprocessor within the kernel. XXX We shouldn't always have COP2 access enabled, we should trap on first access and enable it and do something like with fpcurthread. I now have a good idea of how to handle this generically via some arrays in the pcpu struct, but as I only need to use COP2 in the kernel, it's not a priority for me to do anything that makes userland COP2 use work. Modified: user/jmallett/octeon/sys/mips/cavium/cryptocteon/cavium_crypto.c Modified: user/jmallett/octeon/sys/mips/cavium/cryptocteon/cavium_crypto.c ============================================================================== --- user/jmallett/octeon/sys/mips/cavium/cryptocteon/cavium_crypto.c Mon Jun 21 02:32:41 2010 (r209380) +++ user/jmallett/octeon/sys/mips/cavium/cryptocteon/cavium_crypto.c Mon Jun 21 03:05:31 2010 (r209381) @@ -87,22 +87,6 @@ __FBSDID("$FreeBSD$"); } \ } while (0) -/* - * XXX - * Not yet. - */ -struct octeon_cop2_state { -}; - -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 #define AES_CBC_IV_LENGTH 16 @@ -252,15 +236,14 @@ octo_calc_hash(uint8_t auth, unsigned ch uint64_t *key1; register uint64_t xor1 = 0x3636363636363636ULL; register uint64_t xor2 = 0x5c5c5c5c5c5c5c5cULL; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); memset(hash_key, 0, sizeof(hash_key)); memcpy(hash_key, (uint8_t *) key, (auth ? 20 : 16)); key1 = (uint64_t *) hash_key; - flags = octeon_crypto_enable(&state); + s = intr_disable(); if (auth) { CVMX_MT_HSH_IV(0x67452301EFCDAB89ULL, 0); CVMX_MT_HSH_IV(0x98BADCFE10325476ULL, 1); @@ -333,7 +316,7 @@ octo_calc_hash(uint8_t auth, unsigned ch outer[2] = 0; CVMX_MF_HSH_IV(outer[2], 2); } - octeon_crypto_disable(&state, flags); + intr_restore(s); return; } @@ -350,8 +333,7 @@ octo_des_cbc_encrypt( { uint64_t *data; int data_i, data_l; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -369,7 +351,7 @@ octo_des_cbc_encrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load 3DES Key */ CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -380,7 +362,7 @@ octo_des_cbc_encrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 1); CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -399,7 +381,7 @@ octo_des_cbc_encrypt( crypt_len -= 8; } - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -414,8 +396,7 @@ octo_des_cbc_decrypt( { uint64_t *data; int data_i, data_l; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -433,7 +414,7 @@ octo_des_cbc_decrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load 3DES Key */ CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -444,7 +425,7 @@ octo_des_cbc_decrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 1); CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -463,7 +444,7 @@ octo_des_cbc_decrypt( crypt_len -= 8; } - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -480,8 +461,7 @@ octo_aes_cbc_encrypt( { uint64_t *data, *pdata; int data_i, data_l; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -499,7 +479,7 @@ octo_aes_cbc_encrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load AES Key */ CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -515,7 +495,7 @@ octo_aes_cbc_encrypt( CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[2], 2); CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[3], 3); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -540,7 +520,7 @@ octo_aes_cbc_encrypt( crypt_len -= 16; } - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -555,8 +535,7 @@ octo_aes_cbc_decrypt( { uint64_t *data, *pdata; int data_i, data_l; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -574,7 +553,7 @@ octo_aes_cbc_decrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load AES Key */ CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -590,7 +569,7 @@ octo_aes_cbc_decrypt( CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[2], 2); CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[3], 3); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -615,7 +594,7 @@ octo_aes_cbc_decrypt( crypt_len -= 16; } - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -634,8 +613,7 @@ octo_null_md5_encrypt( uint64_t *data; uint64_t tmp1, tmp2; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -650,7 +628,7 @@ octo_null_md5_encrypt( IOV_INIT(iov, data, data_i, data_l); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* Load MD5 IV */ CVMX_MT_HSH_IV(od->octo_hminner[0], 0); @@ -722,7 +700,7 @@ octo_null_md5_encrypt( CVMX_MF_HSH_IV(tmp1, 1); *(uint32_t *)data = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -741,8 +719,7 @@ octo_null_sha1_encrypt( uint64_t *data; uint64_t tmp1, tmp2, tmp3; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -757,7 +734,7 @@ octo_null_sha1_encrypt( IOV_INIT(iov, data, data_i, data_l); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* Load SHA1 IV */ CVMX_MT_HSH_IV(od->octo_hminner[0], 0); @@ -832,7 +809,7 @@ octo_null_sha1_encrypt( CVMX_MF_HSH_IV(tmp1, 1); *(uint32_t *)data = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -856,8 +833,7 @@ octo_des_cbc_md5_encrypt( uint32_t *data32; uint64_t tmp1, tmp2; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -878,7 +854,7 @@ octo_des_cbc_md5_encrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load 3DES Key */ CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -889,7 +865,7 @@ octo_des_cbc_md5_encrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 1); CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -989,7 +965,7 @@ octo_des_cbc_md5_encrypt( CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -1010,8 +986,7 @@ octo_des_cbc_md5_decrypt( uint32_t *data32; uint64_t tmp1, tmp2; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -1032,7 +1007,7 @@ octo_des_cbc_md5_decrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load 3DES Key */ CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -1043,7 +1018,7 @@ octo_des_cbc_md5_decrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 1); CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -1143,7 +1118,7 @@ octo_des_cbc_md5_decrypt( CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -1167,8 +1142,7 @@ octo_des_cbc_sha1_encrypt( uint32_t *data32; uint64_t tmp1, tmp2, tmp3; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -1189,7 +1163,7 @@ octo_des_cbc_sha1_encrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load 3DES Key */ CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -1200,7 +1174,7 @@ octo_des_cbc_sha1_encrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 1); CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -1303,7 +1277,7 @@ octo_des_cbc_sha1_encrypt( CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -1324,8 +1298,7 @@ octo_des_cbc_sha1_decrypt( uint32_t *data32; uint64_t tmp1, tmp2, tmp3; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -1346,7 +1319,7 @@ octo_des_cbc_sha1_decrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load 3DES Key */ CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -1357,7 +1330,7 @@ octo_des_cbc_sha1_decrypt( CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 1); CVMX_MT_3DES_KEY(((uint64_t *) od->octo_enckey)[0], 2); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -1459,7 +1432,7 @@ octo_des_cbc_sha1_decrypt( CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -1484,8 +1457,7 @@ octo_aes_cbc_md5_encrypt( uint32_t *data32; uint64_t tmp1, tmp2; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -1506,7 +1478,7 @@ octo_aes_cbc_md5_encrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load AES Key */ CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -1522,7 +1494,7 @@ octo_aes_cbc_md5_encrypt( CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[2], 2); CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[3], 3); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -1645,7 +1617,7 @@ octo_aes_cbc_md5_encrypt( CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -1667,8 +1639,7 @@ octo_aes_cbc_md5_decrypt( uint32_t *data32; uint64_t tmp1, tmp2; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -1689,7 +1660,7 @@ octo_aes_cbc_md5_decrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load AES Key */ CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -1705,7 +1676,7 @@ octo_aes_cbc_md5_decrypt( CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[2], 2); CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[3], 3); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -1824,7 +1795,7 @@ octo_aes_cbc_md5_decrypt( CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -1849,8 +1820,7 @@ octo_aes_cbc_sha1_encrypt( uint32_t *data32; uint64_t tmp1, tmp2, tmp3; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -1871,7 +1841,7 @@ octo_aes_cbc_sha1_encrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load AES Key */ CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -1887,7 +1857,7 @@ octo_aes_cbc_sha1_encrypt( CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[2], 2); CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[3], 3); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -2029,7 +1999,7 @@ octo_aes_cbc_sha1_encrypt( CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; } @@ -2051,8 +2021,7 @@ octo_aes_cbc_sha1_decrypt( uint32_t *data32; uint64_t tmp1, tmp2, tmp3; int data_i, data_l, alen = auth_len; - struct octeon_cop2_state state; - unsigned long flags; + register_t s; dprintf("%s()\n", __func__); @@ -2073,7 +2042,7 @@ octo_aes_cbc_sha1_decrypt( CVMX_PREFETCH0(ivp); CVMX_PREFETCH0(od->octo_enckey); - flags = octeon_crypto_enable(&state); + s = intr_disable(); /* load AES Key */ CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[0], 0); @@ -2089,7 +2058,7 @@ octo_aes_cbc_sha1_decrypt( CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[2], 2); CVMX_MT_AES_KEY(((uint64_t *) od->octo_enckey)[3], 3); } else { - octeon_crypto_disable(&state, flags); + intr_restore(s); dprintf("%s: Bad key length %d\n", __func__, od->octo_encklen); return -EINVAL; } @@ -2230,7 +2199,7 @@ octo_aes_cbc_sha1_decrypt( CVMX_MF_HSH_IV(tmp1, 1); *data32 = (uint32_t) (tmp1 >> 32); - octeon_crypto_disable(&state, flags); + intr_restore(s); return 0; }