X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-ia64%2Fagp.h;h=e0bf8a4ab1a05c8dcaa836c2c41aabe543a559eb;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=4e517f0e6afa34e81e9aecdeee51bf0eaec2b967;hpb=76828883507a47dae78837ab5dec5a5b4513c667;p=linux-2.6.git diff --git a/include/asm-ia64/agp.h b/include/asm-ia64/agp.h index 4e517f0e6..e0bf8a4ab 100644 --- a/include/asm-ia64/agp.h +++ b/include/asm-ia64/agp.h @@ -19,13 +19,44 @@ #define flush_agp_cache() mb() /* Convert a physical address to an address suitable for the GART. */ +#ifndef CONFIG_XEN #define phys_to_gart(x) (x) #define gart_to_phys(x) (x) +#else +#define phys_to_gart(x) phys_to_machine_for_dma(x) +#define gart_to_phys(x) machine_to_phys_for_dma(x) +#endif /* GATT allocation. Returns/accepts GATT kernel virtual address. */ +#ifndef CONFIG_XEN #define alloc_gatt_pages(order) \ ((char *)__get_free_pages(GFP_KERNEL, (order))) #define free_gatt_pages(table, order) \ free_pages((unsigned long)(table), (order)) +#else +#include +static inline char* +alloc_gatt_pages(unsigned int order) +{ + unsigned long error; + unsigned long ret = __get_free_pages(GFP_KERNEL, (order)); + if (ret == 0) { + goto out; + } + error = xen_create_contiguous_region(ret, order, 0); + if (error) { + free_pages(ret, order); + ret = 0; + } +out: + return (char*)ret; +} +static inline void +free_gatt_pages(void* table, unsigned int order) +{ + xen_destroy_contiguous_region((unsigned long)table, order); + free_pages((unsigned long)table, order); +} +#endif /* CONFIG_XEN */ #endif /* _ASM_IA64_AGP_H */