diff -ruN dripkg/agpgart/agpgart_fe.c mydripkg/agpgart/agpgart_fe.c --- dripkg/agpgart/agpgart_fe.c 2004-12-17 19:10:39.000000000 +0100 +++ mydripkg/agpgart/agpgart_fe.c 2005-03-23 12:28:59.000000000 +0100 @@ -52,10 +52,10 @@ #if defined(REMAP_PAGE_RANGE_5_ARGS) #define RemapPageRange(vma,from,to,size,prot) \ - remap_page_range(vma,from,to,size,prot) + remap_pfn_range(vma,from,to >> PAGE_SHIFT,size,prot) #else #define RemapPageRange(vma,from,to,size,prot) \ - remap_page_range(from,to,size,prot) + remap_pfn_range(vma,from,to >> PAGE_SHIFT ,size,prot) #endif #ifndef minor #define minor(x) MINOR(x) diff -ruN dripkg/agpgart-2.0/backend.c mydripkg/agpgart-2.0/backend.c --- dripkg/agpgart-2.0/backend.c 2004-12-17 19:10:39.000000000 +0100 +++ mydripkg/agpgart-2.0/backend.c 2005-03-23 12:32:49.000000000 +0100 @@ -25,7 +25,14 @@ * * TODO: * - Allocate more than order 0 pages to avoid too much linear map splitting. + * + * Patched by POSEIDON Team. + * Swiss Federal Institut of Technology + * HTTP://poseidon.epfl.ch + * + * */ + #include #include #include @@ -38,6 +45,17 @@ #include #include "agp.h" +typedef struct { + void (*free_memory)(struct agp_memory *); + struct agp_memory * (*allocate_memory)(size_t, u32); + int (*bind_memory)(struct agp_memory *, off_t); + int (*unbind_memory)(struct agp_memory *); + void (*enable)(u32); + int (*acquire)(void); + void (*release)(void); + int (*copy_info)(struct agp_kern_info *); +} drm_agp_t; + /* Due to XFree86 brain-damage, we can't go to 1.0 until they * fix some real stupidity. It's only by chance we can bump * past 0.99 at all due to some boolean logic error. */ diff -ruN dripkg/agpgart-2.0/frontend.c mydripkg/agpgart-2.0/frontend.c --- dripkg/agpgart-2.0/frontend.c 2004-12-17 19:10:39.000000000 +0100 +++ mydripkg/agpgart-2.0/frontend.c 2005-03-22 09:43:10.000000000 +0100 @@ -627,8 +627,8 @@ DBG("client vm_ops=%p", kerninfo.vm_ops); if (kerninfo.vm_ops) { vma->vm_ops = kerninfo.vm_ops; - } else if (remap_page_range(vma, vma->vm_start, - (kerninfo.aper_base + offset), + } else if (remap_pfn_range(vma, vma->vm_start, + (kerninfo.aper_base + offset) >> PAGE_SHIFT, size, vma->vm_page_prot)) { goto out_again; } @@ -643,8 +643,8 @@ DBG("controller vm_ops=%p", kerninfo.vm_ops); if (kerninfo.vm_ops) { vma->vm_ops = kerninfo.vm_ops; - } else if (remap_page_range(vma, vma->vm_start, - kerninfo.aper_base, + } else if (remap_pfn_range(vma, vma->vm_start, + kerninfo.aper_base >> PAGE_SHIFT, size, vma->vm_page_prot)) { goto out_again; } diff -ruN dripkg/agpgart-2.0/generic.c mydripkg/agpgart-2.0/generic.c --- dripkg/agpgart-2.0/generic.c 2004-12-17 19:10:39.000000000 +0100 +++ mydripkg/agpgart-2.0/generic.c 2005-03-22 10:01:57.000000000 +0100 @@ -46,6 +46,25 @@ */ EXPORT_SYMBOL_GPL(agp_memory_reserved); +#if defined(CONFIG_X86) +int map_page_into_agp(struct page *page) +{ + int i; + i = change_page_attr(page, 1, PAGE_KERNEL_NOCACHE); + global_flush_tlb(); + return i; +} +EXPORT_SYMBOL_GPL(map_page_into_agp); + +int unmap_page_from_agp(struct page *page) +{ + int i; + i = change_page_attr(page, 1, PAGE_KERNEL); + global_flush_tlb(); + return i; +} +EXPORT_SYMBOL_GPL(unmap_page_from_agp); +#endif /* * Generic routines for handling agp_memory structures - * They use the basic page allocation routines to do the brunt of the work. diff -ruN dripkg/agpgart-2.0/intel-agp.c mydripkg/agpgart-2.0/intel-agp.c --- dripkg/agpgart-2.0/intel-agp.c 2004-12-17 19:10:39.000000000 +0100 +++ mydripkg/agpgart-2.0/intel-agp.c 2005-03-21 15:57:44.000000000 +0100 @@ -1739,17 +1739,15 @@ * doing the i810 host bridge. */ /* save host bridge pci state */ - pci_save_state(pdev, intel_i830_private.pm_state); + pci_save_state(pdev); /* now save integrated graphics pci state, if we have one (i830) */ if (intel_i830_private.i830_dev) - pci_save_state(intel_i830_private.i830_dev, - intel_i830_private.pm_ig_state); + pci_save_state(intel_i830_private.i830_dev); /* now save integrated graphics pci state, if we have one (i810) */ if (intel_i810_private.i810_dev) - pci_save_state(intel_i810_private.i810_dev, - intel_i810_private.pm_ig_state); + pci_save_state(intel_i810_private.i810_dev); return 0; } @@ -1762,17 +1760,15 @@ * doing the i810 host bridge. */ /* restore host bridge pci state */ - pci_restore_state(pdev, intel_i830_private.pm_state); + pci_restore_state(pdev); /* now restore integrated graphics pci state, if we have one (i830) */ if (intel_i830_private.i830_dev) - pci_restore_state(intel_i830_private.i830_dev, - intel_i830_private.pm_ig_state); + pci_restore_state(intel_i830_private.i830_dev); /* now restore integrated graphics pci state, if we have one (i810) */ if (intel_i810_private.i810_dev) - pci_restore_state(intel_i810_private.i810_dev, - intel_i810_private.pm_ig_state); + pci_restore_state(intel_i810_private.i810_dev); if (bridge->driver == &intel_generic_driver) intel_configure(); diff -ruN dripkg/drm/drm_agpsupport.h mydripkg/drm/drm_agpsupport.h --- dripkg/drm/drm_agpsupport.h 2004-12-17 19:10:39.000000000 +0100 +++ mydripkg/drm/drm_agpsupport.h 2005-03-22 09:28:54.000000000 +0100 @@ -31,6 +31,18 @@ * OTHER DEALINGS IN THE SOFTWARE. */ +typedef struct { + void (*free_memory)(struct agp_memory *); + struct agp_memory * (*allocate_memory)(size_t, u32); + int (*bind_memory)(struct agp_memory *, off_t); + int (*unbind_memory)(struct agp_memory *); + void (*enable)(u32); + int (*acquire)(void); + void (*release)(void); + int (*copy_info)(struct agp_kern_info *); +} drm_agp_t; + + #define __NO_VERSION__ #include "drmP.h" #include diff -ruN dripkg/drm/drm_vm.h mydripkg/drm/drm_vm.h --- dripkg/drm/drm_vm.h 2004-12-17 19:10:39.000000000 +0100 +++ mydripkg/drm/drm_vm.h 2005-03-23 20:38:56.000000000 +0100 @@ -620,8 +620,8 @@ vma->vm_end - vma->vm_start, vma->vm_page_prot, 0)) #else - if (remap_page_range(DRM_RPR_ARG(vma) vma->vm_start, - VM_OFFSET(vma) + offset, + if (remap_pfn_range(vma,DRM_RPR_ARG(vma) vma->vm_start, + (VM_OFFSET(vma) + offset) >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot)) #endif