⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xenpage.h

📁 xen虚拟机源代码安装包
💻 H
字号:
#ifndef _ASM_IA64_XENPAGE_H#define _ASM_IA64_XENPAGE_H#ifndef __ASSEMBLY__#undef mfn_valid#undef page_to_mfn#undef mfn_to_page#ifdef CONFIG_VIRTUAL_FRAME_TABLE#undef ia64_mfn_validextern int ia64_mfn_valid (unsigned long pfn);# define mfn_valid(_pfn)	(((_pfn) < max_page) && ia64_mfn_valid(_pfn))#else# define mfn_valid(_pfn)	((_pfn) < max_page)#endif# define page_to_mfn(_page)	((unsigned long) ((_page) - frame_table))# define mfn_to_page(_pfn)	(frame_table + (_pfn))#include <asm/xensystem.h>static inline unsigned long __virt_to_maddr(unsigned long va){	if (va - KERNEL_START < xenheap_size)		return xen_pstart + (va - KERNEL_START);	else		return (va & ((1UL << 60) - 1));}#define virt_to_maddr(va)	(__virt_to_maddr((unsigned long)va))#undef page_to_maddr#undef virt_to_page#define page_to_maddr(page)	(page_to_mfn(page) << PAGE_SHIFT)#define virt_to_page(kaddr)	(mfn_to_page(virt_to_maddr(kaddr) >> PAGE_SHIFT))#define page_to_virt(_page)	maddr_to_virt(page_to_maddr(_page))#define maddr_to_page(kaddr)	mfn_to_page(((kaddr) >> PAGE_SHIFT))/* Convert between Xen-heap virtual addresses and machine frame numbers. */#define virt_to_mfn(va)		(virt_to_maddr(va) >> PAGE_SHIFT)#define mfn_to_virt(mfn)	maddr_to_virt(mfn << PAGE_SHIFT)/* Convert between frame number and address formats.  */#define pfn_to_paddr(pfn)	((paddr_t)(pfn) << PAGE_SHIFT)#define paddr_to_pfn(pa)	((unsigned long)((pa) >> PAGE_SHIFT))typedef union xen_va {	struct {		unsigned long off : 60;		unsigned long reg : 4;	} f;	unsigned long l;	void *p;} xen_va;static inline int get_order_from_bytes(paddr_t size){    int order;    size = (size-1) >> PAGE_SHIFT;    for ( order = 0; size; order++ )        size >>= 1;    return order;}static inline int get_order_from_pages(unsigned long nr_pages){    int order;    nr_pages--;    for ( order = 0; nr_pages; order++ )        nr_pages >>= 1;    return order;}static inline int get_order_from_shift(unsigned long shift){    if (shift <= PAGE_SHIFT)	return 0;    else	return shift - PAGE_SHIFT;}/* from identity va to xen va */#define virt_to_xenva(va)	((unsigned long)va - PAGE_OFFSET - \				 xen_pstart + KERNEL_START)/* Clear bit 63 (UC bit in physical addresses).  */static inline u64 pa_clear_uc(u64 paddr){    return (paddr << 1) >> 1;}#undef __pa#undef __va#define __pa(x)		(virt_to_maddr(x))#define __va(x)		({xen_va _v; _v.l = (long) (x); _v.f.reg = -1; _v.p;})/* It is sometimes very useful to have unsigned long as result.  */#define __va_ul(x)	({xen_va _v; _v.l = (long) (x); _v.f.reg = -1; _v.l;})#define __va_efi(x)	((void*)((unsigned long)(x) | __IA64_EFI_CACHED_OFFSET))#endif#endif /* _ASM_IA64_XENPAGE_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -