summaryrefslogtreecommitdiff
blob: 663698e4bd2a1b95e57656383c80dadcd489e81d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/media-video/nvidia-kernel/nvidia-kernel-1.0.6629.ebuild,v 1.6 2004/11/25 23:14:26 cyfred Exp $

inherit eutils linux-mod

X86_PKG_V="pkg1"
AMD64_PKG_V="pkg2"
NV_V="${PV/1.0./1.0-}"
X86_NV_PACKAGE="NVIDIA-Linux-x86-${NV_V}"
AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${NV_V}"

DESCRIPTION="Linux kernel module for the NVIDIA X11 driver"
HOMEPAGE="http://www.nvidia.com/"
SRC_URI="x86? (ftp://download.nvidia.com/XFree86/Linux-x86/${NV_V}/${X86_NV_PACKAGE}-${X86_PKG_V}.run)
	amd64? (http://download.nvidia.com/XFree86/Linux-x86_64/${NV_V}/${AMD64_NV_PACKAGE}-${AMD64_PKG_V}.run)"

if use x86; then
	PKG_V="${X86_PKG_V}"
	NV_PACKAGE="${X86_NV_PACKAGE}"
elif use amd64; then
	PKG_V="${AMD64_PKG_V}"
	NV_PACKAGE="${AMD64_NV_PACKAGE}"
fi

S="${WORKDIR}/${NV_PACKAGE}-${PKG_V}/usr/src/nv"

# The slot needs to be set to $KV to prevent unmerges of modules for other kernels.
LICENSE="NVIDIA"
SLOT="0"
KEYWORDS="-* ~x86 ~amd64"
RESTRICT="nostrip"
IUSE=""

DEPEND="virtual/linux-sources"
export _POSIX2_VERSION="199209"

MODULE_NAMES="nvidia(video:${S})"
BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR}"

mtrr_check() {
	ebegin "Checking for MTRR support"
	getfilevar_isset CONFIG_MTRR ${KV_DIR}/.config
	eend $?

	if [ "$?" != 0 ]
	then
		eerror "This version needs MTRR support for most chipsets!"
		eerror "Please enable MTRR support in your kernel config, found at:"
		eerror
		eerror "  Processor type and features -> [*] MTRR (Memory Type Range Register) support"
		eerror
		eerror "and recompile your kernel ..."
		die "MTRR support not detected!"
	fi
}

pkg_setup() {
	linux-mod_pkg_setup
	mtrr_check;
}

src_unpack() {
	# 2.6.10_rc1-mm{1,2,3} all EXPORT_SYMBOL_GPL the udev functions, this breaks loading
	CS="$(grep -c EXPORT_SYMBOL\(class_simple_create\)\; ${KV_DIR}/drivers/base/class_simple.c)"
	if [ "${CS}" == "0" ]
	then
		ewarn "Your current kernel uses EXPORT_SYMBOL_GPL() on some methods required by nvidia-kernel."
		ewarn "This probably means you are using 2.6.10_rc1-mm*. Please change away from mm-sources until this is"
		ewarn "revised and a solution released into the mm branch, development-sources will work."
		die "Incompatible kernel export."
	fi

	if [ ${KV_MINOR} -ge 6 -a ${KV_PATCH} -lt 7 ]
	then
		echo
		ewarn "Your kernel version is ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
		ewarn "This is not officially supported for ${P}. It is likely you"
		ewarn "will not be able to compile or use the kernel module."
		ewarn "It is recommended that you upgrade your kernel to a version >= 2.6.7"
		echo
		ewarn "DO NOT file bug reports for kernel versions less than 2.6.7 as they will be ignored."
	fi

	cd ${WORKDIR}
	bash ${DISTDIR}/${NV_PACKAGE}-${PKG_V}.run --extract-only
	cd ${S}

	# Add patches below, with a breif description.
	cd ${S}
	# Fix the /usr/src/linux/include/asm not existing on koutput issue #58294
	epatch ${FILESDIR}/${PV}/conftest_koutput_includes.patch
	# Fix pgd_offset() -> pml4_pgd_offset() for >=2.6.10-rc1-mm3
	epatch ${FILESDIR}/${PV}/nv-pgd_offset.patch
	# Speedup driver for 2.6 kernel to be on par with 2.4 kernel
	epatch ${FILESDIR}/${PV}/nv-pgprot-speedup.patch
	# Fix the vm_flags to only have VM_IO, and not VM_LOCKED as well
	epatch ${FILESDIR}/${PV}/nv-vm_flags-no-VM_LOCKED.patch
	# Fix calling of smp_processor_id() when preempt is enabled
	epatch ${FILESDIR}/${PV}/nv-disable-preempt-on-smp_processor_id.patch

	# Shutup pointer arith warnings
	use x86 && epatch ${FILESDIR}/${PV}/nv-shutup-warnings.patch
	use amd64 && epatch ${FILESDIR}/${PV}/nv-amd64-shutup-warnings.patch

	# if you set this then it's your own fault when stuff breaks :)
	[ -n "${USE_CRAZY_OPTS}" ] && sed -i "s:-O:${CFLAGS}:" Makefile.*

	# if greater than 2.6.5 use M= instead of SUBDIR=
	convert_to_m ${S}/Makefile.kbuild
}

src_install() {
	linux-mod_src_install

	# Add the aliases
	insinto /etc/modules.d
	newins ${FILESDIR}/nvidia-1.1 nvidia

	# Docs
	dodoc ${S}/README

	# The device creation script
	into /
	newsbin ${S}/makedevices.sh NVmakedevices.sh
}

pkg_postinst() {
	if [ "${ROOT}" = "/" ] && \
		[ ! -e /dev/.devfsd ] && \
		[ ! -e /dev/.udev ] && \
		[ -x /sbin/NVmakedevices.sh ]
	then
		/sbin/NVmakedevices.sh >/dev/null 2>&1
	fi

	linux-mod_pkg_postinst
}