uprobes: remove function declarations from arch/{mips,s390}
[cascardo/linux.git] / arch / s390 / include / asm / cpacf.h
index ca88419..2c680db 100644 (file)
 #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;
 }
 
 /**
@@ -234,11 +247,9 @@ static inline int cpacf_kmc(unsigned 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(unsigned 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;
@@ -251,8 +262,6 @@ static inline int cpacf_kimd(unsigned 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;
 }
 
 /**
@@ -261,11 +270,9 @@ static inline int cpacf_kimd(unsigned 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(unsigned 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;
@@ -278,8 +285,6 @@ static inline int cpacf_klmd(unsigned 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;
 }
 
 /**
@@ -352,13 +357,10 @@ static inline int cpacf_kmctr(unsigned 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(unsigned 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;
@@ -374,8 +376,6 @@ static inline int cpacf_ppno(unsigned 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;
 }
 
 /**
@@ -383,10 +383,8 @@ static inline int cpacf_ppno(unsigned 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(unsigned 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;
@@ -397,8 +395,6 @@ static inline int cpacf_pcc(unsigned long func, void *param)
                :
                : [fc] "d" (r0), [pba] "a" (r1), [opc] "i" (CPACF_PCC)
                : "cc", "memory");
-
-       return 0;
 }
 
 #endif /* _ASM_S390_CPACF_H */