From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jacob Gorm Hansen Subject: Re: ATI fglrx OpenGL working in Xen! Date: Tue, 08 Feb 2005 00:13:25 -0800 Message-ID: <420874A5.2030001@diku.dk> References: <42082254.7070902@diku.dk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030906010009050706030607" In-Reply-To: <42082254.7070902@diku.dk> Sender: xen-devel-admin@lists.sourceforge.net Errors-To: xen-devel-admin@lists.sourceforge.net List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , List-Archive: To: xen-devel List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------030906010009050706030607 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Jacob Gorm Hansen wrote: > This is not a very clean or nice patch, but it does the job. Does anyone > know where to send fglrx-patches, once I have a nicer version? Here is a diff -Naur version, see attached. Jacob --------------030906010009050706030607 Content-Type: text/plain; name="fglrx.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fglrx.patch" diff -Naur old/agpgart_be.c new/agpgart_be.c --- old/agpgart_be.c 2005-02-07 23:32:27.881712680 -0800 +++ new/agpgart_be.c 2005-02-07 23:48:18.705165544 -0800 @@ -138,6 +138,7 @@ #include #include #include + #include #include "agp_backend.h" @@ -1050,7 +1051,7 @@ #ifndef AGPGART_2_2 struct page *page; #endif /* !AGPGART_2_2 */ -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) int err; #endif @@ -1159,18 +1160,18 @@ agp_bridge.gatt_table_real = (unsigned long *) table; CACHE_FLUSH(); -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) err = change_page_attr(virt_to_page(table), 1<real)->flags); CACHE_FLUSH(); -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) err = change_page_attr(virt_to_page(page_map->real), 1, PAGE_KERNEL_NOCACHE); if (!err) #endif { - page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real), + page_map->remapped = ioremap_nocache(virt_to_bus(page_map->real), PAGE_SIZE); } if ( (page_map->remapped == NULL) -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) || (err) #endif ) @@ -3235,7 +3236,7 @@ &mem_map[MAP_NR(page_map->real)].flags); #else /* !AGPGART_2_2 */ iounmap(page_map->remapped); -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) change_page_attr(virt_to_page(page_map->real), 1, PAGE_KERNEL); #endif clear_bit(PG_reserved, @@ -4404,7 +4405,7 @@ // 2.4.8-ac7 and 2.4.13 unsigned long page_addr; -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) page_addr = agp_generic_alloc_page(); if (page_addr == 0) return 0; @@ -4482,7 +4483,7 @@ static void ali_destroy_page(unsigned long addr) { void *pt = (void *) addr; -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) /* no more vars needed */ #else struct page *page; @@ -4503,7 +4504,7 @@ ALI_CACHE_FLUSH_EN)); } -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) agp_generic_destroy_page(addr); #else page = virt_to_page((unsigned long)pt); @@ -4597,7 +4598,7 @@ static int serverworks_create_page_map(serverworks_page_map *page_map) { int i; -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) int err; #endif @@ -4618,17 +4619,17 @@ set_bit(PG_reserved, &virt_to_page((unsigned long)page_map->real)->flags); CACHE_FLUSH(); -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) err = change_page_attr(virt_to_page(page_map->real), 1, PAGE_KERNEL_NOCACHE); if (!err) #endif { - page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real), + page_map->remapped = ioremap_nocache(virt_to_bus(page_map->real), PAGE_SIZE); } if ( (page_map->remapped == NULL) -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) || (err) #endif ) @@ -4655,7 +4656,7 @@ clear_bit(PG_reserved, &mem_map[MAP_NR(page_map->real)].flags); #else /* !AGPGART_2_2 */ -#if defined(CONFIG_X86) && (PAGE_ATTR_FIX != 0) +#if (defined(CONFIG_X86) || defined(CONFIG_XEN)) && (PAGE_ATTR_FIX != 0) change_page_attr(virt_to_page(page_map->real),1,PAGE_KERNEL); #endif iounmap(page_map->remapped); diff -Naur old/firegl_public.c new/firegl_public.c --- old/firegl_public.c 2005-02-07 23:32:37.832199976 -0800 +++ new/firegl_public.c 2005-02-07 23:49:50.919146888 -0800 @@ -32,13 +32,14 @@ // ============================================================ #include #include +#include #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,71) #define EXPORT_SYMTAB 1 #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,71) -#if !defined(CONFIG_X86_PC) +#if !defined(CONFIG_X86) #if !defined(CONFIG_X86_64) #if !defined(CONFIG_X86_VOYAGER) #if !defined(CONFIG_X86_NUMAQ) @@ -46,6 +47,7 @@ #if !defined(CONFIG_X86_BIGSMP) #if !defined(CONFIG_X86_VISWS) #if !defined(CONFIG_X86_GENERICARCH) +#if !defined(CONFIG_XEN) #error unknown or undefined architecture configured #endif #endif @@ -55,6 +57,7 @@ #endif #endif #endif +#endif #endif /* LINUX_VERSION_CODE */ // ============================================================ @@ -2554,8 +2557,9 @@ enum __ke_vm_maptype type, int readonly) { + unsigned int pages; - __KE_DEBUG3("start=0x%08lx, " + __KE_DEBUG("start=0x%08lx, " "end=0x%08lx, " "offset=0x%08lx\n", vma->vm_start, @@ -2586,13 +2590,13 @@ #endif /* __ia64__ */ vma->vm_flags |= VM_IO; /* not in core dump */ } - if (remap_page_range(FGL_VMA_API_PASS + if (io_remap_page_range(vma, vma->vm_start, __ke_vm_offset(vma), vma->vm_end - vma->vm_start, vma->vm_page_prot)) { - __KE_DEBUG("remap_page_range failed\n"); + __KE_DEBUG("io_remap_page_range failed\n"); return -EAGAIN; } vma->vm_flags |= VM_SHM | VM_RESERVED; /* Don't swap */ @@ -2653,13 +2657,13 @@ { if (__ke_vm_offset(vma) >= __pa(high_memory)) vma->vm_flags |= VM_IO; /* not in core dump */ - if (remap_page_range(FGL_VMA_API_PASS + if (io_remap_page_range(vma, vma->vm_start, __ke_vm_offset(vma), vma->vm_end - vma->vm_start, vma->vm_page_prot)) { - __KE_DEBUG("remap_page_range failed\n"); + __KE_DEBUG("io_remap_page_range failed\n"); return -EAGAIN; } #ifdef __x86_64__ @@ -2690,13 +2694,13 @@ { if (__ke_vm_offset(vma) >= __pa(high_memory)) vma->vm_flags |= VM_IO; /* not in core dump */ - if (remap_page_range(FGL_VMA_API_PASS + if (io_remap_page_range(vma, vma->vm_start, __ke_vm_offset(vma), vma->vm_end - vma->vm_start, vma->vm_page_prot)) { - __KE_DEBUG("remap_page_range failed\n"); + __KE_DEBUG("io_remap_page_range failed\n"); return -EAGAIN; } #ifdef __x86_64__ --------------030906010009050706030607-- ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click