Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /* Simple wrappers around HVM functions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #ifndef XEN_HVM_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) #define XEN_HVM_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) #include <xen/interface/hvm/params.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) #include <asm/xen/hypercall.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) static const char *param_name(int op)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define PARAM(x) [HVM_PARAM_##x] = #x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 	static const char *const names[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 		PARAM(CALLBACK_IRQ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 		PARAM(STORE_PFN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 		PARAM(STORE_EVTCHN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 		PARAM(PAE_ENABLED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 		PARAM(IOREQ_PFN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 		PARAM(BUFIOREQ_PFN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 		PARAM(TIMER_MODE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 		PARAM(HPET_ENABLED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 		PARAM(IDENT_PT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 		PARAM(DM_DOMAIN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 		PARAM(ACPI_S_STATE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 		PARAM(VM86_TSS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 		PARAM(VPT_ALIGN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 		PARAM(CONSOLE_PFN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 		PARAM(CONSOLE_EVTCHN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #undef PARAM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	if (op >= ARRAY_SIZE(names))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 		return "unknown";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	if (!names[op])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 		return "reserved";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	return names[op];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) static inline int hvm_get_parameter(int idx, uint64_t *value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	struct xen_hvm_param xhv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	int r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	xhv.domid = DOMID_SELF;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	xhv.index = idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	if (r < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 		pr_err("Cannot get hvm parameter %s (%d): %d!\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 		       param_name(idx), idx, r);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 		return r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	*value = xhv.value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	return r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define HVM_CALLBACK_VIA_TYPE_VECTOR 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define HVM_CALLBACK_VIA_TYPE_SHIFT 56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define HVM_CALLBACK_VECTOR(x) (((uint64_t)HVM_CALLBACK_VIA_TYPE_VECTOR)<<\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 		HVM_CALLBACK_VIA_TYPE_SHIFT | (x))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) void xen_setup_callback_vector(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #endif /* XEN_HVM_H__ */