aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-3.9/703-phy-add-detach-callback-to-struct-phy_driver.patch
blob: 5d178e627a6325380c24863b9d30345332964364 (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
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -612,6 +612,9 @@ EXPORT_SYMBOL(phy_attach);
  */
 void phy_detach(struct phy_device *phydev)
 {
+	if (phydev->drv && phydev->drv->detach)
+		phydev->drv->detach(phydev);
+
 	phydev->attached_dev->phydev = NULL;
 	phydev->attached_dev = NULL;
 
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -432,6 +432,12 @@ struct phy_driver {
 	 */
 	int (*did_interrupt)(struct phy_device *phydev);
 
+	/*
+	 * Called before an ethernet device is detached
+	 * from the PHY.
+	 */
+	void (*detach)(struct phy_device *phydev);
+
 	/* Clears up any memory if needed */
 	void (*remove)(struct phy_device *phydev);
 
.sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
--- a/fs/squashfs/inode.c
+++ b/fs/squashfs/inode.c
@@ -4,6 +4,9 @@
  * Copyright (c) 2002, 2003, 2004, 2005, 2006
  * Phillip Lougher <phillip@lougher.org.uk>
  *
+ * LZMA decompressor support added by Oleg I. Vdovikin
+ * Copyright (c) 2005 Oleg I.Vdovikin <oleg@cs.msu.su>
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2,
@@ -21,6 +24,7 @@
  * inode.c
  */
 
+#define SQUASHFS_LZMA
 #include <linux/types.h>
 #include <linux/squashfs_fs.h>
 #include <linux/module.h>
@@ -44,6 +48,19 @@
 
 #include "squashfs.h"
 
+#ifdef SQUASHFS_LZMA
+#include <linux/LzmaDecode.h>
+
+/* default LZMA settings, should be in sync with mksquashfs */
+#define LZMA_LC 3
+#define LZMA_LP 0
+#define LZMA_PB 2
+
+#define LZMA_WORKSPACE_SIZE ((LZMA_BASE_SIZE + \
+      (LZMA_LIT_SIZE << (LZMA_LC + LZMA_LP))) * sizeof(CProb))
+
+#endif
+
 static void squashfs_put_super(struct super_block *);
 static int squashfs_statfs(struct dentry *, struct kstatfs *);
 static int squashfs_symlink_readpage(struct file *file, struct page *page);
@@ -64,7 +81,11 @@
 			const char *, void *, struct vfsmount *);
 
 
+#ifdef SQUASHFS_LZMA
+static unsigned char lzma_workspace[LZMA_WORKSPACE_SIZE];
+#else
 static z_stream stream;
+#endif
 
 static struct file_system_type squashfs_fs_type = {
 	.owner = THIS_MODULE,
@@ -249,6 +270,15 @@
 	if (compressed) {
 		int zlib_err;
 
+#ifdef SQUASHFS_LZMA
+		if ((zlib_err = LzmaDecode(lzma_workspace,
+			LZMA_WORKSPACE_SIZE, LZMA_LC, LZMA_LP, LZMA_PB,
+			c_buffer, c_byte, buffer, msblk->read_size, &bytes)) != LZMA_RESULT_OK)
+		{
+			ERROR("lzma returned unexpected result 0x%x\n", zlib_err);
+			bytes = 0;
+		}
+#else
 		stream.next_in = c_buffer;
 		stream.avail_in = c_byte;
 		stream.next_out = buffer;
@@ -263,7 +293,7 @@
 			bytes = 0;
 		} else
 			bytes = stream.total_out;
-
+#endif
 		up(&msblk->read_data_mutex);
 	}
 
@@ -2045,15 +2075,19 @@
 	printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
 		"Phillip Lougher\n");
 
+#ifndef SQUASHFS_LZMA
 	if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
 		ERROR("Failed to allocate zlib workspace\n");
 		destroy_inodecache();
 		err = -ENOMEM;
 		goto out;
 	}
+#endif
 
 	if ((err = register_filesystem(&squashfs_fs_type))) {
+#ifndef SQUASHFS_LZMA
 		vfree(stream.workspace);
+#endif
 		destroy_inodecache();
 	}
 
@@ -2064,7 +2098,9 @@
 
 static void __exit exit_squashfs_fs(void)
 {
+#ifndef SQUASHFS_LZMA
 	vfree(stream.workspace);
+#endif
 	unregister_filesystem(&squashfs_fs_type);
 	destroy_inodecache();
 }