summary refs log tree commit diff
path: root/pkgs/os-specific/linux
diff options
context:
space:
mode:
authorMathijs Kwik <mathijs@bluescreen303.nl>2013-09-11 10:51:46 +0200
committerMathijs Kwik <mathijs@bluescreen303.nl>2013-09-11 10:53:31 +0200
commit1a55c4b89f6f6e337d1ca8878bfd8104f3fb6304 (patch)
tree3513b616eec434d455177a877119cdd96a7b4ade /pkgs/os-specific/linux
parent2d405ed4d54ba4d924b5146cea4a39ae65343d59 (diff)
parentaa8e8303e1b42c5cf5195f3ce82f886664aa26d4 (diff)
downloadnixlib-1a55c4b89f6f6e337d1ca8878bfd8104f3fb6304.tar
nixlib-1a55c4b89f6f6e337d1ca8878bfd8104f3fb6304.tar.gz
nixlib-1a55c4b89f6f6e337d1ca8878bfd8104f3fb6304.tar.bz2
nixlib-1a55c4b89f6f6e337d1ca8878bfd8104f3fb6304.tar.lz
nixlib-1a55c4b89f6f6e337d1ca8878bfd8104f3fb6304.tar.xz
nixlib-1a55c4b89f6f6e337d1ca8878bfd8104f3fb6304.tar.zst
nixlib-1a55c4b89f6f6e337d1ca8878bfd8104f3fb6304.zip
Merge remote-tracking branch 'official/master' into multiple-outputs
Conflicts:
	pkgs/development/libraries/cairo/default.nix
	pkgs/development/libraries/freetype/default.nix
	pkgs/development/libraries/glib/default.nix
	pkgs/development/libraries/libpng/default.nix
	pkgs/development/libraries/pango/default.nix
	pkgs/tools/typesetting/tex/texlive/default.nix
	pkgs/top-level/all-packages.nix
Diffstat (limited to 'pkgs/os-specific/linux')
-rw-r--r--pkgs/os-specific/linux/ati-drivers/builder.sh9
-rw-r--r--pkgs/os-specific/linux/ati-drivers/default.nix20
-rw-r--r--pkgs/os-specific/linux/ati-drivers/gentoo-patches.patch293
-rw-r--r--pkgs/os-specific/linux/bbswitch/default.nix4
-rw-r--r--pkgs/os-specific/linux/bluez/bluez5.nix34
-rw-r--r--pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix5
-rw-r--r--pkgs/os-specific/linux/firmware/raspberrypi/default.nix12
-rw-r--r--pkgs/os-specific/linux/kernel/common-config.nix8
-rw-r--r--pkgs/os-specific/linux/kernel/linux-3.10.nix4
-rw-r--r--pkgs/os-specific/linux/kernel/linux-3.11.nix17
-rw-r--r--pkgs/os-specific/linux/kernel/linux-3.4.nix4
-rw-r--r--pkgs/os-specific/linux/kernel/linux-rpi-3.6.nix8
-rw-r--r--pkgs/os-specific/linux/lm-sensors/default.nix6
-rw-r--r--pkgs/os-specific/linux/lttng-modules/default.nix4
-rw-r--r--pkgs/os-specific/linux/microcode/amd.nix17
-rw-r--r--pkgs/os-specific/linux/microcode/intel.nix17
-rw-r--r--pkgs/os-specific/linux/nvidia-x11/default.nix14
-rw-r--r--pkgs/os-specific/linux/nvidia-x11/nvidia-drivers-linux-3.11-incremental.patch25
-rw-r--r--pkgs/os-specific/linux/spl/default.nix8
-rw-r--r--pkgs/os-specific/linux/zfs/default.nix8
20 files changed, 440 insertions, 77 deletions
diff --git a/pkgs/os-specific/linux/ati-drivers/builder.sh b/pkgs/os-specific/linux/ati-drivers/builder.sh
index abb78549cee7..2a20aa29fcc9 100644
--- a/pkgs/os-specific/linux/ati-drivers/builder.sh
+++ b/pkgs/os-specific/linux/ati-drivers/builder.sh
@@ -11,6 +11,7 @@ unzip $src
 run_file=$(echo amd-driver-installer-*)
 sh $run_file --extract .
 
+eval "$patchPhase"
 
 kernelVersion=$(cd ${kernel}/lib/modules && ls)
 kernelBuild=$(echo ${kernel}/lib/modules/$kernelVersion/build)
@@ -166,7 +167,7 @@ GCC_MAJOR="`gcc --version | grep -o -e ") ." | head -1 | cut -d " " -f 2`"
   # fail saying different kernel versions
   cp -r $TMP/arch/$arch/usr/X11R6/$lib_arch/modules/dri $out/lib
   cp -r $TMP/arch/$arch/usr/X11R6/$lib_arch/modules/dri/* $out/lib
-  cp -r $TMP/arch/$arch/usr/X11R6/$lib_arch/*.so.* $out/lib
+  cp -r $TMP/arch/$arch/usr/X11R6/$lib_arch/*.so* $out/lib
   cp -r $TMP/arch/$arch/usr/X11R6/$lib_arch/fglrx/fglrx-libGL.so.1.2 $out/lib/fglrx-libGL.so.1.2
 
   cp -r $TMP/arch/$arch/usr/$lib_arch/* $out/lib
@@ -224,3 +225,9 @@ GCC_MAJOR="`gcc --version | grep -o -e ") ." | head -1 | cut -d " " -f 2`"
   rm -fr $out/lib/modules/fglrx # don't think those .a files are needed. They cause failure of the mod
 
 }
+
+for p in $extraDRIlibs; do
+  for lib in $p/lib/*.so*; do
+    ln -s $lib $out/lib/
+  done
+done
diff --git a/pkgs/os-specific/linux/ati-drivers/default.nix b/pkgs/os-specific/linux/ati-drivers/default.nix
index ff508deed122..326de9ed81ae 100644
--- a/pkgs/os-specific/linux/ati-drivers/default.nix
+++ b/pkgs/os-specific/linux/ati-drivers/default.nix
@@ -23,27 +23,26 @@
 assert stdenv.system == "x86_64-linux";
 
 stdenv.mkDerivation rec {
-  name = "ati-drivers-${version}-${kernelDev.version}";
-  version = "10-11-x86";
+  name = "ati-drivers-${version}-${kernel.version}";
+  version = "13.4";
 
   builder = ./builder.sh;
 
   inherit libXxf86vm xf86vidmodeproto;
 
   src = fetchurl {
-    url = http://www2.ati.com/drivers/linux/amd-driver-installer-12-8-x86.x86_64.zip;
-    sha256 = "0hdv89vdap6v0dnwhddizfmlkwyh0j910sp4wyj2lq5pn9rm2lk2";
-
-    # beta
-    # url = "http://www2.ati.com/drivers/beta/amd-driver-installer-12-9-beta-x86.x86_64.zip";
-    # sha256 = "02dmflzfrgr07fa1hv34m7ad8pra21xv7qbk500gqm6v8s9vbplk";
+    url = http://www2.ati.com/drivers/linux/amd-driver-installer-catalyst-13-4-linux-x86.x86_64.zip;
+    sha256 = "1914ikdich0kg047bqh89ai5z4dyryj5mlw5i46n90fsfiaxa532";
   };
 
+  patchPhase = "patch -p0 < ${./gentoo-patches.patch}";
+
   buildInputs =
     [ xlibs.libXext xlibs.libX11
       xlibs.libXrandr which imake makeWrapper
       patchelf
       unzip
+      mesa
     ];
 
   kernel = kernelDev;
@@ -57,6 +56,11 @@ stdenv.mkDerivation rec {
       "${xorg.libX11}/lib"
     ];
 
+  # without this some applications like blender don't start, but they start
+  # with nvidia. This causes them to be symlinked to $out/lib so that they
+  # appear in /run/opengl-driver/lib which get's added to LD_LIBRARY_PATH
+ extraDRIlibs = [ xorg.libXext ];
+
   inherit mesa; # only required to build examples
 
   meta = {
diff --git a/pkgs/os-specific/linux/ati-drivers/gentoo-patches.patch b/pkgs/os-specific/linux/ati-drivers/gentoo-patches.patch
new file mode 100644
index 000000000000..ce4871c0658b
--- /dev/null
+++ b/pkgs/os-specific/linux/ati-drivers/gentoo-patches.patch
@@ -0,0 +1,293 @@
+diff -Nur common/lib/modules/fglrx/build_mod/drmP.h common-r1/lib/modules/fglrx/build_mod/drmP.h
+--- common/lib/modules/fglrx/build_mod/drmP.h	2013-05-15 09:26:23.555752577 +0300
++++ common-r1/lib/modules/fglrx/build_mod/drmP.h	2013-05-16 10:39:17.496212055 +0300
+@@ -901,10 +901,6 @@
+ int                   DRM(stub_unregister)(int minor);
+ 
+ 				/* Proc support (drm_proc.h) */
+-extern struct proc_dir_entry *DRM(proc_init)(drm_device_t *dev,
+-					     int minor,
+-					     struct proc_dir_entry *root,
+-					     struct proc_dir_entry **dev_root);
+ extern int            DRM(proc_cleanup)(int minor,
+ 					struct proc_dir_entry *root,
+ 					struct proc_dir_entry *dev_root);
+diff -Nur common/lib/modules/fglrx/build_mod/drm_proc.h common-r1/lib/modules/fglrx/build_mod/drm_proc.h
+--- common/lib/modules/fglrx/build_mod/drm_proc.h	2013-05-15 09:26:23.555752577 +0300
++++ common-r1/lib/modules/fglrx/build_mod/drm_proc.h	2013-05-19 02:16:16.584406160 +0300
+@@ -75,61 +75,6 @@
+ #define DRM_PROC_ENTRIES (sizeof(DRM(proc_list))/sizeof(DRM(proc_list)[0]))
+ 
+ /**
+- * Initialize the DRI proc filesystem for a device.
+- *
+- * \param dev DRM device.
+- * \param minor device minor number.
+- * \param root DRI proc dir entry.
+- * \param dev_root resulting DRI device proc dir entry.
+- * \return root entry pointer on success, or NULL on failure.
+- * 
+- * Create the DRI proc root entry "/proc/ati", the device proc root entry
+- * "/proc/ati/%minor%/", and each entry in proc_list as
+- * "/proc/ati/%minor%/%name%".
+- */
+-struct proc_dir_entry *DRM(proc_init)(drm_device_t *dev, int minor,
+-				      struct proc_dir_entry *root,
+-				      struct proc_dir_entry **dev_root)
+-{
+-	struct proc_dir_entry *ent;
+-	int		      i, j;
+-	char                  name[64];
+-
+-	if (!minor) root = create_proc_entry("dri", S_IFDIR, NULL);
+-	if (!root) {
+-		DRM_ERROR("Cannot create /proc/ati\n");
+-		return NULL;
+-	}
+-
+-	sprintf(name, "%d", minor);
+-	*dev_root = create_proc_entry(name, S_IFDIR, root);
+-	if (!*dev_root) {
+-		DRM_ERROR("Cannot create /proc/ati/%s\n", name);
+-		return NULL;
+-	}
+-
+-	for (i = 0; i < DRM_PROC_ENTRIES; i++) {
+-		ent = create_proc_entry(DRM(proc_list)[i].name,
+-					S_IFREG|S_IRUGO, *dev_root);
+-		if (!ent) {
+-			DRM_ERROR("Cannot create /proc/ati/%s/%s\n",
+-				  name, DRM(proc_list)[i].name);
+-			for (j = 0; j < i; j++)
+-				remove_proc_entry(DRM(proc_list)[i].name,
+-						  *dev_root);
+-			remove_proc_entry(name, root);
+-			if (!minor) remove_proc_entry("dri", NULL);
+-			return NULL;
+-		}
+-		ent->read_proc = DRM(proc_list)[i].f;
+-		ent->data      = dev;
+-	}
+-
+-	return root;
+-}
+-
+-
+-/**
+  * Cleanup the proc filesystem resources.
+  *
+  * \param minor device minor number.
+diff -Nur common/lib/modules/fglrx/build_mod/firegl_public.c common-r1/lib/modules/fglrx/build_mod/firegl_public.c
+--- common/lib/modules/fglrx/build_mod/firegl_public.c	2013-05-15 09:26:23.545752925 +0300
++++ common-r1/lib/modules/fglrx/build_mod/firegl_public.c	2013-05-19 03:07:10.236552522 +0300
+@@ -583,6 +583,202 @@
+     { "NULL",           NULL,                       NULL} // Terminate List!!!
+ };
+ 
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++typedef int (read_proc_t)(char *page, char **start, off_t off, int count, int *eof, void *data);
++typedef int (write_proc_t)(struct file *file, const char __user *buffer, unsigned long count, void *data);
++#else
++#define PDE_DATA(inode) (PDE((inode))->data)
++#endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++typedef struct {
++	read_proc_t *read_func;
++	write_proc_t *write_func;
++	void *data;
++} gentoo_proc_wrapper_t;
++
++#define GENTOO_PROC_WRAPPER_OVERFLOW_MAGIC 939750305
++
++static ssize_t gentoo_proc_wrapper_read (struct file *myfile, char __user *buffer, size_t count, loff_t *offset) {
++	int is_eof=0, retval;
++	char *start, *usebuffer=NULL;
++	gentoo_proc_wrapper_t* wrapper_data=(gentoo_proc_wrapper_t*)(myfile->private_data);
++	if (PAGE_SIZE<*offset) {
++		printk(KERN_ERR "Trying to read beyond 4k on proc\n");
++		return -EIO;
++	}
++	//printk(KERN_NOTICE " call with: dev %p, func %p\n", wrapper_data->data, wrapper_data->read_func);
++	
++	usebuffer=kmalloc(2*PAGE_SIZE, GFP_KERNEL);
++	if (!usebuffer)
++		return -ENOMEM;
++	((u32*)usebuffer)[1024]=GENTOO_PROC_WRAPPER_OVERFLOW_MAGIC;
++
++	retval=wrapper_data->read_func(usebuffer, &start, *offset, count, &is_eof, wrapper_data->data);
++
++	BUG_ON(GENTOO_PROC_WRAPPER_OVERFLOW_MAGIC != ((u32*)usebuffer)[1024]);
++
++	if (0 > retval)
++	{
++		printk(KERN_ERR "Proc read failed with %d", retval);
++		goto out;
++	}
++
++	if (copy_to_user(buffer, start, retval)) {
++		printk(KERN_NOTICE "copy to user failed in amd drivers proc code\n");
++		retval=-EFAULT;
++		goto out;
++	}
++	*offset+=retval;
++	
++out:
++	if (usebuffer)
++		kfree(usebuffer);
++	return retval;
++}
++static ssize_t gentoo_proc_wrapper_write (struct file *myfile, const char __user *buffer, size_t count, loff_t *offset) {
++	gentoo_proc_wrapper_t* wrapper_data=(gentoo_proc_wrapper_t*)(myfile->private_data);
++	int retval=0;
++	void *usebuffer=NULL;
++
++	BUG_ON(*offset);
++	if (!wrapper_data->write_func)
++		return -EPERM;
++	
++	usebuffer=kmalloc(count, GFP_KERNEL);
++	if (!usebuffer)
++		return -ENOMEM;
++	if (copy_from_user(usebuffer, buffer, count)) {
++		printk(KERN_NOTICE "copy from user failed in amd drivers proc code\n");
++		retval=-EFAULT;
++		goto out;
++	}
++	
++	retval=wrapper_data->write_func(myfile, buffer, count, wrapper_data->data);
++	*offset+=retval;
++out:
++	if (usebuffer)
++		kfree(usebuffer);
++	return retval;
++}
++static int gentoo_proc_wrapper_open(struct inode *myinode, struct file *myfile) {
++	myfile->private_data=PDE_DATA(myinode);
++	return generic_file_open(myinode, myfile);
++}
++struct file_operations gentoo_proc_fops = {
++	.read=gentoo_proc_wrapper_read,
++	.write=gentoo_proc_wrapper_write,
++	.open=gentoo_proc_wrapper_open,
++};
++	
++static void *gentoo_proc_wrapper_data(read_proc_t *reader, write_proc_t *writer, void *mydata) {
++	gentoo_proc_wrapper_t *retval=kmalloc(sizeof(gentoo_proc_wrapper_t), GFP_KERNEL);
++	if (!retval)
++		return retval;
++	retval->read_func=reader;
++	retval->write_func=writer;
++	retval->data=mydata;
++	return retval;
++}
++
++static struct proc_dir_entry *firegl_proc_init( device_t *dev,
++                                                int minor,
++                                                struct proc_dir_entry *root,
++                                                struct proc_dir_entry **dev_root,
++                                                kcl_proc_list_t *proc_list ) // proc_list must be terminated!
++{
++    struct proc_dir_entry *ent;
++    char    name[64];
++    kcl_proc_list_t *list = proc_list;
++	void *tempdata;
++    KCL_DEBUG1(FN_FIREGL_PROC, "minor %d, proc_list 0x%08lx\n", minor, (unsigned long)proc_list);
++    if (!minor)
++    {
++        root = proc_mkdir("ati", NULL);
++    }
++
++    if (!root)
++    {
++        KCL_DEBUG_ERROR("Cannot create /proc/ati\n");
++        return NULL;
++    }
++
++    if (minor == 0)
++    {
++        // Global major debice number entry
++		tempdata=gentoo_proc_wrapper_data((read_proc_t*)firegl_major_proc_read, NULL, NULL);
++		if (!tempdata)
++			return NULL;
++        ent = proc_create_data("major", S_IFREG|S_IRUGO, root, &gentoo_proc_fops, tempdata);
++        if (!ent)
++        {
++            remove_proc_entry("ati", NULL);
++            KCL_DEBUG_ERROR("Cannot create /proc/ati/major\n");
++            return NULL;
++        }
++    }
++
++    sprintf(name, "%d", minor);
++    *dev_root = proc_mkdir(name, root);
++    if (!*dev_root) {
++        remove_proc_entry("major", root);
++        remove_proc_entry("ati", NULL);
++        KCL_DEBUG_ERROR("Cannot create /proc/ati/%s\n", name);
++        return NULL;
++    }
++
++    while (list->f || list->fops)
++    {
++		struct file_operations *my_fops = &gentoo_proc_fops;
++        if (list->fops)
++        {
++            my_fops = (struct file_operations*)list->fops;
++			tempdata=(dev->pubdev.signature == FGL_DEVICE_SIGNATURE)? firegl_find_device(minor) : (dev);
++        }
++		else {
++			BUG_ON(!list->f);
++			tempdata=gentoo_proc_wrapper_data((read_proc_t*)list->f, NULL, (dev->pubdev.signature == FGL_DEVICE_SIGNATURE)? firegl_find_device(minor) : (dev) );
++			if (!tempdata)
++				return NULL;
++		}
++		//printk(KERN_NOTICE "name %s, dev %p, func %p, data %p\n", list->name, (dev->pubdev.signature == FGL_DEVICE_SIGNATURE)? firegl_find_device(minor) : (dev), list->f, tempdata);
++        ent = proc_create_data(list->name, S_IFREG|S_IRUGO, *dev_root, my_fops, tempdata);
++
++        if (!ent)
++        {
++            KCL_DEBUG_ERROR("Cannot create /proc/ati/%s/%s\n", name, list->name);
++            while (proc_list != list)
++            {
++                remove_proc_entry(proc_list->name, *dev_root);
++                proc_list++;
++            }
++            remove_proc_entry(name, root);
++            if (!minor)
++            {
++                remove_proc_entry("major", root);
++                remove_proc_entry("ati", NULL);
++            }
++            return NULL;
++        }
++
++        list++;
++    }
++
++    if (minor == 0)
++    {
++        // Global debug entry, only create it once
++		tempdata=gentoo_proc_wrapper_data((read_proc_t*)firegl_debug_proc_read_wrap, (write_proc_t*)firegl_debug_proc_write_wrap, dev);
++		if (!tempdata)
++			return NULL;
++        ent=proc_create_data("debug", S_IFREG|S_IRUGO, root, &gentoo_proc_fops, tempdata);
++		if (!ent)
++			return NULL;
++    }
++
++    return root;
++}
++#else
+ static struct proc_dir_entry *firegl_proc_init( device_t *dev,
+                                                 int minor,
+                                                 struct proc_dir_entry *root,
+@@ -677,6 +873,7 @@
+ 
+     return root;
+ }
++#endif
+ 
+ static int firegl_proc_cleanup( int minor,
+                                 struct proc_dir_entry *root,
diff --git a/pkgs/os-specific/linux/bbswitch/default.nix b/pkgs/os-specific/linux/bbswitch/default.nix
index 692ec0df5bdc..675fe7695af9 100644
--- a/pkgs/os-specific/linux/bbswitch/default.nix
+++ b/pkgs/os-specific/linux/bbswitch/default.nix
@@ -2,7 +2,7 @@
 
 let
   baseName = "bbswitch";
-  version = "0.6";
+  version = "0.7";
   name = "${baseName}-${version}-${kernelDev.version}";
 
 in
@@ -12,7 +12,7 @@ stdenv.mkDerivation {
 
   src = fetchurl {
     url = "https://github.com/Bumblebee-Project/${baseName}/archive/v${version}.tar.gz";
-    sha256 = "1y1wggfrlpxybz5cvrbvvpqa2hh6ncazzdlg9c94sx40n6p5dcf4";
+    sha256 = "0na6gfnvmp5fjbm430ms342hmrsbr6cf78n6hldqb8js2ry3f8dw";
   };
 
   preBuild = ''
diff --git a/pkgs/os-specific/linux/bluez/bluez5.nix b/pkgs/os-specific/linux/bluez/bluez5.nix
index 561f2d8e1e70..6bc0759c1a2b 100644
--- a/pkgs/os-specific/linux/bluez/bluez5.nix
+++ b/pkgs/os-specific/linux/bluez/bluez5.nix
@@ -1,23 +1,22 @@
-{ stdenv, fetchurl, pkgconfig, dbus, glib, libusb, alsaLib, python, makeWrapper
-, pythonDBus, pygobject, readline, libsndfile, udev, libical, systemd }:
+{ stdenv, fetchurl, pkgconfig, dbus, glib, libusb, alsaLib, python,
+  pythonPackages, pythonDBus, readline, libsndfile, udev, libical,
+  systemd }:
 
 assert stdenv.isLinux;
 
-let
-  pythonpath = "${pythonDBus}/lib/${python.libPrefix}/site-packages:"
-    + "${pygobject}/lib/${python.libPrefix}/site-packages";
-in
-   
 stdenv.mkDerivation rec {
-  name = "bluez-5.3";
+  name = "bluez-5.8";
    
   src = fetchurl {
     url = "mirror://kernel/linux/bluetooth/${name}.tar.xz";
-    sha256 = "41b0559e3a8436a739eb7cc79156ca91daf8c115f57971b6bcb422ee0213db42";
+    sha256 = "1l33lq1lpg7hy26138ir5dj4gl3mql2qxpj20rjnnwyckc3jk700";
   };
 
+  pythonPath = with pythonPackages;
+    [ pythonDBus pygobject3 recursivePthLoader ];
+
   buildInputs =
-    [ pkgconfig dbus.libs glib libusb alsaLib python makeWrapper
+    [ pkgconfig dbus.libs glib libusb alsaLib python pythonPackages.wrapPython
       readline libsndfile udev libical
       # Disables GStreamer; not clear what it gains us other than a
       # zillion extra dependencies.
@@ -49,7 +48,9 @@ stdenv.mkDerivation rec {
   # FIXME: Move these into a separate package to prevent Bluez from
   # depending on Python etc.
   postInstall = ''
-    pushd test
+    mkdir $out/test
+    cp -a test $out
+    pushd $out/test
     for a in \
             simple-agent \
             test-adapter \
@@ -58,14 +59,19 @@ stdenv.mkDerivation rec {
             list-devices \
             monitor-bluetooth \
             ; do
-      cp $a $out/bin/bluez-$a
-      wrapProgram $out/bin/bluez-$a --prefix PYTHONPATH : ${pythonpath}
+      ln -s ../test/$a $out/bin/bluez-$a
     done
     popd
+    wrapPythonProgramsIn $out/test "$out/test $pythonPath"
+
+    # for bluez4 compatibility for NixOS
+    mkdir $out/sbin
+    ln -s ../libexec/bluetooth/bluetoothd $out/sbin/bluetoothd
   '';
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = http://www.bluez.org/;
     description = "Bluetooth support for Linux";
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix b/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix
index 9ddddfde259a..f5efc565753c 100644
--- a/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix
+++ b/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix
@@ -54,8 +54,8 @@ in stdenv.mkDerivation {
   buildInputs = [ dpkg ];
 
   installPhase = ''
-    mkdir -p $out/share
-    cp -r lib/firmware/* "$out/"
+    mkdir -p $out/share $out/lib/firmware
+    cp -r lib/firmware/* "$out/lib/firmware/"
     cp -r usr/share/doc $out/share/
     find $out/share -name changelog.gz | xargs rm
   '';
@@ -65,6 +65,5 @@ in stdenv.mkDerivation {
     homepage = http://packages.debian.org/sid/firmware-linux-nonfree;
     license = stdenv.lib.licenses.unfreeRedistributableFirmware;
     platforms = stdenv.lib.platforms.linux;
-    priority = 10; # low priority so that other packages can override this big package
   };
 }
diff --git a/pkgs/os-specific/linux/firmware/raspberrypi/default.nix b/pkgs/os-specific/linux/firmware/raspberrypi/default.nix
index 02d7194b5007..c98930314954 100644
--- a/pkgs/os-specific/linux/firmware/raspberrypi/default.nix
+++ b/pkgs/os-specific/linux/firmware/raspberrypi/default.nix
@@ -1,11 +1,15 @@
 {stdenv, fetchurl }:
 
-stdenv.mkDerivation {
-  name = "raspberrypi-firmware-20160106";
+let
+
+  rev = "3ab17ac25e";
+
+in stdenv.mkDerivation {
+  name = "raspberrypi-firmware-${rev}";
 
   src = fetchurl {
-    url = "https://github.com/raspberrypi/firmware/archive/4ade27942e.tar.gz";
-    sha256 = "0f4p920vr7dcj4hprgil8baqqbnsjx1jykz0pkdx29mqy0n0xanl";
+    url = "https://github.com/raspberrypi/firmware/archive/${rev}.tar.gz";
+    sha256 = "080va4zz858bwwgxam8zy58gpwjpxfg7v5h1q5b4cpbzjihsxcx9";
   };
 
   installPhase = ''
diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix
index 90210b8d5ebb..d4f7c4e67187 100644
--- a/pkgs/os-specific/linux/kernel/common-config.nix
+++ b/pkgs/os-specific/linux/kernel/common-config.nix
@@ -24,9 +24,7 @@ with stdenv.lib;
   # Support drivers that need external firmware.
   STANDALONE n
 
-  # Enable the complete Linux kernel ".config" file to be saved in the kernel.
-  # Also, make it available at runtime as /proc/config.gz.
-  IKCONFIG y
+  # Make /proc/config.gz available.
   IKCONFIG_PROC y
 
   # Optimize with -O2, not -Os.
@@ -103,7 +101,9 @@ with stdenv.lib;
   FB_SIS_300 y
   FB_SIS_315 y
   FB_3DFX_ACCEL y
-  FB_GEODE y
+  ${optionalString (versionOlder version "3.9" || stdenv.system == "i686-linux") ''
+    FB_GEODE y
+  ''}
 
   # Video configuration.
   # Enable KMS for devices whose X.org driver supports it.
diff --git a/pkgs/os-specific/linux/kernel/linux-3.10.nix b/pkgs/os-specific/linux/kernel/linux-3.10.nix
index e054e5e16f5c..fa57fdd93ddc 100644
--- a/pkgs/os-specific/linux/kernel/linux-3.10.nix
+++ b/pkgs/os-specific/linux/kernel/linux-3.10.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, ... } @ args:
 
 import ./generic.nix (args // rec {
-  version = "3.10.9";
+  version = "3.10.10";
 
   src = fetchurl {
     url = "mirror://kernel/linux/kernel/v3.x/linux-${version}.tar.xz";
-    sha256 = "1kwi5v4rw06rmb548wjkgi27amsfvpfd2n07bmyjvjqnqrldm5bk";
+    sha256 = "01cpg6j1jsjh4vgvmia12y6rci4gqb967gc0gqpz5gcimzg4bb5p";
   };
 
   features.iwlwifi = true;
diff --git a/pkgs/os-specific/linux/kernel/linux-3.11.nix b/pkgs/os-specific/linux/kernel/linux-3.11.nix
new file mode 100644
index 000000000000..34b2d4882897
--- /dev/null
+++ b/pkgs/os-specific/linux/kernel/linux-3.11.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl, ... } @ args:
+
+import ./generic.nix (args // rec {
+  version = "3.11";
+  modDirVersion = "3.11.0";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/kernel/v3.x/linux-${version}.tar.xz";
+    sha256 = "1yfpa4fzhsn4r5dwkcf3azy0vqdms865jaikn3fdwbabmpqchgl0";
+  };
+
+  features.iwlwifi = true;
+  features.efiBootStub = true;
+  features.needsCifsUtils = true;
+  features.canDisableNetfilterConntrackHelpers = true;
+  features.netfilterRPFilter = true;
+})
diff --git a/pkgs/os-specific/linux/kernel/linux-3.4.nix b/pkgs/os-specific/linux/kernel/linux-3.4.nix
index 74304f5239c4..5bcb8aaf2506 100644
--- a/pkgs/os-specific/linux/kernel/linux-3.4.nix
+++ b/pkgs/os-specific/linux/kernel/linux-3.4.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, ... } @ args:
 
 import ./generic.nix (args // rec {
-  version = "3.4.58";
+  version = "3.4.60";
 
   src = fetchurl {
     url = "mirror://kernel/linux/kernel/v3.x/linux-${version}.tar.xz";
-    sha256 = "11kcxlchiz7ks61yqj29dy2mnncfxcc7qr563wby1k58rvwf8g74";
+    sha256 = "16pg9sdsf5nwp1lc583dcbn1ay67b7yb55xg8cgv63bvmh4h3vrb";
   };
 
   features.iwlwifi = true;
diff --git a/pkgs/os-specific/linux/kernel/linux-rpi-3.6.nix b/pkgs/os-specific/linux/kernel/linux-rpi-3.6.nix
index 319c2ba42b49..fdf2f139c331 100644
--- a/pkgs/os-specific/linux/kernel/linux-rpi-3.6.nix
+++ b/pkgs/os-specific/linux/kernel/linux-rpi-3.6.nix
@@ -1,14 +1,16 @@
 { stdenv, fetchurl, ... } @ args:
 
-let rev = "91a3be5b2b"; in
+let
 
-import ./generic.nix (args // rec {
+  rev = "7849605f5a";
+
+in import ./generic.nix (args // rec {
   version = "3.6.y-${rev}";
 
   src = fetchurl {
     url = "https://api.github.com/repos/raspberrypi/linux/tarball/${rev}";
     name = "linux-raspberrypi-${version}.tar.gz";
-    sha256 = "04370b1da7610622372940decdc13ddbba2a58c9da3c3bd3e7df930a399f140d";
+    sha256 = "1diwc5p6az6ipcldwmkq7hb5f15nvdgwzmypixc2vmzmc4ylarxl";
   };
 
   features.iwlwifi = true;
diff --git a/pkgs/os-specific/linux/lm-sensors/default.nix b/pkgs/os-specific/linux/lm-sensors/default.nix
index 4cfbdd6e691b..354027dbd714 100644
--- a/pkgs/os-specific/linux/lm-sensors/default.nix
+++ b/pkgs/os-specific/linux/lm-sensors/default.nix
@@ -1,13 +1,13 @@
 { stdenv, fetchurl, bison, flex, which, perl }:
 
-let version = "3.3.1"; in
+let version = "3.3.4"; in
 
 stdenv.mkDerivation rec {
-  name = "lm-sensors-3.3.1";
+  name = "lm-sensors-${version}";
   
   src = fetchurl {
     url = "http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-${version}.tar.bz2";
-    sha256 = "13v2gszagmx8hwjyzh2k47rdpc2kyg9zky3kdqhdbgzp8lwpik6g";
+    sha256 = "0vd7dgpcri7cbvgl5fwvja53lqz829vkbbp17x7b5r2xrc88cq5l";
   };
 
   buildInputs = [ bison flex which perl ];
diff --git a/pkgs/os-specific/linux/lttng-modules/default.nix b/pkgs/os-specific/linux/lttng-modules/default.nix
index 7495deb231d2..e58d61e426ba 100644
--- a/pkgs/os-specific/linux/lttng-modules/default.nix
+++ b/pkgs/os-specific/linux/lttng-modules/default.nix
@@ -1,12 +1,12 @@
 { stdenv, fetchurl, kernelDev }:
 
 stdenv.mkDerivation rec {
-  pname = "lttng-modules-2.2.1";
+  pname = "lttng-modules-2.3.0";
   name = "${pname}-${kernelDev.version}";
 
   src = fetchurl {
     url = "https://lttng.org/files/lttng-modules/${pname}.tar.bz2";
-    sha256 = "00ww1443ssv614s1ix6zby8llaf6zzlxcf5k4w7jsyji47ng33m2";
+    sha256 = "0l9fbmpsjvm5pbrc6axy8chdp21j4b8fm0hmjhpk658ll0iixmpb";
   };
 
   patches = [ ./lttng-fix-build-error-on-linux-3.2.patch ];
diff --git a/pkgs/os-specific/linux/microcode/amd.nix b/pkgs/os-specific/linux/microcode/amd.nix
index dc5959d400d1..0ca33fa31f04 100644
--- a/pkgs/os-specific/linux/microcode/amd.nix
+++ b/pkgs/os-specific/linux/microcode/amd.nix
@@ -1,22 +1,25 @@
 { stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
-
   name = "amd-ucode-2012-09-10";
 
   src = fetchurl {
-    url = "http://www.amd64.org/pub/microcode/${name}.tar";
+    urls =
+      [ "http://pkgs.fedoraproject.org/repo/pkgs/microcode_ctl/${name}.tar/559bc355d3799538584add80df2996f0/${name}.tar"
+        "http://www.amd64.org/pub/microcode/${name}.tar"
+      ];
     sha256 = "065phvhx5hx5ssdd1x2p5m1yv26ak7l5aaw6yk6h95x9mxn5r111";
   };
 
   installPhase = ''
-    mkdir -p $out/amd-ucode
-    mv microcode_amd_fam15h.bin microcode_amd.bin $out/amd-ucode/
+    mkdir -p $out/lib/firmware/amd-ucode $out/share/doc/amd-ucode
+    mv microcode_amd_fam15h.bin microcode_amd.bin $out/lib/firmware/amd-ucode/
+    mv LICENSE $out/share/doc/amd-ucode
   '';
 
   meta = {
-    description = "AMD Processor Microcode Patch";
-    homepage = "http://www.amd64.org/support/microcode.html";
-    license = "non-free";
+    description = "AMD Processor microcode patch";
+    homepage = http://www.amd64.org/support/microcode.html;
+    license = stdenv.lib.licenses.unfreeRedistributableFirmware;
   };
 }
diff --git a/pkgs/os-specific/linux/microcode/intel.nix b/pkgs/os-specific/linux/microcode/intel.nix
index e85ab29078b2..ad7cea180846 100644
--- a/pkgs/os-specific/linux/microcode/intel.nix
+++ b/pkgs/os-specific/linux/microcode/intel.nix
@@ -1,15 +1,17 @@
 { stdenv, fetchurl, microcode2ucode }:
 
-let version = "20120606";
-    num = "21385";
-in stdenv.mkDerivation {
+let version = "20130808"; in
+
+stdenv.mkDerivation {
   name = "microcode-intel-${version}";
+
   src = fetchurl {
-    url = "http://downloadmirror.intel.com/${num}/eng/microcode-${version}.tgz";
-    sha256 = "0hs95lj24zx3jscc64zg3hf8xc95vrnsyqlid66h453ib0wf8fg1";
+    url = "http://downloadmirror.intel.com/23082/eng/microcode-${version}.tgz";
+    sha256 = "19v0059v6dxv7ly57wgqy9nkjjnmprgwz4s94khdf213k5vikpfm";
   };
 
   buildInputs = [ microcode2ucode ];
+
   sourceRoot = ".";
 
   buildPhase = ''
@@ -17,12 +19,13 @@ in stdenv.mkDerivation {
   '';
 
   installPhase = ''
-    ensureDir $out
-    cp -r intel-ucode "$out/"
+    mkdir -p $out/lib/firmware
+    cp -r intel-ucode "$out/lib/firmware/"
   '';
 
   meta = {
     homepage = http://www.intel.com/;
     description = "Microcode for Intel processors";
+    license = stdenv.lib.licenses.unfree;
   };
 }
diff --git a/pkgs/os-specific/linux/nvidia-x11/default.nix b/pkgs/os-specific/linux/nvidia-x11/default.nix
index 268cdac85050..f8413b0e5416 100644
--- a/pkgs/os-specific/linux/nvidia-x11/default.nix
+++ b/pkgs/os-specific/linux/nvidia-x11/default.nix
@@ -10,12 +10,7 @@ with stdenv.lib;
 
 let
 
-  versionNumber = "319.32";
-  kernel310patch = fetchurl {
-    url = "https://projects.archlinux.org/svntogit/packages.git/plain/trunk/nvidia-linux-3.10.patch?h=packages/nvidia&id=415c1daa9ccb1ec46c172b304f40929239d87af8";
-    name = "nvidia-linux-3.10.patch";
-    sha256 = "0nhzg6jdk9sf1vzj519gqi8a2n9xydhz2bcz472pss2cfgbc1ahb";
-  };
+  versionNumber = "319.49";
 
 in
 
@@ -26,18 +21,19 @@ stdenv.mkDerivation {
 
   patches =
     [ ./version-test.patch ]
-    ++ optional (!libsOnly && versionAtLeast kernelDev.version "3.10") kernel310patch;
+    ++ optional (!libsOnly && versionAtLeast kernelDev.version "3.11") ./nvidia-drivers-linux-3.11-incremental.patch
+    ;
 
   src =
     if stdenv.system == "i686-linux" then
       fetchurl {
         url = "http://us.download.nvidia.com/XFree86/Linux-x86/${versionNumber}/NVIDIA-Linux-x86-${versionNumber}.run";
-        sha256 = "02rjiizgb9mgal0qrklzjvfzybv139yv6za8xp045k7qdyqvsqzf";
+        sha256 = "1ngss9zw109a5xfr3vvhf1ajqjvvqc7j3dzw9h56vddck6kpbc22";
       }
     else if stdenv.system == "x86_64-linux" then
       fetchurl {
         url = "http://us.download.nvidia.com/XFree86/Linux-x86_64/${versionNumber}/NVIDIA-Linux-x86_64-${versionNumber}-no-compat32.run";
-        sha256 = "18268q3pa6v4ygfnlm888jmp84dmg1w9c323cr51pn5jg54vygcm";
+        sha256 = "1i68jfms8033p2x0r3z4fdjcmkkhbi6yizzc0ck9ydagdgg3liwp";
       }
     else throw "nvidia-x11 does not support platform ${stdenv.system}";
 
diff --git a/pkgs/os-specific/linux/nvidia-x11/nvidia-drivers-linux-3.11-incremental.patch b/pkgs/os-specific/linux/nvidia-x11/nvidia-drivers-linux-3.11-incremental.patch
new file mode 100644
index 000000000000..bb6fad932e3c
--- /dev/null
+++ b/pkgs/os-specific/linux/nvidia-x11/nvidia-drivers-linux-3.11-incremental.patch
@@ -0,0 +1,25 @@
+From 8a8647ad942c8ac5161e1335f7f3e9dbb34dbf9e Mon Sep 17 00:00:00 2001
+From: Lukas Elsner <open@mindrunner.de>
+Date: Wed, 17 Jul 2013 01:16:04 +0200
+Subject: [PATCH] replace num_physpages with totalram_pages
+
+---
+ kernel/nv-linux.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kernel/nv-linux.h b/kernel/nv-linux.h
+index 4e5ed89..46c51ec 100644
+--- a/kernel/nv-linux.h
++++ b/kernel/nv-linux.h
+@@ -957,7 +957,7 @@ static inline int nv_execute_on_all_cpus(void (*func)(void *info), void *info)
+ #endif
+ 
+ #if !defined(NV_VMWARE)
+-#define NV_NUM_PHYSPAGES                num_physpages
++#define NV_NUM_PHYSPAGES                totalram_pages
+ #define NV_GET_CURRENT_PROCESS()        current->tgid
+ #define NV_IN_ATOMIC()                  in_atomic()
+ #define NV_LOCAL_BH_DISABLE()           local_bh_disable()
+-- 
+1.8.3.2
+
diff --git a/pkgs/os-specific/linux/spl/default.nix b/pkgs/os-specific/linux/spl/default.nix
index 75ff28939722..6a9a4cc963fa 100644
--- a/pkgs/os-specific/linux/spl/default.nix
+++ b/pkgs/os-specific/linux/spl/default.nix
@@ -1,10 +1,10 @@
 { stdenv, fetchurl, kernelDev, perl, autoconf, automake, libtool, coreutils, gawk }:
 
 stdenv.mkDerivation {
-  name = "spl-0.6.1-${kernelDev.version}";
+  name = "spl-0.6.2-${kernelDev.version}";
   src = fetchurl {
-    url = "http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-0.6.1.tar.gz";
-    sha256 = "1bnianc00bkpdbcmignzqfv9yr8h6vj56wfl7lkhi9a5m5b3xakb";
+    url = http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-0.6.2.tar.gz;
+    sha256 = "196scl8q0bkkak6m0p1l1fz254cgsizqm73bf9wk3iynamq7qmrw";
   };
 
   patches = [ ./install_prefix.patch ];
@@ -27,6 +27,8 @@ stdenv.mkDerivation {
      --with-linux-obj=${kernelDev}/lib/modules/${kernelDev.modDirVersion}/build
   '';
 
+  enableParallelBuilding = true;
+
   meta = {
     description = "Kernel module driver for solaris porting layer (needed by in-kernel zfs)";
 
diff --git a/pkgs/os-specific/linux/zfs/default.nix b/pkgs/os-specific/linux/zfs/default.nix
index ac07474d3f4b..06615d170a17 100644
--- a/pkgs/os-specific/linux/zfs/default.nix
+++ b/pkgs/os-specific/linux/zfs/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, kernelDev, spl, perl, autoconf, automake, libtool, zlib, libuuid, coreutils, utillinux }:
 
 stdenv.mkDerivation {
-  name = "zfs-0.6.1-${kernelDev.version}";
+  name = "zfs-0.6.2-${kernelDev.version}";
 
   src = fetchurl {
-    url = http://archive.zfsonlinux.org/downloads/zfsonlinux/zfs/zfs-0.6.1.tar.gz;
-    sha256 = "1ykph9d4p70mam6lvcx0zld6d34gch15dsilds5ncbxh0m52knl0";
+    url = http://archive.zfsonlinux.org/downloads/zfsonlinux/zfs/zfs-0.6.2.tar.gz;
+    sha256 = "18b5f18k8mwb17r5ippsilmp1a2sqjw9fwn0z82159dkhsadg33b";
   };
 
   patches = [ ./mount_zfs_prefix.patch ./nix-build.patch ];
@@ -33,6 +33,8 @@ stdenv.mkDerivation {
     --with-spl=${spl}/libexec/spl
   '';
 
+  enableParallelBuilding = true;
+
   meta = {
     description = "ZFS Filesystem Linux Kernel module";
     longDescription = ''