Initial revision
[linux-2.6.git] / include / asm-ia64 / maddr.h
1 #ifndef _ASM_IA64_MADDR_H
2 #define _ASM_IA64_MADDR_H
3
4 #include <linux/kernel.h>
5 #include <asm/hypervisor.h>
6 #include <xen/features.h>
7 #include <xen/interface/xen.h>
8
9 #ifdef CONFIG_XEN
10
11 #define INVALID_P2M_ENTRY       (~0UL)
12
13 /* XXX xen page size != page size */
14 static inline unsigned long
15 pfn_to_mfn_for_dma(unsigned long pfn)
16 {
17         unsigned long mfn;
18         mfn = HYPERVISOR_phystomach(pfn);
19         BUG_ON(mfn == 0); // XXX
20         BUG_ON(mfn == INVALID_P2M_ENTRY); // XXX
21         BUG_ON(mfn == INVALID_MFN);
22         return mfn;
23 }
24
25 static inline unsigned long
26 phys_to_machine_for_dma(unsigned long phys)
27 {
28         unsigned long machine =
29                       pfn_to_mfn_for_dma(phys >> PAGE_SHIFT) << PAGE_SHIFT;
30         machine |= (phys & ~PAGE_MASK);
31         return machine;
32 }
33
34 static inline unsigned long
35 mfn_to_pfn_for_dma(unsigned long mfn)
36 {
37         unsigned long pfn;
38         pfn = HYPERVISOR_machtophys(mfn);
39         BUG_ON(pfn == 0);
40         //BUG_ON(pfn == INVALID_M2P_ENTRY);
41         return pfn;
42 }
43
44 static inline unsigned long
45 machine_to_phys_for_dma(unsigned long machine)
46 {
47         unsigned long phys =
48                       mfn_to_pfn_for_dma(machine >> PAGE_SHIFT) << PAGE_SHIFT;
49         phys |= (machine & ~PAGE_MASK);
50         return phys;
51 }
52
53 static inline unsigned long
54 mfn_to_local_pfn(unsigned long mfn)
55 {
56         extern unsigned long max_mapnr;
57         unsigned long pfn = mfn_to_pfn_for_dma(mfn);
58         if (!pfn_valid(pfn))
59                 return INVALID_P2M_ENTRY;
60         return pfn;
61 }
62
63 #else /* !CONFIG_XEN */
64
65 #define pfn_to_mfn_for_dma(pfn) (pfn)
66 #define mfn_to_pfn_for_dma(mfn) (mfn)
67 #define phys_to_machine_for_dma(phys) (phys)
68 #define machine_to_phys_for_dma(machine) (machine)
69 #define mfn_to_local_pfn(mfn) (mfn)
70
71 #endif /* !CONFIG_XEN */
72
73 /* XXX to compile set_phys_to_machine(vaddr, FOREIGN_FRAME(m)) */
74 #define FOREIGN_FRAME(m)        (INVALID_P2M_ENTRY)
75
76 #define mfn_to_pfn(mfn) (mfn)
77 #define pfn_to_mfn(pfn) (pfn)
78
79 #define mfn_to_virt(mfn) (__va((mfn) << PAGE_SHIFT))
80 #define virt_to_mfn(virt) (__pa(virt) >> PAGE_SHIFT)
81 #define virt_to_machine(virt) __pa(virt) // for tpmfront.c
82
83 #define set_phys_to_machine(pfn, mfn) do { } while (0)
84 #ifdef CONFIG_VMX_GUEST
85 extern void xen_machphys_update(unsigned long mfn, unsigned long pfn);
86 #else /* CONFIG_VMX_GUEST */
87 #define xen_machphys_update(mfn, pfn) do { } while (0)
88 #endif /* CONFIG_VMX_GUEST */
89
90 typedef unsigned long maddr_t;  // to compile netback, netfront
91
92 #endif /* _ASM_IA64_MADDR_H */