diff -ur a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_network/mv_ethernet/mv_netdev.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_network/mv_ethernet/mv_netdev.c
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_network/mv_ethernet/mv_netdev.c	2011-07-01 10:24:01.000000000 +0200
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_network/mv_ethernet/mv_netdev.c	2011-11-02 09:54:21.000000000 +0100
@@ -55,10 +55,6 @@
 #endif /* CONFIG_MV_CPU_PERF_CNTRS */
 
 #include "mv_netdev.h"
-#ifdef MY_ABC_HERE
-#include <linux/synobios.h>
-extern int (*funcSYNOSendNetLinkEvent)(unsigned int type, unsigned int ifaceno);
-#endif
 
 #ifdef MY_ABC_HERE
 #include <linux/ethtool.h>
@@ -671,22 +667,12 @@
             mvEthPortUp( priv->hal_priv );
             netif_carrier_on( dev );
             netif_wake_queue( dev );            
-#ifdef MY_ABC_HERE
-	    if (funcSYNOSendNetLinkEvent) {
-		funcSYNOSendNetLinkEvent(NET_LINK, dev->ifindex);
-	    }
-#endif
         }
     	else
         {
             netif_carrier_off( dev );
             netif_stop_queue( dev );
             mv_eth_down_internals( dev );
-#ifdef MY_ABC_HERE
-	    if (funcSYNOSendNetLinkEvent) {
-		funcSYNOSendNetLinkEvent(NET_NOLINK, dev->ifindex);
-	    }
-#endif
         }
 
         spin_unlock(priv->lock);
diff -ur a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
--- a/drivers/net/e1000e/netdev.c	2011-07-01 10:24:19.000000000 +0200
+++ b/drivers/net/e1000e/netdev.c	2011-11-02 09:54:50.000000000 +0100
@@ -51,7 +51,7 @@
 
 #include "e1000.h"
 
-#ifdef MY_ABC_HERE
+#ifdef SYNO_NETLINK
 #include <linux/synobios.h>
 extern int (*funcSYNOSendNetLinkEvent)(unsigned int type, unsigned int ifaceno);
 #endif
@@ -3820,7 +3820,7 @@
 				mod_timer(&adapter->phy_info_timer,
 					  round_jiffies(jiffies + 2 * HZ));
 
-#ifdef MY_ABC_HERE
+#ifdef SYNO_NETLINK
 			if (funcSYNOSendNetLinkEvent) {
 				funcSYNOSendNetLinkEvent(NET_LINK, netdev->ifindex);
 			}
@@ -3847,7 +3847,7 @@
 			if (adapter->flags & FLAG_RX_NEEDS_RESTART)
 				schedule_work(&adapter->reset_task);
 
-#ifdef MY_ABC_HERE
+#ifdef SYNO_NETLINK
 			if (funcSYNOSendNetLinkEvent) {
 				funcSYNOSendNetLinkEvent(NET_NOLINK, netdev->ifindex);
 			}
diff -ur a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
--- a/drivers/net/phy/phy.c	2011-07-01 10:24:22.000000000 +0200
+++ b/drivers/net/phy/phy.c	2011-11-02 09:54:57.000000000 +0100
@@ -39,10 +39,6 @@
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/uaccess.h>
-#ifdef MY_ABC_HERE
-#include <linux/synobios.h>
-extern int (*funcSYNOSendNetLinkEvent)(unsigned int type, unsigned int ifaceno);
-#endif
 
 /**
  * phy_print_status - Convenience function to print out the current phy status
@@ -846,11 +842,6 @@
 
 			/* If AN is done, we're running */
 			if (err > 0) {
-#ifdef MY_ABC_HERE
-				if (funcSYNOSendNetLinkEvent) {
-					funcSYNOSendNetLinkEvent(NET_LINK, phydev->attached_dev->ifindex);
-				}
-#endif
 				phydev->state = PHY_RUNNING;
 				netif_carrier_on(phydev->attached_dev);
 				phydev->adjust_link(phydev->attached_dev);
@@ -902,11 +893,6 @@
 				break;
 
 			if (phydev->link) {
-#ifdef MY_ABC_HERE
-				if (funcSYNOSendNetLinkEvent) {
-					funcSYNOSendNetLinkEvent(NET_LINK, phydev->attached_dev->ifindex);
-				}
-#endif
 				phydev->state = PHY_RUNNING;
 				netif_carrier_on(phydev->attached_dev);
 				phydev->adjust_link(phydev->attached_dev);
@@ -946,11 +932,6 @@
 				phydev->state = PHY_RUNNING;
 				netif_carrier_on(phydev->attached_dev);
 			} else {
-#ifdef MY_ABC_HERE
-				if (funcSYNOSendNetLinkEvent) {
-					funcSYNOSendNetLinkEvent(NET_NOLINK, phydev->attached_dev->ifindex);
-				}
-#endif
 #ifdef CONFIG_SYNO_MPC85XX_COMMON
 				phydev->speed = 0;
 #endif
@@ -994,11 +975,6 @@
 				 * still waiting for AN */
 				if (err > 0) {
 					phydev->state = PHY_RUNNING;
-#ifdef MY_ABC_HERE
-					if (funcSYNOSendNetLinkEvent) {
-						funcSYNOSendNetLinkEvent(NET_LINK, phydev->attached_dev->ifindex);
-					}
-#endif
 				} else {
 					phydev->state = PHY_AN;
 					phydev->link_timeout = PHY_AN_TIMEOUT;
diff -ur a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c
--- a/drivers/net/sk98lin/skge.c	2011-07-01 10:24:20.000000000 +0200
+++ b/drivers/net/sk98lin/skge.c	2011-11-02 09:54:51.000000000 +0100
@@ -87,7 +87,7 @@
 #include	<linux/moduleparam.h>
 #endif
 
-#ifdef MY_ABC_HERE
+#ifdef SYNO_NETLINK
 #include <linux/synobios.h>
 extern int (*funcSYNOSendNetLinkEvent)(unsigned int type, unsigned int ifaceno);
 #endif
@@ -6003,7 +6003,7 @@
 		spin_unlock_irqrestore(
 			&pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
 			Flags);
-#ifdef MY_ABC_HERE
+#ifdef SYNO_NETLINK
 				if (funcSYNOSendNetLinkEvent) {
 					funcSYNOSendNetLinkEvent(NET_NOLINK, pAC->dev[FromPort]->ifindex);
 				}
@@ -6132,7 +6132,7 @@
 			printk("    IPMI:            enabled\n");
 #endif
 #endif
-#ifdef MY_ABC_HERE
+#ifdef SYNO_NETLINK
 			if (funcSYNOSendNetLinkEvent) {
 				funcSYNOSendNetLinkEvent(NET_LINK, pAC->dev[FromPort]->ifindex);
 			}
@@ -6167,7 +6167,7 @@
 			if (pAC->dev[FromPort]->flags & IFF_RUNNING) {
 				printk("%s: network connection down\n", 
 					pAC->dev[FromPort]->name);
-#ifdef MY_ABC_HERE
+#ifdef SYNO_NETLINK
 				if (funcSYNOSendNetLinkEvent) {
 					funcSYNOSendNetLinkEvent(NET_NOLINK, pAC->dev[FromPort]->ifindex);
 				}
diff -ur a/drivers/net/sk98lin_10_70_7_3/skge.c b/drivers/net/sk98lin_10_70_7_3/skge.c
--- a/drivers/net/sk98lin_10_70_7_3/skge.c	2011-07-01 10:24:19.000000000 +0200
+++ b/drivers/net/sk98lin_10_70_7_3/skge.c	2011-11-02 09:54:49.000000000 +0100
@@ -88,10 +88,6 @@
 #include	<linux/moduleparam.h>
 #endif
 
-#ifdef MY_ABC_HERE
-#include <linux/synobios.h>
-extern int (*funcSYNOSendNetLinkEvent)(unsigned int type, unsigned int ifaceno);
-#endif
 
 /*******************************************************************************
  *
@@ -6307,11 +6303,6 @@
 		spin_unlock_irqrestore(
 			&pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
 			Flags);
-#ifdef MY_ABC_HERE
-		if (funcSYNOSendNetLinkEvent) {
-			funcSYNOSendNetLinkEvent(NET_NOLINK, pAC->dev[FromPort]->ifindex);
-		}
-#endif
 		break;
 	case SK_DRV_NET_UP:
 		spin_lock_irqsave(&pAC->InitLock, Flags);
@@ -6438,11 +6429,6 @@
 #endif
 #endif
 #endif
-#ifdef MY_ABC_HERE
-			if (funcSYNOSendNetLinkEvent) {
-				funcSYNOSendNetLinkEvent(NET_LINK, pAC->dev[FromPort]->ifindex);
-			}
-#endif
 		} else {
 			DoPrintInterfaceChange = SK_TRUE;
 		}
@@ -6517,11 +6503,6 @@
 			if (pAC->dev[FromPort]->flags & IFF_RUNNING) {
 				printk("%s: network connection down\n", 
 					pAC->dev[FromPort]->name);
-#ifdef MY_ABC_HERE
-				if (funcSYNOSendNetLinkEvent) {
-					funcSYNOSendNetLinkEvent(NET_NOLINK, pAC->dev[FromPort]->ifindex);
-				}
-#endif
 			}
 		} else {
 			DoPrintInterfaceChange = SK_TRUE;
diff -ur a/drivers/synobios/synobios.c b/drivers/synobios/synobios.c
--- a/drivers/synobios/synobios.c	2011-07-01 10:24:31.000000000 +0200
+++ b/drivers/synobios/synobios.c	2011-11-02 09:55:15.000000000 +0100
@@ -45,9 +45,6 @@
 static SYNO_SYS_STATUS *pgSysStatus = NULL;
 
 #ifdef MY_ABC_HERE
-extern int (*funcSYNOSendNetLinkEvent)(unsigned int type, unsigned int ifaceno);
-#endif
-#ifdef MY_ABC_HERE
 extern int (*funcSYNOSendHibernationEvent)(unsigned int type, unsigned int diskno);
 #endif
 #ifdef MY_ABC_HERE
@@ -132,22 +129,6 @@
 #endif
 
 #ifdef MY_ABC_HERE
-static int synobios_record_netlink_event(unsigned int type, unsigned int ifaceno)
-{
-	int ret;
-	SYNOBIOSEVENT   event;
-
-	event.event = SYNO_EVENT_NETLINK;
-	event.data1 = type;
-	event.data2 = ifaceno;
-
-	ret = synobios_record_event_new(&scSynoBios, &event);
-
-	return ret;
-}
-#endif
-
-#ifdef MY_ABC_HERE
 static int synobios_record_ebox_refresh_event(int portIndex)
 {
 	int ret = 0;
@@ -794,9 +775,6 @@
 	funcSYNOSendRaidEvent = synobios_record_raid_event;
 #endif
 #ifdef MY_ABC_HERE
-	funcSYNOSendNetLinkEvent = synobios_record_netlink_event;
-#endif
-#ifdef MY_ABC_HERE
 	funcSYNOSendHibernationEvent = synobios_record_hibernation_event;
 #endif
 #ifdef MY_ABC_HERE
@@ -822,9 +800,6 @@
 	funcSYNOSendRaidEvent = NULL;
 #endif
 #ifdef MY_ABC_HERE
-	funcSYNOSendNetLinkEvent = NULL;
-#endif
-#ifdef MY_ABC_HERE
 	funcSYNOSendHibernationEvent = NULL;
 #endif
 #ifdef MY_ABC_HERE
diff -ur a/fs/cifs/cifs_unicode.c b/fs/cifs/cifs_unicode.c
--- a/fs/cifs/cifs_unicode.c	2011-07-01 10:23:32.000000000 +0200
+++ b/fs/cifs/cifs_unicode.c	2011-11-02 09:53:14.000000000 +0100
@@ -69,18 +69,47 @@
 	wchar_t *wchar_to = (wchar_t *)to; /* needed to quiet sparse */
 
 	for (i = 0; len && *from; i++, from += charlen, len -= charlen) {
+#ifdef MY_ABC_HERE
+		if (0x0d == *from) {	//'\r'
+			to[i] = cpu_to_le16(0xf00d);
+			charlen = 1;
+		} else if (0x2a == *from) {	//'*'
+			to[i] = cpu_to_le16(0xf02a);
+			charlen = 1;
+		} else if (0x2f == *from) {	//'/'
+			to[i] = cpu_to_le16(0xf02f);
+			charlen = 1;
+		} else if (0x3c == *from) {	//'<'
+			to[i] = cpu_to_le16(0xf03c);
+			charlen = 1;
+		} else if (0x3e == *from) {	//'>'
+			to[i] = cpu_to_le16(0xf03e);
+			charlen = 1;
+		} else if (0x3f == *from) {	//'?'
+			to[i] = cpu_to_le16(0xf03f);
+			charlen = 1;
+		} else if (0x7c== *from) {	//'|'
+			to[i] = cpu_to_le16(0xf07c);
+			charlen = 1;
+		} else {
+#endif
 
 		/* works for 2.4.0 kernel or later */
 		charlen = codepage->char2uni(from, len, &wchar_to[i]);
 		if (charlen < 1) {
+#ifndef MY_ABC_HERE
 			cERROR(1,
 			       ("strtoUCS: char2uni of %d returned %d",
 				(int)*from, charlen));
+#endif
 			/* A question mark */
 			to[i] = cpu_to_le16(0x003f);
 			charlen = 1;
 		} else
 			to[i] = cpu_to_le16(wchar_to[i]);
+#ifdef MY_ABC_HERE
+		}
+#endif
 
 	}
 
diff -ur a/fs/cifs/connect.c b/fs/cifs/connect.c
--- a/fs/cifs/connect.c	2011-07-01 10:23:32.000000000 +0200
+++ b/fs/cifs/connect.c	2011-11-02 09:53:14.000000000 +0100
@@ -2340,9 +2340,15 @@
 					  nls_codepage);
 		bcc_ptr += 2 * bytes_returned;
 		bcc_ptr += 2;
+#ifdef MY_ABC_HERE
+		bytes_returned =
+		    cifs_strtoUCS((__le16 *) bcc_ptr, "Synology Linux version ",
+				  32, nls_codepage);
+#else
 		bytes_returned =
 		    cifs_strtoUCS((__le16 *) bcc_ptr, "Linux version ",
 				  32, nls_codepage);
+#endif
 		bcc_ptr += 2 * bytes_returned;
 		bytes_returned =
 		    cifs_strtoUCS((__le16 *) bcc_ptr, utsname()->release,
@@ -2370,8 +2376,13 @@
 			*bcc_ptr = 0;
 			bcc_ptr++;
 		}
+#ifdef MY_ABC_HERE
+		strcpy(bcc_ptr, "Synology Linux version ");
+		bcc_ptr += strlen("Synology Linux version ");
+#else
 		strcpy(bcc_ptr, "Linux version ");
 		bcc_ptr += strlen("Linux version ");
+#endif
 		strcpy(bcc_ptr, utsname()->release);
 		bcc_ptr += strlen(utsname()->release) + 1;
 		strcpy(bcc_ptr, CIFS_NETWORK_OPSYS);
@@ -2650,9 +2661,15 @@
 			bcc_ptr++;
 		}
 
+#ifdef MY_ABC_HERE
+		bytes_returned =
+		    cifs_strtoUCS((__le16 *) bcc_ptr, "Synology Linux version ",
+				  32, nls_codepage);
+#else
 		bytes_returned =
 		    cifs_strtoUCS((__le16 *) bcc_ptr, "Linux version ",
 				  32, nls_codepage);
+#endif
 		bcc_ptr += 2 * bytes_returned;
 		bytes_returned =
 		    cifs_strtoUCS((__le16 *) bcc_ptr, utsname()->release, 32,
@@ -2670,8 +2687,13 @@
 		*(bcc_ptr + 2) = 0;
 		bcc_ptr += 2;	/* null domain */
 	} else {		/* ASCII */
+#ifdef MY_ABC_HERE
+		strcpy(bcc_ptr, "Synology Linux version ");
+		bcc_ptr += strlen("Synology Linux version ");
+#else
 		strcpy(bcc_ptr, "Linux version ");
 		bcc_ptr += strlen("Linux version ");
+#endif
 		strcpy(bcc_ptr, utsname()->release);
 		bcc_ptr += strlen(utsname()->release) + 1;
 		strcpy(bcc_ptr, CIFS_NETWORK_OPSYS);
@@ -3043,9 +3065,15 @@
 			*bcc_ptr = 0;
 			bcc_ptr++;
 		}
+#ifdef MY_ABC_HERE
+		bytes_returned =
+		    cifs_strtoUCS((__le16 *) bcc_ptr, "Synology Linux version ",
+				  32, nls_codepage);
+#else
 		bytes_returned =
 		    cifs_strtoUCS((__le16 *) bcc_ptr, "Linux version ",
 				  32, nls_codepage);
+#endif
 		bcc_ptr += 2 * bytes_returned;
 		bytes_returned =
 		    cifs_strtoUCS((__le16 *) bcc_ptr, utsname()->release, 32,
@@ -3097,8 +3125,13 @@
 		}
 		/* BB fill in our workstation name if known BB */
 
+#ifdef MY_ABC_HERE
+		strcpy(bcc_ptr, "Synology Linux version ");
+		bcc_ptr += strlen("Synology Linux version ");
+#else
 		strcpy(bcc_ptr, "Linux version ");
 		bcc_ptr += strlen("Linux version ");
+#endif
 		strcpy(bcc_ptr, utsname()->release);
 		bcc_ptr += strlen(utsname()->release) + 1;
 		strcpy(bcc_ptr, CIFS_NETWORK_OPSYS);
diff -ur a/fs/cifs/sess.c b/fs/cifs/sess.c
--- a/fs/cifs/sess.c	2011-07-01 10:23:32.000000000 +0200
+++ b/fs/cifs/sess.c	2011-11-02 09:53:14.000000000 +0100
@@ -82,8 +82,13 @@
 	int bytes_ret = 0;
 
 	/* Copy OS version */
+#ifdef MY_ABC_HERE
+	bytes_ret = cifs_strtoUCS((__le16 *)bcc_ptr, "Synology Linux version ", 32,
+				  nls_cp);
+#else
 	bytes_ret = cifs_strtoUCS((__le16 *)bcc_ptr, "Linux version ", 32,
 				  nls_cp);
+#endif
 	bcc_ptr += 2 * bytes_ret;
 	bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, init_utsname()->release,
 				  32, nls_cp);
@@ -183,8 +188,13 @@
 
 	/* BB check for overflow here */
 
+#ifdef MY_ABC_HERE
+	strcpy(bcc_ptr, "Synology Linux version ");
+	bcc_ptr += strlen("Synology Linux version ");
+#else
 	strcpy(bcc_ptr, "Linux version ");
 	bcc_ptr += strlen("Linux version ");
+#endif
 	strcpy(bcc_ptr, init_utsname()->release);
 	bcc_ptr += strlen(init_utsname()->release) + 1;
 
diff -ur a/fs/udf/namei.c b/fs/udf/namei.c
--- a/fs/udf/namei.c	2011-07-01 10:23:32.000000000 +0200
+++ b/fs/udf/namei.c	2011-11-02 09:53:15.000000000 +0100
@@ -32,13 +32,27 @@
 #include <linux/buffer_head.h>
 #include <linux/sched.h>
 
+#ifdef MY_ABC_HERE
+static inline int udf_match(int len1, const char *name1, int len2,
+			    const char *name2, int iCaseless)
+
+#else
 static inline int udf_match(int len1, const char *name1, int len2,
 			    const char *name2)
+#endif
+
 {
 	if (len1 != len2)
 		return 0;
 
+#ifdef MY_ABC_HERE
+	if (iCaseless) {
+		return !strncasecmp(name1, name2, len1);
+	}
+#endif
 	return !memcmp(name1, name2, len1);
+
+
 }
 
 int udf_write_fi(struct inode *inode, struct fileIdentDesc *cfi,
@@ -227,10 +241,18 @@
 			continue;
 
 		if ((flen = udf_get_filename(dir->i_sb, nameptr, fname, lfi))) {
+#ifdef MY_ABC_HERE
+			if (udf_match(flen, fname, dentry->d_name.len, dentry->d_name.name,
+						UDF_QUERY_FLAG(dir->i_sb, SYNO_UDF_FLAG_FORCE_CASELESS))) {
+				brelse(epos.bh);
+				return fi;
+			}
+#else
 			if (udf_match(flen, fname, dentry->d_name.len, dentry->d_name.name)) {
 				brelse(epos.bh);
 				return fi;
 			}
+#endif
 		}
 	}
 
@@ -444,8 +466,14 @@
 		if (!lfi || !dentry)
 			continue;
 
+#ifdef MY_ABC_HERE
+		if ((flen = udf_get_filename(dir->i_sb, nameptr, fname, lfi)) &&
+		    udf_match(flen, fname, dentry->d_name.len, dentry->d_name.name,
+				UDF_QUERY_FLAG(dir->i_sb, SYNO_UDF_FLAG_FORCE_CASELESS))) {
+#else
 		if ((flen = udf_get_filename(dir->i_sb, nameptr, fname, lfi)) &&
 		    udf_match(flen, fname, dentry->d_name.len, dentry->d_name.name)) {
+#endif
 			if (fibh->sbh != fibh->ebh)
 				brelse(fibh->ebh);
 			brelse(fibh->sbh);
diff -ur a/fs/udf/super.c b/fs/udf/super.c
--- a/fs/udf/super.c	2011-07-01 10:23:32.000000000 +0200
+++ b/fs/udf/super.c	2011-11-02 09:53:15.000000000 +0100
@@ -279,6 +279,9 @@
 	Opt_anchor, Opt_volume, Opt_partition, Opt_fileset,
 	Opt_rootdir, Opt_utf8, Opt_iocharset,
 	Opt_err, Opt_uforget, Opt_uignore, Opt_gforget, Opt_gignore
+#ifdef MY_ABC_HERE
+	, Opt_synocase
+#endif
 };
 
 static match_table_t tokens = {
@@ -307,6 +310,9 @@
 	{Opt_rootdir,	"rootdir=%u"},
 	{Opt_utf8,	"utf8"},
 	{Opt_iocharset,	"iocharset=%s"},
+#ifdef MY_ABC_HERE
+	{Opt_synocase,     "casesensitive"},
+#endif
 	{Opt_err,	NULL}
 };
 
@@ -325,6 +331,9 @@
 	uopt->rootdir = 0xFFFFFFFF;
 	uopt->fileset = 0xFFFFFFFF;
 	uopt->nls_map = NULL;
+#ifdef MY_ABC_HERE
+	uopt->flags |= (1 << SYNO_UDF_FLAG_FORCE_CASELESS);
+#endif
 
 	if (!options)
 		return 1;
@@ -438,6 +447,11 @@
 		case Opt_gforget:
 			uopt->flags |= (1 << UDF_FLAG_GID_FORGET);
 			break;
+#ifdef MY_ABC_HERE
+		case Opt_synocase:
+			uopt->flags &= ~(1 << SYNO_UDF_FLAG_FORCE_CASELESS);
+			break;
+#endif
 		default:
 			printk(KERN_ERR "udf: bad mount option \"%s\" "
 			       "or missing value\n", p);
diff -ur a/fs/udf/udf_sb.h b/fs/udf/udf_sb.h
--- a/fs/udf/udf_sb.h	2011-07-01 10:23:32.000000000 +0200
+++ b/fs/udf/udf_sb.h	2011-11-02 09:53:15.000000000 +0100
@@ -26,6 +26,9 @@
 #define UDF_FLAG_GID_IGNORE     14
 #define UDF_FLAG_UID_SET	15
 #define UDF_FLAG_GID_SET	16
+#ifdef MY_ABC_HERE
+#define SYNO_UDF_FLAG_FORCE_CASELESS 17
+#endif
 
 #define UDF_PART_FLAG_UNALLOC_BITMAP	0x0001
 #define UDF_PART_FLAG_UNALLOC_TABLE	0x0002
diff -ur a/include/linux/synobios.h b/include/linux/synobios.h
--- a/include/linux/synobios.h	2011-07-01 10:23:48.000000000 +0200
+++ b/include/linux/synobios.h	2011-11-02 09:53:52.000000000 +0100
@@ -170,9 +170,6 @@
 #ifdef MY_ABC_HERE
 #define SYNO_EVENT_HIBERNATION			0x2000
 #endif
-#ifdef MY_ABC_HERE
-#define SYNO_EVENT_NETLINK			0x2100
-#endif
 #define SYNO_EVENT_SHUTDOWN_LOG			0x2200
 #ifdef MY_ABC_HERE
 #define SYNO_EVENT_EBOX_REFRESH      0x2300
@@ -182,6 +179,8 @@
 #define SYNO_EVENT_ECC_NOTIFICATION		0x2400
 #endif
 
+#define SYNO_EVENT_BAD_SECTOR_REMAP_RECORD 0x2500
+
 #define SYNO_EVENT_BACK_TEMP_CRITICAL   0x4004
 #define SYNO_EVENT_BACK_TEMP_HIGH       0x4003
 #define SYNO_EVENT_BACK_TEMP_HEAT       0x4002
@@ -316,6 +315,11 @@
     MD_SECTOR_REWRITE_OK = 2,
 };
 
+enum {
+	MD_SECTOR_READ_ERROR_REMAP = 0,
+	LV_SECTOR_READ_ERROR_REMAP = 1,
+};
+
 typedef enum {
 	DISK_WAKE_UP = 0,
 } SYNO_DISK_HIBERNATION_EVENT;
@@ -560,6 +564,7 @@
 	HIBER_LED_UNKNOWN,
 	HIBER_LED_NORMAL,
 	HIBER_LED_ALLOUT,
+	HIBER_LED_EXCEPTPWR,
 }HIBERNATE_LED_T;
 /**
  * This structure is used to store types of each module
@@ -650,8 +655,11 @@
 #define HW_RS2211rpp   "RS2211rp+"     //"RS2211rp+"
 #define HW_DS2411p     "DS2411+"       //"DS2411+"
 #define HW_RS3411rpxs  "RS3411rpxs"    //"RS3411rpxs"
-#define HW_RS3411xs    "RS3411xs"    //"RS3411xs"
+#define HW_RS3411xs    "RS3411xs"      //"RS3411xs"
 #define HW_DS3611xs    "DS3611xs"      //"DS3611xs"
+#define HW_RS3412rpxs  "RS3412rpxs"    //"RS3412rpxs"
+#define HW_RS3412xs    "RS3412xs"      //"RS3412xs"
+#define HW_DS3612xs    "DS3612xs"      //"DS3612xs"
 #define HW_DS111j      "DS111j"        //"DS111j"
 #define HW_DS212       "DS212"         //"DS212v10"
 #define HW_DS412p      "DS412+"        //"DS412+"
@@ -659,6 +667,10 @@
 #define HW_RS212       "RS212"         //"RS212"
 #define HW_DS212j      "DS212j"        //"DS212j"
 #define HW_RS812       "RS812"         //"RS812"
+#define HW_DS1512p     "DS1512+"       //"DS1512+"
+#define HW_DS212p      "DS212pv10"     //"DS212+"
+#define HW_DS112j      "DS112jv10"     //"DS112j"
+#define HW_DS112       "DS112v10"      //"DS112"
 
 #define HW_UNKNOWN     "DSUnknown"
 									    
@@ -725,6 +737,9 @@
 	MODEL_RS3411rpxs,
 	MODEL_RS3411xs,
 	MODEL_DS3611xs,
+	MODEL_RS3412rpxs,
+	MODEL_RS3412xs,
+	MODEL_DS3612xs,
 	MODEL_RS411,
 	MODEL_DS111j,
 	MODEL_RS2211p,
@@ -736,6 +751,10 @@
 	MODEL_RS212,
 	MODEL_DS212j,
 	MODEL_RS812,
+	MODEL_DS1512p,
+	MODEL_DS212p,
+	MODEL_DS112j,
+	MODEL_DS112,
 	MODEL_INVALID
 } PRODUCT_MODEL;
 
diff -ur a/net/core/dev.c b/net/core/dev.c
--- a/net/core/dev.c	2011-07-01 10:23:30.000000000 +0200
+++ b/net/core/dev.c	2011-11-02 09:53:06.000000000 +0100
@@ -132,11 +132,6 @@
 #endif
 
 #ifdef MY_ABC_HERE
-int (*funcSYNOSendNetLinkEvent)(unsigned int, unsigned int) = NULL;
-EXPORT_SYMBOL(funcSYNOSendNetLinkEvent);
-#endif
-
-#ifdef MY_ABC_HERE
 static unsigned int str_to_hex( char ch )
 {
         if( (ch >= '0') && (ch <= '9') )
diff -ur a/synoconfigs/ppc824x b/synoconfigs/ppc824x
--- a/synoconfigs/ppc824x	2011-07-01 10:05:50.000000000 +0200
+++ b/synoconfigs/ppc824x	2011-11-02 09:19:46.000000000 +0100
@@ -1087,7 +1087,12 @@
 CONFIG_RPCSEC_GSS_KRB5=y
 # CONFIG_RPCSEC_GSS_SPKM3 is not set
 # CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
