s390/crypto: Add PCKMO inline function
authorHarald Freudenberger <freude@linux.vnet.ibm.com>
Wed, 2 Nov 2016 13:19:48 +0000 (14:19 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 23 Feb 2017 09:06:39 +0000 (10:06 +0100)
Adding the PCKMO inline function and the function code definitions
for using the pckmo function to the cpacf header file.

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

index 2c680db7e5c10a20f9182c1232032e9db9f54740..992a20868110303e63ff334bf7641e4e11da5b70 100644 (file)
 #define CPACF_KMAC_TDEA_128    0x02
 #define CPACF_KMAC_TDEA_192    0x03
 
+/*
+ * Function codes for the PCKMO (PERFORM CRYPTOGRAPHIC KEY MANAGEMENT)
+ * instruction
+ */
+#define CPACF_PCKMO_QUERY              0x00
+#define CPACF_PCKMO_ENC_DES_KEY                0x01
+#define CPACF_PCKMO_ENC_TDES_128_KEY   0x02
+#define CPACF_PCKMO_ENC_TDES_192_KEY   0x03
+#define CPACF_PCKMO_ENC_AES_128_KEY    0x12
+#define CPACF_PCKMO_ENC_AES_192_KEY    0x13
+#define CPACF_PCKMO_ENC_AES_256_KEY    0x14
+
 /*
  * Function codes for the PPNO (PERFORM PSEUDORANDOM NUMBER OPERATION)
  * instruction
@@ -397,4 +409,24 @@ static inline void cpacf_pcc(unsigned long func, void *param)
                : "cc", "memory");
 }
 
+/**
+ * cpacf_pckmo() - executes the PCKMO (PERFORM CRYPTOGRAPHIC KEY
+ *               MANAGEMENT) instruction
+ * @func: the function code passed to PCKMO; see CPACF_PCKMO_xxx defines
+ * @param: address of parameter block; see POP for details on each func
+ *
+ * Returns 0.
+ */
+static inline void cpacf_pckmo(long func, void *param)
+{
+       register unsigned long r0 asm("0") = (unsigned long) func;
+       register unsigned long r1 asm("1") = (unsigned long) param;
+
+       asm volatile(
+               "       .insn   rre,%[opc] << 16,0,0\n" /* PCKMO opcode */
+               :
+               : [fc] "d" (r0), [pba] "a" (r1), [opc] "i" (CPACF_PCKMO)
+               : "cc", "memory");
+}
+
 #endif /* _ASM_S390_CPACF_H */