#include <linux/arm-smccc.h>
#include <linux/kvm_host.h>
#include <asm/kvm_emulate.h>
#include <kvm/arm_hypercalls.h>
Go to the source code of this file.
◆ ARM_SMCCC_TRNG_VERSION_1_0
#define ARM_SMCCC_TRNG_VERSION_1_0 0x10000UL |
◆ TRNG_INVALID_PARAMETER
#define TRNG_INVALID_PARAMETER ((unsigned long)-2) |
◆ TRNG_MAX_BITS64
#define TRNG_MAX_BITS64 192 |
◆ TRNG_NO_ENTROPY
#define TRNG_NO_ENTROPY ((unsigned long)-3) |
◆ TRNG_NOT_SUPPORTED
#define TRNG_NOT_SUPPORTED ((unsigned long)-1) |
◆ TRNG_SUCCESS
◆ __aligned()
static const uuid_t arm_smc_trng_uuid __aligned |
( |
4 |
| ) |
|
|
static |
◆ kvm_trng_call()
int kvm_trng_call |
( |
struct kvm_vcpu * |
vcpu | ) |
|
Definition at line 51 of file trng.c.
53 const __le32 *u = (__le32 *)arm_smc_trng_uuid.b;
59 case ARM_SMCCC_TRNG_VERSION:
62 case ARM_SMCCC_TRNG_FEATURES:
64 case ARM_SMCCC_TRNG_VERSION:
65 case ARM_SMCCC_TRNG_FEATURES:
66 case ARM_SMCCC_TRNG_GET_UUID:
67 case ARM_SMCCC_TRNG_RND32:
68 case ARM_SMCCC_TRNG_RND64:
72 case ARM_SMCCC_TRNG_GET_UUID:
74 le32_to_cpu(u[2]), le32_to_cpu(u[3]));
76 case ARM_SMCCC_TRNG_RND32:
79 case ARM_SMCCC_TRNG_RND64:
static u32 smccc_get_function(struct kvm_vcpu *vcpu)
static unsigned long smccc_get_arg1(struct kvm_vcpu *vcpu)
static void smccc_set_retval(struct kvm_vcpu *vcpu, unsigned long a0, unsigned long a1, unsigned long a2, unsigned long a3)
static int kvm_trng_do_rnd(struct kvm_vcpu *vcpu, int size)
#define ARM_SMCCC_TRNG_VERSION_1_0
#define TRNG_NOT_SUPPORTED
◆ kvm_trng_do_rnd()
static int kvm_trng_do_rnd |
( |
struct kvm_vcpu * |
vcpu, |
|
|
int |
size |
|
) |
| |
|
static |
Definition at line 24 of file trng.c.
30 if (num_bits > 3 *
size) {
36 for (i = 0; i < DIV_ROUND_UP(num_bits, BITS_PER_LONG); i++)
37 bits[i] = get_random_long();
43 upper_32_bits(bits[0]), lower_32_bits(bits[0]));
47 memzero_explicit(bits,
sizeof(bits));
#define TRNG_INVALID_PARAMETER