linux-headers/arch/e2k/include/asm/paravirt/v2p.h

130 lines
2.8 KiB
C

/*
*
* Heading of boot-time initialization.
*
* Copyright (C) 2011 Salavat Guiliazov <atic@mcst.ru>
*/
#ifndef _E2K_ASM_PARAVIRT_V2P_H
#define _E2K_ASM_PARAVIRT_V2P_H
#include <linux/types.h>
#include <asm/p2v/boot_v2p.h>
#ifndef __ASSEMBLY__
/*
* boot-time virtual to physical conversions hooks.
*/
typedef struct pv_v2p_ops {
void *(*boot_kernel_va_to_pa)(void *virt_pnt,
unsigned long kernel_base);
void *(*boot_func_to_pa)(void *virt_pnt);
e2k_addr_t (*boot_vpa_to_pa)(e2k_addr_t vpa);
e2k_addr_t (*boot_pa_to_vpa)(e2k_addr_t pa);
e2k_addr_t (*vpa_to_pa)(e2k_addr_t vpa);
e2k_addr_t (*pa_to_vpa)(e2k_addr_t pa);
} pv_v2p_ops_t;
extern pv_v2p_ops_t pv_v2p_ops;
extern pv_v2p_ops_t *cur_pv_v2p_ops; /* pointer to boot-time tables of OPs */
#define BOOT_PARAVIRT_GET_BOOT_OPS_FUNC(boot_ops, func_name) \
({ \
typeof(boot_ops) ops = boot_native_get_vo_value(boot_ops); \
typeof(boot_ops->func_name) func; \
func = boot_native_vp_to_pp(ops)->func_name; \
func; \
})
#define BOOT_PARAVIRT_GET_V2P_FUNC(func_name) \
BOOT_PARAVIRT_GET_BOOT_OPS_FUNC(cur_pv_v2p_ops, func_name)
static inline void *
boot_pv_kernel_va_to_pa(void *virt_pnt, unsigned long kernel_base)
{
return BOOT_PARAVIRT_GET_V2P_FUNC(boot_kernel_va_to_pa)
(virt_pnt, kernel_base);
}
static inline void *
boot_pv_func_to_pa(void *virt_pnt)
{
return BOOT_PARAVIRT_GET_V2P_FUNC(boot_func_to_pa)(virt_pnt);
}
static inline e2k_addr_t
boot_pv_vpa_to_pa(e2k_addr_t vpa)
{
return BOOT_PARAVIRT_GET_V2P_FUNC(boot_vpa_to_pa)(vpa);
}
static inline e2k_addr_t
boot_pv_pa_to_vpa(e2k_addr_t pa)
{
return BOOT_PARAVIRT_GET_V2P_FUNC(boot_pa_to_vpa)(pa);
}
static inline void *
boot_pv_va_to_pa(void *virt_pnt)
{
return boot_pv_kernel_va_to_pa(virt_pnt, -1);
}
static inline e2k_addr_t
pv_vpa_to_pa(e2k_addr_t vpa)
{
return pv_v2p_ops.vpa_to_pa(vpa);
}
static inline e2k_addr_t
pv_pa_to_vpa(e2k_addr_t pa)
{
return pv_v2p_ops.pa_to_vpa(pa);
}
#ifdef CONFIG_PARAVIRT_GUEST
/* it is paravirtualized host and guest kernel */
static inline void *
boot_kernel_va_to_pa(void *virt_pnt, unsigned long kernel_base)
{
return boot_pv_kernel_va_to_pa(virt_pnt, kernel_base);
}
static inline void *
boot_func_to_pa(void *virt_pnt)
{
return boot_pv_func_to_pa(virt_pnt);
}
static inline void *
boot_va_to_pa(void *virt_pnt)
{
return boot_pv_va_to_pa(virt_pnt);
}
static inline e2k_addr_t
boot_vpa_to_pa(e2k_addr_t vpa)
{
return boot_pv_vpa_to_pa(vpa);
}
static inline e2k_addr_t
boot_pa_to_vpa(e2k_addr_t pa)
{
return boot_pv_pa_to_vpa(pa);
}
static inline e2k_addr_t
vpa_to_pa(e2k_addr_t vpa)
{
return pv_vpa_to_pa(vpa);
}
static inline e2k_addr_t
pa_to_vpa(e2k_addr_t pa)
{
return pv_pa_to_vpa(pa);
}
#endif /* CONFIG_PARAVIRT_GUEST */
#endif /* __ASSEMBLY__ */
#endif /* ! _E2K_ASM_PARAVIRT_V2P_H */