uprobes: remove function declarations from arch/{mips,s390}
[cascardo/linux.git] / arch / s390 / include / asm / cpacf.h
index d28621d..2c680db 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
 #define CPACF_PPNO_SHA512_DRNG_SEED    0x83
 
+typedef struct { unsigned char bytes[16]; } cpacf_mask_t;
+
 /**
  * cpacf_query() - check if a specific CPACF function is available
  * @opcode: the opcode of the crypto instruction
  *
  * Returns 1 if @func is available for @opcode, 0 otherwise
  */
-static inline void __cpacf_query(unsigned int opcode, unsigned char *status)
+static inline void __cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
 {
-       typedef struct { unsigned char _[16]; } status_type;
        register unsigned long r0 asm("0") = 0; /* query function */
-       register unsigned long r1 asm("1") = (unsigned long) status;
+       register unsigned long r1 asm("1") = (unsigned long) mask;
 
        asm volatile(
                "       spm 0\n" /* pckmo doesn't change the cc */
                /* Parameter registers are ignored, but may not be 0 */
                "0:     .insn   rrf,%[opc] << 16,2,2,2,0\n"
                "       brc     1,0b\n" /* handle partial completion */
-               : "=m" (*(status_type *) status)
+               : "=m" (*mask)
                : [fc] "d" (r0), [pba] "a" (r1), [opc] "i" (opcode)
                : "cc");
 }
 
-static inline int cpacf_query(unsigned int opcode, unsigned int func)
+static inline int __cpacf_check_opcode(unsigned int opcode)
 {
-       unsigned char status[16];
-
        switch (opcode) {
        case CPACF_KMAC:
        case CPACF_KM:
        case CPACF_KMC:
        case CPACF_KIMD:
        case CPACF_KLMD:
-               if (!test_facility(17)) /* check for MSA */
-                       return 0;
-               break;
+               return test_facility(17);       /* check for MSA */
        case CPACF_PCKMO:
-               if (!test_facility(76)) /* check for MSA3 */
-                       return 0;
-               break;
+               return test_facility(76);       /* check for MSA3 */
        case CPACF_KMF:
        case CPACF_KMO:
        case CPACF_PCC:
        case CPACF_KMCTR:
-               if (!test_facility(77)) /* check for MSA4 */
-                       return 0;
-               break;
+               return test_facility(77);       /* check for MSA4 */
        case CPACF_PPNO:
-               if (!test_facility(57)) /* check for MSA5 */
-                       return 0;
-               break;
+               return test_facility(57);       /* check for MSA5 */
        default:
                BUG();
        }
-       __cpacf_query(opcode, status);
-       return (status[func >> 3] & (0x80 >> (func & 7))) != 0;
+}
+
+static inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
+{
+       if (__cpacf_check_opcode(opcode)) {
+               __cpacf_query(opcode, mask);
+               return 1;
+       }
+       memset(mask, 0, sizeof(*mask));
+       return 0;
+}
+
+static inline int cpacf_test_func(cpacf_mask_t *mask, unsigned int func)
+{
+       return (mask->bytes[func >> 3] & (0x80 >> (func & 7))) != 0;
+}
+
+static inline int cpacf_query_func(unsigned int opcode, unsigned int func)
+{
+       cpacf_mask_t mask;
+
+       if (cpacf_query(opcode, &mask))
+               return cpacf_test_func(&mask, func);
+       return 0;
 }
 
 /**
@@ -194,7 +191,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 +221,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;
@@ -250,11 +247,9 @@ static inline int cpacf_kmc(long func, void *param,
  * @param: address of parameter block; see POP for details on each func
  * @src: address of source memory area
  * @src_len: length of src operand in bytes
- *
- * Returns 0 for the query func, number of processed bytes for digest funcs
  */
-static inline int cpacf_kimd(long func, void *param,
-                            const u8 *src, long src_len)
+static inline void cpacf_kimd(unsigned long func, void *param,
+                             const u8 *src, long src_len)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
        register unsigned long r1 asm("1") = (unsigned long) param;
@@ -267,8 +262,6 @@ static inline int cpacf_kimd(long func, void *param,
                : [src] "+a" (r2), [len] "+d" (r3)
                : [fc] "d" (r0), [pba] "a" (r1), [opc] "i" (CPACF_KIMD)
                : "cc", "memory");
-
-       return src_len - r3;
 }
 
 /**
@@ -277,11 +270,9 @@ static inline int cpacf_kimd(long func, void *param,
  * @param: address of parameter block; see POP for details on each func
  * @src: address of source memory area
  * @src_len: length of src operand in bytes
- *
- * Returns 0 for the query func, number of processed bytes for digest funcs
  */
-static inline int cpacf_klmd(long func, void *param,
-                            const u8 *src, long src_len)
+static inline void cpacf_klmd(unsigned long func, void *param,
+                             const u8 *src, long src_len)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
        register unsigned long r1 asm("1") = (unsigned long) param;
@@ -294,8 +285,6 @@ static inline int cpacf_klmd(long func, void *param,
                : [src] "+a" (r2), [len] "+d" (r3)
                : [fc] "d" (r0), [pba] "a" (r1), [opc] "i" (CPACF_KLMD)
                : "cc", "memory");
-
-       return src_len - r3;
 }
 
 /**
@@ -308,7 +297,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 +327,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;
@@ -368,13 +357,10 @@ static inline int cpacf_kmctr(long func, void *param, u8 *dest,
  * @dest_len: size of destination memory area in bytes
  * @seed: address of seed data
  * @seed_len: size of seed data in bytes
- *
- * 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,
-                            u8 *dest, long dest_len,
-                            const u8 *seed, long seed_len)
+static inline void cpacf_ppno(unsigned long func, void *param,
+                             u8 *dest, long dest_len,
+                             const u8 *seed, long seed_len)
 {
        register unsigned long r0 asm("0") = (unsigned long) func;
        register unsigned long r1 asm("1") = (unsigned long) param;
@@ -390,8 +376,6 @@ static inline int cpacf_ppno(long func, void *param,
                : [fc] "d" (r0), [pba] "a" (r1),
                  [seed] "a" (r4), [slen] "d" (r5), [opc] "i" (CPACF_PPNO)
                : "cc", "memory");
-
-       return dest_len - r3;
 }
 
 /**
@@ -399,10 +383,8 @@ static inline int cpacf_ppno(long func, void *param,
  *              instruction
  * @func: the function code passed to PCC; see CPACF_KM_xxx defines
  * @param: address of parameter block; see POP for details on each func
- *
- * Returns 0.
  */
-static inline int cpacf_pcc(long func, void *param)
+static inline void 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;
@@ -413,8 +395,6 @@ static inline int cpacf_pcc(long func, void *param)
                :
                : [fc] "d" (r0), [pba] "a" (r1), [opc] "i" (CPACF_PCC)
                : "cc", "memory");
-
-       return 0;
 }
 
 #endif /* _ASM_S390_CPACF_H */