Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
2.6.26 + fglrx
View unanswered posts
View posts from last 24 hours

Goto page Previous  1, 2  
Reply to topic    Gentoo Forums Forum Index Unsupported Software
View previous topic :: View next topic  
Author Message
Phlogiston
Veteran
Veteran


Joined: 27 Jan 2004
Posts: 1925
Location: Europe, Swizerland

PostPosted: Mon Jul 21, 2008 4:05 pm    Post subject: Reply with quote

ati-drivers-8.512.ebuild
Code:

# Copyright 1999-2008 Gentoo Foundation                                                                   
# Distributed under the terms of the GNU General Public License v2                                       
# $Header: /var/cvsroot/gentoo-x86/x11-drivers/ati-drivers/ati-drivers-8.512.ebuild,v 1.3 2008/07/09 22:33:19 opfer Exp $

IUSE="acpi debug"

inherit eutils multilib linux-mod toolchain-funcs versionator

DESCRIPTION="Ati precompiled drivers for recent chipsets"
HOMEPAGE="http://www.ati.com"                           
ATI_URL="https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/"
SRC_URI="${ATI_URL}/ati-driver-installer-8-7-x86.x86_64.run"               

LICENSE="AMD GPL-2 QPL-1.0 as-is"
KEYWORDS="~amd64 x86"           

# The portage dep is for COLON_SEPARATED support in env-update.
# The eselect dep (>=1.0.9) is for COLON_SEPARATED in eselect env update.
RDEPEND="x11-base/xorg-server                                           
   !x11-apps/ati-drivers-extra                                           
   >=app-admin/eselect-1.0.9                                             
   app-admin/eselect-opengl                                             
   amd64? ( app-emulation/emul-linux-x86-xlibs )                         
   acpi? (                                                               
      x11-apps/xauth                                                     
      sys-power/acpid                                                   
   )                                                                     
   x11-libs/libXrandr                                                   
   >=sys-apps/portage-2.1.1-r1"                                         

DEPEND="${RDEPEND}
   x11-proto/xf86miscproto
   x11-proto/xf86vidmodeproto
   x11-proto/inputproto"     

EMULTILIB_PKG="true"

QA_EXECSTACK_x86="usr/lib/dri/fglrx_dri.so
   usr/lib/opengl/ati/lib/libGL.so.1.2   
   opt/bin/amdcccle"                     
QA_EXECSTACK_amd64="usr/lib64/dri/fglrx_dri.so
   usr/lib32/dri/fglrx_dri.so                 
   usr/lib64/opengl/ati/lib/libGL.so.1.2     
   usr/lib32/opengl/ati/lib/libGL.so.1.2     
   opt/bin/amdcccle"                         
QA_TEXTRELS_x86="usr/lib/dri/fglrx_dri.so     
   usr/lib/xorg/modules/drivers/fglrx_drv.so 
   usr/lib/opengl/ati/lib/libGL.so.1.2       
   usr/lib/xorg/modules/glesx.so             
   usr/lib/xorg/modules/amdxmm.so"           
QA_TEXTRELS_amd64="                           
   usr/lib64/opengl/ati/lib/libGL.so.1.2     
   usr/lib32/opengl/ati/lib/libGL.so.1.2     
   usr/lib64/dri/fglrx_dri.so                 
   usr/lib32/dri/fglrx_dri.so                 
   usr/lib32/xorg/modules/glesx.so           
   usr/lib64/xorg/modules/glesx.so"           

S="${WORKDIR}"

pkg_setup() {

   # Define module dir.
   MODULE_DIR="${S}/common/lib/modules/fglrx/build_mod"

   #check kernel and sets up KV_OBJ
   MODULE_NAMES="fglrx(video:${S}/common/lib/modules/fglrx/build_mod/2.6.x)"
   BUILD_TARGETS="kmod_build"                                               
   linux-mod_pkg_setup                                                     
   BUILD_PARAMS="GCC_VER_MAJ=$(gcc-major-version) KVER=${KV_FULL} KDIR=${KV_DIR}"

   if ! kernel_is 2 6; then
      eerror "Need a 2.6 kernel to compile against!"
      die "Need a 2.6 kernel to compile against!"   
   fi                                               

   if kernel_is ge 2 6 25 && linux_chkconfig_present PREEMPT_RCU; then
      die "${P} is not compatible RCU Preemption, please disable it" 
   fi                                                                 

   if kernel_is ge 2 6 24 && ! linux_chkconfig_present PCI_LEGACY; then
      eerror "${P} requires support for pci_find_slot."               
      die "${P} requires support for pci_find_slot."                   
   fi                                                                 

   if ! linux_chkconfig_present MTRR; then
      ewarn "You don't have MTRR support enabled, the direct rendering will not work."
   fi                                                                                 

   if linux_chkconfig_builtin DRM; then
      ewarn "You have DRM support enabled builtin, the direct rendering will not work."
   fi                                                                                 

   if ! linux_chkconfig_present AGP && \
      ! linux_chkconfig_present PCIEPORTBUS; then
      ewarn "You need AGP and/or PCI Express support for direct rendering to work."
   fi                                                                             

   if linux_chkconfig_present PARAVIRT; then
      eerror "The current ati-drivers don't compile when having"
      eerror "paravirtualization active due to GPL symbol export"
      eerror "restrictions."                                     
      eerror "Please disable it:"                               
      eerror "   CONFIG_PARAVIRT=n"                             
      eerror "in /usr/src/linux/.config or"                     
      eerror "   Processor type and features -->"               
      eerror "      [ ] Paravirtualization support (EXPERIMENTAL)"
      eerror "in 'menuconfig'"                                   
      die "CONFIG_PARAVIRT enabled"                               
   fi                                                             

   # Only support xorg-server >=1.1
   BASE_DIR="${S}/x710"           

   # This is used like $(get_libdir) for paths in ati's package.
   if use amd64 ; then                                         
      BASE_DIR="${BASE_DIR}_64a"                               
      PKG_LIBDIR=lib64                                         
      ARCH_DIR="${S}/arch/x86_64"                               
   else                                                         
      PKG_LIBDIR=lib                                           
      ARCH_DIR="${S}/arch/x86"                                 
   fi                                                           
}                                                               

src_unpack() {
   #Switching to a standard way to extract the files since otherwise no signature file
   #would be created                                                                 
   local src="${DISTDIR}/${A}"                                                       
   sh "${src}" --extract "${S}"  2&>1 /dev/null                                       

   # These are the userspace utilities that we also have source for.
   # We rebuild these later.                                       
   rm \                                                             
      "${ARCH_DIR}"/usr/X11R6/bin/{fgl_glxgears,fglrx_xgamma} \     
      "${ARCH_DIR}"/usr/X11R6/${PKG_LIBDIR}/libfglrx_gamma* \       
      || die "bin rm failed"                                       

   #if the kernel >= 2.6.25
   if kernel_is ge 2 6 25; then
      cd "${MODULE_DIR}"       
      epatch "${FILESDIR}"/fglrx-8.7-2.6.26.patch
      cd "$S"                                     
   fi                                             

   if use debug; then
      # Enable debug mode in the Source Code.
      sed -i '/^#define DRM_DEBUG_CODE/s/0/1/' \
         "${MODULE_DIR}/firegl_public.c" \     
         || die "Failed to enable debug output."
   fi                                           

   if use acpi; then
      sed -i \     
         -e "s:/var/lib/xdm/authdir/authfiles/:/var/run/xauth/:" \
         -e "s:/var/lib/gdm/:/var/gdm/:" \                       
         "${S}/common/etc/ati/authatieventsd.sh" \               
         || die "sed failed."                                     

      # Since "who" is in coreutils, we're using that one instead of "finger".
      sed -i -e 's:finger:who:' \                                             
         "${S}/common/usr/share/doc/fglrx/examples/etc/acpi/ati-powermode.sh" \
         || die "Replacing 'finger' with 'who' failed."                       
      # Adjust paths in the script from /usr/X11R6/bin/ to /opt/bin/ and       
      # add funktion to detect default state.                                 
      epatch "${FILESDIR}"/8.476/ati-powermode-opt-path-2.patch               
   fi                                                                         

   pushd ${MODULE_DIR} >/dev/null
   ln -s "${ARCH_DIR}"/lib/modules/fglrx/build_mod/libfglrx_ip.a.GCC$(gcc-major-version) \
      || die "symlinking precompiled core failed"                                         

   convert_to_m 2.6.x/Makefile || die "convert_to_m failed"

   # When built with ati's make.sh it defines a bunch of macros if
   # certain .config values are set, falling back to less reliable
   # detection methods if linux/autoconf.h is not available. We   
   # simply use the linux/autoconf.h settings directly, bypassing the
   # detection script.                                               
   sed -i -e 's/__SMP__/CONFIG_SMP/' *.c *h || die "SMP sed failed" 
   sed -i -e 's/ifdef MODVERSIONS/ifdef CONFIG_MODVERSIONS/' *.c *.h \
      || die "MODVERSIONS sed failed"                                 
   popd >/dev/null                                                   

   mkdir extra || die "mkdir failed"
   cd extra                         
   unpack ./../common/usr/src/ati/fglrx_sample_source.tgz
   sed -i -e 's:include/extensions/extutil.h:X11/extensions/extutil.h:' \
      lib/fglrx_gamma/fglrx_gamma.c || die "include fixup failed"       
   # Add a category.                                                     
   mv programs/fglrx_gamma/fglrx_xgamma.{man,1} || die "man mv failed"   
   cd ..                                                                 
}                                                                       

src_compile() {
   linux-mod_src_compile

   einfo "Building fgl_glxgears"
   cd "${S}"/extra/fgl_glxgears
   # These extra libs/utils either have an Imakefile that does not
   # work very well without tweaking or a Makefile ignoring CFLAGS
   # and the like. We bypass those.                               

   # The -DUSE_GLU is needed to compile using nvidia headers
   # according to a comment in ati-drivers-extra-8.33.6.ebuild.
   "$(tc-getCC)" -o fgl_glxgears ${CFLAGS} ${LDFLAGS} -DUSE_GLU \
      -I"${S}"/common/usr/include fgl_glxgears.c \               
      -lGL -lGLU -lX11 -lm || die "fgl_glxgears build failed"   

   einfo "Building fglrx_gamma lib"
   cd "${S}"/extra/lib/fglrx_gamma
   "$(tc-getCC)" -shared -fpic -o libfglrx_gamma.so.1.0 ${CFLAGS} ${LDFLAGS} \
      -DXF86MISC -Wl,-soname,libfglrx_gamma.so.1.0 fglrx_gamma.c \           
      -lXext || die "fglrx_gamma lib build failed"                           
   ln -s libfglrx_gamma.so.1.0 libfglrx_gamma.so || die "ln failed"           
   ln -s libfglrx_gamma.so.1.0 libfglrx_gamma.so.1 || die "ln failed"         

   einfo "Building fglrx_gamma util"
   cd "${S}"/extra/programs/fglrx_gamma
   "$(tc-getCC)" -o fglrx_xgamma ${CFLAGS} ${LDFLAGS} \
      -I../../../common/usr/X11R6/include -L../../lib/fglrx_gamma \
      fglrx_xgamma.c -lm -lfglrx_gamma -lX11 \                     
      || die "fglrx_gamma util build failed"                       

}

src_install() {
   linux-mod_src_install

   # We can do two things here, and neither of them is very nice.

   # For direct rendering libGL has to be able to load one or more
   # dri modules (files ending in _dri.so, like fglrx_dri.so).   
   # Gentoo's mesa looks for these files in the location specified by
   # LIBGL_DRIVERS_PATH or LIBGL_DRIVERS_DIR, then in the hardcoded 
   # location /usr/$(get_libdir)/dri. Ati's libGL does the same     
   # thing, but the hardcoded location is /usr/X11R6/lib/modules/dri
   # on x86 and amd64 32bit, /usr/X11R6/lib64/modules/dri on amd64   
   # 64bit. So we can either put the .so files in that (unusual,     
   # compared to "normal" mesa libGL) location or set               
   # LIBGL_DRIVERS_PATH. We currently do the latter. See also bug   
   # 101539.                                                         

   # The problem with this approach is that LIBGL_DRIVERS_PATH
   # *overrides* the default hardcoded location, it does not extend
   # it. So if ati-drivers is merged but a non-ati libGL is selected
   # and its hardcoded path does not match our LIBGL_DRIVERS_PATH   
   # (because it changed in a newer mesa or because it was compiled
   # for a different set of multilib abis than we are) stuff breaks.

   # We create one file per ABI to work with "native" multilib, see
   # below.                                                       

   echo "COLON_SEPARATED=LIBGL_DRIVERS_PATH" > "${T}/03ati-colon-sep"
   doenvd "${T}/03ati-colon-sep"                                     

   # All libraries that we have a 32 bit and 64 bit version of on
   # amd64 are installed in src_install-libs. Everything else   
   # (including libraries only available in native 64bit on amd64)
   # goes in here.                                               

   # There used to be some code here that tried to detect running
   # under a "native multilib" portage ((precursor of)           
   # http://dev.gentoo.org/~kanaka/auto-multilib/). I removed that, it
   # should just work (only doing some duplicate work). --marienz     
   if has_multilib_profile; then                                     
      local OABI=${ABI}                                               
      for ABI in $(get_install_abis); do                             
         src_install-libs                                             
      done                                                           
      ABI=${OABI}                                                     
      unset OABI                                                     
   else                                                               
      src_install-libs                                               
   fi                                                                 

   # This is sorted by the order the files occur in the source tree.

   # X modules.
   exeinto /usr/$(get_libdir)/xorg/modules/drivers
   doexe "${BASE_DIR}"/usr/X11R6/${PKG_LIBDIR}/modules/drivers/fglrx_drv.so
   exeinto /usr/$(get_libdir)/xorg/modules/linux                           
   doexe "${BASE_DIR}"/usr/X11R6/${PKG_LIBDIR}/modules/linux/libfglrxdrm.so
   exeinto /usr/$(get_libdir)/xorg/modules                                 
   doexe "${BASE_DIR}"/usr/X11R6/${PKG_LIBDIR}/modules/{esut.a,glesx.so,amdxmm.so}

   # Arch-specific files.
   # (s)bin.             
   into /opt             
   if use acpi; then     
      dosbin "${ARCH_DIR}"/usr/sbin/atieventsd
   fi                                         
   # We cleaned out the compilable stuff in src_unpack
   dobin "${ARCH_DIR}"/usr/X11R6/bin/*               

   # lib.
   exeinto /usr/$(get_libdir)
   # Everything except for the libGL.so installed in src_install-libs.
   doexe $(find "${ARCH_DIR}"/usr/X11R6/${PKG_LIBDIR} \               
      -maxdepth 1 -type f -name '*.so*' -not -name 'libGL.so*')       
   insinto /usr/$(get_libdir)                                         
   doins $(find "${ARCH_DIR}"/usr/X11R6/${PKG_LIBDIR} \               
      -maxdepth 1 -type f -not -name '*.so*')                         

   # Common files.
   # etc.         
   insinto /etc/ati
   # Everything except for the authatieventsd.sh script.
   doins common/etc/ati/{logo*,control,atiogl.xml,signature,amdpcsdb.default}
   if use acpi; then                                                         
      doins common/etc/ati/authatieventsd.sh                                 
   fi                                                                       

   # include.
   insinto /usr
   doins -r common/usr/include
   insinto /usr/include/X11/extensions
   doins common/usr/X11R6/include/X11/extensions/fglrx_gamma.h

   # Just the atigetsysteminfo.sh script.
   into /usr                             
   dosbin common/usr/sbin/*             

   # data files for the control panel.
   insinto /usr/share                 
   doins -r common/usr/share/ati     
   insinto /usr/share/pixmaps         
   doins common/usr/share/icons/ccc_{large,small}.xpm
   make_desktop_entry amdcccle 'ATI Catalyst Control Center' \
      ccc_large System                                       

   # doc.
   dohtml -r common/usr/share/doc/fglrx

   if use acpi; then
      doman common/usr/share/man/man8/atieventsd.8

      pushd common/usr/share/doc/fglrx/examples/etc/acpi >/dev/null

      exeinto /etc/acpi
      doexe ati-powermode.sh
      insinto /etc/acpi/events
      doins events/*         

      popd >/dev/null
   fi               

   # Done with the "source" tree. Install tools we rebuilt:
   dobin extra/fgl_glxgears/fgl_glxgears                   
   newdoc extra/fgl_glxgears/README README.fgl_glxgears   

   dolib extra/lib/fglrx_gamma/*so*
   newdoc extra/lib/fglrx_gamma/README README.libfglrx_gamma

   dobin extra/programs/fglrx_gamma/fglrx_xgamma
   doman extra/programs/fglrx_gamma/fglrx_xgamma.1
   newdoc extra/programs/fglrx_gamma/README README.fglrx_gamma

   # Gentoo-specific stuff:
   if use acpi; then       
      newinitd "${FILESDIR}"/atieventsd.init atieventsd \
         || die "Failed to install atieventsd.init.d"   
      echo 'ATIEVENTSDOPTS=""' > "${T}"/atieventsd.conf 
      newconfd "${T}"/atieventsd.conf atieventsd         
   fi                                                   
}                                                       

src_install-libs() {
   if [[ "${ABI}" == "amd64" ]]; then
      local pkglibdir=lib64         
      local MY_ARCH_DIR="${S}/arch/x86_64"
   else                                   
      local pkglibdir=lib                 
      local MY_ARCH_DIR="${S}/arch/x86"   
   fi                                     
   einfo "ati tree '${pkglibdir}' -> '$(get_libdir)' on system"

   local ATI_ROOT=/usr/$(get_libdir)/opengl/ati
   # To make sure we do not miss a spot when these change.
   local libmajor=1 libminor=2                           
   local libver=${libmajor}.${libminor}                   

   # The GLX libraries
   # (yes, this really is "lib" even on amd64/multilib --marienz)
   exeinto ${ATI_ROOT}/lib                                       
   doexe "${MY_ARCH_DIR}"/usr/X11R6/${pkglibdir}/libGL.so.${libver}
   dosym libGL.so.${libver} ${ATI_ROOT}/lib/libGL.so.${libmajor}   
   dosym libGL.so.${libver} ${ATI_ROOT}/lib/libGL.so               

   # Same as the xorg implementation (eselect opengl does not fall
   # back to xorg-x11 if we omit this symlink, meaning no glx).   
   dosym ../xorg-x11/extensions ${ATI_ROOT}/extensions           

   # DRI modules, installed into the path used by recent versions of mesa.
   exeinto /usr/$(get_libdir)/dri                                         
   doexe "${MY_ARCH_DIR}"/usr/X11R6/${pkglibdir}/modules/dri/fglrx_dri.so

   # Make up a libGL.la. Ati does not provide one, but mesa does. If
   # a (libtool-based) libfoo is built with libGL.la present a     
   # reference to it is put into libfoo.la, and compiling           
   # (libtool-based) things that link too libfoo.la will complain if
   # libGL.la disappears. So if we do not make up a libGL.la       
   # switching between mesa and ati becomes painful.               
   local revision=$(printf '%d%02d%02d' $(get_version_components)) 
   sed -e "s:\${libmajor}:${libmajor}:g" \                         
      -e "s:\${libminor}:${libminor}:g" \                           
      -e "s:\${libdir}:$(get_libdir):g" \                           
      -e "s:\${revision}:${revision}:g" \                           
      "${FILESDIR}"/libGL.la.in > "${D}"/${ATI_ROOT}/lib/libGL.la \
      || die "sed failed to make libGL.la"                         

   local envname="${T}"/04ati-dri-path
   if [[ -n ${ABI} ]]; then           
      envname="${envname}-${ABI}"     
   fi                                 
   echo "LIBGL_DRIVERS_PATH=/usr/$(get_libdir)/dri" > "${envname}"
   doenvd "${envname}"                                           
}                                                                 

pkg_postinst() {
   /usr/bin/eselect opengl set --use-old ati

   elog "To switch to ATI OpenGL, run \"eselect opengl set ati\""
   elog "To change your xorg.conf you can use the bundled \"aticonfig\""
   elog                                                                 
   elog "If you experience unexplained segmentation faults and kernel crashes"
   elog "with this driver and multi-threaded applications such as wine,"
   elog "set UseFastTLS in xorg.conf to either 0 or 1, but not 2."
   elog
   elog "You will have to source /etc/profile (or logout and back in) for dri"
   elog "to work, unless you previously had ati-drivers installed."

   # Workaroud screen corruption
   ewarn "If you experience screen corruption with this driver, try putting"
   ewarn '         Option "XAANoOffscreenPixmaps" "true"'
   ewarn "in the Device Section of /etc/X11/xorg.conf."

   linux-mod_pkg_postinst
}

pkg_postrm() {
   linux-mod_pkg_postrm
   /usr/bin/eselect opengl set --use-old xorg-x11
}

fglrx-8.7-2.6.26.patch
Code:
--- firegl_public.c.orig        2008-07-21 17:49:14.000000000 +0200                                           
+++ firegl_public.c     2008-07-21 17:51:44.000000000 +0200                                                   
@@ -3539,10 +3539,6 @@                                                                                       
                                                                                                             
 /*****************************************************************************/                             
                                                                                                             
-#ifndef NOPAGE_SIGBUS                                                                                       
-#define NOPAGE_SIGBUS 0                                                                                     
-#endif /* !NOPAGE_SIGBUS */                                                                                 
-                                                                                                             
 typedef struct page mem_map_t;                                                                               
 typedef mem_map_t *vm_nopage_ret_t;                                                                         
                                                                                                             
@@ -3575,7 +3571,7 @@                                                                                         
                        return page;                                                                         
                }                                                                                             
        }                                                                                                     
-       return NOPAGE_SIGBUS;           /* Disallow mremap */                                                 
+       return VM_FAULT_SIGBUS;         /* Disallow mremap */                                                 
 }                                                                                                           
                                                                                                             
 #endif /* __ia64__ */                                                                                       
@@ -3616,7 +3612,7 @@                                                                                         
             (unsigned long)__ke_vm_offset(vma));                                                             
                                                                                                             
     if (address > vma->vm_end)                                                                               
-        return NOPAGE_SIGBUS; /* address is out of range */                                                 
+        return VM_FAULT_SIGBUS; /* address is out of range */                                               
                                                                                                             
     /*  Calculate offset into VMA */                                                                         
     vma_offset = address - vma->vm_start;                                                                   
@@ -3628,7 +3624,7 @@                                                                                         
     pte_linear = firegl_get_addr_from_vm(vma);                                                               
     if (!pte_linear)                                                                                         
     {                                                                                                       
-        return NOPAGE_SIGBUS; /* bad address */                                                             
+        return VM_FAULT_SIGBUS; /* bad address */                                                           
     }                                                                                                       
     pte_linear += vma_offset;                                                                               
                                                                                                             
@@ -3682,7 +3678,7 @@                                                                                         
     kaddr = firegl_get_addr_from_vm(vma);                                                                   
     if (!kaddr)                                                                                             
     {                                                                                                       
-        return NOPAGE_SIGBUS; /* bad address */                                                             
+        return VM_FAULT_SIGBUS; /* bad address */                                                           
     }                                                                                                       
     kaddr += (address - vma->vm_start);                                                                     
                                                                                                             
@@ -3722,7 +3718,7 @@                                                                                         
     kaddr = firegl_get_addr_from_vm(vma);                                                                   
     if (!kaddr)                                                                                             
     {                                                                                                       
-        return NOPAGE_SIGBUS; /* bad address */                                                             
+        return VM_FAULT_SIGBUS; /* bad address */                                                           
     }                                                                                                       
     kaddr += (address - vma->vm_start);                                                                     
                                                                                                             
@@ -3757,26 +3753,26 @@                                                                                       
     if (dev == NULL)                                                                                         
     {                                                                                                       
         __KE_ERROR("dev is NULL\n");                                                                         
-        return NOPAGE_SIGBUS;                                                                               
+        return VM_FAULT_SIGBUS;                                                                             
     }                                                                                                       
                                                                                                             
     if (address > vma->vm_end)                                                                               
     {                                                                                                       
         __KE_ERROR("address out of range\n");                                                               
-        return NOPAGE_SIGBUS; /* address is out of range */                                                 
+        return VM_FAULT_SIGBUS; /* address is out of range */                                               
     }                                                                                                       
     pciemem = firegl_get_pciemem_from_addr ( vma, address);                                                 
     if (pciemem == NULL)                                                                                     
     {                                                                                                       
         __KE_ERROR("No pciemem found! \n");                                                                 
-        return NOPAGE_SIGBUS;                                                                               
+        return VM_FAULT_SIGBUS;                                                                             
     }                                                                                                       
     pagelist = firegl_get_pagelist_from_vm(vma);                                                             
                                                                                                             
     if (pagelist == NULL)                                                                                   
     {                                                                                                       
         __KE_ERROR("No pagelist! \n");                                                                       
-        return NOPAGE_SIGBUS;                                                                               
+        return VM_FAULT_SIGBUS;                                                                             
     }                                                                                                       
                                                                                                             
     /** Find offset in  vma */                                                                               
@@ -3790,7 +3786,7 @@                                                                                         
     if (page_address(pMmPage) == 0x0)                                                                       
     {                                                                                                       
         __KE_ERROR("Invalid page address\n");                                                               
-        return NOPAGE_SIGBUS;                                                                               
+        return VM_FAULT_SIGBUS;                                                                             
     }                                                                                                       
     return pMmPage;                                                                                         
 }                                                                                                           
@@ -3806,7 +3802,7 @@                                                                                         
     if (address > vma->vm_end)                                                                               
     {                                                                                                       
         __KE_ERROR("Invalid virtual address\n");                                                             
-        return NOPAGE_SIGBUS;   /* Disallow mremap */                                                       
+        return VM_FAULT_SIGBUS;   /* Disallow mremap */                                                     
     }                                                                                                       
                                                                                                             
     offset      = address - vma->vm_start;                                                                   
@@ -3818,7 +3814,7 @@                                                                                         
     if( !page_addr)                                                                                         
     {                                                                                                       
         __KE_ERROR("Invalid page address\n");                                                               
-        return NOPAGE_SIGBUS;   /* Disallow mremap */                                                       
+        return VM_FAULT_SIGBUS;   /* Disallow mremap */                                                     
     }                                                                                                       
     page        = virt_to_page(page_addr);                                                                   
     get_page(page);                                                                                         
@@ -4174,7 +4170,7 @@                                                                                         
                                                                                                             
 static struct vm_operations_struct vm_ops =                                                                 
 {                                                                                                           
-    nopage:  ip_vm_nopage,                                                                                   
+    fault:   vm_nopage,                                                                                     
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
@@ -4183,7 +4179,7 @@                                                                                         
 #ifdef __ia64__                                                                                             
 static struct vm_operations_struct vm_cant_ops =                                                             
 {                                                                                                           
-    nopage:  ip_vm_cant_nopage,                                                                             
+    fault:  ip_vm_cant_nopage,                                                                               
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
@@ -4192,42 +4188,42 @@                                                                                       
                                                                                                             
 static struct vm_operations_struct vm_shm_ops =                                                             
 {                                                                                                           
-    nopage:  ip_vm_shm_nopage,                                                                               
+    fault:  ip_vm_shm_nopage,                                                                               
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
                                                                                                             
 static struct vm_operations_struct vm_pci_bq_ops =                                                           
 {                                                                                                           
-    nopage:  ip_vm_dma_nopage,                                                                               
+    fault:  ip_vm_dma_nopage,                                                                               
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
                                                                                                             
 static struct vm_operations_struct vm_ctx_ops =                                                             
 {                                                                                                           
-    nopage:  ip_vm_dma_nopage,                                                                               
+    fault:  ip_vm_dma_nopage,                                                                               
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
                                                                                                             
 static struct vm_operations_struct vm_pcie_ops =                                                             
 {                                                                                                           
-    nopage:  ip_vm_pcie_nopage,                                                                             
+    fault:  ip_vm_pcie_nopage,                                                                               
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
                                                                                                             
 static struct vm_operations_struct vm_kmap_ops =                                                             
 {                                                                                                           
-    nopage:  ip_vm_kmap_nopage,                                                                             
+    fault:  ip_vm_kmap_nopage,                                                                               
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
                                                                                                             
 static struct vm_operations_struct vm_gart_ops =                                                             
 {                                                                                                           
-    nopage:  ip_vm_gart_nopage,                                                                             
+    fault:  ip_vm_gart_nopage,                                                                               
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
@@ -4236,14 +4232,14 @@                                                                                       
 #ifndef __ia64__                                                                                             
 static struct vm_operations_struct vm_agp_bq_ops =                                                           
 {                                                                                                           
-    nopage:  ip_vm_nopage,                                                                                   
+    fault:  ip_vm_nopage,                                                                                   
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
 #else                                                                                                       
 static struct vm_operations_struct vm_cant_agp_bq_ops =                                                     
 {                                                                                                           
-    nopage:  ip_vm_cant_nopage,                                                                             
+    fault:  ip_vm_cant_nopage,                                                                               
     open:    ip_drm_vm_open,                                                                                 
     close:   ip_drm_vm_close,                                                                               
 };                                                                                                           
--- firegl_public.h.orig        2008-07-16 13:45:19.000000000 +0200                                           
+++ firegl_public.h     2008-07-16 13:48:03.000000000 +0200                                                   
@@ -78,7 +78,7 @@                                                                                             
     if (!pgd_present(*(pgd_p)))        \                                                                     
     { \                                                                                                     
         __KE_ERROR("FATAL ERROR: User queue buffer not present! (pgd)\n"); \                                 
-        return (unsigned long)NOPAGE_SIGBUS;   /* Something bad happened; generate SIGBUS */ \               
+        return VM_FAULT_SIGBUS;   /* Something bad happened; generate SIGBUS */ \                           
         /* alternatively we could generate a NOPAGE_OOM "out of memory" */ \                                 
     } \                                                                                                     
 } while(0)                                                                                                   
@@ -91,7 +91,7 @@                                                                                             
     if (!pud_present(*(pud_p)))        \                                                                     
     { \                                                                                                     
         __KE_ERROR("FATAL ERROR: User queue buffer not present! (pud)\n"); \                                 
-        return (unsigned long)NOPAGE_SIGBUS;   /* Something bad happened; generate SIGBUS */ \               
+        return VM_FAULT_SIGBUS;   /* Something bad happened; generate SIGBUS */ \                           
         /* alternatively we could generate a NOPAGE_OOM "out of memory" */ \                                 
     } \
     pmd_p = pmd_offset(pud_p, pte_linear); \
@@ -111,7 +111,7 @@
     if (!pmd_present(*(pmd_p)))        \
     { \
         __KE_ERROR("FATAL ERROR: User queue buffer not present! (pmd)\n"); \
-        return (unsigned long)NOPAGE_SIGBUS;   /* Something bad happened; generate SIGBUS */ \
+        return VM_FAULT_SIGBUS;   /* Something bad happened; generate SIGBUS */ \
         /* alternatively we could generate a NOPAGE_OOM "out of memory" */ \
     } \
 } while(0)
@@ -157,7 +157,7 @@
     if (!pte_present(pte)) \
     { \
         __KE_ERROR("FATAL ERROR: User queue buffer not present! (pte)\n"); \
-        return (unsigned long)NOPAGE_SIGBUS;   /* Something bad happened; generate SIGBUS */ \
+        return VM_FAULT_SIGBUS;   /* Something bad happened; generate SIGBUS */ \
         /* alternatively we could generate a NOPAGE_OOM "out of memory" */ \
     } \
 } while(0)


Compiles, but not tested yet though.
_________________
Workstation: 5.1 SurroundSound, LIRC remote control; Laptop [IBM-T43]: patched sources, s2disk/ram, fingerprint sensor
Back to top
View user's profile Send private message
mroconnor
Guru
Guru


Joined: 24 Feb 2006
Posts: 402
Location: USA

PostPosted: Tue Jul 22, 2008 7:16 pm    Post subject: Reply with quote

I cant digest this ebuild. I get this:

Code:
cosmo ati-drivers # ebuild ati-drivers-8.512.ebuild digest
/usr/local/portage/x11-drivers/ati-drivers/ati-drivers-8.512.ebuild: line 137: syntax error near unexpected token `||'
/usr/local/portage/x11-drivers/ati-drivers/ati-drivers-8.512.ebuild: line 137: `      || die "bin rm failed"                                       '
 *
 * ERROR: x11-drivers/ati-drivers-8.512 failed.
 * Call stack:
 *               ebuild.sh, line 1692:  Called die
 * The specific snippet of code:
 *      source "${EBUILD}" || die "error sourcing ebuild"
 *  The die message:
 *   error sourcing ebuild
 *
 * If you need support, post the topmost build error, and the call stack if relevant.
 * This ebuild is from an overlay: '/usr/local/portage/'
 *


I copied it directly and 'Shift+Insert' into nano.
Back to top
View user's profile Send private message
Da Fox
Guru
Guru


Joined: 06 Jul 2005
Posts: 341

PostPosted: Tue Jul 22, 2008 11:27 pm    Post subject: Reply with quote

I had a problem with your patch, somehow it refuses to apply (a copy&paste error caused by the forum software? mroconnor also had a problem...), so I had to make one myself based on yours.
But even then it still wouldn't compile, it gave me this error:
Code:
FATAL: modpost: GPL-incompatible module fglrx.ko uses GPL-only symbol 'init_pid_ns'
After a quick google I found a hack in an old debian bug report. (It changes the module license to GPL)

Hower the module does not load, I get these errors:
Code:
dafox@shogoki ~ $ grep -C5 EE /var/log/Xorg.0.log.old
.
.
.
--
        [36] -1 0       0x00003000 - 0x000030ff (0x100) IX[B](B)
        [37] 0  0       0x000003b0 - 0x000003bb (0xc) IS[B](OprU)
        [38] 0  0       0x000003c0 - 0x000003df (0x20) IS[B](OprU)
(II) fglrx(0): driver needs X.org 7.1.x.y with x.y >= 0.0
(II) fglrx(0): detected X.org 7.1.2.0
(EE) fglrx(0): atiddxDriScreenInit failed, GPS not been initialized.
(WW) fglrx(0): ***********************************************
(WW) fglrx(0): * DRI initialization failed!                  *
(WW) fglrx(0): * (maybe driver kernel module missing or bad) *
(WW) fglrx(0): * 2D acceleraton available (MMIO)             *
(WW) fglrx(0): * no 3D acceleration available                *
--
(II) LoadModule: "amdxmm"
(II) Loading /usr/lib/xorg/modules//amdxmm.so
(II) Module amdxmm: vendor="X.Org Foundation"
        compiled for 7.1.0, module version = 1.0.0
        ABI class: X.Org Server Extension, version 0.3
(EE) fglrx(0): XMM failed to open CMMQS connection.
(II) fglrx(0): XMM failed to initialize!
(WW) fglrx(0): Option "VendorName" is not used
(WW) fglrx(0): Option "ModelName" is not used
(II) fglrx(0): Direct rendering disabled
(==) fglrx(0): Silken mouse enabled
--
.
.
.


If anyone manages/has managed to get this working please let me know :) (and if possible please post a link to any patches, copy&pasting seems to introduce strange errors...)

--edit:
It seems those error might be the result of the module not loading:
Code:
shogoki elog #  modprobe fglrx
FATAL: Error inserting fglrx (/lib/modules/2.6.26-gentoo/video/fglrx.ko): Unknown symbol in module, or unknown parameter (see dmesg)
shogoki elog # dmesg
.
.
.
fglrx: Unknown symbol init_mm

_________________
"Man fears the darkness, and so he scrapes away at the edges of it with fire."
- Rei Ayanami

JGBE, a Java based GameBoy Emulator
Back to top
View user's profile Send private message
genb0y
n00b
n00b


Joined: 10 Apr 2004
Posts: 20

PostPosted: Wed Jul 23, 2008 3:45 am    Post subject: Reply with quote

http://www.phoronix.com/forums/showpost.php?p=39871&postcount=54
This works for me.
Back to top
View user's profile Send private message
Da Fox
Guru
Guru


Joined: 06 Jul 2005
Posts: 341

PostPosted: Wed Jul 23, 2008 2:42 pm    Post subject: Reply with quote

genb0y wrote:
http://www.phoronix.com/forums/showpost.php?p=39871&postcount=54
This works for me.

Thanks for the patch, that one worked out-of-the box, but it still did not work. I noticed this warning during compilation:
Code:
WARNING: "init_mm" [/var/tmp/portage/x11-drivers/ati-drivers-8.512/work/common/lib/modules/fglrx/build_mod/2.6.x/fglrx.ko] undefined!
I have however found a solution, there is a kernel option you need to turn on: Kernel Hacking -> Enable unused/obsolete exported symbols (UNUSED_SYMBOLS).
Once I enabled that, recompiled and rebooted everything (3D *and* xvideo support!) worked :D
_________________
"Man fears the darkness, and so he scrapes away at the edges of it with fire."
- Rei Ayanami

JGBE, a Java based GameBoy Emulator
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Unsupported Software All times are GMT
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum