EVP_PKEY_METHOD accessor functions.
[openssl.git] / crypto / s390xcpuid.S
index 06815347e6a380bd6229382b49ec3bc014921f04..d91d5bc4b64b1ed130bb49c64b4ee505f23d41f8 100644 (file)
@@ -5,14 +5,46 @@
 .align 16
 OPENSSL_s390x_facilities:
        lghi    %r0,0
-       larl    %r2,OPENSSL_s390xcap_P
-       stg     %r0,8(%r2)
-       .long   0xb2b02000      # stfle 0(%r2)
+       larl    %r4,OPENSSL_s390xcap_P
+       stg     %r0,8(%r4)      # wipe capability vectors
+       stg     %r0,16(%r4)
+       stg     %r0,24(%r4)
+       stg     %r0,32(%r4)
+       stg     %r0,40(%r4)
+       stg     %r0,48(%r4)
+       stg     %r0,56(%r4)
+       stg     %r0,64(%r4)
+       stg     %r0,72(%r4)
+
+       .long   0xb2b04000      # stfle 0(%r4)
        brc     8,.Ldone
        lghi    %r0,1
-       .long   0xb2b02000      # stfle 0(%r2)
+       .long   0xb2b04000      # stfle 0(%r4)
 .Ldone:
-       lg      %r2,0(%r2)
+       lmg     %r2,%r3,0(%r4)
+       tmhl    %r2,0x4000      # check for message-security-assist
+       jz      .Lret
+
+       lghi    %r0,0           # query kimd capabilities
+       la      %r1,16(%r4)
+       .long   0xb93e0002      # kimd %r0,%r2
+
+       lghi    %r0,0           # query km capability vector
+       la      %r1,32(%r4)
+       .long   0xb92e0042      # km %r4,%r2
+
+       lghi    %r0,0           # query kmc capability vector
+       la      %r1,48(%r4)
+       .long   0xb92f0042      # kmc %r4,%r2
+
+       tmhh    %r3,0x0004      # check for message-security-assist-4
+       jz      .Lret
+
+       lghi    %r0,0           # query kmctr capability vector
+       la      %r1,64(%r4)
+       .long   0xb92d2042      # kmctr %r4,%r2,%r2
+
+.Lret:
        br      %r14
 .size  OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
 
@@ -96,4 +128,4 @@ OPENSSL_cleanse:
 .section       .init
        brasl   %r14,OPENSSL_cpuid_setup
 
-.comm  OPENSSL_s390xcap_P,16,8
+.comm  OPENSSL_s390xcap_P,80,8