317 unsigned long val = PSCI_RET_NOT_SUPPORTED;
319 struct kvm *kvm = vcpu->kvm;
324 case PSCI_0_2_FN_PSCI_VERSION:
327 case PSCI_1_0_FN_PSCI_FEATURES:
333 val = PSCI_RET_NOT_SUPPORTED;
336 case PSCI_0_2_FN_PSCI_VERSION:
337 case PSCI_0_2_FN_CPU_SUSPEND:
338 case PSCI_0_2_FN64_CPU_SUSPEND:
339 case PSCI_0_2_FN_CPU_OFF:
340 case PSCI_0_2_FN_CPU_ON:
341 case PSCI_0_2_FN64_CPU_ON:
342 case PSCI_0_2_FN_AFFINITY_INFO:
343 case PSCI_0_2_FN64_AFFINITY_INFO:
344 case PSCI_0_2_FN_MIGRATE_INFO_TYPE:
345 case PSCI_0_2_FN_SYSTEM_OFF:
346 case PSCI_0_2_FN_SYSTEM_RESET:
347 case PSCI_1_0_FN_PSCI_FEATURES:
348 case ARM_SMCCC_VERSION_FUNC_ID:
351 case PSCI_1_0_FN_SYSTEM_SUSPEND:
352 case PSCI_1_0_FN64_SYSTEM_SUSPEND:
353 if (test_bit(KVM_ARCH_FLAG_SYSTEM_SUSPEND_ENABLED, &kvm->arch.flags))
356 case PSCI_1_1_FN_SYSTEM_RESET2:
357 case PSCI_1_1_FN64_SYSTEM_RESET2:
363 case PSCI_1_0_FN_SYSTEM_SUSPEND:
366 case PSCI_1_0_FN64_SYSTEM_SUSPEND:
372 if (test_bit(KVM_ARCH_FLAG_SYSTEM_SUSPEND_ENABLED, &kvm->arch.flags)) {
377 case PSCI_1_1_FN_SYSTEM_RESET2:
380 case PSCI_1_1_FN64_SYSTEM_RESET2:
384 if (arg <= PSCI_1_1_RESET_TYPE_SYSTEM_WARM_RESET ||
385 arg >= PSCI_1_1_RESET_TYPE_VENDOR_START) {
387 vcpu_set_reg(vcpu, 0, PSCI_RET_INTERNAL_FAILURE);
391 val = PSCI_RET_INVALID_PARAMS;
static unsigned long smccc_get_arg1(struct kvm_vcpu *vcpu)
static void kvm_psci_system_suspend(struct kvm_vcpu *vcpu)
static void kvm_psci_system_reset2(struct kvm_vcpu *vcpu)
static unsigned long kvm_psci_check_allowed_function(struct kvm_vcpu *vcpu, u32 fn)
static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)