Date: Mon, 21 Jun 2010 03:05:31 +0000 (UTC) From: Juli Mallett <jmallett@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r209381 - user/jmallett/octeon/sys/mips/cavium/cryptocteon Message-ID: <201006210305.o5L35VkK096495@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006210305.o5L35VkK096495>