]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
s390/crypto: cleanup cpacf function codes
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 15 Aug 2016 07:19:16 +0000 (09:19 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 29 Aug 2016 09:05:05 +0000 (11:05 +0200)
Use a separate define for the decryption modifier bit instead of
duplicating the function codes for encryption / decrypton.
In addition use an unsigned type for the function code.

Reviewed-by: Harald Freudenberger <freude@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/crypto/aes_s390.c
arch/s390/crypto/des_s390.c
arch/s390/include/asm/cpacf.h

index 2ea18b050309adeeca2eccc94e2c15eca6dbfb44..9da54698b87abb66e2c256d9dfc7ac37d9ad66d5 100644 (file)
@@ -41,9 +41,8 @@ static char keylen_flag;
 
 struct s390_aes_ctx {
        u8 key[AES_MAX_KEY_SIZE];
-       long enc;
-       long dec;
        int key_len;
+       unsigned long fc;
        union {
                struct crypto_skcipher *blk;
                struct crypto_cipher *cip;
@@ -61,9 +60,8 @@ struct pcc_param {
 struct s390_xts_ctx {
        u8 key[32];
        u8 pcc_key[32];
-       long enc;
-       long dec;
        int key_len;
+       unsigned long fc;
        struct crypto_skcipher *fallback;
 };
 
@@ -146,16 +144,16 @@ static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
 
        switch (sctx->key_len) {
        case 16:
-               cpacf_km(CPACF_KM_AES_128_ENC, &sctx->key, out, in,
-                        AES_BLOCK_SIZE);
+               cpacf_km(CPACF_KM_AES_128,
+                        &sctx->key, out, in, AES_BLOCK_SIZE);
                break;
        case 24:
-               cpacf_km(CPACF_KM_AES_192_ENC, &sctx->key, out, in,
-                        AES_BLOCK_SIZE);
+               cpacf_km(CPACF_KM_AES_192,
+                        &sctx->key, out, in, AES_BLOCK_SIZE);
                break;
        case 32:
-               cpacf_km(CPACF_KM_AES_256_ENC, &sctx->key, out, in,
-                        AES_BLOCK_SIZE);
+               cpacf_km(CPACF_KM_AES_256,
+                        &sctx->key, out, in, AES_BLOCK_SIZE);
                break;
        }
 }
@@ -171,16 +169,16 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
 
        switch (sctx->key_len) {
        case 16:
-               cpacf_km(CPACF_KM_AES_128_DEC, &sctx->key, out, in,
-                        AES_BLOCK_SIZE);
+               cpacf_km(CPACF_KM_AES_128 | CPACF_DECRYPT,
+                        &sctx->key, out, in, AES_BLOCK_SIZE);
                break;
        case 24:
-               cpacf_km(CPACF_KM_AES_192_DEC, &sctx->key, out, in,
-                        AES_BLOCK_SIZE);
+               cpacf_km(CPACF_KM_AES_192 | CPACF_DECRYPT,
+                        &sctx->key, out, in, AES_BLOCK_SIZE);
                break;
        case 32:
-               cpacf_km(CPACF_KM_AES_256_DEC, &sctx->key, out, in,
-                        AES_BLOCK_SIZE);
+               cpacf_km(CPACF_KM_AES_256 | CPACF_DECRYPT,
+                        &sctx->key, out, in, AES_BLOCK_SIZE);
                break;
        }
 }
@@ -301,16 +299,13 @@ static int ecb_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
 
        switch (key_len) {
        case 16:
-               sctx->enc = CPACF_KM_AES_128_ENC;
-               sctx->dec = CPACF_KM_AES_128_DEC;
+               sctx->fc = CPACF_KM_AES_128;
                break;
        case 24:
-               sctx->enc = CPACF_KM_AES_192_ENC;
-               sctx->dec = CPACF_KM_AES_192_DEC;
+               sctx->fc = CPACF_KM_AES_192;
                break;
        case 32:
-               sctx->enc = CPACF_KM_AES_256_ENC;
-               sctx->dec = CPACF_KM_AES_256_DEC;
+               sctx->fc = CPACF_KM_AES_256;
                break;
        }
 
@@ -351,7 +346,7 @@ static int ecb_aes_encrypt(struct blkcipher_desc *desc,
                return fallback_blk_enc(desc, dst, src, nbytes);
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ecb_aes_crypt(desc, sctx->enc, sctx->key, &walk);
+       return ecb_aes_crypt(desc, sctx->fc, sctx->key, &walk);
 }
 
 static int ecb_aes_decrypt(struct blkcipher_desc *desc,
@@ -365,7 +360,7 @@ static int ecb_aes_decrypt(struct blkcipher_desc *desc,
                return fallback_blk_dec(desc, dst, src, nbytes);
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ecb_aes_crypt(desc, sctx->dec, sctx->key, &walk);
+       return ecb_aes_crypt(desc, sctx->fc | CPACF_DECRYPT, sctx->key, &walk);
 }
 
 static int fallback_init_blk(struct crypto_tfm *tfm)
@@ -430,16 +425,13 @@ static int cbc_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
 
        switch (key_len) {
        case 16:
-               sctx->enc = CPACF_KMC_AES_128_ENC;
-               sctx->dec = CPACF_KMC_AES_128_DEC;
+               sctx->fc = CPACF_KMC_AES_128;
                break;
        case 24:
-               sctx->enc = CPACF_KMC_AES_192_ENC;
-               sctx->dec = CPACF_KMC_AES_192_DEC;
+               sctx->fc = CPACF_KMC_AES_192;
                break;
        case 32:
-               sctx->enc = CPACF_KMC_AES_256_ENC;
-               sctx->dec = CPACF_KMC_AES_256_DEC;
+               sctx->fc = CPACF_KMC_AES_256;
                break;
        }
 
@@ -492,7 +484,7 @@ static int cbc_aes_encrypt(struct blkcipher_desc *desc,
                return fallback_blk_enc(desc, dst, src, nbytes);
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return cbc_aes_crypt(desc, sctx->enc, &walk);
+       return cbc_aes_crypt(desc, sctx->fc, &walk);
 }
 
 static int cbc_aes_decrypt(struct blkcipher_desc *desc,
@@ -506,7 +498,7 @@ static int cbc_aes_decrypt(struct blkcipher_desc *desc,
                return fallback_blk_dec(desc, dst, src, nbytes);
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return cbc_aes_crypt(desc, sctx->dec, &walk);
+       return cbc_aes_crypt(desc, sctx->fc | CPACF_DECRYPT, &walk);
 }
 
 static struct crypto_alg cbc_aes_alg = {
@@ -603,19 +595,16 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
 
        switch (key_len) {
        case 32:
-               xts_ctx->enc = CPACF_KM_XTS_128_ENC;
-               xts_ctx->dec = CPACF_KM_XTS_128_DEC;
+               xts_ctx->fc = CPACF_KM_XTS_128;
                memcpy(xts_ctx->key + 16, in_key, 16);
                memcpy(xts_ctx->pcc_key + 16, in_key + 16, 16);
                break;
        case 48:
-               xts_ctx->enc = 0;
-               xts_ctx->dec = 0;
+               xts_ctx->fc = 0;
                xts_fallback_setkey(tfm, in_key, key_len);
                break;
        case 64:
-               xts_ctx->enc = CPACF_KM_XTS_256_ENC;
-               xts_ctx->dec = CPACF_KM_XTS_256_DEC;
+               xts_ctx->fc = CPACF_KM_XTS_256;
                memcpy(xts_ctx->key, in_key, 32);
                memcpy(xts_ctx->pcc_key, in_key + 32, 32);
                break;
@@ -685,7 +674,7 @@ static int xts_aes_encrypt(struct blkcipher_desc *desc,
                return xts_fallback_encrypt(desc, dst, src, nbytes);
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return xts_aes_crypt(desc, xts_ctx->enc, xts_ctx, &walk);
+       return xts_aes_crypt(desc, xts_ctx->fc, xts_ctx, &walk);
 }
 
 static int xts_aes_decrypt(struct blkcipher_desc *desc,
@@ -699,7 +688,7 @@ static int xts_aes_decrypt(struct blkcipher_desc *desc,
                return xts_fallback_decrypt(desc, dst, src, nbytes);
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return xts_aes_crypt(desc, xts_ctx->dec, xts_ctx, &walk);
+       return xts_aes_crypt(desc, xts_ctx->fc | CPACF_DECRYPT, xts_ctx, &walk);
 }
 
 static int xts_fallback_init(struct crypto_tfm *tfm)
@@ -759,16 +748,13 @@ static int ctr_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
 
        switch (key_len) {
        case 16:
-               sctx->enc = CPACF_KMCTR_AES_128_ENC;
-               sctx->dec = CPACF_KMCTR_AES_128_DEC;
+               sctx->fc = CPACF_KMCTR_AES_128;
                break;
        case 24:
-               sctx->enc = CPACF_KMCTR_AES_192_ENC;
-               sctx->dec = CPACF_KMCTR_AES_192_DEC;
+               sctx->fc = CPACF_KMCTR_AES_192;
                break;
        case 32:
-               sctx->enc = CPACF_KMCTR_AES_256_ENC;
-               sctx->dec = CPACF_KMCTR_AES_256_DEC;
+               sctx->fc = CPACF_KMCTR_AES_256;
                break;
        }
 
@@ -865,7 +851,7 @@ static int ctr_aes_encrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ctr_aes_crypt(desc, sctx->enc, sctx, &walk);
+       return ctr_aes_crypt(desc, sctx->fc, sctx, &walk);
 }
 
 static int ctr_aes_decrypt(struct blkcipher_desc *desc,
@@ -876,7 +862,7 @@ static int ctr_aes_decrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ctr_aes_crypt(desc, sctx->dec, sctx, &walk);
+       return ctr_aes_crypt(desc, sctx->fc | CPACF_DECRYPT, sctx, &walk);
 }
 
 static struct crypto_alg ctr_aes_alg = {
@@ -906,11 +892,11 @@ static int __init aes_s390_init(void)
 {
        int ret;
 
-       if (cpacf_query(CPACF_KM, CPACF_KM_AES_128_ENC))
+       if (cpacf_query(CPACF_KM, CPACF_KM_AES_128))
                keylen_flag |= AES_KEYLEN_128;
-       if (cpacf_query(CPACF_KM, CPACF_KM_AES_192_ENC))
+       if (cpacf_query(CPACF_KM, CPACF_KM_AES_192))
                keylen_flag |= AES_KEYLEN_192;
-       if (cpacf_query(CPACF_KM, CPACF_KM_AES_256_ENC))
+       if (cpacf_query(CPACF_KM, CPACF_KM_AES_256))
                keylen_flag |= AES_KEYLEN_256;
 
        if (!keylen_flag)
@@ -933,17 +919,17 @@ static int __init aes_s390_init(void)
        if (ret)
                goto cbc_aes_err;
 
-       if (cpacf_query(CPACF_KM, CPACF_KM_XTS_128_ENC) &&
-           cpacf_query(CPACF_KM, CPACF_KM_XTS_256_ENC)) {
+       if (cpacf_query(CPACF_KM, CPACF_KM_XTS_128) &&
+           cpacf_query(CPACF_KM, CPACF_KM_XTS_256)) {
                ret = crypto_register_alg(&xts_aes_alg);
                if (ret)
                        goto xts_aes_err;
                xts_aes_alg_reg = 1;
        }
 
-       if (cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_128_ENC) &&
-           cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_192_ENC) &&
-           cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_256_ENC)) {
+       if (cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_128) &&
+           cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_192) &&
+           cpacf_query(CPACF_KMCTR, CPACF_KMCTR_AES_256)) {
                ctrblk = (u8 *) __get_free_page(GFP_KERNEL);
                if (!ctrblk) {
                        ret = -ENOMEM;
index 697e71a75fc2ae60b55b6284ea60a107fccab3e5..fadd474bf8bbc3e341f089007c77dbda2798ad68 100644 (file)
@@ -53,14 +53,15 @@ static void des_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
 {
        struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm);
 
-       cpacf_km(CPACF_KM_DEA_ENC, ctx->key, out, in, DES_BLOCK_SIZE);
+       cpacf_km(CPACF_KM_DEA, ctx->key, out, in, DES_BLOCK_SIZE);
 }
 
 static void des_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
 {
        struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm);
 
-       cpacf_km(CPACF_KM_DEA_DEC, ctx->key, out, in, DES_BLOCK_SIZE);
+       cpacf_km(CPACF_KM_DEA | CPACF_DECRYPT,
+                ctx->key, out, in, DES_BLOCK_SIZE);
 }
 
 static struct crypto_alg des_alg = {
@@ -148,7 +149,7 @@ static int ecb_des_encrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ecb_desall_crypt(desc, CPACF_KM_DEA_ENC, ctx->key, &walk);
+       return ecb_desall_crypt(desc, CPACF_KM_DEA, ctx->key, &walk);
 }
 
 static int ecb_des_decrypt(struct blkcipher_desc *desc,
@@ -159,7 +160,8 @@ static int ecb_des_decrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ecb_desall_crypt(desc, CPACF_KM_DEA_DEC, ctx->key, &walk);
+       return ecb_desall_crypt(desc, CPACF_KM_DEA | CPACF_DECRYPT,
+                               ctx->key, &walk);
 }
 
 static struct crypto_alg ecb_des_alg = {
@@ -189,7 +191,7 @@ static int cbc_des_encrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return cbc_desall_crypt(desc, CPACF_KMC_DEA_ENC, &walk);
+       return cbc_desall_crypt(desc, CPACF_KMC_DEA, &walk);
 }
 
 static int cbc_des_decrypt(struct blkcipher_desc *desc,
@@ -199,7 +201,7 @@ static int cbc_des_decrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return cbc_desall_crypt(desc, CPACF_KMC_DEA_DEC, &walk);
+       return cbc_desall_crypt(desc, CPACF_KMC_DEA | CPACF_DECRYPT, &walk);
 }
 
 static struct crypto_alg cbc_des_alg = {
@@ -257,14 +259,15 @@ static void des3_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
 {
        struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm);
 
-       cpacf_km(CPACF_KM_TDEA_192_ENC, ctx->key, dst, src, DES_BLOCK_SIZE);
+       cpacf_km(CPACF_KM_TDEA_192, ctx->key, dst, src, DES_BLOCK_SIZE);
 }
 
 static void des3_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
 {
        struct s390_des_ctx *ctx = crypto_tfm_ctx(tfm);
 
-       cpacf_km(CPACF_KM_TDEA_192_DEC, ctx->key, dst, src, DES_BLOCK_SIZE);
+       cpacf_km(CPACF_KM_TDEA_192 | CPACF_DECRYPT,
+                ctx->key, dst, src, DES_BLOCK_SIZE);
 }
 
 static struct crypto_alg des3_alg = {
@@ -294,7 +297,7 @@ static int ecb_des3_encrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ecb_desall_crypt(desc, CPACF_KM_TDEA_192_ENC, ctx->key, &walk);
+       return ecb_desall_crypt(desc, CPACF_KM_TDEA_192, ctx->key, &walk);
 }
 
 static int ecb_des3_decrypt(struct blkcipher_desc *desc,
@@ -305,7 +308,8 @@ static int ecb_des3_decrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ecb_desall_crypt(desc, CPACF_KM_TDEA_192_DEC, ctx->key, &walk);
+       return ecb_desall_crypt(desc, CPACF_KM_TDEA_192 | CPACF_DECRYPT,
+                               ctx->key, &walk);
 }
 
 static struct crypto_alg ecb_des3_alg = {
@@ -335,7 +339,7 @@ static int cbc_des3_encrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return cbc_desall_crypt(desc, CPACF_KMC_TDEA_192_ENC, &walk);
+       return cbc_desall_crypt(desc, CPACF_KMC_TDEA_192, &walk);
 }
 
 static int cbc_des3_decrypt(struct blkcipher_desc *desc,
@@ -345,7 +349,8 @@ static int cbc_des3_decrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return cbc_desall_crypt(desc, CPACF_KMC_TDEA_192_DEC, &walk);
+       return cbc_desall_crypt(desc, CPACF_KMC_TDEA_192 | CPACF_DECRYPT,
+                               &walk);
 }
 
 static struct crypto_alg cbc_des3_alg = {
@@ -456,7 +461,7 @@ static int ctr_des_encrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ctr_desall_crypt(desc, CPACF_KMCTR_DEA_ENC, ctx, &walk);
+       return ctr_desall_crypt(desc, CPACF_KMCTR_DEA, ctx, &walk);
 }
 
 static int ctr_des_decrypt(struct blkcipher_desc *desc,
@@ -467,7 +472,8 @@ static int ctr_des_decrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ctr_desall_crypt(desc, CPACF_KMCTR_DEA_DEC, ctx, &walk);
+       return ctr_desall_crypt(desc, CPACF_KMCTR_DEA | CPACF_DECRYPT,
+                               ctx, &walk);
 }
 
 static struct crypto_alg ctr_des_alg = {
@@ -499,7 +505,7 @@ static int ctr_des3_encrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ctr_desall_crypt(desc, CPACF_KMCTR_TDEA_192_ENC, ctx, &walk);
+       return ctr_desall_crypt(desc, CPACF_KMCTR_TDEA_192, ctx, &walk);
 }
 
 static int ctr_des3_decrypt(struct blkcipher_desc *desc,
@@ -510,7 +516,8 @@ static int ctr_des3_decrypt(struct blkcipher_desc *desc,
        struct blkcipher_walk walk;
 
        blkcipher_walk_init(&walk, dst, src, nbytes);
-       return ctr_desall_crypt(desc, CPACF_KMCTR_TDEA_192_DEC, ctx, &walk);
+       return ctr_desall_crypt(desc, CPACF_KMCTR_TDEA_192 | CPACF_DECRYPT,
+                               ctx, &walk);
 }
 
 static struct crypto_alg ctr_des3_alg = {
@@ -538,8 +545,8 @@ static int __init des_s390_init(void)
 {
        int ret;
 
-       if (!cpacf_query(CPACF_KM, CPACF_KM_DEA_ENC) ||
-           !cpacf_query(CPACF_KM, CPACF_KM_TDEA_192_ENC))
+       if (!cpacf_query(CPACF_KM, CPACF_KM_DEA) ||
+           !cpacf_query(CPACF_KM, CPACF_KM_TDEA_192))
                return -EOPNOTSUPP;
 
        ret = crypto_register_alg(&des_alg);
@@ -561,8 +568,8 @@ static int __init des_s390_init(void)
        if (ret)
                goto cbc_des3_err;
 
-       if (cpacf_query(CPACF_KMCTR, CPACF_KMCTR_DEA_ENC) &&
-           cpacf_query(CPACF_KMCTR, CPACF_KMCTR_TDEA_192_ENC)) {
+       if (cpacf_query(CPACF_KMCTR, CPACF_KMCTR_DEA) &&
+           cpacf_query(CPACF_KMCTR, CPACF_KMCTR_TDEA_192)) {
                ret = crypto_register_alg(&ctr_des_alg);
                if (ret)
                        goto ctr_des_err;
index d28621de8e0b14657c19c0470238d9ffcd6b8311..ca884198805c6276f6f2ca149a38d35ed8489f38 100644 (file)
 #define CPACF_PPNO             0xb93c          /* MSA5 */
 
 /*
- * Function codes for the KM (CIPHER MESSAGE)
- * instruction (0x80 is the decipher modifier bit)
+ * Decryption modifier bit
+ */
+#define CPACF_DECRYPT          0x80
+
+/*
+ * Function codes for the KM (CIPHER MESSAGE) instruction
  */
 #define CPACF_KM_QUERY         0x00
-#define CPACF_KM_DEA_ENC       0x01
-#define CPACF_KM_DEA_DEC       0x81
-#define CPACF_KM_TDEA_128_ENC  0x02
-#define CPACF_KM_TDEA_128_DEC  0x82
-#define CPACF_KM_TDEA_192_ENC  0x03
-#define CPACF_KM_TDEA_192_DEC  0x83
-#define CPACF_KM_AES_128_ENC   0x12
-#define CPACF_KM_AES_128_DEC   0x92
-#define CPACF_KM_AES_192_ENC   0x13
-#define CPACF_KM_AES_192_DEC   0x93
-#define CPACF_KM_AES_256_ENC   0x14
-#define CPACF_KM_AES_256_DEC   0x94
-#define CPACF_KM_XTS_128_ENC   0x32
-#define CPACF_KM_XTS_128_DEC   0xb2
-#define CPACF_KM_XTS_256_ENC   0x34
-#define CPACF_KM_XTS_256_DEC   0xb4
+#define CPACF_KM_DEA           0x01
+#define CPACF_KM_TDEA_128      0x02
+#define CPACF_KM_TDEA_192      0x03
+#define CPACF_KM_AES_128       0x12
+#define CPACF_KM_AES_192       0x13
+#define CPACF_KM_AES_256       0x14
+#define CPACF_KM_XTS_128       0x32
+#define CPACF_KM_XTS_256       0x34
 
 /*
  * Function codes for the KMC (CIPHER MESSAGE WITH CHAINING)
- * instruction (0x80 is the decipher modifier bit)
+ * instruction
  */
 #define CPACF_KMC_QUERY                0x00
-#define CPACF_KMC_DEA_ENC      0x01
-#define CPACF_KMC_DEA_DEC      0x81
-#define CPACF_KMC_TDEA_128_ENC 0x02
-#define CPACF_KMC_TDEA_128_DEC 0x82
-#define CPACF_KMC_TDEA_192_ENC 0x03
-#define CPACF_KMC_TDEA_192_DEC 0x83
-#define CPACF_KMC_AES_128_ENC  0x12
-#define CPACF_KMC_AES_128_DEC  0x92
-#define CPACF_KMC_AES_192_ENC  0x13
-#define CPACF_KMC_AES_192_DEC  0x93
-#define CPACF_KMC_AES_256_ENC  0x14
-#define CPACF_KMC_AES_256_DEC  0x94
+#define CPACF_KMC_DEA          0x01
+#define CPACF_KMC_TDEA_128     0x02
+#define CPACF_KMC_TDEA_192     0x03
+#define CPACF_KMC_AES_128      0x12
+#define CPACF_KMC_AES_192      0x13
+#define CPACF_KMC_AES_256      0x14
 #define CPACF_KMC_PRNG         0x43
 
 /*
  * Function codes for the KMCTR (CIPHER MESSAGE WITH COUNTER)
- * instruction (0x80 is the decipher modifier bit)
+ * instruction
  */
-#define CPACF_KMCTR_QUERY       0x00
-#define CPACF_KMCTR_DEA_ENC     0x01
-#define CPACF_KMCTR_DEA_DEC     0x81
-#define CPACF_KMCTR_TDEA_128_ENC 0x02
-#define CPACF_KMCTR_TDEA_128_DEC 0x82
-#define CPACF_KMCTR_TDEA_192_ENC 0x03
-#define CPACF_KMCTR_TDEA_192_DEC 0x83
-#define CPACF_KMCTR_AES_128_ENC         0x12
-#define CPACF_KMCTR_AES_128_DEC         0x92
-#define CPACF_KMCTR_AES_192_ENC         0x13
-#define CPACF_KMCTR_AES_192_DEC         0x93
-#define CPACF_KMCTR_AES_256_ENC         0x14
-#define CPACF_KMCTR_AES_256_DEC         0x94
+#define CPACF_KMCTR_QUERY      0x00
+#define CPACF_KMCTR_DEA                0x01
+#define CPACF_KMCTR_TDEA_128   0x02
+#define CPACF_KMCTR_TDEA_192   0x03
+#define CPACF_KMCTR_AES_128    0x12
+#define CPACF_KMCTR_AES_192    0x13
+#define CPACF_KMCTR_AES_256    0x14
 
 /*
  * Function codes for the KIMD (COMPUTE INTERMEDIATE MESSAGE DIGEST)
- * instruction (0x80 is the decipher modifier bit)
+ * instruction
  */
 #define CPACF_KIMD_QUERY       0x00
 #define CPACF_KIMD_SHA_1       0x01
@@ -98,7 +82,7 @@
 
 /*
  * Function codes for the KLMD (COMPUTE LAST MESSAGE DIGEST)
- * instruction (0x80 is the decipher modifier bit)
+ * instruction
  */
 #define CPACF_KLMD_QUERY       0x00
 #define CPACF_KLMD_SHA_1       0x01
 
 /*
  * function codes for the KMAC (COMPUTE MESSAGE AUTHENTICATION CODE)
- * instruction (0x80 is the decipher modifier bit)
+ * instruction
  */
 #define CPACF_KMAC_QUERY       0x00
 #define CPACF_KMAC_DEA         0x01
 
 /*
  * Function codes for the PPNO (PERFORM PSEUDORANDOM NUMBER OPERATION)
- * instruction (0x80 is the decipher modifier bit)
+ * instruction
  */
 #define CPACF_PPNO_QUERY               0x00
 #define CPACF_PPNO_SHA512_DRNG_GEN     0x03
@@ -194,7 +178,7 @@ static inline int cpacf_query(unsigned int opcode, unsigned int func)
  * Returns 0 for the query func, number of processed bytes for
  * encryption/decryption funcs
  */
-static inline int cpacf_km(long func, void *param,
+static inline int cpacf_km(unsigned long func, void *param,
                           u8 *dest, const u8 *src, long src_len)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
@@ -224,7 +208,7 @@ static inline int cpacf_km(long func, void *param,
  * Returns 0 for the query func, number of processed bytes for
  * encryption/decryption funcs
  */
-static inline int cpacf_kmc(long func, void *param,
+static inline int cpacf_kmc(unsigned long func, void *param,
                            u8 *dest, const u8 *src, long src_len)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
@@ -253,7 +237,7 @@ static inline int cpacf_kmc(long func, void *param,
  *
  * Returns 0 for the query func, number of processed bytes for digest funcs
  */
-static inline int cpacf_kimd(long func, void *param,
+static inline int cpacf_kimd(unsigned long func, void *param,
                             const u8 *src, long src_len)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
@@ -280,7 +264,7 @@ static inline int cpacf_kimd(long func, void *param,
  *
  * Returns 0 for the query func, number of processed bytes for digest funcs
  */
-static inline int cpacf_klmd(long func, void *param,
+static inline int cpacf_klmd(unsigned long func, void *param,
                             const u8 *src, long src_len)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
@@ -308,7 +292,7 @@ static inline int cpacf_klmd(long func, void *param,
  *
  * Returns 0 for the query func, number of processed bytes for digest funcs
  */
-static inline int cpacf_kmac(long func, void *param,
+static inline int cpacf_kmac(unsigned long func, void *param,
                             const u8 *src, long src_len)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
@@ -338,7 +322,7 @@ static inline int cpacf_kmac(long func, void *param,
  * Returns 0 for the query func, number of processed bytes for
  * encryption/decryption funcs
  */
-static inline int cpacf_kmctr(long func, void *param, u8 *dest,
+static inline int cpacf_kmctr(unsigned long func, void *param, u8 *dest,
                              const u8 *src, long src_len, u8 *counter)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
@@ -372,7 +356,7 @@ static inline int cpacf_kmctr(long func, void *param, u8 *dest,
  * Returns 0 for the query func, number of random bytes stored in
  * dest buffer for generate function
  */
-static inline int cpacf_ppno(long func, void *param,
+static inline int cpacf_ppno(unsigned long func, void *param,
                             u8 *dest, long dest_len,
                             const u8 *seed, long seed_len)
 {
@@ -402,7 +386,7 @@ static inline int cpacf_ppno(long func, void *param,
  *
  * Returns 0.
  */
-static inline int cpacf_pcc(long func, void *param)
+static inline int cpacf_pcc(unsigned long func, void *param)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
        register unsigned long r1 asm("1") = (unsigned long) param;