__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2024 Ventana Micro Systems Inc.
*/
#ifndef __KVM_NACL_H
#define __KVM_NACL_H
#include <linux/jump_label.h>
#include <linux/percpu.h>
#include <asm/byteorder.h>
#include <asm/csr.h>
#include <asm/sbi.h>
struct kvm_vcpu_arch;
DECLARE_STATIC_KEY_FALSE(kvm_riscv_nacl_available);
#define kvm_riscv_nacl_available() \
static_branch_unlikely(&kvm_riscv_nacl_available)
DECLARE_STATIC_KEY_FALSE(kvm_riscv_nacl_sync_csr_available);
#define kvm_riscv_nacl_sync_csr_available() \
static_branch_unlikely(&kvm_riscv_nacl_sync_csr_available)
DECLARE_STATIC_KEY_FALSE(kvm_riscv_nacl_sync_hfence_available);
#define kvm_riscv_nacl_sync_hfence_available() \
static_branch_unlikely(&kvm_riscv_nacl_sync_hfence_available)
DECLARE_STATIC_KEY_FALSE(kvm_riscv_nacl_sync_sret_available);
#define kvm_riscv_nacl_sync_sret_available() \
static_branch_unlikely(&kvm_riscv_nacl_sync_sret_available)
DECLARE_STATIC_KEY_FALSE(kvm_riscv_nacl_autoswap_csr_available);
#define kvm_riscv_nacl_autoswap_csr_available() \
static_branch_unlikely(&kvm_riscv_nacl_autoswap_csr_available)
struct kvm_riscv_nacl {
void *shmem;
phys_addr_t shmem_phys;
};
DECLARE_PER_CPU(struct kvm_riscv_nacl, kvm_riscv_nacl);
void __kvm_riscv_nacl_hfence(void *shmem,
unsigned long control,
unsigned long page_num,
unsigned long page_count);
void __kvm_riscv_nacl_switch_to(struct kvm_vcpu_arch *vcpu_arch,
unsigned long sbi_ext_id,
unsigned long sbi_func_id);
int kvm_riscv_nacl_enable(void);
void kvm_riscv_nacl_disable(void);
void kvm_riscv_nacl_exit(void);
int kvm_riscv_nacl_init(void);
#ifdef CONFIG_32BIT
#define lelong_to_cpu(__x) le32_to_cpu(__x)
#define cpu_to_lelong(__x) cpu_to_le32(__x)
#else
#define lelong_to_cpu(__x) le64_to_cpu(__x)
#define cpu_to_lelong(__x) cpu_to_le64(__x)
#endif
#define nacl_shmem() \
this_cpu_ptr(&kvm_riscv_nacl)->shmem
#define nacl_scratch_read_long(__shmem, __offset) \
({ \
unsigned long *__p = (__shmem) + \
SBI_NACL_SHMEM_SCRATCH_OFFSET + \
(__offset); \
lelong_to_cpu(*__p); \
})
#define nacl_scratch_write_long(__shmem, __offset, __val) \
do { \
unsigned long *__p = (__shmem) + \
SBI_NACL_SHMEM_SCRATCH_OFFSET + \
(__offset); \
*__p = cpu_to_lelong(__val); \
} while (0)
#define nacl_scratch_write_longs(__shmem, __offset, __array, __count) \
do { \
unsigned int __i; \
unsigned long *__p = (__shmem) + \
SBI_NACL_SHMEM_SCRATCH_OFFSET + \
(__offset); \
for (__i = 0; __i < (__count); __i++) \
__p[__i] = cpu_to_lelong((__array)[__i]); \
} while (0)
#define nacl_sync_hfence(__e) \
sbi_ecall(SBI_EXT_NACL, SBI_EXT_NACL_SYNC_HFENCE, \
(__e), 0, 0, 0, 0, 0)
#define nacl_hfence_mkconfig(__type, __order, __vmid, __asid) \
({ \
unsigned long __c = SBI_NACL_SHMEM_HFENCE_CONFIG_PEND; \
__c |= ((__type) & SBI_NACL_SHMEM_HFENCE_CONFIG_TYPE_MASK) \
<< SBI_NACL_SHMEM_HFENCE_CONFIG_TYPE_SHIFT; \
__c |= (((__order) - SBI_NACL_SHMEM_HFENCE_ORDER_BASE) & \
SBI_NACL_SHMEM_HFENCE_CONFIG_ORDER_MASK) \
<< SBI_NACL_SHMEM_HFENCE_CONFIG_ORDER_SHIFT; \
__c |= ((__vmid) & SBI_NACL_SHMEM_HFENCE_CONFIG_VMID_MASK) \
<< SBI_NACL_SHMEM_HFENCE_CONFIG_VMID_SHIFT; \
__c |= ((__asid) & SBI_NACL_SHMEM_HFENCE_CONFIG_ASID_MASK); \
__c; \
})
#define nacl_hfence_mkpnum(__order, __addr) \
((__addr) >> (__order))
#define nacl_hfence_mkpcount(__order, __size) \
((__size) >> (__order))
#define nacl_hfence_gvma(__shmem, __gpa, __gpsz, __order) \
__kvm_riscv_nacl_hfence(__shmem, \
nacl_hfence_mkconfig(SBI_NACL_SHMEM_HFENCE_TYPE_GVMA, \
__order, 0, 0), \
nacl_hfence_mkpnum(__order, __gpa), \
nacl_hfence_mkpcount(__order, __gpsz))
#define nacl_hfence_gvma_all(__shmem) \
__kvm_riscv_nacl_hfence(__shmem, \
nacl_hfence_mkconfig(SBI_NACL_SHMEM_HFENCE_TYPE_GVMA_ALL, \
0, 0, 0), 0, 0)
#define nacl_hfence_gvma_vmid(__shmem, __vmid, __gpa, __gpsz, __order) \
__kvm_riscv_nacl_hfence(__shmem, \
nacl_hfence_mkconfig(SBI_NACL_SHMEM_HFENCE_TYPE_GVMA_VMID, \
__order, __vmid, 0), \
nacl_hfence_mkpnum(__order, __gpa), \
nacl_hfence_mkpcount(__order, __gpsz))
#define nacl_hfence_gvma_vmid_all(__shmem, __vmid) \
__kvm_riscv_nacl_hfence(__shmem, \
nacl_hfence_mkconfig(SBI_NACL_SHMEM_HFENCE_TYPE_GVMA_VMID_ALL, \
0, __vmid, 0), 0, 0)
#define nacl_hfence_vvma(__shmem, __vmid, __gva, __gvsz, __order) \
__kvm_riscv_nacl_hfence(__shmem, \
nacl_hfence_mkconfig(SBI_NACL_SHMEM_HFENCE_TYPE_VVMA, \
__order, __vmid, 0), \
nacl_hfence_mkpnum(__order, __gva), \
nacl_hfence_mkpcount(__order, __gvsz))
#define nacl_hfence_vvma_all(__shmem, __vmid) \
__kvm_riscv_nacl_hfence(__shmem, \
nacl_hfence_mkconfig(SBI_NACL_SHMEM_HFENCE_TYPE_VVMA_ALL, \
0, __vmid, 0), 0, 0)
#define nacl_hfence_vvma_asid(__shmem, __vmid, __asid, __gva, __gvsz, __order)\
__kvm_riscv_nacl_hfence(__shmem, \
nacl_hfence_mkconfig(SBI_NACL_SHMEM_HFENCE_TYPE_VVMA_ASID, \
__order, __vmid, __asid), \
nacl_hfence_mkpnum(__order, __gva), \
nacl_hfence_mkpcount(__order, __gvsz))
#define nacl_hfence_vvma_asid_all(__shmem, __vmid, __asid) \
__kvm_riscv_nacl_hfence(__shmem, \
nacl_hfence_mkconfig(SBI_NACL_SHMEM_HFENCE_TYPE_VVMA_ASID_ALL, \
0, __vmid, __asid), 0, 0)
#define nacl_csr_read(__shmem, __csr) \
({ \
unsigned long *__a = (__shmem) + SBI_NACL_SHMEM_CSR_OFFSET; \
lelong_to_cpu(__a[SBI_NACL_SHMEM_CSR_INDEX(__csr)]); \
})
#define nacl_csr_write(__shmem, __csr, __val) \
do { \
void *__s = (__shmem); \
unsigned int __i = SBI_NACL_SHMEM_CSR_INDEX(__csr); \
unsigned long *__a = (__s) + SBI_NACL_SHMEM_CSR_OFFSET; \
u8 *__b = (__s) + SBI_NACL_SHMEM_DBITMAP_OFFSET; \
__a[__i] = cpu_to_lelong(__val); \
__b[__i >> 3] |= 1U << (__i & 0x7); \
} while (0)
#define nacl_csr_swap(__shmem, __csr, __val) \
({ \
void *__s = (__shmem); \
unsigned int __i = SBI_NACL_SHMEM_CSR_INDEX(__csr); \
unsigned long *__a = (__s) + SBI_NACL_SHMEM_CSR_OFFSET; \
u8 *__b = (__s) + SBI_NACL_SHMEM_DBITMAP_OFFSET; \
unsigned long __r = lelong_to_cpu(__a[__i]); \
__a[__i] = cpu_to_lelong(__val); \
__b[__i >> 3] |= 1U << (__i & 0x7); \
__r; \
})
#define nacl_sync_csr(__csr) \
sbi_ecall(SBI_EXT_NACL, SBI_EXT_NACL_SYNC_CSR, \
(__csr), 0, 0, 0, 0, 0)
/*
* Each ncsr_xyz() macro defined below has it's own static-branch so every
* use of ncsr_xyz() macro emits a patchable direct jump. This means multiple
* back-to-back ncsr_xyz() macro usage will emit multiple patchable direct
* jumps which is sub-optimal.
*
* Based on the above, it is recommended to avoid multiple back-to-back
* ncsr_xyz() macro usage.
*/
#define ncsr_read(__csr) \
({ \
unsigned long __r; \
if (kvm_riscv_nacl_available()) \
__r = nacl_csr_read(nacl_shmem(), __csr); \
else \
__r = csr_read(__csr); \
__r; \
})
#define ncsr_write(__csr, __val) \
do { \
if (kvm_riscv_nacl_sync_csr_available()) \
nacl_csr_write(nacl_shmem(), __csr, __val); \
else \
csr_write(__csr, __val); \
} while (0)
#define ncsr_swap(__csr, __val) \
({ \
unsigned long __r; \
if (kvm_riscv_nacl_sync_csr_available()) \
__r = nacl_csr_swap(nacl_shmem(), __csr, __val); \
else \
__r = csr_swap(__csr, __val); \
__r; \
})
#define nsync_csr(__csr) \
do { \
if (kvm_riscv_nacl_sync_csr_available()) \
nacl_sync_csr(__csr); \
} while (0)
#endif
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| vdso | Folder | 0755 |
|
|
| vendor_extensions | Folder | 0755 |
|
|
| Kbuild | File | 453 B | 0644 |
|
| acenv.h | File | 243 B | 0644 |
|
| acpi.h | File | 2.49 KB | 0644 |
|
| alternative-macros.h | File | 5 KB | 0644 |
|
| alternative.h | File | 2.33 KB | 0644 |
|
| arch_hweight.h | File | 1.55 KB | 0644 |
|
| archrandom.h | File | 1.5 KB | 0644 |
|
| asm-extable.h | File | 2.27 KB | 0644 |
|
| asm-offsets.h | File | 35 B | 0644 |
|
| asm-prototypes.h | File | 2.09 KB | 0644 |
|
| asm.h | File | 4.01 KB | 0644 |
|
| assembler.h | File | 2.23 KB | 0644 |
|
| atomic.h | File | 10.25 KB | 0644 |
|
| barrier.h | File | 2.8 KB | 0644 |
|
| bitops.h | File | 9.8 KB | 0644 |
|
| bug.h | File | 2.13 KB | 0644 |
|
| bugs.h | File | 463 B | 0644 |
|
| cache.h | File | 897 B | 0644 |
|
| cacheflush.h | File | 2.67 KB | 0644 |
|
| cacheinfo.h | File | 511 B | 0644 |
|
| cfi.h | File | 810 B | 0644 |
|
| checksum.h | File | 2.48 KB | 0644 |
|
| clint.h | File | 797 B | 0644 |
|
| clocksource.h | File | 136 B | 0644 |
|
| cmpxchg.h | File | 11.44 KB | 0644 |
|
| compat.h | File | 4.05 KB | 0644 |
|
| cpu.h | File | 172 B | 0644 |
|
| cpu_ops.h | File | 971 B | 0644 |
|
| cpu_ops_sbi.h | File | 609 B | 0644 |
|
| cpufeature-macros.h | File | 1.67 KB | 0644 |
|
| cpufeature.h | File | 4.38 KB | 0644 |
|
| cpuidle.h | File | 450 B | 0644 |
|
| crash_reserve.h | File | 291 B | 0644 |
|
| csr.h | File | 16.32 KB | 0644 |
|
| current.h | File | 1001 B | 0644 |
|
| delay.h | File | 471 B | 0644 |
|
| dma-noncoherent.h | File | 835 B | 0644 |
|
| dmi.h | File | 640 B | 0644 |
|
| efi.h | File | 1.18 KB | 0644 |
|
| elf.h | File | 4.64 KB | 0644 |
|
| entry-common.h | File | 1.04 KB | 0644 |
|
| errata_list.h | File | 3.7 KB | 0644 |
|
| exec.h | File | 172 B | 0644 |
|
| extable.h | File | 1.46 KB | 0644 |
|
| fence.h | File | 564 B | 0644 |
|
| fixmap.h | File | 1.75 KB | 0644 |
|
| fpu.h | File | 291 B | 0644 |
|
| ftrace.h | File | 6.12 KB | 0644 |
|
| futex.h | File | 2.42 KB | 0644 |
|
| gdb_xml.h | File | 5.47 KB | 0644 |
|
| gpr-num.h | File | 2.37 KB | 0644 |
|
| hugetlb.h | File | 1.76 KB | 0644 |
|
| hwcap.h | File | 3.58 KB | 0644 |
|
| hwprobe.h | File | 913 B | 0644 |
|
| image.h | File | 1.63 KB | 0644 |
|
| insn-def.h | File | 5.72 KB | 0644 |
|
| insn.h | File | 15.29 KB | 0644 |
|
| io.h | File | 5.19 KB | 0644 |
|
| irq.h | File | 2.09 KB | 0644 |
|
| irq_stack.h | File | 843 B | 0644 |
|
| irq_work.h | File | 225 B | 0644 |
|
| irqflags.h | File | 1.12 KB | 0644 |
|
| jump_label.h | File | 1.6 KB | 0644 |
|
| kasan.h | File | 1.55 KB | 0644 |
|
| kdebug.h | File | 158 B | 0644 |
|
| kexec.h | File | 1.84 KB | 0644 |
|
| kfence.h | File | 674 B | 0644 |
|
| kgdb.h | File | 2.44 KB | 0644 |
|
| kprobes.h | File | 1.19 KB | 0644 |
|
| kvm_aia.h | File | 5.42 KB | 0644 |
|
| kvm_host.h | File | 11.56 KB | 0644 |
|
| kvm_nacl.h | File | 7.52 KB | 0644 |
|
| kvm_types.h | File | 184 B | 0644 |
|
| kvm_vcpu_fp.h | File | 1.69 KB | 0644 |
|
| kvm_vcpu_insn.h | File | 1.21 KB | 0644 |
|
| kvm_vcpu_pmu.h | File | 4.52 KB | 0644 |
|
| kvm_vcpu_sbi.h | File | 3.3 KB | 0644 |
|
| kvm_vcpu_timer.h | File | 1.56 KB | 0644 |
|
| kvm_vcpu_vector.h | File | 2.12 KB | 0644 |
|
| linkage.h | File | 267 B | 0644 |
|
| membarrier.h | File | 1.73 KB | 0644 |
|
| mmio.h | File | 5.17 KB | 0644 |
|
| mmiowb.h | File | 365 B | 0644 |
|
| mmu.h | File | 1.05 KB | 0644 |
|
| mmu_context.h | File | 1.2 KB | 0644 |
|
| module.h | File | 3.3 KB | 0644 |
|
| module.lds.h | File | 207 B | 0644 |
|
| numa.h | File | 165 B | 0644 |
|
| page.h | File | 5.95 KB | 0644 |
|
| paravirt.h | File | 610 B | 0644 |
|
| paravirt_api_clock.h | File | 26 B | 0644 |
|
| pci.h | File | 728 B | 0644 |
|
| perf_event.h | File | 575 B | 0644 |
|
| pgalloc.h | File | 3.83 KB | 0644 |
|
| pgtable-32.h | File | 1.07 KB | 0644 |
|
| pgtable-64.h | File | 9.69 KB | 0644 |
|
| pgtable-bits.h | File | 1.32 KB | 0644 |
|
| pgtable.h | File | 25.35 KB | 0644 |
|
| probes.h | File | 563 B | 0644 |
|
| processor.h | File | 6.31 KB | 0644 |
|
| ptrace.h | File | 4.3 KB | 0644 |
|
| sbi.h | File | 15.98 KB | 0644 |
|
| scs.h | File | 1.08 KB | 0644 |
|
| seccomp.h | File | 504 B | 0644 |
|
| sections.h | File | 883 B | 0644 |
|
| semihost.h | File | 596 B | 0644 |
|
| set_memory.h | File | 2.03 KB | 0644 |
|
| signal32.h | File | 358 B | 0644 |
|
| simd.h | File | 1.73 KB | 0644 |
|
| smp.h | File | 2.51 KB | 0644 |
|
| soc.h | File | 627 B | 0644 |
|
| sparsemem.h | File | 331 B | 0644 |
|
| spinlock.h | File | 1.27 KB | 0644 |
|
| stackprotector.h | File | 589 B | 0644 |
|
| stacktrace.h | File | 774 B | 0644 |
|
| string.h | File | 1.4 KB | 0644 |
|
| suspend.h | File | 1.81 KB | 0644 |
|
| switch_to.h | File | 3.32 KB | 0644 |
|
| sync_core.h | File | 689 B | 0644 |
|
| syscall.h | File | 2.48 KB | 0644 |
|
| syscall_table.h | File | 137 B | 0644 |
|
| syscall_wrapper.h | File | 3.96 KB | 0644 |
|
| text-patching.h | File | 449 B | 0644 |
|
| thread_info.h | File | 3.97 KB | 0644 |
|
| timex.h | File | 1.79 KB | 0644 |
|
| tlb.h | File | 582 B | 0644 |
|
| tlbbatch.h | File | 273 B | 0644 |
|
| tlbflush.h | File | 2.15 KB | 0644 |
|
| topology.h | File | 822 B | 0644 |
|
| trace.h | File | 1.03 KB | 0644 |
|
| uaccess.h | File | 10.62 KB | 0644 |
|
| unistd.h | File | 719 B | 0644 |
|
| uprobes.h | File | 1.04 KB | 0644 |
|
| vdso.h | File | 965 B | 0644 |
|
| vector.h | File | 11.37 KB | 0644 |
|
| vendor_extensions.h | File | 3.17 KB | 0644 |
|
| vendorid_list.h | File | 268 B | 0644 |
|
| vermagic.h | File | 213 B | 0644 |
|
| vmalloc.h | File | 574 B | 0644 |
|
| word-at-a-time.h | File | 1.72 KB | 0644 |
|
| xip_fixup.h | File | 1.45 KB | 0644 |
|
| xor.h | File | 1.65 KB | 0644 |
|