summaryrefslogtreecommitdiffstats
path: root/target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch
diff options
context:
space:
mode:
authorRoman Yeryomin <roman@advem.lv>2013-09-19 10:35:44 +0300
committerRoman Yeryomin <roman@advem.lv>2013-09-19 10:35:44 +0300
commit178f5c8a01fbc67d6512f6f99d10cf0e111781bb (patch)
treede70934bce86cd2bafb63fbbb38d4e406cfe9eed /target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch
parentb6cafc25acec492a9f1fb0fb7c301fcb3a96442b (diff)
Break drivers patch into several files
Signed-off-by: Roman Yeryomin <roman@advem.lv>
Diffstat (limited to 'target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch')
-rw-r--r--target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch6140
1 files changed, 0 insertions, 6140 deletions
diff --git a/target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch b/target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch
deleted file mode 100644
index abf2c625e..000000000
--- a/target/linux/realtek/patches-2.6.30/0002-rsdk-drivers-nonewfiles.patch
+++ /dev/null
@@ -1,6140 +0,0 @@
---- linux-2.6.30.9/drivers/char/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/char/Makefile 2013-05-02 01:47:50.410227327 +0300
-@@ -8,6 +8,7 @@
- FONTMAPFILE = cp437.uni
-
- obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o tty_buffer.o tty_port.o
-+EXTRA_CFLAGS += -I.
-
- obj-$(CONFIG_LEGACY_PTYS) += pty.o
- obj-$(CONFIG_UNIX98_PTYS) += pty.o
-@@ -97,6 +98,8 @@ obj-$(CONFIG_CS5535_GPIO) += cs5535_gpio
- obj-$(CONFIG_GPIO_VR41XX) += vr41xx_giu.o
- obj-$(CONFIG_GPIO_TB0219) += tb0219.o
- obj-$(CONFIG_TELCLOCK) += tlclk.o
-+obj-$(CONFIG_RTL_NFBI_MDIO) += rtl_mdio/
-+obj-$(CONFIG_NFBI_HOST) += rtl_nfbi/
-
- obj-$(CONFIG_MWAVE) += mwave/
- obj-$(CONFIG_AGP) += agp/
---- linux-2.6.30.9/drivers/char/pty.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/char/pty.c 2013-05-02 01:47:50.487227320 +0300
-@@ -27,6 +27,7 @@
- #include <linux/uaccess.h>
- #include <linux/bitops.h>
- #include <linux/devpts_fs.h>
-+#include <linux/smp_lock.h>
-
- #include <asm/system.h>
-
---- linux-2.6.30.9/drivers/crypto/Kconfig 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/crypto/Kconfig 2013-05-02 01:47:50.559227314 +0300
-@@ -209,4 +209,26 @@ config CRYPTO_DEV_PPC4XX
- help
- This option allows you to have support for AMCC crypto acceleration.
-
-+config CRYPTO_DEV_REALTEK
-+ tristate "Driver Realtek Crypto Engine"
-+ select CRYPTO_HASH
-+ select CRYPTO_ALGAPI
-+ select CRYPTO_BLKCIPHER
-+ select CRYPTO_CBC
-+ select CRYPTO_CTR
-+ select CRYPTO_ECB
-+ select CRYPTO_MD5
-+ select CRYPTO_SHA1
-+ select CRYPTO_AES
-+ select CRYPTO_DES
-+ help
-+ This option allows you to have support for Realtek Crypto Engine.
-+
-+config CRYPTO_DEV_REALTEK_TEST
-+ tristate "Driver Realtek Crypto Engine Test"
-+ select CRYPTO_TEST
-+ depends on CRYPTO_DEV_REALTEK
-+ help
-+ This option for Realtek Crypto Engine Internal Test.
-+
- endif # CRYPTO_HW
---- linux-2.6.30.9/drivers/crypto/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/crypto/Makefile 2013-05-02 01:47:50.559227314 +0300
-@@ -5,3 +5,4 @@ obj-$(CONFIG_CRYPTO_DEV_HIFN_795X) += hi
- obj-$(CONFIG_CRYPTO_DEV_TALITOS) += talitos.o
- obj-$(CONFIG_CRYPTO_DEV_IXP4XX) += ixp4xx_crypto.o
- obj-$(CONFIG_CRYPTO_DEV_PPC4XX) += amcc/
-+obj-$(CONFIG_CRYPTO_DEV_REALTEK) += realtek/
---- linux-2.6.30.9/drivers/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/Makefile 2013-05-02 01:47:49.674227386 +0300
-@@ -24,7 +24,7 @@ obj-$(CONFIG_REGULATOR) += regulator/
- # char/ comes before serial/ etc so that the VT console is the boot-time
- # default.
- obj-y += char/
--
-+obj-$(CONFIG_STAGING) += staging/
- # gpu/ comes after char for AGP vs DRM startup
- obj-y += gpu/
-
-@@ -65,7 +65,7 @@ obj-$(CONFIG_USB_OTG_UTILS) += usb/otg/
- obj-$(CONFIG_USB) += usb/
- obj-$(CONFIG_USB_MUSB_HDRC) += usb/musb/
- obj-$(CONFIG_PCI) += usb/
--obj-$(CONFIG_USB_GADGET) += usb/gadget/
-+## obj-$(CONFIG_USB_GADGET) += usb/gadget/
- obj-$(CONFIG_SERIO) += input/serio/
- obj-$(CONFIG_GAMEPORT) += input/gameport/
- obj-$(CONFIG_INPUT) += input/
-@@ -105,5 +105,5 @@ obj-$(CONFIG_PPC_PS3) += ps3/
- obj-$(CONFIG_OF) += of/
- obj-$(CONFIG_SSB) += ssb/
- obj-$(CONFIG_VIRTIO) += virtio/
--obj-$(CONFIG_STAGING) += staging/
-+
- obj-y += platform/
---- linux-2.6.30.9/drivers/media/video/uvc/uvc_video.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/media/video/uvc/uvc_video.c 2013-05-02 01:47:52.326227171 +0300
-@@ -531,6 +531,14 @@ static void uvc_video_decode_isoc(struct
- if (urb->iso_frame_desc[i].status < 0) {
- uvc_trace(UVC_TRACE_FRAME, "USB isochronous frame "
- "lost (%d).\n", urb->iso_frame_desc[i].status);
-+
-+ //Start to avoid to flicking images with isochronous by jason
-+ if (buf) {
-+ buf->state = UVC_BUF_STATE_QUEUED;
-+ buf->buf.bytesused = 0;
-+ i = urb->number_of_packets;
-+ }
-+ //End to avoid to flicking images with isochronous by jason
- continue;
- }
-
---- linux-2.6.30.9/drivers/mtd/chips/cfi_cmdset_0001.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/mtd/chips/cfi_cmdset_0001.c 2013-05-02 01:47:52.621227148 +0300
-@@ -1,20 +1,10 @@
- /*
-- * Common Flash Interface support:
-- * Intel Extended Vendor Command Set (ID 0x0001)
- *
-- * (C) 2000 Red Hat. GPL'd
-+ * Copyright (c) 2011 Realtek Semiconductor Corp.
- *
-- *
-- * 10/10/2000 Nicolas Pitre <nico@cam.org>
-- * - completely revamped method functions so they are aware and
-- * independent of the flash geometry (buswidth, interleave, etc.)
-- * - scalability vs code size is completely set at compile-time
-- * (see include/linux/mtd/cfi.h for selection)
-- * - optimized write buffer method
-- * 02/05/2002 Christopher Hoover <ch@hpl.hp.com>/<ch@murgatroid.com>
-- * - reworked lock/unlock/erase support for var size flash
-- * 21/03/2007 Rodolfo Giometti <giometti@linux.it>
-- * - auto unlock sectors on resume for auto locking flash on power up
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
- */
-
- #include <linux/module.h>
---- linux-2.6.30.9/drivers/mtd/chips/Kconfig 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/mtd/chips/Kconfig 2013-05-02 01:47:52.620227148 +0300
-@@ -240,6 +240,12 @@ config MTD_XIP
- This allows MTD support to work with flash memory which is also
- used for XIP purposes. If you're not sure what this is all about
- then say N.
-+config RTL819X_SPI_FLASH
-+ bool "RTL819x SPI flash support"
-+ depends on MTD
-+ help
-+ Support SPI flash for MX25L,SST series
-+
-
- endmenu
-
---- linux-2.6.30.9/drivers/mtd/chips/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/mtd/chips/Makefile 2013-05-02 01:47:52.620227148 +0300
-@@ -13,3 +13,4 @@ obj-$(CONFIG_MTD_JEDECPROBE) += jedec_pr
- obj-$(CONFIG_MTD_RAM) += map_ram.o
- obj-$(CONFIG_MTD_ROM) += map_rom.o
- obj-$(CONFIG_MTD_ABSENT) += map_absent.o
-+obj-$(CONFIG_RTL819X_SPI_FLASH) += rtl819x/
---- linux-2.6.30.9/drivers/mtd/devices/doc2001.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/mtd/devices/doc2001.c 2013-05-02 01:47:52.629227147 +0300
-@@ -10,8 +10,11 @@
- #include <asm/errno.h>
- #include <asm/io.h>
- #include <asm/uaccess.h>
-+#include <linux/miscdevice.h>
-+#include <linux/pci.h>
- #include <linux/delay.h>
- #include <linux/slab.h>
-+#include <linux/sched.h>
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/bitops.h>
-@@ -20,6 +23,48 @@
- #include <linux/mtd/nand.h>
- #include <linux/mtd/doc2000.h>
-
-+#ifdef CONFIG_RTL_819X
-+/*porting for RTL865xC-RTL8190 SDK by alva_zhang@2007.11*/
-+#include <linux/config.h>
-+#include <linux/mtd/partitions.h>
-+
-+#define CALL_APP_TO_LOAD_DEFAULT // call user program to load default
-+extern int flash_hw_start;
-+#define noCONFIG_MTD_DEBUG
-+#define CONFIG_MTD_DEBUG_VERBOSE 3
-+extern int flash_hw_start, flash_hw_len, flash_ds_start, flash_ds_len, flash_write_flag;
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+#define RTL_BOOTCODE_END (0x6000)
-+static struct mtd_partition rtl8196_partitions[ ] = {
-+ {
-+ name: "boot+cfg+linux",
-+ size: (CONFIG_RTL_ROOT_IMAGE_OFFSET-0),
-+ offset: 0x00000000,
-+ },
-+ {
-+ name: "root fs",
-+ size: (CONFIG_RTL_FLASH_SIZE-CONFIG_RTL_ROOT_IMAGE_OFFSET),
-+ offset: (CONFIG_RTL_ROOT_IMAGE_OFFSET),
-+ }
-+};
-+#else
-+static struct mtd_partition rtl8196_partitions[ ] = {
-+ {
-+ name: "boot+cfg+linux",
-+ size: 0xF0000,
-+ offset: 0x00000000,
-+ },
-+ {
-+ name: "root fs",
-+ size: 0x110000,
-+ offset: 0xF0000,
-+ }
-+};
-+#endif
-+#define NB_OF(x) (sizeof(x)/sizeof(x[0]))
-+#endif /*#ifdef CONFIG_RTL_819X */
-+
-+
- /* #define ECC_DEBUG */
-
- /* I have no idea why some DoC chips can not use memcop_form|to_io().
-@@ -32,12 +77,29 @@ static int doc_read(struct mtd_info *mtd
- size_t *retlen, u_char *buf);
- static int doc_write(struct mtd_info *mtd, loff_t to, size_t len,
- size_t *retlen, const u_char *buf);
-+
-+#ifdef CONFIG_RTL_819X
-+/* Do nothing here*/
-+#else
- static int doc_read_oob(struct mtd_info *mtd, loff_t ofs,
- struct mtd_oob_ops *ops);
- static int doc_write_oob(struct mtd_info *mtd, loff_t ofs,
- struct mtd_oob_ops *ops);
-+#endif
-+
- static int doc_erase (struct mtd_info *mtd, struct erase_info *instr);
-
-+#ifdef CONFIG_RTL_819X
-+/*porting for RTL865xC-RTL8190 SDK by alva_zhang@2007.11*/
-+static int erase_one_block(struct DiskOnChip *this, __u32 addr, __u32 len);
-+#endif
-+
-+#ifdef CONFIG_RTL_819X
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+int find_section_boundary(struct mtd_info *mtd,unsigned int start, unsigned int end, unsigned int *rstart, unsigned *rend);
-+#endif
-+#endif
-+
- static struct mtd_info *docmillist = NULL;
-
- /* Perform the required delay cycles by reading from the NOP register */
-@@ -149,6 +211,10 @@ static inline void DoC_Address(void __io
- DoC_Delay(docptr, 4);
- }
-
-+#ifdef CONFIG_RTL_819X
-+/*porting for RTL865xC-RTL8190 SDK by alva_zhang@2007.11*/
-+/* Do nothing here*/
-+#else
- /* DoC_SelectChip: Select a given flash chip within the current floor */
- static int DoC_SelectChip(void __iomem * docptr, int chip)
- {
-@@ -281,6 +347,7 @@ static void DoC_ScanChips(struct DiskOnC
- printk(KERN_INFO "%d flash chips found. Total DiskOnChip size: %ld MiB\n",
- this->numchips ,this->totlen >> 20);
- }
-+#endif /*#ifdef CONFIG_RTL_819X */
-
- static int DoCMil_is_alias(struct DiskOnChip *doc1, struct DiskOnChip *doc2)
- {
-@@ -318,9 +385,16 @@ static int DoCMil_is_alias(struct DiskOn
- void DoCMil_init(struct mtd_info *mtd)
- {
- struct DiskOnChip *this = mtd->priv;
-+#ifdef CONFIG_RTL_819X
-+/*do nothing here*/
-+#else
- struct DiskOnChip *old = NULL;
-+#endif
-
- /* We must avoid being called twice for the same device. */
-+#ifdef CONFIG_RTL_819X
-+/*do nothing here*/
-+#else
- if (docmillist)
- old = docmillist->priv;
-
-@@ -337,17 +411,31 @@ void DoCMil_init(struct mtd_info *mtd)
- else
- old = NULL;
- }
-+#endif /*CONFIG_RTL_819X*/
-
- mtd->name = "DiskOnChip Millennium";
-+#ifdef CONFIG_RTL_819X
-+/*do nothing here*/
-+#else
- printk(KERN_NOTICE "DiskOnChip Millennium found at address 0x%lX\n",
- this->physadr);
-+#endif
-+
-+ mtd->type = MTD_NORFLASH;
-+ mtd->flags = MTD_CAP_NORFLASH;
-+#ifdef CONFIG_RTL_819X
-+#else
-+ mtd->ecctype = MTD_ECC_RS_DiskOnChip;
-+#endif
-
-- mtd->type = MTD_NANDFLASH;
-- mtd->flags = MTD_CAP_NANDFLASH;
-+#ifdef CONFIG_RTL_819X
-+/*do nothing here*/
-+#else
- mtd->size = 0;
-
- /* FIXME: erase size is not always 8KiB */
- mtd->erasesize = 0x2000;
-+#endif
-
- mtd->writesize = 512;
- mtd->oobsize = 16;
-@@ -357,10 +445,19 @@ void DoCMil_init(struct mtd_info *mtd)
- mtd->unpoint = NULL;
- mtd->read = doc_read;
- mtd->write = doc_write;
-+
-+#ifdef CONFIG_RTL_819X
-+/*do nothing here*/
-+#else
- mtd->read_oob = doc_read_oob;
- mtd->write_oob = doc_write_oob;
-+#endif
-+
- mtd->sync = NULL;
-
-+#ifdef CONFIG_RTL_819X
-+/*do nothing here*/
-+#else
- this->totlen = 0;
- this->numchips = 0;
- this->curfloor = -1;
-@@ -368,6 +465,7 @@ void DoCMil_init(struct mtd_info *mtd)
-
- /* Ident all the chips present. */
- DoC_ScanChips(this);
-+#endif
-
- if (!this->totlen) {
- kfree(mtd);
-@@ -376,15 +474,199 @@ void DoCMil_init(struct mtd_info *mtd)
- this->nextdoc = docmillist;
- docmillist = mtd;
- mtd->size = this->totlen;
-+//#ifdef CONFIG_RTK_MTD_ROOT
-+#ifdef CONFIG_RTL_819X
-+ add_mtd_partitions(mtd, rtl8196_partitions, NB_OF(rtl8196_partitions));
-+#else
- add_mtd_device(mtd);
-+#endif
- return;
- }
- }
- EXPORT_SYMBOL_GPL(DoCMil_init);
-
-+#ifdef CONFIG_RTL_819X
-+static int doc_write_ecc (struct mtd_info *mtd, loff_t to, size_t len,
-+ size_t *retlen, const u_char *buf, u_char *eccbuf)
-+{
-+ int i,ret;
-+ struct DiskOnChip *this = (struct DiskOnChip *)mtd->priv;
-+ unsigned long docptr =(unsigned long) this->virtadr;
-+ unsigned int ofs;
-+ unsigned short val,val1;
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ unsigned int rstart,rend;
-+ unsigned int start,end;
-+#endif
-+// david ------------
-+unsigned long timeo, offset;
-+unsigned long flags;
-+//-------------------
-+
-+ /* Don't allow write past end of device */
-+ if (to >= this->totlen)
-+ {
-+// david
-+// printk("write to >= total len\n");
-+ printk(KERN_WARNING "write to >= total len\n");
-+ return -EINVAL;
-+ }
-+ DEBUG(MTD_DEBUG_LEVEL1,"going to write len=0x%x,to =0x%x\n", (int)len, (int)to);
-+
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ start=to;
-+ end=0xFFFFFFF;
-+ if(flash_write_flag & 1)
-+ {
-+ if(0 == start)
-+ start = CONFIG_RTL_HW_SETTING_OFFSET;
-+ else if( start > CONFIG_RTL_HW_SETTING_OFFSET )
-+ start = CONFIG_RTL_HW_SETTING_OFFSET;
-+ end=CONFIG_RTL_DEFAULT_SETTING_OFFSET;
-+ }
-+
-+ if(flash_write_flag & 2 )
-+ {
-+ if(0 == start)
-+ start = CONFIG_RTL_DEFAULT_SETTING_OFFSET;
-+ else if( start > CONFIG_RTL_DEFAULT_SETTING_OFFSET )
-+ start = CONFIG_RTL_DEFAULT_SETTING_OFFSET;
-+
-+ end = CONFIG_RTL_CURRENT_SETTING_OFFSET;
-+ }
-+
-+ if( flash_write_flag & 4 )
-+ {
-+ if(0 == start)
-+ start = CONFIG_RTL_CURRENT_SETTING_OFFSET;
-+ else if( start > CONFIG_RTL_CURRENT_SETTING_OFFSET )
-+ start = CONFIG_RTL_CURRENT_SETTING_OFFSET;
-+ end = CONFIG_RTL_WEB_PAGES_OFFSET;
-+ }
-+ find_section_boundary(mtd,start,end,&rstart,&rend);
-+
-+#endif
-+
-+ *retlen = len;
-+ ofs = docptr + to;
-+ for(i=0; i< len; i+=2)
-+ {
-+// david -----------------------------------------------------
-+#if 0
-+ val = *(unsigned short *)buf;
-+
-+ *(volatile unsigned short *)(0xbfc00000 + 0x555 * 2)= 0xaa;
-+ *(volatile unsigned short *)(0xbfc00000 + 0x2aa * 2)= 0x55;
-+ *(volatile unsigned short *)(0xbfc00000 + 0x555 * 2)= 0xa0;
-+ *(volatile unsigned short *)(ofs )= val;
-+
-+ j=0xfffff1;
-+ do{
-+ val1=*(volatile unsigned short *)(ofs);
-+ if( ((val1^val) & 0x80)==0 )
-+ break;
-+
-+ }while(j--!=1);
-+ if (j <= 2)
-+ printk("program fails\n");
-+#else
-+
-+// if ( ofs < (docptr+CONFIG_MTD_DOCPROBE_ADDRESS) )
-+// goto next_word;
-+
-+ offset = (to >> this->chipshift)*(1 << this->chipshift);
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ if(ofs <(docptr+rstart))
-+ goto next_word;
-+ if(ofs >= (docptr+rend))
-+ {
-+ return 0;
-+ }
-+#else
-+#if !defined(COMPACK_SETTING) && !defined(NO_CHECK_REGION)
-+ if ( flash_write_flag != 0x8000
-+//#ifdef CONFIG_RTK_MTD_ROOT
-+#ifdef CONFIG_RTL_819X
-+ || offset < (rtl8196_partitions[0].size+ rtl8196_partitions[0].offset)
-+#endif
-+ )
-+ {
-+
-+ if ( (flash_write_flag & 1) && (ofs < (docptr+flash_hw_start)) )
-+ goto next_word;
-+
-+ if ( (flash_write_flag & 2) && (ofs < (docptr+flash_ds_start)) )
-+ goto next_word;
-+
-+ if ( (flash_write_flag & 4) && (ofs < (docptr+flash_ds_start+flash_ds_len)) )
-+ goto next_word;
-+ }
-+#endif // COMPACK_SETTING && NO_CHECK_REGION
-+#endif //CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ val = *(unsigned short *)buf;
-+
-+ mtd_save_flags(flags);mtd_cli(); // david
-+
-+ *(volatile unsigned short *)(0xbfc00000 + offset + 0x555 * 2)= 0xaa;
-+ *(volatile unsigned short *)(0xbfc00000 + offset + 0x2aa * 2)= 0x55;
-+ *(volatile unsigned short *)(0xbfc00000 + offset + 0x555 * 2)= 0xa0;
-+ *(volatile unsigned short *)(ofs )= val;
-+
-+ mtd_restore_flags(flags); // david
-+
-+ timeo = jiffies + (HZ * 50);
-+ do{
-+#if 0
-+ val1=*(volatile unsigned short *)(ofs);
-+ if ( val1 == val )
-+ break;
-+#endif
-+ unsigned short val2;
-+
-+ val2=*(volatile unsigned short *)(ofs);
-+ val1=*(volatile unsigned short *)(ofs);
-+
-+ if (((val1^val2) & 0x40) != 0)
-+ continue;
-+ if (((val1^val) & 0x80) != 0)
-+ continue;
-+ if ( val1 == val )
-+ break;
-+//--------------
-+ } while ( !time_after(jiffies, timeo) );
-+
-+ if ( time_after(jiffies, timeo)) {
-+ printk(KERN_WARNING "program timeout!");
-+ printk(KERN_WARNING " write: %x, read:%x, addr: %x\n", val, val1, ofs);
-+ return -1;
-+ }
-+
-+#ifndef COMPACK_SETTING
-+next_word:
-+#endif
-+
-+#endif
-+//---------------------------------------------------------
-+ ofs += 2;
-+ buf += 2;
-+
-+ }
-+
-+ ret = 0 ;
-+// printk("in doc_write_ecc ret=%08x\n", ret);
-+ return ret;
-+}
-+#endif /* #ifdef CONFIG_RTL_819X */
-+
- static int doc_read (struct mtd_info *mtd, loff_t from, size_t len,
- size_t *retlen, u_char *buf)
- {
-+#ifdef CONFIG_RTL_819X
-+static int doc_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
-+ size_t *retlen, u_char *buf, u_char *eccbuf);
-+/* Just a special case of doc_read_ecc */
-+ return doc_read_ecc(mtd, from, len, retlen, buf, NULL);
-+#else
- int i, ret;
- volatile char dummy;
- unsigned char syndrome[6], eccbuf[6];
-@@ -491,11 +773,49 @@ static int doc_read (struct mtd_info *mt
- WriteDOC(DOC_ECC_DIS, docptr , ECCConf);
-
- return ret;
-+
-+#endif /* #ifdef CONFIG_RTL_819X */
-+}
-+
-+#ifdef CONFIG_RTL_819X
-+static int doc_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
-+ size_t *retlen, u_char *buf, u_char *eccbuf)
-+{
-+ int i;
-+ unsigned short tmp;
-+ struct DiskOnChip *this = (struct DiskOnChip *)mtd->priv;
-+ unsigned long docptr = this->virtadr+from;
-+
-+ /* Don't allow read past end of device */
-+ if (from >= this->totlen)
-+ return -EINVAL;
-+ for(i=0; i< len; i+=2)
-+ {
-+ tmp = *(volatile unsigned short *)(docptr);
-+ *(unsigned short *)buf = tmp;
-+ buf += 2;
-+ docptr +=2;
-+ }
-+ if (len & 0x01)
-+ {
-+ tmp = *(volatile unsigned long *)(docptr);
-+ *(unsigned char *)buf = (tmp >> 8) & 0xff;
-+ }
-+
-+ /* Let the caller know we completed it */
-+ *retlen = len;
-+
-+ return 0;
- }
-+#endif /*#ifdef CONFIG_RTL_819X */
-
- static int doc_write (struct mtd_info *mtd, loff_t to, size_t len,
- size_t *retlen, const u_char *buf)
- {
-+#ifdef CONFIG_RTL_819X
-+ char eccbuf[6];
-+ return doc_write_ecc(mtd, to, len, retlen, buf, eccbuf);
-+#else
- int i,ret = 0;
- char eccbuf[6];
- volatile char dummy;
-@@ -617,8 +937,12 @@ static int doc_write (struct mtd_info *m
- *retlen = len;
-
- return ret;
-+#endif /*#ifdef CONFIG_RTL_819X */
- }
-
-+#ifdef CONFIG_RTL_819X
-+/*do nothing here*/
-+#else
- static int doc_read_oob(struct mtd_info *mtd, loff_t ofs,
- struct mtd_oob_ops *ops)
- {
-@@ -753,9 +1077,229 @@ static int doc_write_oob(struct mtd_info
-
- return ret;
- }
-+#endif /*#ifdef CONFIG_RTL_819X */
-+
-+#ifdef CONFIG_RTL_819X
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+int find_section_boundary(struct mtd_info *mtd,unsigned int start, unsigned int end, unsigned int *rstart, unsigned *rend)
-+{
-+ int i = 0;
-+ int j = 0;
-+ struct mtd_erase_region_info *regions = mtd->eraseregions;
-+ while ((i < mtd->numeraseregions) &&
-+ (start >= regions[i].offset)) {
-+ i++;
-+ }
-+ i--;
-+
-+ j = 1;
-+ while((j <= regions[i].numblocks) &&
-+ (start >= (regions[i].offset+regions[i].erasesize*j))) {
-+ j++;
-+ }
-+ *rstart=(regions[i].offset+regions[i].erasesize*(j-1));
-+
-+ i=0;
-+ while ((i < mtd->numeraseregions) &&
-+ (end >= regions[i].offset)) {
-+ i++;
-+ }
-+ i--;
-+
-+ j = 1;
-+ while((j <= regions[i].numblocks) &&
-+ (end >= (regions[i].offset+regions[i].erasesize*j))) {
-+ j++;
-+ }
-+ *rend=(regions[i].offset+regions[i].erasesize*j);
-+
-+}
-+#endif
-+#endif
-
- int doc_erase (struct mtd_info *mtd, struct erase_info *instr)
- {
-+#ifdef CONFIG_RTL_819X
-+
-+struct DiskOnChip *this = (struct DiskOnChip *)mtd->priv;
-+ unsigned long adr, len;
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ unsigned int rstart,rend;
-+ unsigned int start,end;
-+#endif
-+ int i;
-+ int first;
-+ struct mtd_erase_region_info *regions = mtd->eraseregions;
-+
-+ DEBUG(MTD_DEBUG_LEVEL1, "going to erase sector addr=%08x,len=%08x\n",
-+ instr->addr, instr->len);
-+
-+ if (instr->addr > mtd->size) {
-+ printk(KERN_WARNING "Erase addr greater than max size (0x%x > 0x%x)\n",
-+ instr->addr, mtd->size );
-+ return -EINVAL;
-+ }
-+
-+ if ((instr->len + instr->addr) > mtd->size) {
-+ printk(KERN_WARNING "Erase size greater than max size (0x%x + 0x%x > 0x%x)\n",
-+ instr->addr, instr->len, mtd->size );
-+ return -EINVAL;
-+ }
-+
-+ /* Check that both start and end of the requested erase are
-+ * aligned with the erasesize at the appropriate addresses.
-+ */
-+
-+ i = 0;
-+
-+ /* Skip all erase regions which are ended before the start of
-+ the requested erase. Actually, to save on the calculations,
-+ we skip to the first erase region which starts after the
-+ start of the requested erase, and then go back one.
-+ */
-+
-+ while ((i < mtd->numeraseregions) &&
-+ (instr->addr >= regions[i].offset)) {
-+ i++;
-+ }
-+ i--;
-+
-+ /* OK, now i is pointing at the erase region in which this
-+ * erase request starts. Check the start of the requested
-+ * erase range is aligned with the erase size which is in
-+ * effect here.
-+ */
-+
-+ if (instr->addr & (regions[i].erasesize-1)) {
-+ return -EINVAL;
-+ }
-+
-+ /* Remember the erase region we start on. */
-+
-+ first = i;
-+
-+ /* Next, check that the end of the requested erase is aligned
-+ * with the erase region at that address.
-+ */
-+
-+ while ((i < mtd->numeraseregions) &&
-+ ((instr->addr + instr->len) >= regions[i].offset)) {
-+ i++;
-+ }
-+
-+ /* As before, drop back one to point at the region in which
-+ * the address actually falls.
-+ */
-+
-+ i--;
-+
-+ if ((instr->addr + instr->len) & (regions[i].erasesize-1)) {
-+ return -EINVAL;
-+ }
-+
-+
-+ adr = instr->addr;
-+ len = instr->len;
-+
-+ i = first;
-+ instr->state = MTD_ERASING;
-+
-+
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ start=adr;
-+ end=0xFFFFFFF;
-+ if(flash_write_flag & 1)
-+ {
-+ if(0 == start)
-+ start = CONFIG_RTL_HW_SETTING_OFFSET;
-+ else if( start > CONFIG_RTL_HW_SETTING_OFFSET )
-+ start = CONFIG_RTL_HW_SETTING_OFFSET;
-+ end = CONFIG_RTL_DEFAULT_SETTING_OFFSET;
-+ }
-+
-+ if(flash_write_flag & 2 )
-+ {
-+ if(0 == start)
-+ start = CONFIG_RTL_DEFAULT_SETTING_OFFSET;
-+ else if( start > CONFIG_RTL_DEFAULT_SETTING_OFFSET )
-+ start = CONFIG_RTL_DEFAULT_SETTING_OFFSET;
-+ end = CONFIG_RTL_CURRENT_SETTING_OFFSET;
-+ }
-+
-+ if(flash_write_flag & 4 )
-+ {
-+ if(0 == start)
-+ start = CONFIG_RTL_CURRENT_SETTING_OFFSET;
-+ else if( start > CONFIG_RTL_CURRENT_SETTING_OFFSET )
-+ start = CONFIG_RTL_CURRENT_SETTING_OFFSET;
-+
-+ end = CONFIG_RTL_WEB_PAGES_OFFSET;
-+ }
-+
-+ find_section_boundary(mtd,start,end,&rstart,&rend);
-+
-+ //printk("line[%d] rstart 0x%x rend 0x%x\n",__LINE__,rstart,rend);
-+
-+ /*don't erase bootcode*/
-+ if(rstart < RTL_BOOTCODE_END)
-+ rstart = RTL_BOOTCODE_END;
-+
-+ //printk("line[%d] rstart 0x%x rend 0x%x\n",__LINE__,rstart,rend);
-+#endif
-+
-+ while (len) {
-+// if (adr >= CONFIG_MTD_DOCPROBE_ADDRESS) {
-+
-+#if defined(COMPACK_SETTING) || defined(NO_CHECK_REGION)
-+ if ( erase_one_block(this, adr, regions[i].erasesize) )
-+ return -1;
-+
-+#else
-+
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ if(adr >= rstart)
-+#else
-+ if ( ((flash_write_flag & 1) && (adr == flash_hw_start)) ||
-+ ((flash_write_flag & 2) &&(adr >= flash_ds_start && adr < (flash_ds_start+flash_ds_len)))
-+ || ((flash_write_flag & 4) && (adr >= (flash_ds_start+flash_ds_len)))
-+//#ifdef CONFIG_RTK_MTD_ROOT
-+#ifdef CONFIG_RTL_819X
-+ || (adr >= (rtl8196_partitions[0].size+ rtl8196_partitions[0].offset))
-+#endif
-+ || (flash_write_flag == 0x8000)
-+ )
-+#endif
-+ {
-+ if ( erase_one_block(this, adr, regions[i].erasesize) )
-+ return -1;
-+ }
-+
-+#endif // COMPACK_SETTING || NO_CHECK_REGION
-+
-+ adr += regions[i].erasesize;
-+ if (len < regions[i].erasesize)
-+ len = 0;
-+ else
-+ len -= regions[i].erasesize;
-+
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ if(rend <= adr)
-+ {
-+ /*no need to erase other block*/
-+ len=0;
-+ }
-+#endif
-+ if ( adr >= (regions[i].offset + regions[i].erasesize*regions[i].numblocks))
-+ i++;
-+ }
-+
-+ instr->state = MTD_ERASE_DONE;
-+ if (instr->callback) {
-+ instr->callback(instr);
-+ }
-+
-+ return 0;
-+#else
- volatile char dummy;
- struct DiskOnChip *this = mtd->priv;
- __u32 ofs = instr->addr;
-@@ -809,7 +1353,52 @@ int doc_erase (struct mtd_info *mtd, str
- mtd_erase_callback(instr);
-
- return 0;
-+
-+#endif /*#ifdef CONFIG_RTL_819X */
-+}
-+
-+#ifdef CONFIG_RTL_819X
-+static int erase_one_block(struct DiskOnChip *this, __u32 addr, __u32 len)
-+{
-+ unsigned long timeo;
-+ unsigned long docptr = this->virtadr;
-+ __u32 ofs, offset;
-+ unsigned long flags; // david
-+
-+
-+ DEBUG(MTD_DEBUG_LEVEL1, "Erase sector, addr=0x%x, docptr=0x%x, len=0x%x\n",
-+ (int)addr, (int)docptr, (int)len);
-+
-+ // issue erase command!
-+ ofs = docptr + addr;
-+
-+ offset = (addr >> this->chipshift)*(1 << this->chipshift);
-+
-+ mtd_save_flags(flags);mtd_cli(); // david
-+ *(volatile unsigned short *)(docptr + offset + 0x555 * 2) = 0xaa;
-+ *(volatile unsigned short *)(docptr + offset + 0x2aa * 2) = 0x55;
-+ *(volatile unsigned short *)(docptr + offset + 0x555 * 2) = 0x80;
-+ *(volatile unsigned short *)(docptr + offset + 0x555 * 2) = 0xaa;
-+ *(volatile unsigned short *)(docptr + offset + 0x2aa * 2) = 0x55;
-+ *(volatile unsigned short *)(ofs ) = 0x30;
-+ mtd_restore_flags(flags); // david
-+
-+ timeo = jiffies + (HZ * 40);
-+
-+ while (1) {
-+ if ((*(volatile unsigned short *)(ofs))==0xffff) {
-+ DEBUG(MTD_DEBUG_LEVEL1, "Erase success!\n");
-+ break;
-+ }
-+ if (time_after(jiffies, timeo)) {
-+ printk(KERN_WARNING "Erase timeout!\n");
-+ return -1;
-+ }
-+ udelay(1);
-+ }
-+ return 0;
- }
-+#endif /*#ifdef CONFIG_RTL_819X */
-
- /****************************************************************************
- *
---- linux-2.6.30.9/drivers/mtd/devices/docprobe.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/mtd/devices/docprobe.c 2013-05-02 01:47:52.630227147 +0300
-@@ -36,7 +36,7 @@
- <linux-mtd@lists.infradead.org>.
- */
- #define DOC_SINGLE_DRIVER
--
-+#include <linux/config.h>
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <asm/errno.h>
-@@ -56,10 +56,68 @@
- #define CONFIG_MTD_DOCPROBE_ADDRESS 0
- #endif
-
-+#ifdef CONFIG_RTL_819X
-+// david ----------------------
-+/* MXIC */
-+#define MANUFACTURER_MXIC 0x00C2
-+#define MX29LV800B 0x225B
-+#define MX29LV160AB 0x2249
-+#define MX29LV320AB 0x22A8
-+#define MX29LV640AB 0x22CB
-+
-+/*AMD*/
-+#define MANUFACTURER_AMD 0x0001
-+#define AM29LV800BB 0x225B
-+#define AM29LV160DB 0x2249
-+#define AM29LV320DB 0x22F9
-+
-+/*ST*/
-+#define MANUFACTURER_ST 0x0020
-+#define M29W160DB 0X2249
-+
-+/* ESMT */
-+#define MANUFACTURER_ESMT 0x008C
-+#define F49L160BA 0x2249
-+
-+/* SAMSUNG */
-+#define MANUFACTURER_SAMSUNG 0x00EC
-+#define K8D1716UBC 0x2277
-+
-+/* ESI */
-+#define MANUFACTURER_ESI 0x004A
-+#define ES29LV320D 0x22F9
-+
-+/* EON */
-+#define MANUFACTURER_EON 0x007F
-+#define EN29LV160A 0x2249
-+
-+#ifdef CONFIG_RTL8196B
-+#define FLASH_BASE 0xbd000000
-+#else
-+#define FLASH_BASE 0xbe000000
-+#endif
-+
-+struct flash_info {
-+ const __u16 mfr_id;
-+ const __u16 dev_id;
-+ const char *name;
-+ const u_long size;
-+ const int shift; // shift number of chip size
-+ const int numeraseregions;
-+ const struct mtd_erase_region_info regions[4];
-+};
-+
-+static int probeChip(struct DiskOnChip *doc, struct mtd_info *mtd);
-+//-----------------------------
-+#endif /*#ifdef CONFIG_RTL_819X*/
-+
-+//static unsigned long doc_config_location = CONFIG_MTD_DOCPROBE_ADDRESS;
-+//module_param(doc_config_location, ulong, 0);
-+//MODULE_PARM_DESC(doc_config_location, "Physical memory address at which to probe for DiskOnChip");
-
--static unsigned long doc_config_location = CONFIG_MTD_DOCPROBE_ADDRESS;
--module_param(doc_config_location, ulong, 0);
--MODULE_PARM_DESC(doc_config_location, "Physical memory address at which to probe for DiskOnChip");
-+#ifdef CONFIG_RTL_819X
-+ /* Do nothing here*/
-+#else
-
- static unsigned long __initdata doc_locations[] = {
- #if defined (__alpha__) || defined(__i386__) || defined(__x86_64__)
-@@ -76,6 +134,13 @@ static unsigned long __initdata doc_loca
- 0xe0000, 0xe2000, 0xe4000, 0xe6000,
- 0xe8000, 0xea000, 0xec000, 0xee000,
- #endif /* CONFIG_MTD_DOCPROBE_HIGH */
-+#elif defined(__PPC__)
-+ 0xe4000000,
-+#elif defined(CONFIG_MOMENCO_OCELOT)
-+ 0x2f000000,
-+ 0xff000000,
-+#elif defined(CONFIG_MOMENCO_OCELOT_G) || defined (CONFIG_MOMENCO_OCELOT_C)
-+ 0xff000000,
- #else
- #warning Unknown architecture for DiskOnChip. No default probe locations defined
- #endif
-@@ -217,8 +282,9 @@ static inline int __init doccheck(void _
- #endif
- return 0;
- }
-+#endif /*#ifdef CONFIG_RTL_819X*/
-
--static int docfound;
-+//static int docfound;
-
- extern void DoC2k_init(struct mtd_info *);
- extern void DoCMil_init(struct mtd_info *);
-@@ -229,11 +295,18 @@ static void __init DoC_Probe(unsigned lo
- void __iomem *docptr;
- struct DiskOnChip *this;
- struct mtd_info *mtd;
-- int ChipID;
-+ //int ChipID;
- char namebuf[15];
- char *name = namebuf;
-+
-+
-+ char *im_funcname = NULL;
-+ char *im_modname = NULL;
-+
-+
- void (*initroutine)(struct mtd_info *) = NULL;
-
-+#ifndef CONFIG_RTL_819X
- docptr = ioremap(physadr, DOC_IOREMAP_LEN);
-
- if (!docptr)
-@@ -302,8 +375,286 @@ static void __init DoC_Probe(unsigned lo
- kfree(mtd);
- }
- iounmap(docptr);
-+#else
-+ docptr = FLASH_BASE;
-+ //-----------------------------
-+
-+
-+ mtd = kmalloc(sizeof(struct DiskOnChip) + sizeof(struct mtd_info), GFP_KERNEL);
-+
-+ if (!mtd) {
-+ printk(KERN_WARNING "Cannot allocate memory for data structures. Dropping.\n");
-+ iounmap((void *)docptr);
-+ return;
- }
-
-+ this = (struct DiskOnChip *)(&mtd[1]);
-+
-+ memset((char *)mtd,0, sizeof(struct mtd_info));
-+ memset((char *)this, 0, sizeof(struct DiskOnChip));
-+
-+ mtd->priv = this;
-+ this->virtadr = docptr;
-+ this->physadr = physadr;
-+ this->ChipID = DOC_ChipID_DocMil;
-+
-+ name="Millennium";
-+ im_funcname = "DoCMil_init";
-+ im_modname = "doc2001";
-+
-+ if ( probeChip(this, mtd) == 0) // david added,
-+ initroutine = &DoCMil_init;
-+
-+ if (initroutine) {
-+ (*initroutine)(mtd);
-+ return;
-+ }
-+ printk(KERN_NOTICE "Cannot find driver for DiskOnChip %s at 0x%lX\n", name, physadr);
-+ iounmap((void *)docptr);
-+
-+#endif /*#ifdef CONFIG_RTL_819X*/
-+}
-+
-+#ifdef CONFIG_RTL_819X
-+// david -------------------------------------------------------------------
-+static int probeChip(struct DiskOnChip *doc, struct mtd_info *mtd)
-+{
-+ /* Keep this table on the stack so that it gets deallocated after the
-+ * probe is done.
-+ */
-+ const struct flash_info table[] = {
-+ {
-+ mfr_id: MANUFACTURER_MXIC,
-+ dev_id: MX29LV800B,
-+ name: "MXIC MX29LV800B",
-+ size: 0x00100000,
-+ shift: 20,
-+ numeraseregions: 4,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x04000, numblocks: 1 },
-+ { offset: 0x004000, erasesize: 0x02000, numblocks: 2 },
-+ { offset: 0x008000, erasesize: 0x08000, numblocks: 1 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 15 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_MXIC,
-+ dev_id: MX29LV160AB,
-+ name: "MXIC MX29LV160AB",
-+ size: 0x00200000,
-+ shift: 21,
-+ numeraseregions: 4,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x04000, numblocks: 1 },
-+ { offset: 0x004000, erasesize: 0x02000, numblocks: 2 },
-+ { offset: 0x008000, erasesize: 0x08000, numblocks: 1 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 31 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_MXIC,
-+ dev_id: MX29LV320AB,
-+ name: "MXIC MX29LV320AB",
-+ size: 0x00400000,
-+ shift: 22,
-+ numeraseregions: 2,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x02000, numblocks: 8 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 63 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_AMD,
-+ dev_id: AM29LV800BB,
-+ name: "AMD AM29LV800BB",
-+ size: 0x00100000,
-+ shift: 20,
-+ numeraseregions: 4,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x04000, numblocks: 1 },
-+ { offset: 0x004000, erasesize: 0x02000, numblocks: 2 },
-+ { offset: 0x008000, erasesize: 0x08000, numblocks: 1 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 15 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_AMD,
-+ dev_id: AM29LV160DB,
-+ name: "AMD AM29LV160DB",
-+ size: 0x00200000,
-+ shift: 21,
-+ numeraseregions: 4,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x04000, numblocks: 1 },
-+ { offset: 0x004000, erasesize: 0x02000, numblocks: 2 },
-+ { offset: 0x008000, erasesize: 0x08000, numblocks: 1 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 31 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_AMD,
-+ dev_id: AM29LV320DB,
-+ name: "AMD AM29LV320DB",
-+ size: 0x00400000,
-+ shift: 22,
-+ numeraseregions: 2,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x02000, numblocks: 8 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 63 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_ST,
-+ dev_id: M29W160DB,
-+ name: "ST M29W160DB",
-+ size: 0x00200000,
-+ shift: 21,/*21 bit=> that is 2 MByte size*/
-+ numeraseregions: 4,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x04000, numblocks: 1 },
-+ { offset: 0x004000, erasesize: 0x02000, numblocks: 2 },
-+ { offset: 0x008000, erasesize: 0x08000, numblocks: 1 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 31 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_MXIC,
-+ dev_id: MX29LV640AB,
-+ name: "MXIC MX29LV640AB",
-+ size: 0x00800000,
-+ shift: 23,/*22 bit=> that is 8 MByte size*/
-+ numeraseregions: 2,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x02000, numblocks: 8 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 127 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_SAMSUNG,
-+ dev_id: K8D1716UBC,
-+ name: "SAMSUNG K8D1716UBC",
-+ size: 0x00200000,
-+ shift: 21,/*21 bit=> that is 2 MByte size*/
-+ numeraseregions: 2,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x02000, numblocks: 8 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 31 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_ESMT,
-+ dev_id: F49L160BA,
-+ name: "ESMT F49L160BA",
-+ size: 0x00200000,
-+ shift: 21,/*21 bit=> that is 2 MByte size*/
-+ numeraseregions: 4,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x04000, numblocks: 1 },
-+ { offset: 0x004000, erasesize: 0x02000, numblocks: 2 },
-+ { offset: 0x008000, erasesize: 0x08000, numblocks: 1 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 31 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_ESI,
-+ dev_id: ES29LV320D,
-+ name: "ESI ES29LV320D",
-+ size: 0x00400000,
-+ shift: 22,/*22 bit=> that is 4 MByte size*/
-+ numeraseregions: 2,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x02000, numblocks: 8 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 63 }
-+ }
-+ },
-+ {
-+ mfr_id: MANUFACTURER_EON,
-+ dev_id: EN29LV160A,
-+ name: "EON EN29LV160A",
-+ size: 0x00200000,
-+ shift: 21,
-+ numeraseregions: 4,
-+ regions: {
-+ { offset: 0x000000, erasesize: 0x04000, numblocks: 1 },
-+ { offset: 0x004000, erasesize: 0x02000, numblocks: 2 },
-+ { offset: 0x008000, erasesize: 0x08000, numblocks: 1 },
-+ { offset: 0x010000, erasesize: 0x10000, numblocks: 31 }
-+ }
-+ }
-+ };
-+
-+ struct DiskOnChip *this = (struct DiskOnChip *)mtd->priv;
-+ unsigned long docptr = this->virtadr;
-+ __u16 mfid, devid;
-+ int i, j, k, interleave=1, chipsize;
-+
-+ // issue reset and auto-selection command
-+ *(volatile unsigned short *)(FLASH_BASE) = 0xf0;
-+
-+ *(volatile unsigned short *)(FLASH_BASE + 0x555 * 2) = 0xaa;
-+ *(volatile unsigned short *)(FLASH_BASE + 0x2aa * 2) = 0x55;
-+ *(volatile unsigned short *)(FLASH_BASE + 0x555 * 2) = 0x90;
-+
-+ mfid = *((volatile unsigned short *)docptr);
-+ devid = *((volatile unsigned short *)(docptr + 1*2));
-+
-+ *(volatile unsigned short *)(FLASH_BASE) = 0xf0;
-+
-+ for (i=0; i< sizeof(table)/sizeof(table[0]); i++) {
-+ if ( mfid==table[i].mfr_id && devid==table[i].dev_id)
-+ break;
-+ }
-+ if ( i == sizeof(table)/sizeof(table[0]) )
-+ return -1;
-+
-+ // Look for 2nd flash
-+ *(volatile unsigned short *)(FLASH_BASE + table[i].size) = 0xf0;
-+ *(volatile unsigned short *)(FLASH_BASE + table[i].size + 0x555 * 2) = 0xaa;
-+ *(volatile unsigned short *)(FLASH_BASE + table[i].size + 0x2aa * 2) = 0x55;
-+ *(volatile unsigned short *)(FLASH_BASE + table[i].size + 0x555 * 2) = 0x90;
-+
-+ mfid = *((volatile unsigned short *)(docptr + table[i].size));
-+ devid = *((volatile unsigned short *)(docptr + table[i].size + 1*2));
-+
-+ *(volatile unsigned short *)(FLASH_BASE+table[i].size) = 0xf0;
-+ if ( mfid==table[i].mfr_id && devid==table[i].dev_id) {
-+ interleave++;
-+ }
-+
-+ printk(KERN_NOTICE "Found %d x %ldM Byte %s at 0x%lx\n",
-+ interleave, (table[i].size)/(1024*1024), table[i].name, docptr);
-+
-+ mtd->size = table[i].size*interleave;
-+ mtd->numeraseregions = table[i].numeraseregions*interleave;
-+
-+ mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info) *
-+ mtd->numeraseregions*interleave, GFP_KERNEL);
-+ if (!mtd->eraseregions) {
-+ printk(KERN_WARNING "Failed to allocate "
-+ "memory for MTD erase region info\n");
-+ kfree(mtd);
-+ return -1;
-+ }
-+
-+ for (k=0, chipsize=0; interleave>0; interleave--, chipsize+=table[i].size) {
-+ for (j=0; j<table[i].numeraseregions; j++, k++) {
-+ mtd->eraseregions[k].offset = table[i].regions[j].offset+chipsize;
-+ mtd->eraseregions[k].erasesize = table[i].regions[j].erasesize;
-+ mtd->eraseregions[k].numblocks = table[i].regions[j].numblocks;
-+ if (mtd->erasesize < mtd->eraseregions[k].erasesize)
-+ mtd->erasesize = mtd->eraseregions[k].erasesize;
-+ }
-+ }
-+
-+ this->totlen = mtd->size;
-+ this->numchips = interleave;
-+ this->chipshift = table[i].shift;
-+
-+ return 0;
-+}
-+//---------------------------------------------------------------------------
-+#endif /*#ifdef CONFIG_RTL_819X */
-+
-
- /****************************************************************************
- *
-@@ -313,6 +664,14 @@ static void __init DoC_Probe(unsigned lo
-
- static int __init init_doc(void)
- {
-+#ifdef CONFIG_RTL_819X
-+ printk(KERN_NOTICE "RealTek E-Flash System Driver. (C) 2002 RealTek Corp.\n");
-+ DoC_Probe(CONFIG_MTD_DOCPROBE_ADDRESS);
-+ /* So it looks like we've been used and we get unloaded */
-+// MOD_INC_USE_COUNT;
-+// MOD_DEC_USE_COUNT;
-+ return 0;
-+#else
- int i;
-
- if (doc_config_location) {
-@@ -328,6 +687,7 @@ static int __init init_doc(void)
- if (!docfound)
- printk(KERN_INFO "No recognised DiskOnChip devices found\n");
- return -EAGAIN;
-+#endif
- }
-
- module_init(init_doc);
---- linux-2.6.30.9/drivers/mtd/maps/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/mtd/maps/Makefile 2013-05-02 01:47:52.636227146 +0300
-@@ -62,3 +62,4 @@ obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_
- obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o
- obj-$(CONFIG_MTD_RBTX4939) += rbtx4939-flash.o
- obj-$(CONFIG_MTD_VMU) += vmu-flash.o
-+obj-$(CONFIG_RTL819X_SPI_FLASH) += rtl819x_flash.o
---- linux-2.6.30.9/drivers/mtd/mtdblock.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/mtd/mtdblock.c 2013-05-02 01:47:52.649227145 +0300
-@@ -18,6 +18,26 @@
- #include <linux/mtd/blktrans.h>
- #include <linux/mutex.h>
-
-+#include <linux/config.h>
-+
-+#ifdef CONFIG_RTL_819X
-+// david ---------------
-+//#define CONFIG_MTD_DEBUG
-+#define CONFIG_MTD_DEBUG_VERBOSE 3
-+
-+
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+int flash_write_flag=0; // 1: hw setting 2: default setting, 4: current setting, 8: system image
-+#else
-+int flash_hw_start=0x6000; // hw setting start address
-+int flash_hw_len=0x2000; // hw setting length
-+int flash_ds_start=0x8000; // default & current setting start address
-+int flash_ds_len=0x8000; // default & current setting length
-+
-+int flash_write_flag=0; // 1: hw setting 2: default setting, 4: current setting, 8: system image
-+#endif
-+#endif /*#ifdef CONFIG_RTL_819X */
-+
-
- static struct mtdblk_dev {
- struct mtd_info *mtd;
-@@ -134,6 +154,58 @@ static int do_cached_write (struct mtdbl
- DEBUG(MTD_DEBUG_LEVEL2, "mtdblock: write on \"%s\" at 0x%lx, size 0x%x\n",
- mtd->name, pos, len);
-
-+
-+#ifdef CONFIG_RTL_819X
-+#ifdef CONFIG_RTL_FLASH_MAPPING_ENABLE
-+ /*since len is normal 0x200 less than every section*/
-+ if(flash_write_flag != 0x8000)
-+ {
-+ flash_write_flag = 0;
-+ if ( pos >= CONFIG_RTL_HW_SETTING_OFFSET && pos < CONFIG_RTL_DEFAULT_SETTING_OFFSET ) {
-+ flash_write_flag |= 1;
-+ if ((pos+len) > CONFIG_RTL_DEFAULT_SETTING_OFFSET ) {
-+ flash_write_flag |= 2;
-+ if ((pos+len) > CONFIG_RTL_CURRENT_SETTING_OFFSET )
-+ flash_write_flag |= 4;
-+ }
-+ }
-+ if ( pos >= CONFIG_RTL_DEFAULT_SETTING_OFFSET && pos < CONFIG_RTL_CURRENT_SETTING_OFFSET ) {
-+ flash_write_flag |= 2;
-+ if ((pos+len) > CONFIG_RTL_CURRENT_SETTING_OFFSET ) {
-+ flash_write_flag |= 4;
-+ }
-+ }
-+ else if ( pos >= CONFIG_RTL_CURRENT_SETTING_OFFSET && pos < CONFIG_RTL_WEB_PAGES_OFFSET ){
-+ flash_write_flag |= 4;
-+ }
-+ }
-+#else
-+// david --------------
-+ if ( flash_write_flag != 0x8000)
-+ {
-+ flash_write_flag = 0;
-+ if (pos >= flash_hw_start && pos < (flash_hw_start+flash_hw_len) ) {
-+ flash_write_flag |= 1;
-+ if ((len - flash_hw_len) > 0) {
-+ flash_write_flag |= 2;
-+ if ((len - flash_ds_len -flash_hw_len) > 0)
-+ flash_write_flag |= 4;
-+ }
-+ }
-+ if (pos >= flash_ds_start && pos < (flash_ds_start+flash_ds_len) ) {
-+ flash_write_flag |= 2;
-+ if ((len - flash_ds_len) > 0) {
-+ flash_write_flag |= 4;
-+ }
-+ }
-+ else if ( pos >= (flash_ds_start+flash_ds_len) ){
-+ flash_write_flag |= 4;
-+ }
-+ }
-+//---------------------
-+#endif //CONFIG_RTL_FLASH_MAPPING_ENABLE
-+#endif
-+
- if (!sect_size)
- return mtd->write(mtd, pos, len, &retlen, buf);
-
---- linux-2.6.30.9/drivers/net/Kconfig 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/net/Kconfig 2013-05-02 01:47:52.704227141 +0300
-@@ -27,7 +27,7 @@ menuconfig NETDEVICES
- if NETDEVICES
-
- config COMPAT_NET_DEV_OPS
-- default y
-+ default n
- bool "Enable older network device API compatibility"
- ---help---
- This option enables kernel compatibility with older network devices
-@@ -2146,6 +2146,22 @@ config R8169_VLAN
-
- If in doubt, say Y.
-
-+config R8168
-+ tristate "Realtek 8168 gigabit ethernet support"
-+ depends on PCI
-+ select CRC32
-+ default y
-+ ---help---
-+ Say Y here if you have a Realtek 8168 PCI Gigabit Ethernet adapter.
-+
-+ To compile this driver as a module, choose M here: the module
-+ will be called r8168. This is recommended.
-+
-+config R8168_NAPI
-+ bool "NAPI support"
-+ depends on R8168
-+ default y
-+
- config SB1250_MAC
- tristate "SB1250 Gigabit Ethernet support"
- depends on SIBYTE_SB1xxx_SOC
-@@ -2987,19 +3003,39 @@ config PPP_BSDCOMP
- module; it is called bsd_comp and will show up in the directory
- modules once you have said "make modules". If unsure, say N.
-
--config PPP_MPPE
-- tristate "PPP MPPE compression (encryption) (EXPERIMENTAL)"
-- depends on PPP && EXPERIMENTAL
-- select CRYPTO
-+config PPP_MPPE_MPPC
-+ tristate "Microsoft PPP compression/encryption (MPPC/MPPE)"
-+ depends on PPP
- select CRYPTO_SHA1
- select CRYPTO_ARC4
-- select CRYPTO_ECB
- ---help---
-- Support for the MPPE Encryption protocol, as employed by the
-- Microsoft Point-to-Point Tunneling Protocol.
-+ Support for the Microsoft Point-To-Point Compression (RFC2118) and
-+ Microsoft Point-To-Point Encryption (RFC3078). These protocols are
-+ supported by Microsoft Windows and wide range of "hardware" access
-+ servers. MPPE is common protocol in Virtual Private Networks. According
-+ to RFC3078, MPPE supports 40, 56 and 128-bit key lengths. Depending on
-+ PPP daemon configuration on both ends of the link, following scenarios
-+ are possible:
-+ - only compression (MPPC) is used,
-+ - only encryption (MPPE) is used,
-+ - compression and encryption (MPPC+MPPE) are used.
-+
-+ Please note that Hi/Fn (http://www.hifn.com) holds patent on MPPC so
-+ you should check if this patent is valid in your country in order to
-+ avoid legal problems.
-
-- See http://pptpclient.sourceforge.net/ for information on
-- configuring PPTP clients and servers to utilize this method.
-+ For more information please visit http://mppe-mppc.alphacron.de
-+
-+ To compile this driver as a module, choose M here. The module will
-+ be called ppp_mppe_mppc.ko.
-+
-+
-+config PPP_IDLE_TIMEOUT_REFINE
-+ tristate "PPP idle timeout refine"
-+ depends on PPP
-+ help
-+ skip some kinds of packets from DUT to WAN or WAN to DUT that will cause PPPoE/PPTP/L2TP idle timeout
-+ can't work well
-
- config PPPOE
- tristate "PPP over Ethernet (EXPERIMENTAL)"
-@@ -3155,4 +3191,22 @@ config VIRTIO_NET
- This is the virtual network driver for virtio. It can be used with
- lguest or QEMU based VMMs (like KVM or Xen). Say Y or M.
-
-+config R8198EP
-+ bool "Realtek 8198 slave pcie support"
-+ ---help---
-+ Say Y here if you have a Realtek 8198 slave pcie Ethernet adapter.
-+
-+config R8198EP_HOST
-+ tristate "Host site view for slave PCIe RTL8198"
-+ depends on R8198EP
-+ ---help---
-+ Say Y here if you have a Realtek 8198 slave pcie Ethernet adapter.
-+config R8198EP_DEVICE
-+ tristate "Device site view for salve PCIe RTL8198"
-+ depends on R8198EP
-+ ---help---
-+ Say Y here if you have a Realtek 8198 slave pcie Ethernet adapter.
-+
-+
-+source "drivers/net/rtl819x/Kconfig"
- endif # NETDEVICES
---- linux-2.6.30.9/drivers/net/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/net/Makefile 2013-05-02 01:47:52.705227141 +0300
-@@ -142,7 +142,7 @@ obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
- obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
- obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o
- obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
--obj-$(CONFIG_PPP_MPPE) += ppp_mppe.o
-+obj-$(CONFIG_PPP_MPPE_MPPC) += ppp_mppe_mppc.o
- obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
- obj-$(CONFIG_PPPOL2TP) += pppox.o pppol2tp.o
-
-@@ -218,6 +218,7 @@ obj-$(CONFIG_VETH) += veth.o
- obj-$(CONFIG_NET_NETX) += netx-eth.o
- obj-$(CONFIG_DL2K) += dl2k.o
- obj-$(CONFIG_R8169) += r8169.o
-+obj-$(CONFIG_R8168) += r8168/
- obj-$(CONFIG_AMD8111_ETH) += amd8111e.o
- obj-$(CONFIG_IBMVETH) += ibmveth.o
- obj-$(CONFIG_S2IO) += s2io.o
-@@ -271,3 +272,12 @@ obj-$(CONFIG_VIRTIO_NET) += virtio_net.o
- obj-$(CONFIG_SFC) += sfc/
-
- obj-$(CONFIG_WIMAX) += wimax/
-+
-+obj-$(CONFIG_RTL_819X_SWCORE) += rtl819x/built-in.o
-+subdir-$(CONFIG_RTL_819X_SWCORE) += rtl819x
-+
-+obj-$(CONFIG_RTK_VLAN_SUPPORT) += rtk_vlan.o
-+obj-$(CONFIG_R8198EP) += r8198ep/
-+
-+#DIR_RTLASIC = $(DIR_LINUX)/drivers/net/rtl819x/
-+#EXTRA_CFLAGS += -I$(DIR_RTLASIC)
---- linux-2.6.30.9/drivers/net/ppp_generic.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/net/ppp_generic.c 2013-05-02 01:47:53.185227102 +0300
-@@ -42,6 +42,9 @@
- #include <linux/tcp.h>
- #include <linux/smp_lock.h>
- #include <linux/spinlock.h>
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+#include <linux/smp_lock.h>
-+#endif
- #include <linux/rwsem.h>
- #include <linux/stddef.h>
- #include <linux/device.h>
-@@ -52,6 +55,49 @@
- #include <linux/nsproxy.h>
- #include <net/net_namespace.h>
- #include <net/netns/generic.h>
-+#include <linux/icmp.h>
-+
-+#if defined(CONFIG_RTL_PPPOE_HWACC) || defined (CONFIG_RTL_FAST_PPPOE)
-+#include <linux/if_pppox.h>
-+#endif
-+
-+#include <net/rtl/rtl_types.h>
-+#if defined(CONFIG_RTL_819X)
-+#include <net/rtl/rtl_nic.h>
-+#endif
-+
-+#include <net/rtl/rtl865x_netif.h>
-+#ifdef CONFIG_RTL_LAYERED_DRIVER_L3
-+#include <net/rtl/rtl865x_ppp.h>
-+#endif
-+
-+#if defined (CONFIG_RTL_HW_QOS_SUPPORT) // sync from voip customer for multiple ppp
-+#include <net/rtl/rtl865x_outputQueue.h>
-+#endif
-+
-+#if defined(NAT_SPEEDUP)||defined(CONFIG_RTL_IPTABLES_FAST_PATH)
-+ #define FAST_PPTP
-+ #define FAST_L2TP
-+#endif
-+
-+#ifdef CONFIG_RTL_LAYERED_DRIVER
-+enum SE_TYPE
-+{
-+ /*1:if_ether, 2:pppoe,3:pptp,4:l2tp*/
-+ SE_ETHER = 1,
-+ SE_PPPOE = 2,
-+ SE_PPTP = 3,
-+ SE_L2TP = 4,
-+};
-+#else
-+enum SE_TYPE
-+{
-+ SE_PPPOE = 1,
-+ SE_PPTP = 2,
-+ SE_L2TP = 3,
-+};
-+#endif /*CONFIG_RTL865X_LAYERED_DRIVER*/
-+
-
- #define PPP_VERSION "2.4.2"
-
-@@ -88,10 +134,18 @@ struct ppp_file {
- int dead; /* unit/channel has been shut down */
- };
-
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+#define PF_TO_X(pf, X) ((X *)((char *)(pf) - offsetof(X, file)))
-+#else
- #define PF_TO_X(pf, X) container_of(pf, X, file)
-+#endif
-
- #define PF_TO_PPP(pf) PF_TO_X(pf, struct ppp)
- #define PF_TO_CHANNEL(pf) PF_TO_X(pf, struct channel)
-+//#if defined(CONFIG_PPP_MPPE_MPPC)
-+//#undef ROUNDUP
-+//#define ROUNDUP(n, x) (((n) + (x) - 1) / (x))
-+//#endif
-
- /*
- * Data structure describing one ppp unit.
-@@ -107,6 +161,9 @@ struct ppp {
- spinlock_t rlock; /* lock for receive side 58 */
- spinlock_t wlock; /* lock for transmit side 5c */
- int mru; /* max receive unit 60 */
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+ int mru_alloc; /* MAX(1500,MRU) for dev_alloc_skb() */
-+#endif
- unsigned int flags; /* control bits 64 */
- unsigned int xstate; /* transmit state bits 68 */
- unsigned int rstate; /* receive state bits 6c */
-@@ -130,6 +187,7 @@ struct ppp {
- u32 minseq; /* MP: min of most recent seqnos */
- struct sk_buff_head mrq; /* MP: receive reconstruction queue */
- #endif /* CONFIG_PPP_MULTILINK */
-+ struct net_device_stats stats; /* statistics */
- #ifdef CONFIG_PPP_FILTER
- struct sock_filter *pass_filter; /* filter for packets to pass */
- struct sock_filter *active_filter;/* filter for pkts to reset idle */
-@@ -138,6 +196,67 @@ struct ppp {
- struct net *ppp_net; /* the net we belong to */
- };
-
-+#ifdef FAST_PPTP
-+#define MPPE_CCOUNT(p) ((((p)[2] & 0x0f) << 8) + (p)[3])
-+typedef struct {
-+ unsigned i;
-+ unsigned j;
-+ unsigned char S[256];
-+} arcfour_context;
-+
-+
-+#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */ /* reference from ppp_mppe.h*/
-+
-+
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+typedef struct ppp_mppe_state { /* reference from ppp_mppe_mppc.c */
-+ struct crypto_tfm *arc4_tfm;
-+ u8 master_key[MPPE_MAX_KEY_LEN];
-+ u8 session_key[MPPE_MAX_KEY_LEN];
-+ u8 mppc; /* do we use compression (MPPC)? */
-+ u8 mppe; /* do we use encryption (MPPE)? */
-+ u8 keylen; /* key length in bytes */
-+ u8 bitkeylen; /* key length in bits */
-+ u16 ccount; /* coherency counter */
-+ u16 bits; /* MPPC/MPPE control bits */
-+ u8 stateless; /* do we use stateless mode? */
-+ u8 nextflushed; /* set A bit in the next outgoing packet;
-+ used only by compressor*/
-+ u8 flushexpected; /* drop packets until A bit is received;
-+ used only by decompressor*/
-+ u8 *hist; /* MPPC history */
-+ u16 *hash; /* Hash table; used only by compressor */
-+ u16 histptr; /* history "cursor" */
-+ int unit;
-+ int debug;
-+ int mru;
-+ struct compstat stats;
-+}ppp_mppe_state;
-+#else
-+typedef struct ppp_mppe_state { /* reference from ppp_mppe.c */
-+ struct crypto_blkcipher *arc4;
-+ struct crypto_hash *sha1;
-+ unsigned char *sha1_digest;
-+ unsigned char master_key[MPPE_MAX_KEY_LEN];
-+ unsigned char session_key[MPPE_MAX_KEY_LEN];
-+ unsigned keylen; /* key length in bytes */
-+ /* NB: 128-bit == 16, 40-bit == 8! */
-+ /* If we want to support 56-bit, */
-+ /* the unit has to change to bits */
-+ unsigned char bits; /* MPPE control bits */
-+ unsigned ccount; /* 12-bit coherency count (seqno) */
-+ unsigned stateful; /* stateful mode flag */
-+ int discard; /* stateful mode packet loss flag */
-+ int sanity_errors; /* take down LCP if too many */
-+ int unit;
-+ int debug;
-+ struct compstat stats;
-+} ppp_mppe_state;
-+#endif
-+
-+#endif
-+
-+
- /*
- * Bits in flags: SC_NO_TCP_CCID, SC_CCP_OPEN, SC_CCP_UP, SC_LOOP_TRAFFIC,
- * SC_MULTILINK, SC_MP_SHORTSEQ, SC_MP_XSHORTSEQ, SC_COMP_TCP, SC_REJ_COMP_TCP,
-@@ -145,9 +264,15 @@ struct ppp {
- * Bits in rstate: SC_DECOMP_RUN, SC_DC_ERROR, SC_DC_FERROR.
- * Bits in xstate: SC_COMP_RUN
- */
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+#define SC_FLAG_BITS (SC_NO_TCP_CCID|SC_CCP_OPEN|SC_CCP_UP|SC_LOOP_TRAFFIC \
-+ |SC_MULTILINK|SC_MP_SHORTSEQ|SC_MP_XSHORTSEQ \
-+ |SC_COMP_TCP|SC_REJ_COMP_TCP)
-+#else
- #define SC_FLAG_BITS (SC_NO_TCP_CCID|SC_CCP_OPEN|SC_CCP_UP|SC_LOOP_TRAFFIC \
- |SC_MULTILINK|SC_MP_SHORTSEQ|SC_MP_XSHORTSEQ \
- |SC_COMP_TCP|SC_REJ_COMP_TCP|SC_MUST_COMP)
-+#endif
-
- /*
- * Private data structure for each channel.
-@@ -169,6 +294,12 @@ struct channel {
- u32 lastseq; /* MP: last sequence # received */
- int speed; /* speed of the corresponding ppp channel*/
- #endif /* CONFIG_PPP_MULTILINK */
-+#if defined(CONFIG_RTL_PPPOE_HWACC) || defined (CONFIG_RTL_FAST_PPPOE)
-+ u8 pppoe;
-+ u8 rsv1;
-+ u16 rsv2;
-+#endif /* CONFIG_RTL865X_HW_TABLES */
-+
- };
-
- /*
-@@ -235,13 +366,31 @@ struct ppp_net {
- static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf,
- struct file *file, unsigned int cmd, unsigned long arg);
- static void ppp_xmit_process(struct ppp *ppp);
-+#ifdef FAST_PPTP
-+static void ppp_send_frame(struct ppp *ppp, struct sk_buff *skb, int is_fast_fw);
-+#else
- static void ppp_send_frame(struct ppp *ppp, struct sk_buff *skb);
-+#endif
-+
- static void ppp_push(struct ppp *ppp);
- static void ppp_channel_push(struct channel *pch);
- static void ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb,
- struct channel *pch);
- static void ppp_receive_error(struct ppp *ppp);
-+#ifdef FAST_PPTP
-+struct sk_buff *ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb, int is_fast_fw);
-+#ifdef CONFIG_FAST_PATH_MODULE
-+int (*FastPath_hook9)( void )=NULL;
-+int (*FastPath_hook10)(struct sk_buff *skb)=NULL;
-+EXPORT_SYMBOL(FastPath_hook9);
-+EXPORT_SYMBOL(FastPath_hook10);
-+EXPORT_SYMBOL(ppp_receive_nonmp_frame);
-+#endif
-+
-+#else
- static void ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb);
-+#endif
-+
- static struct sk_buff *ppp_decompress_frame(struct ppp *ppp,
- struct sk_buff *skb);
- #ifdef CONFIG_PPP_MULTILINK
-@@ -555,10 +704,25 @@ static int get_filter(void __user *arg,
- }
- #endif /* CONFIG_PPP_FILTER */
-
-+#if defined (CONFIG_RTL_FAST_PPPOE)
-+extern int set_pppoe_info(char *ppp_dev, char *wan_dev, unsigned short sid,
-+ unsigned int our_ip,unsigned int peer_ip,
-+ unsigned char * our_mac, unsigned char *peer_mac);
-+
-+extern int clear_pppoe_info(char *ppp_dev, char *wan_dev, unsigned short sid,
-+ unsigned int our_ip,unsigned int peer_ip,
-+ unsigned char * our_mac, unsigned char *peer_mac);
-+extern int get_pppoe_last_rx_tx(char * ppp_dev,char * wan_dev,unsigned short sid,
-+ unsigned int our_ip,unsigned int peer_ip,
-+ unsigned char * our_mac,unsigned char * peer_mac,
-+ unsigned long * last_rx,unsigned long * last_tx);
-+extern int fast_pppoe_fw;
-+
-+#endif
- static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
- {
- struct ppp_file *pf = file->private_data;
-- struct ppp *ppp;
-+ struct ppp *ppp = NULL;
- int err = -EFAULT, val, val2, i;
- struct ppp_idle idle;
- struct npioctl npi;
-@@ -611,11 +775,83 @@ static long ppp_ioctl(struct file *file,
- case PPPIOCCONNECT:
- if (get_user(unit, p))
- break;
-+#ifdef CONFIG_RTL_LAYERED_DRIVER_L2 // sync from voip customer for multiple ppp
-+ #if defined (CONFIG_RTL_HW_QOS_SUPPORT)
-+ rtl865x_qosRearrangeRule();
-+ #endif
-+#endif
- err = ppp_connect_channel(pch, unit);
-+
-+#if defined(CONFIG_RTL_PPPOE_HWACC) || defined (CONFIG_RTL_FAST_PPPOE)
-+ if(err == 0 && pch->pppoe==TRUE)
-+ {
-+ struct sock *sk = (struct sock *) pch->chan->private;
-+ struct pppox_sock *po = pppox_sk(sk);
-+ struct net_device *local_dev = po->pppoe_dev;
-+#ifdef CONFIG_RTL_LAYERED_DRIVER
-+#ifdef CONFIG_RTL_LAYERED_DRIVER_L3
-+ {
-+
-+
-+ rtl865x_attachMasterNetif(pch->ppp->dev->name, local_dev->name);
-+ //add the netif mapping table
-+ rtl_add_ps_drv_netif_mapping(pch->ppp->dev,pch->ppp->dev->name); // sync from voip customer for multiple ppp
-+ }
-+ rtl865x_addPpp(pch->ppp->dev->name , (ether_addr_t*)po->pppoe_pa.remote, po->pppoe_pa.sid, SE_PPPOE);
-+#endif
-+#endif
-+#if defined (CONFIG_RTL_FAST_PPPOE)
-+ set_pppoe_info(pch->ppp->dev->name, local_dev->name, po->pppoe_pa.sid,
-+ 0,0,NULL, (unsigned char *)po->pppoe_pa.remote);
-+#endif
-+ }
-+#endif
-+
-+
-+ #ifdef FAST_PPTP // sync from voip customer for multiple ppp
-+ {
-+ extern void set_pptp_device(char *ppp_device);
-+ extern int fast_pptp_fw;
-+ if (err==0 && fast_pptp_fw)
-+ set_pptp_device(pch->ppp->dev->name);
-+ }
-+ #endif
-+
-+ #ifdef FAST_L2TP // sync from voip customer for multiple ppp
-+ {
-+ extern void set_l2tp_device(char *ppp_device);
-+ if (err==0)
-+ set_l2tp_device(pch->ppp->dev->name);
-+ }
-+ #endif
-+
- break;
-
- case PPPIOCDISCONN:
- err = ppp_disconnect_channel(pch);
-+#if defined(CONFIG_RTL_PPPOE_HWACC) || defined (CONFIG_RTL_FAST_PPPOE)
-+ if (err == 0 && pch->pppoe==TRUE)
-+ {
-+ pch->pppoe = FALSE;
-+
-+#ifdef CONFIG_RTL_LAYERED_DRIVER
-+#ifdef CONFIG_RTL_LAYERED_DRIVER_L3
-+
-+ rtl865x_detachMasterNetif(ppp->dev->name);
-+ //del the netif mapping table
-+ rtl_del_ps_drv_netif_mapping(pch->ppp->dev);
-+ rtl865x_delPppbyIfName(ppp->dev->name);
-+#endif
-+
-+#endif
-+
-+#if defined (CONFIG_RTL_FAST_PPPOE)
-+ clear_pppoe_info(pch->ppp->dev->name, NULL, 0,
-+ 0,0,NULL, NULL);
-+#endif
-+ }
-+#endif
-+
- break;
-
- default:
-@@ -642,7 +878,13 @@ static long ppp_ioctl(struct file *file,
- case PPPIOCSMRU:
- if (get_user(val, p))
- break;
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+ ppp->mru_alloc = ppp->mru = val;
-+ if (ppp->mru_alloc < PPP_MRU)
-+ ppp->mru_alloc = PPP_MRU; /* increase for broken peers */
-+#else
- ppp->mru = val;
-+#endif
- err = 0;
- break;
-
-@@ -689,6 +931,53 @@ static long ppp_ioctl(struct file *file,
- break;
-
- case PPPIOCGIDLE:
-+#ifdef FAST_L2TP
-+ {
-+ extern int fast_l2tp_fw;
-+ unsigned long get_fast_l2tp_lastxmit(void);
-+ unsigned long fastl2tp_lastxmit;
-+ if(fast_l2tp_fw)
-+ {
-+ fastl2tp_lastxmit = get_fast_l2tp_lastxmit();
-+ if(ppp->last_xmit < fastl2tp_lastxmit)
-+ ppp->last_xmit = fastl2tp_lastxmit;
-+ }
-+ }
-+#endif
-+#ifdef FAST_PPTP
-+ {
-+ extern int fast_pptp_fw;
-+ extern unsigned long get_fastpptp_lastxmit(void);
-+ unsigned long fastpptp_lastxmit;
-+ if(fast_pptp_fw)
-+ {
-+ fastpptp_lastxmit = get_fastpptp_lastxmit();
-+ if(ppp->last_xmit < fastpptp_lastxmit)
-+ ppp->last_xmit = fastpptp_lastxmit;
-+ }
-+ }
-+#endif
-+#if defined (CONFIG_RTL_FAST_PPPOE)
-+ {
-+ unsigned long fast_pppoe_last_rx=0;
-+ unsigned long fast_pppoe_last_tx=0;
-+
-+ if(fast_pppoe_fw)
-+ {
-+ if(ppp->dev!=NULL)
-+ {
-+ get_pppoe_last_rx_tx(ppp->dev->name,NULL,0,0,0,NULL,NULL,&fast_pppoe_last_rx,&fast_pppoe_last_tx);
-+
-+ if(ppp->last_xmit < fast_pppoe_last_tx)
-+ ppp->last_xmit = fast_pppoe_last_tx;
-+
-+ if(ppp->last_recv < fast_pppoe_last_rx)
-+ ppp->last_xmit = fast_pppoe_last_rx;
-+ }
-+ }
-+ }
-+#endif
-+
- idle.xmit_idle = (jiffies - ppp->last_xmit) / HZ;
- idle.recv_idle = (jiffies - ppp->last_recv) / HZ;
- if (copy_to_user(argp, &idle, sizeof(idle)))
-@@ -788,6 +1077,15 @@ static long ppp_ioctl(struct file *file,
- return err;
- }
-
-+struct net_device_stats *get_ppp_stats(struct ppp *ppp)
-+{
-+ return (&ppp->stats);
-+}
-+
-+#ifdef CONFIG_FAST_PATH_MODULE
-+EXPORT_SYMBOL(get_ppp_stats);
-+#endif
-+
- static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf,
- struct file *file, unsigned int cmd, unsigned long arg)
- {
-@@ -951,13 +1249,114 @@ out:
- /*
- * Network interface unit routines.
- */
--static int
--ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
-+ #if defined(FAST_L2TP)
-+extern int fast_l2tp_to_wan(void *skb);
-+extern int check_for_fast_l2tp_to_wan(void *skb);
-+extern void event_ppp_dev_down(const char * name);
-+#endif
-+#if defined(FAST_PPTP) || defined(FAST_L2TP)
-+int ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
-+#else
-+static int ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
-+#endif
-+
- {
- struct ppp *ppp = netdev_priv(dev);
- int npi, proto;
- unsigned char *pp;
-
-+#ifdef FAST_PPTP
-+ int is_fast_fw=0;
-+ #if defined(CONFIG_RTL_IPTABLES_FAST_PATH)
-+ extern int fast_pptp_fw;
-+ #ifdef CONFIG_FAST_PATH_MODULE
-+ if((FastPath_hook9!=NULL) &&(FastPath_hook10!=NULL))
-+ {
-+ if (FastPath_hook9()) {
-+ if (skb->cb[0]=='R' && skb->cb[1]=='T' && skb->cb[2]=='L')
-+ {
-+ is_fast_fw=1;
-+ memset(skb->cb, '\x0', 3);
-+ }
-+ else {
-+ extern int fast_pptp_to_wan(struct sk_buff *skb);
-+ if (FastPath_hook10(skb))
-+ return 0;
-+ }
-+ }
-+ }
-+ #else
-+ if (fast_pptp_fw) {
-+ if (skb->cb[0]=='R' && skb->cb[1]=='T' && skb->cb[2]=='L')
-+ {
-+ is_fast_fw=1;
-+ memset(skb->cb, '\x0', 3);
-+ }
-+ else {
-+ extern int is_pptp_device(char *ppp_device); // sync from voip customer for multiple ppp
-+ extern int fast_pptp_to_wan(void *skb);
-+ if (is_pptp_device(ppp->dev->name) && fast_pptp_to_wan((void*)skb)) // sync from voip customer for multiple ppp
-+ return 0;
-+ }
-+ }
-+ #endif
-+ #else
-+ if (skb->cb[0]=='R' && skb->cb[1]=='T' && skb->cb[2]=='L')
-+ is_fast_fw=1;
-+ #endif
-+#endif
-+
-+#if 0
-+#ifdef FAST_L2TP
-+#ifndef FAST_PPTP
-+ int is_fast_fw=0;
-+#endif
-+
-+#ifdef CONFIG_RTL_IPTABLES_FAST_PATH
-+#if 0//def CONFIG_FAST_PATH_MODULE
-+ if((FastPath_hook9!=NULL) &&(FastPath_hook10!=NULL))
-+ {
-+ if (FastPath_hook9()) {
-+ if (skb->cb[0]=='R' && skb->cb[1]=='T' && skb->cb[2]=='L') {
-+ is_fast_fw = 1;
-+ memset(skb->cb, '\x0', 3);
-+ }
-+ else {
-+ //extern int fast_pptp_to_wan(struct sk_buff *skb);
-+#ifdef CONFIG_RTL865X_HW_PPTPL2TP
-+ if (!accelerate && FastPath_hook10(skb))
-+ return 0;
-+#else
-+ if (FastPath_hook10(skb))
-+ return 0;
-+#endif /* CONFIG_RTL865X_HW_PPTPL2TP */
-+ }
-+ }
-+ }
-+#else
-+ extern int fast_l2tp_fw;
-+ if (fast_l2tp_fw) {
-+ if (skb->cb[0]=='R' && skb->cb[1]=='T' && skb->cb[2]=='L') {
-+ is_fast_fw = 1;
-+ memset(skb->cb, '\x0', 3);
-+ }
-+ else {
-+ extern int is_l2tp_device(char *ppp_device);
-+ extern int fast_l2tp_to_wan(struct sk_buff *skb);
-+ if (is_l2tp_device(ppp->dev->name)&&fast_l2tp_to_wan(skb))
-+ return 0;
-+ }
-+ }
-+#endif
-+#else
-+ if (skb->cb[0]=='R' && skb->cb[1]=='T' && skb->cb[2]=='L') {
-+ is_fast_fw = 1;
-+ memset(skb->cb, '\x0', 3);
-+ }
-+#endif
-+#endif
-+#endif
-+
- npi = ethertype_to_npindex(ntohs(skb->protocol));
- if (npi < 0)
- goto outf;
-@@ -985,9 +1384,37 @@ ppp_start_xmit(struct sk_buff *skb, stru
- pp[0] = proto >> 8;
- pp[1] = proto;
-
-+#ifdef FAST_PPTP
-+ if (is_fast_fw)
-+ ppp_send_frame(ppp, skb, 1);
-+ else {
-+#ifdef FAST_L2TP
-+ skb_pull(skb,2);
-+ extern int is_l2tp_device(char *ppp_device); // sync from voip customer for multiple ppp
-+ if (is_l2tp_device(ppp->dev->name) && (check_for_fast_l2tp_to_wan((void*)skb)==1) && (fast_l2tp_to_wan((void*)skb) == 1)) // sync from voip customer for multiple ppp
-+ {
-+ /* Note: if pkt go here, l2tp dial-on-demand will not be triggered,
-+ so some risk exist here! -- 2010/04/25 zj */
-+ return 0;
-+ }
-+ else
-+ {
-+ pp = skb_push(skb, 2);
-+ proto = npindex_to_proto[npi];
-+ pp[0] = proto >> 8;
-+ pp[1] = proto;
-+ }
-+#endif
-+ netif_stop_queue(dev);
-+ skb_queue_tail(&ppp->file.xq, skb);
-+ ppp_xmit_process(ppp);
-+ }
-+#else
- netif_stop_queue(dev);
- skb_queue_tail(&ppp->file.xq, skb);
- ppp_xmit_process(ppp);
-+#endif
-+
- return 0;
-
- outf:
-@@ -1050,7 +1477,11 @@ static void ppp_setup(struct net_device
- dev->hard_header_len = PPP_HDRLEN;
- dev->mtu = PPP_MTU;
- dev->addr_len = 0;
-+#if defined(CONFIG_RTL_819X)
-+ dev->tx_queue_len = 64;
-+#else
- dev->tx_queue_len = 3;
-+#endif
- dev->type = ARPHRD_PPP;
- dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
- dev->features |= NETIF_F_NETNS_LOCAL;
-@@ -1074,7 +1505,12 @@ ppp_xmit_process(struct ppp *ppp)
- ppp_push(ppp);
- while (!ppp->xmit_pending
- && (skb = skb_dequeue(&ppp->file.xq)))
-+#ifdef FAST_PPTP
-+ ppp_send_frame(ppp, skb, 0);
-+#else
- ppp_send_frame(ppp, skb);
-+#endif
-+
- /* If there's no work left to do, tell the core net
- code that we can accept some more. */
- if (!ppp->xmit_pending && !skb_peek(&ppp->file.xq))
-@@ -1083,6 +1519,7 @@ ppp_xmit_process(struct ppp *ppp)
- ppp_xmit_unlock(ppp);
- }
-
-+#if !defined(CONFIG_PPP_MPPE_MPPC)
- static inline struct sk_buff *
- pad_compress_skb(struct ppp *ppp, struct sk_buff *skb)
- {
-@@ -1132,19 +1569,81 @@ pad_compress_skb(struct ppp *ppp, struct
- }
- return new_skb;
- }
-+#endif
-+
-+/*
-+ * some kinds of packets from DUT to WAN will cause ppp interface active when lan==>wan traffic is off,
-+ * so we skip these packets. otherwise the ppp idletime out can't work well
-+ * return value 1 means this packet won't set the ppp to active
-+ */
-+#if defined(CONFIG_PPP_IDLE_TIMEOUT_REFINE)
-+int timeoutCheck_skipp_pkt(struct iphdr *iph)
-+{
-+
-+ if(iph == NULL)
-+ {
-+ printk("the iphdr for PPP_IDLE_TIMEOUT_REFINE is NULL, is may cause some isses\n");
-+ return 0;
-+ }
-+
-+ if(iph->protocol == IPPROTO_ICMP)
-+ {
-+ struct icmphdr *icmph= (void *)iph + iph->ihl*4;
-+ // we don't care dest unreacheable pkts(to wan) while recode last tx time
-+ if(icmph->type==ICMP_DEST_UNREACH)
-+ {
-+ printk("it is ICMP dest unreacheable packet\n");
-+ //if(net_ratelimit())printk("skip a icmp dest unreachable pkt from lan to wan\n");
-+ return 1;
-+ }
-+ }
-+ else if(iph->protocol == IPPROTO_TCP)
-+ {
-+ struct tcphdr *tcph;
-+ tcph = (void *)iph + iph->ihl*4;
-+ // we don't care tcp fin/rst pkts(to wan) while recode last tx time
-+ if(tcph->fin || tcph->rst)
-+ {
-+ //if(net_ratelimit())printk("skip a tcp fin/rst pkt fin: %d rst :%d from lan to wan\n", tcph->fin, tcph->rst);
-+ return 1;
-+ }
-+ }
-+ else if(iph->protocol == IPPROTO_IGMP)
-+ {
-+ // we don't care IGMP packets
-+ printk("it is ICMP packet\n");
-+ return 1;
-+ }
-+
-+ return 0;
-+}
-+#else //fastpath assemble code will call this function anyway.
-+int timeoutCheck_skipp_pkt(struct iphdr *iph)
-+{
-+ return 0;
-+}
-+#endif
-
- /*
- * Compress and send a frame.
- * The caller should have locked the xmit path,
- * and xmit_pending should be 0.
- */
--static void
--ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
-+#ifdef FAST_PPTP
-+static void ppp_send_frame(struct ppp *ppp, struct sk_buff *skb, int is_fast_fw)
-+#else
-+static void ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
-+#endif
-+
- {
- int proto = PPP_PROTO(skb);
- struct sk_buff *new_skb;
- int len;
- unsigned char *cp;
-+#if defined(CONFIG_PPP_IDLE_TIMEOUT_REFINE)
-+ struct iphdr *iphp;
-+ iphp = (struct iphdr *)((unsigned char *)(skb->data+2));
-+#endif
-
- if (proto < 0x8000) {
- #ifdef CONFIG_PPP_FILTER
-@@ -1168,6 +1667,9 @@ ppp_send_frame(struct ppp *ppp, struct s
- skb_pull(skb, 2);
- #else
- /* for data packets, record the time */
-+#if defined(CONFIG_PPP_IDLE_TIMEOUT_REFINE)
-+ if(timeoutCheck_skipp_pkt(iphp)!=1)
-+#endif
- ppp->last_xmit = jiffies;
- #endif /* CONFIG_PPP_FILTER */
- }
-@@ -1175,6 +1677,13 @@ ppp_send_frame(struct ppp *ppp, struct s
- ++ppp->dev->stats.tx_packets;
- ppp->dev->stats.tx_bytes += skb->len - 2;
-
-+#if defined(FAST_PPTP) && defined(NAT_SPEEDUP)
-+{
-+ extern void update_fast_pptp_state(void);
-+ update_fast_pptp_state();
-+}
-+#endif
-+
- switch (proto) {
- case PPP_IP:
- if (!ppp->vj || (ppp->flags & SC_COMP_TCP) == 0)
-@@ -1213,12 +1722,69 @@ ppp_send_frame(struct ppp *ppp, struct s
- case PPP_CCP:
- /* peek at outbound CCP frames */
- ppp_ccp_peek(ppp, skb, 0);
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+ if (CCP_CODE(skb->data+2) == CCP_RESETACK
-+ && (ppp->xcomp->compress_proto == CI_MPPE
-+ || ppp->xcomp->compress_proto == CI_LZS)) {
-+ --ppp->dev->stats.tx_packets;
-+ ppp->dev->stats.tx_bytes -= skb->len - 2;
-+ kfree_skb(skb);
-+ return;
-+ }
-+#endif
- break;
- }
-
- /* try to do packet compression */
- if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state
- && proto != PPP_LCP && proto != PPP_CCP) {
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+ int comp_ovhd = 0;
-+ /*
-+ * because of possible data expansion when MPPC or LZS
-+ * is used, allocate compressor's buffer 12.5% bigger
-+ * than MTU
-+ */
-+ if (ppp->xcomp->compress_proto == CI_MPPE)
-+ comp_ovhd = ((ppp->dev->mtu * 9) / 8) + 1 + MPPE_OVHD;
-+ else if (ppp->xcomp->compress_proto == CI_LZS)
-+ comp_ovhd = ((ppp->dev->mtu * 9) / 8) + 1 + LZS_OVHD;
-+ new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len
-+ + comp_ovhd, GFP_ATOMIC);
-+ if (new_skb == 0) {
-+ printk(KERN_ERR "PPP: no memory (comp pkt)\n");
-+ goto drop;
-+ }
-+ if (ppp->dev->hard_header_len > PPP_HDRLEN)
-+ skb_reserve(new_skb,
-+ ppp->dev->hard_header_len - PPP_HDRLEN);
-+
-+ /* compressor still expects A/C bytes in hdr */
-+ len = ppp->xcomp->compress(ppp->xc_state, skb->data - 2,
-+ new_skb->data, skb->len + 2,
-+ ppp->dev->mtu + PPP_HDRLEN);
-+ if (len > 0 && (ppp->flags & SC_CCP_UP)) {
-+ kfree_skb(skb);
-+ skb = new_skb;
-+ skb_put(skb, len);
-+ skb_pull(skb, 2); /* pull off A/C bytes */
-+ } else if (len == 0) {
-+ /* didn't compress, or CCP not up yet */
-+ kfree_skb(new_skb);
-+ } else {
-+ /*
-+ * (len < 0)
-+ * MPPE requires that we do not send unencrypted
-+ * frames. The compressor will return -1 if we
-+ * should drop the frame. We cannot simply test
-+ * the compress_proto because MPPE and MPPC share
-+ * the same number.
-+ */
-+ printk(KERN_ERR "ppp: compressor dropped pkt\n");
-+ kfree_skb(new_skb);
-+ goto drop;
-+ }
-+#else
- if (!(ppp->flags & SC_CCP_UP) && (ppp->flags & SC_MUST_COMP)) {
- if (net_ratelimit())
- printk(KERN_ERR "ppp: compression required but down - pkt dropped.\n");
-@@ -1227,6 +1793,7 @@ ppp_send_frame(struct ppp *ppp, struct s
- skb = pad_compress_skb(ppp, skb);
- if (!skb)
- goto drop;
-+#endif
- }
-
- /*
-@@ -1242,6 +1809,9 @@ ppp_send_frame(struct ppp *ppp, struct s
- }
-
- ppp->xmit_pending = skb;
-+#ifdef FAST_PPTP
-+ if (!is_fast_fw)
-+#endif
- ppp_push(ppp);
- return;
-
-@@ -1637,7 +2207,11 @@ ppp_receive_frame(struct ppp *ppp, struc
- ppp_receive_mp_frame(ppp, skb, pch);
- else
- #endif /* CONFIG_PPP_MULTILINK */
-+#ifdef FAST_PPTP
-+ ppp_receive_nonmp_frame(ppp, skb, 0);
-+#else
- ppp_receive_nonmp_frame(ppp, skb);
-+#endif
- return;
- }
-
-@@ -1657,12 +2231,38 @@ ppp_receive_error(struct ppp *ppp)
- slhc_toss(ppp->vj);
- }
-
--static void
--ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb)
-+#ifdef FAST_PPTP
-+struct sk_buff *ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb, int is_fast_fw)
-+#else
-+static void ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb)
-+#endif
-+
- {
- struct sk_buff *ns;
- int proto, len, npi;
-
-+//brad add for pptp mppe rx out of order
-+#ifdef FAST_PPTP
-+ if(is_fast_fw){
-+ ppp_mppe_state *state;
-+ unsigned int curr_ccount=0;
-+ if((skb->data[2] & 0x10) == 0x10){
-+ state = (ppp_mppe_state *) ppp->rc_state;
-+ curr_ccount = MPPE_CCOUNT(skb->data);
-+ if(state->ccount < 4096 && state->ccount != 0 ){
-+ if(curr_ccount < state->ccount && curr_ccount > 0){
-+ kfree_skb(skb);
-+ return NULL;
-+ }
-+ }else if(curr_ccount == 4095 && state->ccount == 0){
-+ kfree_skb(skb);
-+ return NULL;
-+
-+ }
-+ }
-+ }
-+#endif
-+
- /*
- * Decompress the frame, if compressed.
- * Note that some decompressors need to see uncompressed frames
-@@ -1672,8 +2272,10 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
- && (ppp->rstate & (SC_DC_FERROR | SC_DC_ERROR)) == 0)
- skb = ppp_decompress_frame(ppp, skb);
-
-+#if !defined(CONFIG_PPP_MPPE_MPPC)
- if (ppp->flags & SC_MUST_COMP && ppp->rstate & SC_DC_FERROR)
- goto err;
-+#endif
-
- proto = PPP_PROTO(skb);
- switch (proto) {
-@@ -1737,6 +2339,12 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
-
- npi = proto_to_npindex(proto);
- if (npi < 0) {
-+#ifdef FAST_PPTP
-+ if (is_fast_fw) {
-+ kfree_skb(skb);
-+ return NULL;
-+ }
-+#endif
- /* control or unknown frame - pass it to pppd */
- skb_queue_tail(&ppp->file.rq, skb);
- /* limit queue length by dropping old frames */
-@@ -1786,14 +2394,30 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
- skb->dev = ppp->dev;
- skb->protocol = htons(npindex_to_ethertype[npi]);
- skb_reset_mac_header(skb);
-+#ifdef FAST_PPTP
-+ if (is_fast_fw)
-+ return skb;
-+ else
-+#endif
-+#if defined(CONFIG_RTL_819X)&&defined(RX_TASKLET)
-+ netif_receive_skb(skb);
-+#else
- netif_rx(skb);
-+#endif
- }
- }
-+#ifdef FAST_PPTP
-+ return NULL;
-+#else
- return;
-+#endif
-
- err:
- kfree_skb(skb);
- ppp_receive_error(ppp);
-+#ifdef FAST_PPTP
-+ return NULL;
-+#endif
- }
-
- static struct sk_buff *
-@@ -1814,10 +2438,18 @@ ppp_decompress_frame(struct ppp *ppp, st
-
- switch(ppp->rcomp->compress_proto) {
- case CI_MPPE:
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+ obuff_size = ppp->mru_alloc + PPP_HDRLEN + 1;
-+#else
- obuff_size = ppp->mru + PPP_HDRLEN + 1;
-+#endif
- break;
- default:
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+ obuff_size = ppp->mru_alloc + PPP_HDRLEN;
-+#else
- obuff_size = ppp->mru + PPP_HDRLEN;
-+#endif
- break;
- }
-
-@@ -1854,7 +2486,18 @@ ppp_decompress_frame(struct ppp *ppp, st
- return skb;
-
- err:
-+ #if defined(CONFIG_PPP_MPPE_MPPC)
-+ if (ppp->rcomp->compress_proto != CI_MPPE
-+ && ppp->rcomp->compress_proto != CI_LZS) {
-+ /*
-+ * If decompression protocol isn't MPPE/MPPC or LZS, we set
-+ * SC_DC_ERROR flag and wait for CCP_RESETACK
-+ */
- ppp->rstate |= SC_DC_ERROR;
-+ }
-+ #else
-+ ppp->rstate |= SC_DC_ERROR;
-+ #endif
- ppp_receive_error(ppp);
- return skb;
- }
-@@ -1943,7 +2586,11 @@ ppp_receive_mp_frame(struct ppp *ppp, st
-
- /* Pull completed packets off the queue and receive them. */
- while ((skb = ppp_mp_reconstruct(ppp)))
-+#ifdef FAST_PPTP
-+ ppp_receive_nonmp_frame(ppp, skb, 0);
-+#else
- ppp_receive_nonmp_frame(ppp, skb);
-+#endif
-
- return;
-
-@@ -2169,6 +2816,19 @@ int ppp_unit_number(struct ppp_channel *
- return unit;
- }
-
-+#if defined (CONFIG_RTL_PPPOE_HWACC) || defined (CONFIG_RTL_FAST_PPPOE)
-+/*
-+ * Mark the pppoe type for a channel
-+ */
-+void ppp_channel_pppoe(struct ppp_channel *chan)
-+{
-+ struct channel *pch = chan->ppp;
-+
-+ pch->pppoe = TRUE;
-+}
-+#endif
-+
-+
- /*
- * Disconnect a channel from the generic layer.
- * This must be called in process context.
-@@ -2541,6 +3201,9 @@ ppp_create_interface(struct net *net, in
- ppp = netdev_priv(dev);
- ppp->dev = dev;
- ppp->mru = PPP_MRU;
-+#if defined(CONFIG_PPP_MPPE_MPPC)
-+ ppp->mru_alloc = PPP_MRU;
-+#endif
- init_ppp_file(&ppp->file, INTERFACE);
- ppp->file.hdrlen = PPP_HDRLEN - 2; /* don't count proto bytes */
- for (i = 0; i < NUM_NP; ++i)
-@@ -2633,7 +3296,15 @@ init_ppp_file(struct ppp_file *pf, int k
- static void ppp_shutdown_interface(struct ppp *ppp)
- {
- struct ppp_net *pn;
--
-+#ifdef CONFIG_RTL_PPPOE_HWACC
-+ char dev_name[IFNAMSIZ];
-+ memcpy(dev_name, ppp->dev->name, IFNAMSIZ);
-+#endif
-+
-+#if defined (CONFIG_RTL_FAST_PPPOE)
-+ clear_pppoe_info(ppp->dev->name, NULL, 0,
-+ 0,0,NULL, NULL);
-+#endif
- pn = ppp_pernet(ppp->ppp_net);
- mutex_lock(&pn->all_ppp_mutex);
-
-@@ -2649,6 +3320,33 @@ static void ppp_shutdown_interface(struc
- unit_put(&pn->units_idr, ppp->file.index);
- ppp->file.dead = 1;
- ppp->owner = NULL;
-+
-+#if defined(FAST_L2TP)
-+ {
-+ extern int fast_l2tp_fw;
-+ if(fast_l2tp_fw)
-+ event_ppp_dev_down(dev_name);
-+ }
-+#endif
-+
-+#ifdef CONFIG_RTL_PPPOE_HWACC
-+#ifdef CONFIG_RTL_LAYERED_DRIVER
-+#ifdef CONFIG_RTL_LAYERED_DRIVER_L3
-+#if 1
-+ rtl865x_detachMasterNetif(dev_name);
-+#endif
-+#ifdef CONFIG_RTL_LAYERED_DRIVER_L2 // sync from voip customer for multiple ppp
-+ #if defined (CONFIG_RTL_HW_QOS_SUPPORT)
-+ rtl865x_qosFlushMarkRuleByDev(dev_name);
-+ #endif
-+#endif
-+ rtl865x_delPppbyIfName(dev_name);
-+#endif
-+#else
-+ rtl865x_delPppSession(dev_name, SE_PPPOE);
-+#endif
-+#endif
-+
- wake_up_interruptible(&ppp->file.rwait);
-
- mutex_unlock(&pn->all_ppp_mutex);
-@@ -2892,6 +3590,12 @@ static void *unit_find(struct idr *p, in
- module_init(ppp_init);
- module_exit(ppp_cleanup);
-
-+#if defined(CONFIG_RTL_IPTABLES_FAST_PATH)
-+ #if defined(CONFIG_FAST_PATH_MODULE)
-+ EXPORT_SYMBOL(ppp_start_xmit);
-+ #endif
-+#endif
-+
- EXPORT_SYMBOL(ppp_register_net_channel);
- EXPORT_SYMBOL(ppp_register_channel);
- EXPORT_SYMBOL(ppp_unregister_channel);
---- linux-2.6.30.9/drivers/net/pppoe.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/net/pppoe.c 2013-05-02 01:47:53.188227102 +0300
-@@ -304,6 +304,11 @@ static void pppoe_flush_dev(struct net_d
- for (i = 0; i < PPPOE_HASH_SIZE; i++) {
- struct pppox_sock *po = pn->hash_table[i];
-
-+ if(!((unsigned int)po & 0x80000000))
-+ {
-+ continue;
-+ }
-+
- while (po != NULL) {
- struct sock *sk;
- if (po->pppoe_dev != dev) {
-@@ -699,6 +704,10 @@ static int pppoe_connect(struct socket *
- if (error)
- goto err_put;
-
-+#if defined (CONFIG_RTL_PPPOE_HWACC) || defined(CONFIG_RTL_FAST_PPPOE)
-+ ppp_channel_pppoe(&po->chan);
-+#endif
-+
- sk->sk_state = PPPOX_CONNECTED;
- }
-
-@@ -908,6 +917,9 @@ end:
- * xmit function for internal use.
- *
- ***********************************************************************/
-+ #if defined(CONFIG_NET_SCHED)
-+ extern int gQosEnabled;
-+ #endif
- static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb)
- {
- struct pppox_sock *po = pppox_sk(sk);
-@@ -943,7 +955,17 @@ static int __pppoe_xmit(struct sock *sk,
- dev_hard_header(skb, dev, ETH_P_PPP_SES,
- po->pppoe_pa.remote, NULL, data_len);
-
-+ /*Improve pppoe wantype throughput when QoS disabled.*/
-+#if defined(CONFIG_NET_SCHED)
-+ if (gQosEnabled)
-+ {
- dev_queue_xmit(skb);
-+ }
-+ else
-+#endif
-+ {
-+ skb->dev->netdev_ops->ndo_start_xmit(skb,skb->dev);
-+ }
-
- return 1;
-
---- linux-2.6.30.9/drivers/net/tg3.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/net/tg3.c 2013-05-02 01:47:53.528227074 +0300
-@@ -6242,6 +6242,11 @@ static int tg3_chip_reset(struct tg3 *tp
- PCI_EXP_DEVSTA_URD);
- }
-
-+ /* tonywu */
-+ pci_write_config_word(tp->pdev, tp->pcie_cap + PCI_EXP_DEVCTL, 0);
-+ pcie_set_readrq(tp->pdev, 128);
-+ /* tonywu */
-+
- tg3_restore_pci_state(tp);
-
- tp->tg3_flags &= ~TG3_FLAG_CHIP_RESETTING;
---- linux-2.6.30.9/drivers/net/wireless/Kconfig 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/net/wireless/Kconfig 2013-05-02 01:47:53.615227067 +0300
-@@ -434,6 +434,12 @@ config RTL8187
-
- Thanks to Realtek for their support!
-
-+config RTL8192SE_mac80211
-+ tristate "Realtek 8192SE wireless chip support"
-+ depends on MAC80211 && WLAN_80211
-+ ---help---
-+ This is a driver for RTL8192SE that support mac80211
-+
- config ADM8211
- tristate "ADMtek ADM8211 support"
- depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL
-@@ -483,17 +489,9 @@ config MWL8K
- To compile this driver as a module, choose M here: the module
- will be called mwl8k. If unsure, say N.
-
--source "drivers/net/wireless/p54/Kconfig"
--source "drivers/net/wireless/ath5k/Kconfig"
--source "drivers/net/wireless/ath9k/Kconfig"
--source "drivers/net/wireless/ar9170/Kconfig"
--source "drivers/net/wireless/ipw2x00/Kconfig"
- source "drivers/net/wireless/iwlwifi/Kconfig"
- source "drivers/net/wireless/hostap/Kconfig"
--source "drivers/net/wireless/b43/Kconfig"
--source "drivers/net/wireless/b43legacy/Kconfig"
--source "drivers/net/wireless/zd1211rw/Kconfig"
--source "drivers/net/wireless/rt2x00/Kconfig"
--source "drivers/net/wireless/orinoco/Kconfig"
-+source "drivers/net/wireless/rtl8192cd/Kconfig"
-+source "drivers/net/wireless/rtl8192e/Kconfig"
-
- endmenu
---- linux-2.6.30.9/drivers/net/wireless/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/net/wireless/Makefile 2013-05-02 01:47:53.615227067 +0300
-@@ -2,8 +2,6 @@
- # Makefile for the Linux Wireless network device drivers.
- #
-
--obj-$(CONFIG_IPW2100) += ipw2x00/
--obj-$(CONFIG_IPW2200) += ipw2x00/
-
- obj-$(CONFIG_STRIP) += strip.o
- obj-$(CONFIG_ARLAN) += arlan.o
-@@ -24,16 +22,9 @@ obj-$(CONFIG_ATMEL) += atmel
- obj-$(CONFIG_PCI_ATMEL) += atmel_pci.o
- obj-$(CONFIG_PCMCIA_ATMEL) += atmel_cs.o
-
--obj-$(CONFIG_AT76C50X_USB) += at76c50x-usb.o
-
--obj-$(CONFIG_PRISM54) += prism54/
-
- obj-$(CONFIG_HOSTAP) += hostap/
--obj-$(CONFIG_B43) += b43/
--obj-$(CONFIG_B43LEGACY) += b43legacy/
--obj-$(CONFIG_ZD1211RW) += zd1211rw/
--obj-$(CONFIG_RTL8180) += rtl818x/
--obj-$(CONFIG_RTL8187) += rtl818x/
-
- # 16-bit wireless PCMCIA client drivers
- obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o
-@@ -51,12 +42,8 @@ obj-$(CONFIG_ADM8211) += adm8211.o
- obj-$(CONFIG_MWL8K) += mwl8k.o
-
- obj-$(CONFIG_IWLWIFI) += iwlwifi/
--obj-$(CONFIG_RT2X00) += rt2x00/
-
--obj-$(CONFIG_P54_COMMON) += p54/
-
--obj-$(CONFIG_ATH5K) += ath5k/
--obj-$(CONFIG_ATH9K) += ath9k/
--obj-$(CONFIG_AR9170_USB) += ar9170/
-
--obj-$(CONFIG_MAC80211_HWSIM) += mac80211_hwsim.o
-+obj-$(CONFIG_RTL8192CD) += rtl8192cd/
-+obj-$(CONFIG_WLAN_HAL_8192EE) += rtl8192e/
---- linux-2.6.30.9/drivers/pci/access.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/pci/access.c 2013-05-02 01:47:54.647226984 +0300
-@@ -38,6 +38,46 @@ int pci_bus_read_config_##size \
- spin_unlock_irqrestore(&pci_lock, flags); \
- return res; \
- }
-+#ifdef CONFIG_RTL8198_REVISION_B
-+int pci_bus_read_config_word
-+ (struct pci_bus *bus, unsigned int devfn, int pos, u16 *value)
-+{
-+ int res;
-+ unsigned long flags;
-+ u32 data = 0;
-+ if (PCI_word_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;
-+ spin_lock_irqsave(&pci_lock, flags);
-+
-+ int swap[4]={0,8,16,24}; int diff = pos&0x3;
-+ res = bus->ops->read(bus, devfn, (pos&0xFFFFC), 4, &data);
-+ *value =(u16)( (data>>(swap[diff]))&0xffff);
-+
-+
-+
-+
-+ //*value = (type)data;
-+ spin_unlock_irqrestore(&pci_lock, flags);
-+ return res;
-+}
-+int pci_bus_read_config_byte
-+ (struct pci_bus *bus, unsigned int devfn, int pos, u8 *value)
-+{
-+ int res;
-+ unsigned long flags;
-+ u32 data = 0;
-+ if (PCI_word_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;
-+ spin_lock_irqsave(&pci_lock, flags);
-+
-+ int swap[4]={0,8,16,24}; int diff = pos&0x3;
-+ res = bus->ops->read(bus, devfn, (pos&0xFFFFC), 4, &data);
-+ *value =(u8)( (data>>(swap[diff]))&0xff);
-+ //*value = (type)data;
-+ spin_unlock_irqrestore(&pci_lock, flags);
-+ return res;
-+}
-+
-+#endif
-+
-
- #define PCI_OP_WRITE(size,type,len) \
- int pci_bus_write_config_##size \
-@@ -52,8 +92,11 @@ int pci_bus_write_config_##size \
- return res; \
- }
-
-+#ifndef CONFIG_RTL8198_REVISION_B
- PCI_OP_READ(byte, u8, 1)
-+
- PCI_OP_READ(word, u16, 2)
-+#endif
- PCI_OP_READ(dword, u32, 4)
- PCI_OP_WRITE(byte, u8, 1)
- PCI_OP_WRITE(word, u16, 2)
---- linux-2.6.30.9/drivers/scsi/Kconfig 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/scsi/Kconfig 2013-05-02 01:47:55.017226954 +0300
-@@ -82,6 +82,11 @@ config BLK_DEV_SD
- In this case, do not compile the driver for your SCSI host adapter
- (below) as a module either.
-
-+config 4KB_HARDDISK_SUPPORT
-+ bool "4kb sector size disk support"
-+ depends on BLK_DEV_SD
-+ default n
-+
- config CHR_DEV_ST
- tristate "SCSI tape support"
- depends on SCSI
---- linux-2.6.30.9/drivers/scsi/scsi_lib.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/scsi/scsi_lib.c 2013-05-02 01:47:55.252226935 +0300
-@@ -1626,7 +1626,7 @@ u64 scsi_calculate_bounce_limit(struct S
-
- host_dev = scsi_get_device(shost);
- if (host_dev && host_dev->dma_mask)
-- bounce_limit = *host_dev->dma_mask;
-+ bounce_limit = *(host_dev->dma_mask);
-
- return bounce_limit;
- }
---- linux-2.6.30.9/drivers/serial/8250.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/serial/8250.c 2013-05-02 01:47:55.684226900 +0300
-@@ -44,10 +44,6 @@
-
- #include "8250.h"
-
--#ifdef CONFIG_SPARC
--#include "suncore.h"
--#endif
--
- /*
- * Configuration:
- * share_irqs - whether we pass IRQF_SHARED to request_irq(). This option
-@@ -117,13 +113,6 @@ static const struct old_serial_port old_
-
- #define UART_NR CONFIG_SERIAL_8250_NR_UARTS
-
--#ifdef CONFIG_SERIAL_8250_RSA
--
--#define PORT_RSA_MAX 4
--static unsigned long probe_rsa[PORT_RSA_MAX];
--static unsigned int probe_rsa_count;
--#endif /* CONFIG_SERIAL_8250_RSA */
--
- struct uart_8250_port {
- struct uart_port port;
- struct timer_list timer; /* "no irq" timer */
-@@ -181,196 +170,45 @@ static const struct serial8250_config ua
- .fifo_size = 1,
- .tx_loadsz = 1,
- },
-- [PORT_16450] = {
-- .name = "16450",
-- .fifo_size = 1,
-- .tx_loadsz = 1,
-- },
-- [PORT_16550] = {
-- .name = "16550",
-- .fifo_size = 1,
-- .tx_loadsz = 1,
-- },
-- [PORT_16550A] = {
-- .name = "16550A",
-- .fifo_size = 16,
-- .tx_loadsz = 16,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
-- .flags = UART_CAP_FIFO,
-- },
-- [PORT_CIRRUS] = {
-- .name = "Cirrus",
-- .fifo_size = 1,
-- .tx_loadsz = 1,
-- },
-- [PORT_16650] = {
-- .name = "ST16650",
-- .fifo_size = 1,
-- .tx_loadsz = 1,
-- .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
-- },
-- [PORT_16650V2] = {
-- .name = "ST16650V2",
-- .fifo_size = 32,
-- .tx_loadsz = 16,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
-- UART_FCR_T_TRIG_00,
-- .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
-- },
-- [PORT_16750] = {
-- .name = "TI16750",
-- .fifo_size = 64,
-- .tx_loadsz = 64,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 |
-- UART_FCR7_64BYTE,
-- .flags = UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_AFE,
-- },
-- [PORT_STARTECH] = {
-- .name = "Startech",
-- .fifo_size = 1,
-- .tx_loadsz = 1,
-- },
-- [PORT_16C950] = {
-- .name = "16C950/954",
-- .fifo_size = 128,
-- .tx_loadsz = 128,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
-- .flags = UART_CAP_FIFO,
-- },
-+#ifdef CONFIG_SERIAL_SC16IS7X0
- [PORT_16654] = {
- .name = "ST16654",
-+#if 0
- .fifo_size = 64,
- .tx_loadsz = 32,
- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
- UART_FCR_T_TRIG_10,
- .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
-- },
-- [PORT_16850] = {
-- .name = "XR16850",
-- .fifo_size = 128,
-- .tx_loadsz = 128,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
-- .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
-- },
-- [PORT_RSA] = {
-- .name = "RSA",
-- .fifo_size = 2048,
-- .tx_loadsz = 2048,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_11,
-- .flags = UART_CAP_FIFO,
-- },
-- [PORT_NS16550A] = {
-- .name = "NS16550A",
-+#else
- .fifo_size = 16,
- .tx_loadsz = 16,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
-- .flags = UART_CAP_FIFO | UART_NATSEMI,
-+ .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_00,
-+ .flags = UART_CAP_FIFO,
-+#endif
- },
-- [PORT_XSCALE] = {
-- .name = "XScale",
-- .fifo_size = 32,
-- .tx_loadsz = 32,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
-- .flags = UART_CAP_FIFO | UART_CAP_UUE,
-+#endif
-+ [PORT_16550] = {
-+ .name = "16550",
-+ .fifo_size = 1,
-+ .tx_loadsz = 1,
- },
-- [PORT_RM9000] = {
-- .name = "RM9000",
-+ [PORT_16550A] = {
-+ .name = "16550A",
- .fifo_size = 16,
- .tx_loadsz = 16,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
-- .flags = UART_CAP_FIFO,
-- },
-- [PORT_OCTEON] = {
-- .name = "OCTEON",
-- .fifo_size = 64,
-- .tx_loadsz = 64,
-- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
-+ .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_00,
-+#ifdef CONFIG_SERIAL_RTL8198_UART1
-+ .flags = UART_CAP_FIFO | UART_CAP_AFE,
-+#else
- .flags = UART_CAP_FIFO,
-+#endif
- },
- };
-
--#if defined (CONFIG_SERIAL_8250_AU1X00)
--
--/* Au1x00 UART hardware has a weird register layout */
--static const u8 au_io_in_map[] = {
-- [UART_RX] = 0,
-- [UART_IER] = 2,
-- [UART_IIR] = 3,
-- [UART_LCR] = 5,
-- [UART_MCR] = 6,
-- [UART_LSR] = 7,
-- [UART_MSR] = 8,
--};
--
--static const u8 au_io_out_map[] = {
-- [UART_TX] = 1,
-- [UART_IER] = 2,
-- [UART_FCR] = 4,
-- [UART_LCR] = 5,
-- [UART_MCR] = 6,
--};
--
--/* sane hardware needs no mapping */
--static inline int map_8250_in_reg(struct uart_port *p, int offset)
--{
-- if (p->iotype != UPIO_AU)
-- return offset;
-- return au_io_in_map[offset];
--}
--
--static inline int map_8250_out_reg(struct uart_port *p, int offset)
--{
-- if (p->iotype != UPIO_AU)
-- return offset;
-- return au_io_out_map[offset];
--}
--
--#elif defined(CONFIG_SERIAL_8250_RM9K)
--
--static const u8
-- regmap_in[8] = {
-- [UART_RX] = 0x00,
-- [UART_IER] = 0x0c,
-- [UART_IIR] = 0x14,
-- [UART_LCR] = 0x1c,
-- [UART_MCR] = 0x20,
-- [UART_LSR] = 0x24,
-- [UART_MSR] = 0x28,
-- [UART_SCR] = 0x2c
-- },
-- regmap_out[8] = {
-- [UART_TX] = 0x04,
-- [UART_IER] = 0x0c,
-- [UART_FCR] = 0x18,
-- [UART_LCR] = 0x1c,
-- [UART_MCR] = 0x20,
-- [UART_LSR] = 0x24,
-- [UART_MSR] = 0x28,
-- [UART_SCR] = 0x2c
-- };
--
--static inline int map_8250_in_reg(struct uart_port *p, int offset)
--{
-- if (p->iotype != UPIO_RM9000)
-- return offset;
-- return regmap_in[offset];
--}
--
--static inline int map_8250_out_reg(struct uart_port *p, int offset)
--{
-- if (p->iotype != UPIO_RM9000)
-- return offset;
-- return regmap_out[offset];
--}
--
--#else
--
- /* sane hardware needs no mapping */
- #define map_8250_in_reg(up, offset) (offset)
- #define map_8250_out_reg(up, offset) (offset)
-
--#endif
--
- static unsigned int hub6_serial_in(struct uart_port *p, int offset)
- {
- offset = map_8250_in_reg(p, offset) << p->regshift;
-@@ -409,38 +247,6 @@ static unsigned int mem32_serial_in(stru
- return readl(p->membase + offset);
- }
-
--#ifdef CONFIG_SERIAL_8250_AU1X00
--static unsigned int au_serial_in(struct uart_port *p, int offset)
--{
-- offset = map_8250_in_reg(p, offset) << p->regshift;
-- return __raw_readl(p->membase + offset);
--}
--
--static void au_serial_out(struct uart_port *p, int offset, int value)
--{
-- offset = map_8250_out_reg(p, offset) << p->regshift;
-- __raw_writel(value, p->membase + offset);
--}
--#endif
--
--static unsigned int tsi_serial_in(struct uart_port *p, int offset)
--{
-- unsigned int tmp;
-- offset = map_8250_in_reg(p, offset) << p->regshift;
-- if (offset == UART_IIR) {
-- tmp = readl(p->membase + (UART_IIR & ~3));
-- return (tmp >> 16) & 0xff; /* UART_IIR % 4 == 2 */
-- } else
-- return readb(p->membase + offset);
--}
--
--static void tsi_serial_out(struct uart_port *p, int offset, int value)
--{
-- offset = map_8250_out_reg(p, offset) << p->regshift;
-- if (!((offset == UART_IER) && (value & UART_IER_UUE)))
-- writeb(value, p->membase + offset);
--}
--
- static void dwapb_serial_out(struct uart_port *p, int offset, int value)
- {
- int save_offset = offset;
-@@ -451,7 +257,7 @@ static void dwapb_serial_out(struct uart
- struct uart_8250_port *up = (struct uart_8250_port *)p;
- up->lcr = value;
- }
-- writeb(value, p->membase + offset);
-+ writel(value, p->membase + offset);
- /* Read the IER to ensure any interrupt is cleared before
- * returning from ISR. */
- if (save_offset == UART_TX || save_offset == UART_IER)
-@@ -470,13 +276,25 @@ static void io_serial_out(struct uart_po
- outb(value, p->iobase + offset);
- }
-
-+#ifdef CONFIG_SERIAL_SC16IS7X0
-+static unsigned int i2c_serial_in(struct uart_port *p, int offset)
-+{
-+ extern unsigned int serial_in_i2c(unsigned int i2c_addr, int offset);
-+ return serial_in_i2c( p ->iobase, offset );
-+}
-+static void i2c_serial_out(struct uart_port *p, int offset, int value)
-+{
-+ extern unsigned int serial_out_i2c(unsigned int i2c_addr, int offset, int value);
-+ serial_out_i2c( p ->iobase, offset, value );
-+}
-+#endif
- static void set_io_from_upio(struct uart_port *p)
- {
- struct uart_8250_port *up = (struct uart_8250_port *)p;
- switch (p->iotype) {
-- case UPIO_HUB6:
-- p->serial_in = hub6_serial_in;
-- p->serial_out = hub6_serial_out;
-+ case UPIO_DWAPB:
-+ p->serial_in = mem32_serial_in;
-+ p->serial_out = dwapb_serial_out;
- break;
-
- case UPIO_MEM:
-@@ -484,27 +302,21 @@ static void set_io_from_upio(struct uart
- p->serial_out = mem_serial_out;
- break;
-
-- case UPIO_RM9000:
- case UPIO_MEM32:
- p->serial_in = mem32_serial_in;
- p->serial_out = mem32_serial_out;
- break;
-
--#ifdef CONFIG_SERIAL_8250_AU1X00
-- case UPIO_AU:
-- p->serial_in = au_serial_in;
-- p->serial_out = au_serial_out;
-- break;
--#endif
-- case UPIO_TSI:
-- p->serial_in = tsi_serial_in;
-- p->serial_out = tsi_serial_out;
-+ case UPIO_HUB6:
-+ p->serial_in = hub6_serial_in;
-+ p->serial_out = hub6_serial_out;
- break;
--
-- case UPIO_DWAPB:
-- p->serial_in = mem_serial_in;
-- p->serial_out = dwapb_serial_out;
-+#ifdef CONFIG_SERIAL_SC16IS7X0
-+ case UPIO_I2C:
-+ p->serial_in = i2c_serial_in;
-+ p->serial_out = i2c_serial_out;
- break;
-+#endif
-
- default:
- p->serial_in = io_serial_in;
-@@ -520,12 +332,9 @@ serial_out_sync(struct uart_8250_port *u
- {
- struct uart_port *p = &up->port;
- switch (p->iotype) {
-+ case UPIO_DWAPB:
- case UPIO_MEM:
- case UPIO_MEM32:
--#ifdef CONFIG_SERIAL_8250_AU1X00
-- case UPIO_AU:
--#endif
-- case UPIO_DWAPB:
- p->serial_out(p, offset, value);
- p->serial_in(p, UART_LCR); /* safe, no side-effects */
- break;
-@@ -538,88 +347,22 @@ serial_out_sync(struct uart_8250_port *u
- (up->port.serial_in(&(up)->port, (offset)))
- #define serial_out(up, offset, value) \
- (up->port.serial_out(&(up)->port, (offset), (value)))
--/*
-- * We used to support using pause I/O for certain machines. We
-- * haven't supported this for a while, but just in case it's badly
-- * needed for certain old 386 machines, I've left these #define's
-- * in....
-- */
--#define serial_inp(up, offset) serial_in(up, offset)
--#define serial_outp(up, offset, value) serial_out(up, offset, value)
-
- /* Uart divisor latch read */
- static inline int _serial_dl_read(struct uart_8250_port *up)
- {
-- return serial_inp(up, UART_DLL) | serial_inp(up, UART_DLM) << 8;
-+ return serial_in(up, UART_DLL) | serial_in(up, UART_DLM) << 8;
- }
-
- /* Uart divisor latch write */
- static inline void _serial_dl_write(struct uart_8250_port *up, int value)
- {
-- serial_outp(up, UART_DLL, value & 0xff);
-- serial_outp(up, UART_DLM, value >> 8 & 0xff);
--}
--
--#if defined(CONFIG_SERIAL_8250_AU1X00)
--/* Au1x00 haven't got a standard divisor latch */
--static int serial_dl_read(struct uart_8250_port *up)
--{
-- if (up->port.iotype == UPIO_AU)
-- return __raw_readl(up->port.membase + 0x28);
-- else
-- return _serial_dl_read(up);
--}
--
--static void serial_dl_write(struct uart_8250_port *up, int value)
--{
-- if (up->port.iotype == UPIO_AU)
-- __raw_writel(value, up->port.membase + 0x28);
-- else
-- _serial_dl_write(up, value);
--}
--#elif defined(CONFIG_SERIAL_8250_RM9K)
--static int serial_dl_read(struct uart_8250_port *up)
--{
-- return (up->port.iotype == UPIO_RM9000) ?
-- (((__raw_readl(up->port.membase + 0x10) << 8) |
-- (__raw_readl(up->port.membase + 0x08) & 0xff)) & 0xffff) :
-- _serial_dl_read(up);
-+ serial_out(up, UART_DLL, value & 0xff);
-+ serial_out(up, UART_DLM, value >> 8 & 0xff);
- }
-
--static void serial_dl_write(struct uart_8250_port *up, int value)
--{
-- if (up->port.iotype == UPIO_RM9000) {
-- __raw_writel(value, up->port.membase + 0x08);
-- __raw_writel(value >> 8, up->port.membase + 0x10);
-- } else {
-- _serial_dl_write(up, value);
-- }
--}
--#else
- #define serial_dl_read(up) _serial_dl_read(up)
- #define serial_dl_write(up, value) _serial_dl_write(up, value)
--#endif
--
--/*
-- * For the 16C950
-- */
--static void serial_icr_write(struct uart_8250_port *up, int offset, int value)
--{
-- serial_out(up, UART_SCR, offset);
-- serial_out(up, UART_ICR, value);
--}
--
--static unsigned int serial_icr_read(struct uart_8250_port *up, int offset)
--{
-- unsigned int value;
--
-- serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD);
-- serial_out(up, UART_SCR, offset);
-- value = serial_in(up, UART_ICR);
-- serial_icr_write(up, UART_ACR, up->acr);
--
-- return value;
--}
-
- /*
- * FIFO support.
-@@ -627,10 +370,10 @@ static unsigned int serial_icr_read(stru
- static void serial8250_clear_fifos(struct uart_8250_port *p)
- {
- if (p->capabilities & UART_CAP_FIFO) {
-- serial_outp(p, UART_FCR, UART_FCR_ENABLE_FIFO);
-- serial_outp(p, UART_FCR, UART_FCR_ENABLE_FIFO |
-+ serial_out(p, UART_FCR, UART_FCR_ENABLE_FIFO);
-+ serial_out(p, UART_FCR, UART_FCR_ENABLE_FIFO |
- UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
-- serial_outp(p, UART_FCR, 0);
-+ serial_out(p, UART_FCR, 0);
- }
- }
-
-@@ -643,657 +386,17 @@ static void serial8250_set_sleep(struct
- {
- if (p->capabilities & UART_CAP_SLEEP) {
- if (p->capabilities & UART_CAP_EFR) {
-- serial_outp(p, UART_LCR, 0xBF);
-- serial_outp(p, UART_EFR, UART_EFR_ECB);
-- serial_outp(p, UART_LCR, 0);
-+ serial_out(p, UART_LCR, 0xBF);
-+ serial_out(p, UART_EFR, UART_EFR_ECB);
-+ serial_out(p, UART_LCR, 0);
- }
-- serial_outp(p, UART_IER, sleep ? UART_IERX_SLEEP : 0);
-+ serial_out(p, UART_IER, sleep ? UART_IERX_SLEEP : 0);
- if (p->capabilities & UART_CAP_EFR) {
-- serial_outp(p, UART_LCR, 0xBF);
-- serial_outp(p, UART_EFR, 0);
-- serial_outp(p, UART_LCR, 0);
-- }
-- }
--}
--
--#ifdef CONFIG_SERIAL_8250_RSA
--/*
-- * Attempts to turn on the RSA FIFO. Returns zero on failure.
-- * We set the port uart clock rate if we succeed.
-- */
--static int __enable_rsa(struct uart_8250_port *up)
--{
-- unsigned char mode;
-- int result;
--
-- mode = serial_inp(up, UART_RSA_MSR);
-- result = mode & UART_RSA_MSR_FIFO;
--
-- if (!result) {
-- serial_outp(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO);
-- mode = serial_inp(up, UART_RSA_MSR);
-- result = mode & UART_RSA_MSR_FIFO;
-- }
--
-- if (result)
-- up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16;
--
-- return result;
--}
--
--static void enable_rsa(struct uart_8250_port *up)
--{
-- if (up->port.type == PORT_RSA) {
-- if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) {
-- spin_lock_irq(&up->port.lock);
-- __enable_rsa(up);
-- spin_unlock_irq(&up->port.lock);
-- }
-- if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16)
-- serial_outp(up, UART_RSA_FRR, 0);
-- }
--}
--
--/*
-- * Attempts to turn off the RSA FIFO. Returns zero on failure.
-- * It is unknown why interrupts were disabled in here. However,
-- * the caller is expected to preserve this behaviour by grabbing
-- * the spinlock before calling this function.
-- */
--static void disable_rsa(struct uart_8250_port *up)
--{
-- unsigned char mode;
-- int result;
--
-- if (up->port.type == PORT_RSA &&
-- up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) {
-- spin_lock_irq(&up->port.lock);
--
-- mode = serial_inp(up, UART_RSA_MSR);
-- result = !(mode & UART_RSA_MSR_FIFO);
--
-- if (!result) {
-- serial_outp(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO);
-- mode = serial_inp(up, UART_RSA_MSR);
-- result = !(mode & UART_RSA_MSR_FIFO);
-- }
--
-- if (result)
-- up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16;
-- spin_unlock_irq(&up->port.lock);
-- }
--}
--#endif /* CONFIG_SERIAL_8250_RSA */
--
--/*
-- * This is a quickie test to see how big the FIFO is.
-- * It doesn't work at all the time, more's the pity.
-- */
--static int size_fifo(struct uart_8250_port *up)
--{
-- unsigned char old_fcr, old_mcr, old_lcr;
-- unsigned short old_dl;
-- int count;
--
-- old_lcr = serial_inp(up, UART_LCR);
-- serial_outp(up, UART_LCR, 0);
-- old_fcr = serial_inp(up, UART_FCR);
-- old_mcr = serial_inp(up, UART_MCR);
-- serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO |
-- UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
-- serial_outp(up, UART_MCR, UART_MCR_LOOP);
-- serial_outp(up, UART_LCR, UART_LCR_DLAB);
-- old_dl = serial_dl_read(up);
-- serial_dl_write(up, 0x0001);
-- serial_outp(up, UART_LCR, 0x03);
-- for (count = 0; count < 256; count++)
-- serial_outp(up, UART_TX, count);
-- mdelay(20);/* FIXME - schedule_timeout */
-- for (count = 0; (serial_inp(up, UART_LSR) & UART_LSR_DR) &&
-- (count < 256); count++)
-- serial_inp(up, UART_RX);
-- serial_outp(up, UART_FCR, old_fcr);
-- serial_outp(up, UART_MCR, old_mcr);
-- serial_outp(up, UART_LCR, UART_LCR_DLAB);
-- serial_dl_write(up, old_dl);
-- serial_outp(up, UART_LCR, old_lcr);
--
-- return count;
--}
--
--/*
-- * Read UART ID using the divisor method - set DLL and DLM to zero
-- * and the revision will be in DLL and device type in DLM. We
-- * preserve the device state across this.
-- */
--static unsigned int autoconfig_read_divisor_id(struct uart_8250_port *p)
--{
-- unsigned char old_dll, old_dlm, old_lcr;
-- unsigned int id;
--
-- old_lcr = serial_inp(p, UART_LCR);
-- serial_outp(p, UART_LCR, UART_LCR_DLAB);
--
-- old_dll = serial_inp(p, UART_DLL);
-- old_dlm = serial_inp(p, UART_DLM);
--
-- serial_outp(p, UART_DLL, 0);
-- serial_outp(p, UART_DLM, 0);
--
-- id = serial_inp(p, UART_DLL) | serial_inp(p, UART_DLM) << 8;
--
-- serial_outp(p, UART_DLL, old_dll);
-- serial_outp(p, UART_DLM, old_dlm);
-- serial_outp(p, UART_LCR, old_lcr);
--
-- return id;
--}
--
--/*
-- * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's.
-- * When this function is called we know it is at least a StarTech
-- * 16650 V2, but it might be one of several StarTech UARTs, or one of
-- * its clones. (We treat the broken original StarTech 16650 V1 as a
-- * 16550, and why not? Startech doesn't seem to even acknowledge its
-- * existence.)
-- *
-- * What evil have men's minds wrought...
-- */
--static void autoconfig_has_efr(struct uart_8250_port *up)
--{
-- unsigned int id1, id2, id3, rev;
--
-- /*
-- * Everything with an EFR has SLEEP
-- */
-- up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
--
-- /*
-- * First we check to see if it's an Oxford Semiconductor UART.
-- *
-- * If we have to do this here because some non-National
-- * Semiconductor clone chips lock up if you try writing to the
-- * LSR register (which serial_icr_read does)
-- */
--
-- /*
-- * Check for Oxford Semiconductor 16C950.
-- *
-- * EFR [4] must be set else this test fails.
-- *
-- * This shouldn't be necessary, but Mike Hudson (Exoray@isys.ca)
-- * claims that it's needed for 952 dual UART's (which are not
-- * recommended for new designs).
-- */
-- up->acr = 0;
-- serial_out(up, UART_LCR, 0xBF);
-- serial_out(up, UART_EFR, UART_EFR_ECB);
-- serial_out(up, UART_LCR, 0x00);
-- id1 = serial_icr_read(up, UART_ID1);
-- id2 = serial_icr_read(up, UART_ID2);
-- id3 = serial_icr_read(up, UART_ID3);
-- rev = serial_icr_read(up, UART_REV);
--
-- DEBUG_AUTOCONF("950id=%02x:%02x:%02x:%02x ", id1, id2, id3, rev);
--
-- if (id1 == 0x16 && id2 == 0xC9 &&
-- (id3 == 0x50 || id3 == 0x52 || id3 == 0x54)) {
-- up->port.type = PORT_16C950;
--
-- /*
-- * Enable work around for the Oxford Semiconductor 952 rev B
-- * chip which causes it to seriously miscalculate baud rates
-- * when DLL is 0.
-- */
-- if (id3 == 0x52 && rev == 0x01)
-- up->bugs |= UART_BUG_QUOT;
-- return;
-- }
--
-- /*
-- * We check for a XR16C850 by setting DLL and DLM to 0, and then
-- * reading back DLL and DLM. The chip type depends on the DLM
-- * value read back:
-- * 0x10 - XR16C850 and the DLL contains the chip revision.
-- * 0x12 - XR16C2850.
-- * 0x14 - XR16C854.
-- */
-- id1 = autoconfig_read_divisor_id(up);
-- DEBUG_AUTOCONF("850id=%04x ", id1);
--
-- id2 = id1 >> 8;
-- if (id2 == 0x10 || id2 == 0x12 || id2 == 0x14) {
-- up->port.type = PORT_16850;
-- return;
-- }
--
-- /*
-- * It wasn't an XR16C850.
-- *
-- * We distinguish between the '654 and the '650 by counting
-- * how many bytes are in the FIFO. I'm using this for now,
-- * since that's the technique that was sent to me in the
-- * serial driver update, but I'm not convinced this works.
-- * I've had problems doing this in the past. -TYT
-- */
-- if (size_fifo(up) == 64)
-- up->port.type = PORT_16654;
-- else
-- up->port.type = PORT_16650V2;
--}
--
--/*
-- * We detected a chip without a FIFO. Only two fall into
-- * this category - the original 8250 and the 16450. The
-- * 16450 has a scratch register (accessible with LCR=0)
-- */
--static void autoconfig_8250(struct uart_8250_port *up)
--{
-- unsigned char scratch, status1, status2;
--
-- up->port.type = PORT_8250;
--
-- scratch = serial_in(up, UART_SCR);
-- serial_outp(up, UART_SCR, 0xa5);
-- status1 = serial_in(up, UART_SCR);
-- serial_outp(up, UART_SCR, 0x5a);
-- status2 = serial_in(up, UART_SCR);
-- serial_outp(up, UART_SCR, scratch);
--
-- if (status1 == 0xa5 && status2 == 0x5a)
-- up->port.type = PORT_16450;
--}
--
--static int broken_efr(struct uart_8250_port *up)
--{
-- /*
-- * Exar ST16C2550 "A2" devices incorrectly detect as
-- * having an EFR, and report an ID of 0x0201. See
-- * http://www.exar.com/info.php?pdf=dan180_oct2004.pdf
-- */
-- if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16)
-- return 1;
--
-- return 0;
--}
--
--/*
-- * We know that the chip has FIFOs. Does it have an EFR? The
-- * EFR is located in the same register position as the IIR and
-- * we know the top two bits of the IIR are currently set. The
-- * EFR should contain zero. Try to read the EFR.
-- */
--static void autoconfig_16550a(struct uart_8250_port *up)
--{
-- unsigned char status1, status2;
-- unsigned int iersave;
--
-- up->port.type = PORT_16550A;
-- up->capabilities |= UART_CAP_FIFO;
--
-- /*
-- * Check for presence of the EFR when DLAB is set.
-- * Only ST16C650V1 UARTs pass this test.
-- */
-- serial_outp(up, UART_LCR, UART_LCR_DLAB);
-- if (serial_in(up, UART_EFR) == 0) {
-- serial_outp(up, UART_EFR, 0xA8);
-- if (serial_in(up, UART_EFR) != 0) {
-- DEBUG_AUTOCONF("EFRv1 ");
-- up->port.type = PORT_16650;
-- up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
-- } else {
-- DEBUG_AUTOCONF("Motorola 8xxx DUART ");
-- }
-- serial_outp(up, UART_EFR, 0);
-- return;
-- }
--
-- /*
-- * Maybe it requires 0xbf to be written to the LCR.
-- * (other ST16C650V2 UARTs, TI16C752A, etc)
-- */
-- serial_outp(up, UART_LCR, 0xBF);
-- if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) {
-- DEBUG_AUTOCONF("EFRv2 ");
-- autoconfig_has_efr(up);
-- return;
-+ serial_out(p, UART_LCR, 0xBF);
-+ serial_out(p, UART_EFR, 0);
-+ serial_out(p, UART_LCR, 0);
- }
--
-- /*
-- * Check for a National Semiconductor SuperIO chip.
-- * Attempt to switch to bank 2, read the value of the LOOP bit
-- * from EXCR1. Switch back to bank 0, change it in MCR. Then
-- * switch back to bank 2, read it from EXCR1 again and check
-- * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2
-- */
-- serial_outp(up, UART_LCR, 0);
-- status1 = serial_in(up, UART_MCR);
-- serial_outp(up, UART_LCR, 0xE0);
-- status2 = serial_in(up, 0x02); /* EXCR1 */
--
-- if (!((status2 ^ status1) & UART_MCR_LOOP)) {
-- serial_outp(up, UART_LCR, 0);
-- serial_outp(up, UART_MCR, status1 ^ UART_MCR_LOOP);
-- serial_outp(up, UART_LCR, 0xE0);
-- status2 = serial_in(up, 0x02); /* EXCR1 */
-- serial_outp(up, UART_LCR, 0);
-- serial_outp(up, UART_MCR, status1);
--
-- if ((status2 ^ status1) & UART_MCR_LOOP) {
-- unsigned short quot;
--
-- serial_outp(up, UART_LCR, 0xE0);
--
-- quot = serial_dl_read(up);
-- quot <<= 3;
--
-- status1 = serial_in(up, 0x04); /* EXCR2 */
-- status1 &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */
-- status1 |= 0x10; /* 1.625 divisor for baud_base --> 921600 */
-- serial_outp(up, 0x04, status1);
--
-- serial_dl_write(up, quot);
--
-- serial_outp(up, UART_LCR, 0);
--
-- up->port.uartclk = 921600*16;
-- up->port.type = PORT_NS16550A;
-- up->capabilities |= UART_NATSEMI;
-- return;
-- }
-- }
--
-- /*
-- * No EFR. Try to detect a TI16750, which only sets bit 5 of
-- * the IIR when 64 byte FIFO mode is enabled when DLAB is set.
-- * Try setting it with and without DLAB set. Cheap clones
-- * set bit 5 without DLAB set.
-- */
-- serial_outp(up, UART_LCR, 0);
-- serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
-- status1 = serial_in(up, UART_IIR) >> 5;
-- serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
-- serial_outp(up, UART_LCR, UART_LCR_DLAB);
-- serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
-- status2 = serial_in(up, UART_IIR) >> 5;
-- serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
-- serial_outp(up, UART_LCR, 0);
--
-- DEBUG_AUTOCONF("iir1=%d iir2=%d ", status1, status2);
--
-- if (status1 == 6 && status2 == 7) {
-- up->port.type = PORT_16750;
-- up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP;
-- return;
-- }
--
-- /*
-- * Try writing and reading the UART_IER_UUE bit (b6).
-- * If it works, this is probably one of the Xscale platform's
-- * internal UARTs.
-- * We're going to explicitly set the UUE bit to 0 before
-- * trying to write and read a 1 just to make sure it's not
-- * already a 1 and maybe locked there before we even start start.
-- */
-- iersave = serial_in(up, UART_IER);
-- serial_outp(up, UART_IER, iersave & ~UART_IER_UUE);
-- if (!(serial_in(up, UART_IER) & UART_IER_UUE)) {
-- /*
-- * OK it's in a known zero state, try writing and reading
-- * without disturbing the current state of the other bits.
-- */
-- serial_outp(up, UART_IER, iersave | UART_IER_UUE);
-- if (serial_in(up, UART_IER) & UART_IER_UUE) {
-- /*
-- * It's an Xscale.
-- * We'll leave the UART_IER_UUE bit set to 1 (enabled).
-- */
-- DEBUG_AUTOCONF("Xscale ");
-- up->port.type = PORT_XSCALE;
-- up->capabilities |= UART_CAP_UUE;
-- return;
-- }
-- } else {
-- /*
-- * If we got here we couldn't force the IER_UUE bit to 0.
-- * Log it and continue.
-- */
-- DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 ");
-- }
-- serial_outp(up, UART_IER, iersave);
--}
--
--/*
-- * This routine is called by rs_init() to initialize a specific serial
-- * port. It determines what type of UART chip this serial port is
-- * using: 8250, 16450, 16550, 16550A. The important question is
-- * whether or not this UART is a 16550A or not, since this will
-- * determine whether or not we can use its FIFO features or not.
-- */
--static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
--{
-- unsigned char status1, scratch, scratch2, scratch3;
-- unsigned char save_lcr, save_mcr;
-- unsigned long flags;
--
-- if (!up->port.iobase && !up->port.mapbase && !up->port.membase)
-- return;
--
-- DEBUG_AUTOCONF("ttyS%d: autoconf (0x%04x, 0x%p): ",
-- serial_index(&up->port), up->port.iobase, up->port.membase);
--
-- /*
-- * We really do need global IRQs disabled here - we're going to
-- * be frobbing the chips IRQ enable register to see if it exists.
-- */
-- spin_lock_irqsave(&up->port.lock, flags);
--
-- up->capabilities = 0;
-- up->bugs = 0;
--
-- if (!(up->port.flags & UPF_BUGGY_UART)) {
-- /*
-- * Do a simple existence test first; if we fail this,
-- * there's no point trying anything else.
-- *
-- * 0x80 is used as a nonsense port to prevent against
-- * false positives due to ISA bus float. The
-- * assumption is that 0x80 is a non-existent port;
-- * which should be safe since include/asm/io.h also
-- * makes this assumption.
-- *
-- * Note: this is safe as long as MCR bit 4 is clear
-- * and the device is in "PC" mode.
-- */
-- scratch = serial_inp(up, UART_IER);
-- serial_outp(up, UART_IER, 0);
--#ifdef __i386__
-- outb(0xff, 0x080);
--#endif
-- /*
-- * Mask out IER[7:4] bits for test as some UARTs (e.g. TL
-- * 16C754B) allow only to modify them if an EFR bit is set.
-- */
-- scratch2 = serial_inp(up, UART_IER) & 0x0f;
-- serial_outp(up, UART_IER, 0x0F);
--#ifdef __i386__
-- outb(0, 0x080);
--#endif
-- scratch3 = serial_inp(up, UART_IER) & 0x0f;
-- serial_outp(up, UART_IER, scratch);
-- if (scratch2 != 0 || scratch3 != 0x0F) {
-- /*
-- * We failed; there's nothing here
-- */
-- DEBUG_AUTOCONF("IER test failed (%02x, %02x) ",
-- scratch2, scratch3);
-- goto out;
-- }
-- }
--
-- save_mcr = serial_in(up, UART_MCR);
-- save_lcr = serial_in(up, UART_LCR);
--
-- /*
-- * Check to see if a UART is really there. Certain broken
-- * internal modems based on the Rockwell chipset fail this
-- * test, because they apparently don't implement the loopback
-- * test mode. So this test is skipped on the COM 1 through
-- * COM 4 ports. This *should* be safe, since no board
-- * manufacturer would be stupid enough to design a board
-- * that conflicts with COM 1-4 --- we hope!
-- */
-- if (!(up->port.flags & UPF_SKIP_TEST)) {
-- serial_outp(up, UART_MCR, UART_MCR_LOOP | 0x0A);
-- status1 = serial_inp(up, UART_MSR) & 0xF0;
-- serial_outp(up, UART_MCR, save_mcr);
-- if (status1 != 0x90) {
-- DEBUG_AUTOCONF("LOOP test failed (%02x) ",
-- status1);
-- goto out;
-- }
-- }
--
-- /*
-- * We're pretty sure there's a port here. Lets find out what
-- * type of port it is. The IIR top two bits allows us to find
-- * out if it's 8250 or 16450, 16550, 16550A or later. This
-- * determines what we test for next.
-- *
-- * We also initialise the EFR (if any) to zero for later. The
-- * EFR occupies the same register location as the FCR and IIR.
-- */
-- serial_outp(up, UART_LCR, 0xBF);
-- serial_outp(up, UART_EFR, 0);
-- serial_outp(up, UART_LCR, 0);
--
-- serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
-- scratch = serial_in(up, UART_IIR) >> 6;
--
-- DEBUG_AUTOCONF("iir=%d ", scratch);
--
-- switch (scratch) {
-- case 0:
-- autoconfig_8250(up);
-- break;
-- case 1:
-- up->port.type = PORT_UNKNOWN;
-- break;
-- case 2:
-- up->port.type = PORT_16550;
-- break;
-- case 3:
-- autoconfig_16550a(up);
-- break;
-- }
--
--#ifdef CONFIG_SERIAL_8250_RSA
-- /*
-- * Only probe for RSA ports if we got the region.
-- */
-- if (up->port.type == PORT_16550A && probeflags & PROBE_RSA) {
-- int i;
--
-- for (i = 0 ; i < probe_rsa_count; ++i) {
-- if (probe_rsa[i] == up->port.iobase &&
-- __enable_rsa(up)) {
-- up->port.type = PORT_RSA;
-- break;
-- }
-- }
-- }
--#endif
--
--#ifdef CONFIG_SERIAL_8250_AU1X00
-- /* if access method is AU, it is a 16550 with a quirk */
-- if (up->port.type == PORT_16550A && up->port.iotype == UPIO_AU)
-- up->bugs |= UART_BUG_NOMSR;
--#endif
--
-- serial_outp(up, UART_LCR, save_lcr);
--
-- if (up->capabilities != uart_config[up->port.type].flags) {
-- printk(KERN_WARNING
-- "ttyS%d: detected caps %08x should be %08x\n",
-- serial_index(&up->port), up->capabilities,
-- uart_config[up->port.type].flags);
-- }
--
-- up->port.fifosize = uart_config[up->port.type].fifo_size;
-- up->capabilities = uart_config[up->port.type].flags;
-- up->tx_loadsz = uart_config[up->port.type].tx_loadsz;
--
-- if (up->port.type == PORT_UNKNOWN)
-- goto out;
--
-- /*
-- * Reset the UART.
-- */
--#ifdef CONFIG_SERIAL_8250_RSA
-- if (up->port.type == PORT_RSA)
-- serial_outp(up, UART_RSA_FRR, 0);
--#endif
-- serial_outp(up, UART_MCR, save_mcr);
-- serial8250_clear_fifos(up);
-- serial_in(up, UART_RX);
-- if (up->capabilities & UART_CAP_UUE)
-- serial_outp(up, UART_IER, UART_IER_UUE);
-- else
-- serial_outp(up, UART_IER, 0);
--
-- out:
-- spin_unlock_irqrestore(&up->port.lock, flags);
-- DEBUG_AUTOCONF("type=%s\n", uart_config[up->port.type].name);
--}
--
--static void autoconfig_irq(struct uart_8250_port *up)
--{
-- unsigned char save_mcr, save_ier;
-- unsigned char save_ICP = 0;
-- unsigned int ICP = 0;
-- unsigned long irqs;
-- int irq;
--
-- if (up->port.flags & UPF_FOURPORT) {
-- ICP = (up->port.iobase & 0xfe0) | 0x1f;
-- save_ICP = inb_p(ICP);
-- outb_p(0x80, ICP);
-- (void) inb_p(ICP);
-- }
--
-- /* forget possible initially masked and pending IRQ */
-- probe_irq_off(probe_irq_on());
-- save_mcr = serial_inp(up, UART_MCR);
-- save_ier = serial_inp(up, UART_IER);
-- serial_outp(up, UART_MCR, UART_MCR_OUT1 | UART_MCR_OUT2);
--
-- irqs = probe_irq_on();
-- serial_outp(up, UART_MCR, 0);
-- udelay(10);
-- if (up->port.flags & UPF_FOURPORT) {
-- serial_outp(up, UART_MCR,
-- UART_MCR_DTR | UART_MCR_RTS);
-- } else {
-- serial_outp(up, UART_MCR,
-- UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2);
- }
-- serial_outp(up, UART_IER, 0x0f); /* enable all intrs */
-- (void)serial_inp(up, UART_LSR);
-- (void)serial_inp(up, UART_RX);
-- (void)serial_inp(up, UART_IIR);
-- (void)serial_inp(up, UART_MSR);
-- serial_outp(up, UART_TX, 0xFF);
-- udelay(20);
-- irq = probe_irq_off(irqs);
--
-- serial_outp(up, UART_MCR, save_mcr);
-- serial_outp(up, UART_IER, save_ier);
--
-- if (up->port.flags & UPF_FOURPORT)
-- outb_p(save_ICP, ICP);
--
-- up->port.irq = (irq > 0) ? irq : 0;
- }
-
- static inline void __stop_tx(struct uart_8250_port *p)
-@@ -1309,14 +412,6 @@ static void serial8250_stop_tx(struct ua
- struct uart_8250_port *up = (struct uart_8250_port *)port;
-
- __stop_tx(up);
--
-- /*
-- * We really want to stop the transmitter from sending.
-- */
-- if (up->port.type == PORT_16C950) {
-- up->acr |= UART_ACR_TXDIS;
-- serial_icr_write(up, UART_ACR, up->acr);
-- }
- }
-
- static void transmit_chars(struct uart_8250_port *up);
-@@ -1341,14 +436,6 @@ static void serial8250_start_tx(struct u
- transmit_chars(up);
- }
- }
--
-- /*
-- * Re-enable the transmitter if we disabled it.
-- */
-- if (up->port.type == PORT_16C950 && up->acr & UART_ACR_TXDIS) {
-- up->acr &= ~UART_ACR_TXDIS;
-- serial_icr_write(up, UART_ACR, up->acr);
-- }
- }
-
- static void serial8250_stop_rx(struct uart_port *port)
-@@ -1382,7 +469,7 @@ receive_chars(struct uart_8250_port *up,
-
- do {
- if (likely(lsr & UART_LSR_DR))
-- ch = serial_inp(up, UART_RX);
-+ ch = serial_in(up, UART_RX);
- else
- /*
- * Intel 82571 has a Serial Over Lan device that will
-@@ -1440,7 +527,7 @@ receive_chars(struct uart_8250_port *up,
- uart_insert_char(&up->port, lsr, UART_LSR_OE, ch, flag);
-
- ignore_char:
-- lsr = serial_inp(up, UART_LSR);
-+ lsr = serial_in(up, UART_LSR);
- } while ((lsr & (UART_LSR_DR | UART_LSR_BI)) && (max_count-- > 0));
- spin_unlock(&up->port.lock);
- tty_flip_buffer_push(tty);
-@@ -1454,7 +541,7 @@ static void transmit_chars(struct uart_8
- int count;
-
- if (up->port.x_char) {
-- serial_outp(up, UART_TX, up->port.x_char);
-+ serial_out(up, UART_TX, up->port.x_char);
- up->port.icount.tx++;
- up->port.x_char = 0;
- return;
-@@ -1519,7 +606,7 @@ static void serial8250_handle_port(struc
-
- spin_lock_irqsave(&up->port.lock, flags);
-
-- status = serial_inp(up, UART_LSR);
-+ status = serial_in(up, UART_LSR);
-
- DEBUG_INTR("status = %x...", status);
-
-@@ -1552,6 +639,11 @@ static irqreturn_t serial8250_interrupt(
- struct list_head *l, *end = NULL;
- int pass_counter = 0, handled = 0;
-
-+#ifdef CONFIG_SERIAL_SC16IS7X0
-+ extern int sc16is7x0_clean_interrupt( int irq );
-+ if( sc16is7x0_clean_interrupt( irq ) < 0 )
-+ return IRQ_RETVAL(handled);
-+#endif
- DEBUG_INTR("serial8250_interrupt(%d)...", irq);
-
- spin_lock(&i->lock);
-@@ -1635,7 +727,8 @@ static int serial_link_irq_chain(struct
- struct hlist_head *h;
- struct hlist_node *n;
- struct irq_info *i;
-- int ret, irq_flags = up->port.flags & UPF_SHARE_IRQ ? IRQF_SHARED : 0;
-+// int ret, irq_flags = up->port.flags & UPF_SHARE_IRQ ? IRQF_SHARED : 0;
-+ int ret, irq_flags = up->port.flags & UPF_SHARE_IRQ ? IRQF_SHARED : IRQF_DISABLED;
-
- mutex_lock(&hash_mutex);
-
-@@ -1682,7 +775,7 @@ static int serial_link_irq_chain(struct
-
- static void serial_unlink_irq_chain(struct uart_8250_port *up)
- {
-- struct irq_info *i;
-+ struct irq_info *i=NULL;
- struct hlist_node *n;
- struct hlist_head *h;
-
-@@ -1886,12 +979,12 @@ static void wait_for_xmitr(struct uart_8
- static int serial8250_get_poll_char(struct uart_port *port)
- {
- struct uart_8250_port *up = (struct uart_8250_port *)port;
-- unsigned char lsr = serial_inp(up, UART_LSR);
-+ unsigned char lsr = serial_in(up, UART_LSR);
-
- while (!(lsr & UART_LSR_DR))
-- lsr = serial_inp(up, UART_LSR);
-+ lsr = serial_in(up, UART_LSR);
-
-- return serial_inp(up, UART_RX);
-+ return serial_in(up, UART_RX);
- }
-
-
-@@ -1944,27 +1037,6 @@ static int serial8250_startup(struct uar
- if (up->port.iotype != up->cur_iotype)
- set_io_from_upio(port);
-
-- if (up->port.type == PORT_16C950) {
-- /* Wake up and initialize UART */
-- up->acr = 0;
-- serial_outp(up, UART_LCR, 0xBF);
-- serial_outp(up, UART_EFR, UART_EFR_ECB);
-- serial_outp(up, UART_IER, 0);
-- serial_outp(up, UART_LCR, 0);
-- serial_icr_write(up, UART_CSR, 0); /* Reset the UART */
-- serial_outp(up, UART_LCR, 0xBF);
-- serial_outp(up, UART_EFR, UART_EFR_ECB);
-- serial_outp(up, UART_LCR, 0);
-- }
--
--#ifdef CONFIG_SERIAL_8250_RSA
-- /*
-- * If this is an RSA port, see if we can kick it up to the
-- * higher speed clock.
-- */
-- enable_rsa(up);
--#endif
--
- /*
- * Clear the FIFO buffers and disable them.
- * (they will be reenabled in set_termios())
-@@ -1974,10 +1046,10 @@ static int serial8250_startup(struct uar
- /*
- * Clear the interrupt registers.
- */
-- (void) serial_inp(up, UART_LSR);
-- (void) serial_inp(up, UART_RX);
-- (void) serial_inp(up, UART_IIR);
-- (void) serial_inp(up, UART_MSR);
-+ (void) serial_in(up, UART_LSR);
-+ (void) serial_in(up, UART_RX);
-+ (void) serial_in(up, UART_IIR);
-+ (void) serial_in(up, UART_MSR);
-
- /*
- * At this point, there's no way the LSR could still be 0xff;
-@@ -1985,29 +1057,12 @@ static int serial8250_startup(struct uar
- * here.
- */
- if (!(up->port.flags & UPF_BUGGY_UART) &&
-- (serial_inp(up, UART_LSR) == 0xff)) {
-+ (serial_in(up, UART_LSR) == 0xff)) {
- printk(KERN_INFO "ttyS%d: LSR safety check engaged!\n",
- serial_index(&up->port));
- return -ENODEV;
- }
-
-- /*
-- * For a XR16C850, we need to set the trigger levels
-- */
-- if (up->port.type == PORT_16850) {
-- unsigned char fctr;
--
-- serial_outp(up, UART_LCR, 0xbf);
--
-- fctr = serial_inp(up, UART_FCTR) & ~(UART_FCTR_RX|UART_FCTR_TX);
-- serial_outp(up, UART_FCTR, fctr | UART_FCTR_TRGD | UART_FCTR_RX);
-- serial_outp(up, UART_TRG, UART_TRG_96);
-- serial_outp(up, UART_FCTR, fctr | UART_FCTR_TRGD | UART_FCTR_TX);
-- serial_outp(up, UART_TRG, UART_TRG_96);
--
-- serial_outp(up, UART_LCR, 0);
-- }
--
- if (is_real_interrupt(up->port.irq)) {
- unsigned char iir1;
- /*
-@@ -2075,13 +1130,9 @@ static int serial8250_startup(struct uar
- /*
- * Now, initialize the UART
- */
-- serial_outp(up, UART_LCR, UART_LCR_WLEN8);
-+ serial_out(up, UART_LCR, UART_LCR_WLEN8);
-
- spin_lock_irqsave(&up->port.lock, flags);
-- if (up->port.flags & UPF_FOURPORT) {
-- if (!is_real_interrupt(up->port.irq))
-- up->port.mctrl |= TIOCM_OUT1;
-- } else
- /*
- * Most PC uarts need OUT2 raised to enable interrupts.
- */
-@@ -2108,10 +1159,10 @@ static int serial8250_startup(struct uar
- * Do a quick test to see if we receive an
- * interrupt when we enable the TX irq.
- */
-- serial_outp(up, UART_IER, UART_IER_THRI);
-+ serial_out(up, UART_IER, UART_IER_THRI);
- lsr = serial_in(up, UART_LSR);
- iir = serial_in(up, UART_IIR);
-- serial_outp(up, UART_IER, 0);
-+ serial_out(up, UART_IER, 0);
-
- if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT) {
- if (!(up->bugs & UART_BUG_TXEN)) {
-@@ -2131,10 +1182,10 @@ dont_test_tx_en:
- * saved flags to avoid getting false values from polling
- * routines or the previous session.
- */
-- serial_inp(up, UART_LSR);
-- serial_inp(up, UART_RX);
-- serial_inp(up, UART_IIR);
-- serial_inp(up, UART_MSR);
-+ serial_in(up, UART_LSR);
-+ serial_in(up, UART_RX);
-+ serial_in(up, UART_IIR);
-+ serial_in(up, UART_MSR);
- up->lsr_saved_flags = 0;
- up->msr_saved_flags = 0;
-
-@@ -2144,17 +1195,7 @@ dont_test_tx_en:
- * anyway, so we don't enable them here.
- */
- up->ier = UART_IER_RLSI | UART_IER_RDI;
-- serial_outp(up, UART_IER, up->ier);
--
-- if (up->port.flags & UPF_FOURPORT) {
-- unsigned int icp;
-- /*
-- * Enable interrupts on the AST Fourport board
-- */
-- icp = (up->port.iobase & 0xfe0) | 0x01f;
-- outb_p(0x80, icp);
-- (void) inb_p(icp);
-- }
-+ serial_out(up, UART_IER, up->ier);
-
- return 0;
- }
-@@ -2168,14 +1209,9 @@ static void serial8250_shutdown(struct u
- * Disable interrupts from this port
- */
- up->ier = 0;
-- serial_outp(up, UART_IER, 0);
-+ serial_out(up, UART_IER, 0);
-
- spin_lock_irqsave(&up->port.lock, flags);
-- if (up->port.flags & UPF_FOURPORT) {
-- /* reset interrupts on the AST Fourport board */
-- inb((up->port.iobase & 0xfe0) | 0x1f);
-- up->port.mctrl |= TIOCM_OUT1;
-- } else
- up->port.mctrl &= ~TIOCM_OUT2;
-
- serial8250_set_mctrl(&up->port, up->port.mctrl);
-@@ -2184,16 +1220,9 @@ static void serial8250_shutdown(struct u
- /*
- * Disable break condition and FIFOs
- */
-- serial_out(up, UART_LCR, serial_inp(up, UART_LCR) & ~UART_LCR_SBC);
-+ serial_out(up, UART_LCR, serial_in(up, UART_LCR) & ~UART_LCR_SBC);
- serial8250_clear_fifos(up);
-
--#ifdef CONFIG_SERIAL_8250_RSA
-- /*
-- * Reset the RSA board back to 115kbps compat mode.
-- */
-- disable_rsa(up);
--#endif
--
- /*
- * Read data port to reset things, and then unlink from
- * the IRQ chain.
-@@ -2289,7 +1318,11 @@ serial8250_set_termios(struct uart_port
- * have sufficient FIFO entries for the latency of the remote
- * UART to respond. IOW, at least 32 bytes of FIFO.
- */
-+#ifdef CONFIG_SERIAL_RTL8198_UART1
-+ if (up->capabilities & UART_CAP_AFE && up->port.fifosize >= 16) {
-+#else
- if (up->capabilities & UART_CAP_AFE && up->port.fifosize >= 32) {
-+#endif
- up->mcr &= ~UART_MCR_AFE;
- if (termios->c_cflag & CRTSCTS)
- up->mcr |= UART_MCR_AFE;
-@@ -2356,46 +1389,21 @@ serial8250_set_termios(struct uart_port
- if (termios->c_cflag & CRTSCTS)
- efr |= UART_EFR_CTS;
-
-- serial_outp(up, UART_LCR, 0xBF);
-- serial_outp(up, UART_EFR, efr);
-- }
--
--#ifdef CONFIG_ARCH_OMAP
-- /* Workaround to enable 115200 baud on OMAP1510 internal ports */
-- if (cpu_is_omap1510() && is_omap_port(up)) {
-- if (baud == 115200) {
-- quot = 1;
-- serial_out(up, UART_OMAP_OSC_12M_SEL, 1);
-- } else
-- serial_out(up, UART_OMAP_OSC_12M_SEL, 0);
-- }
--#endif
--
-- if (up->capabilities & UART_NATSEMI) {
-- /* Switch to bank 2 not bank 1, to avoid resetting EXCR2 */
-- serial_outp(up, UART_LCR, 0xe0);
-- } else {
-- serial_outp(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */
-+ serial_out(up, UART_LCR, 0xBF);
-+ serial_out(up, UART_EFR, efr);
- }
-
-+ serial_out(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */
- serial_dl_write(up, quot);
-
-- /*
-- * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
-- * is written without DLAB set, this mode will be disabled.
-- */
-- if (up->port.type == PORT_16750)
-- serial_outp(up, UART_FCR, fcr);
--
-- serial_outp(up, UART_LCR, cval); /* reset DLAB */
-+ serial_out(up, UART_LCR, cval); /* reset DLAB */
- up->lcr = cval; /* Save LCR */
-- if (up->port.type != PORT_16750) {
- if (fcr & UART_FCR_ENABLE_FIFO) {
- /* emulated UARTs (Lucent Venus 167x) need two steps */
-- serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
-- }
-- serial_outp(up, UART_FCR, fcr); /* set fcr */
-+ serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
- }
-+ serial_out(up, UART_FCR, fcr); /* set fcr */
-+
- serial8250_set_mctrl(&up->port, up->port.mctrl);
- spin_unlock_irqrestore(&up->port.lock, flags);
- /* Don't rewrite B0 */
-@@ -2417,12 +1425,6 @@ serial8250_pm(struct uart_port *port, un
-
- static unsigned int serial8250_port_size(struct uart_8250_port *pt)
- {
-- if (pt->port.iotype == UPIO_AU)
-- return 0x100000;
--#ifdef CONFIG_ARCH_OMAP
-- if (is_omap_port(pt))
-- return 0x16 << pt->port.regshift;
--#endif
- return 8 << pt->port.regshift;
- }
-
-@@ -2435,8 +1437,6 @@ static int serial8250_request_std_resour
- int ret = 0;
-
- switch (up->port.iotype) {
-- case UPIO_AU:
-- case UPIO_TSI:
- case UPIO_MEM32:
- case UPIO_MEM:
- case UPIO_DWAPB:
-@@ -2463,6 +1463,8 @@ static int serial8250_request_std_resour
- if (!request_region(up->port.iobase, size, "serial"))
- ret = -EBUSY;
- break;
-+ case UPIO_I2C:
-+ break;
- }
- return ret;
- }
-@@ -2472,8 +1474,6 @@ static void serial8250_release_std_resou
- unsigned int size = serial8250_port_size(up);
-
- switch (up->port.iotype) {
-- case UPIO_AU:
-- case UPIO_TSI:
- case UPIO_MEM32:
- case UPIO_MEM:
- case UPIO_DWAPB:
-@@ -2492,38 +1492,7 @@ static void serial8250_release_std_resou
- case UPIO_PORT:
- release_region(up->port.iobase, size);
- break;
-- }
--}
--
--static int serial8250_request_rsa_resource(struct uart_8250_port *up)
--{
-- unsigned long start = UART_RSA_BASE << up->port.regshift;
-- unsigned int size = 8 << up->port.regshift;
-- int ret = -EINVAL;
--
-- switch (up->port.iotype) {
-- case UPIO_HUB6:
-- case UPIO_PORT:
-- start += up->port.iobase;
-- if (request_region(start, size, "serial-rsa"))
-- ret = 0;
-- else
-- ret = -EBUSY;
-- break;
-- }
--
-- return ret;
--}
--
--static void serial8250_release_rsa_resource(struct uart_8250_port *up)
--{
-- unsigned long offset = UART_RSA_BASE << up->port.regshift;
-- unsigned int size = 8 << up->port.regshift;
--
-- switch (up->port.iotype) {
-- case UPIO_HUB6:
-- case UPIO_PORT:
-- release_region(up->port.iobase + offset, size);
-+ case UPIO_I2C:
- break;
- }
- }
-@@ -2533,29 +1502,18 @@ static void serial8250_release_port(stru
- struct uart_8250_port *up = (struct uart_8250_port *)port;
-
- serial8250_release_std_resource(up);
-- if (up->port.type == PORT_RSA)
-- serial8250_release_rsa_resource(up);
- }
-
- static int serial8250_request_port(struct uart_port *port)
- {
- struct uart_8250_port *up = (struct uart_8250_port *)port;
-- int ret = 0;
-
-- ret = serial8250_request_std_resource(up);
-- if (ret == 0 && up->port.type == PORT_RSA) {
-- ret = serial8250_request_rsa_resource(up);
-- if (ret < 0)
-- serial8250_release_std_resource(up);
-- }
--
-- return ret;
-+ return serial8250_request_std_resource(up);
- }
-
- static void serial8250_config_port(struct uart_port *port, int flags)
- {
- struct uart_8250_port *up = (struct uart_8250_port *)port;
-- int probeflags = PROBE_ANY;
- int ret;
-
- /*
-@@ -2566,20 +1524,9 @@ static void serial8250_config_port(struc
- if (ret < 0)
- return;
-
-- ret = serial8250_request_rsa_resource(up);
-- if (ret < 0)
-- probeflags &= ~PROBE_RSA;
--
- if (up->port.iotype != up->cur_iotype)
- set_io_from_upio(port);
-
-- if (flags & UART_CONFIG_TYPE)
-- autoconfig(up, probeflags);
-- if (up->port.type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ)
-- autoconfig_irq(up);
--
-- if (up->port.type != PORT_RSA && probeflags & PROBE_RSA)
-- serial8250_release_rsa_resource(up);
- if (up->port.type == PORT_UNKNOWN)
- serial8250_release_std_resource(up);
- }
-@@ -2773,6 +1720,14 @@ static int __init serial8250_console_set
- int parity = 'n';
- int flow = 'n';
-
-+#ifdef CONFIG_SERIAL_SC16IS7X0
-+ extern int __init early_sc16is7x0_init_i2c_and_check( void );
-+ if( serial8250_ports[co->index].port.iotype == UPIO_I2C &&
-+ early_sc16is7x0_init_i2c_and_check() != 0 )
-+ {
-+ return -ENODEV;
-+ }
-+#endif
- /*
- * Check whether an invalid uart number has been specified, and
- * if so, search for the first available port that does have
-@@ -2902,19 +1857,6 @@ void serial8250_resume_port(int line)
- {
- struct uart_8250_port *up = &serial8250_ports[line];
-
-- if (up->capabilities & UART_NATSEMI) {
-- unsigned char tmp;
--
-- /* Ensure it's still in high speed mode */
-- serial_outp(up, UART_LCR, 0xE0);
--
-- tmp = serial_in(up, 0x04); /* EXCR2 */
-- tmp &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */
-- tmp |= 0x10; /* 1.625 divisor for baud_base --> 921600 */
-- serial_outp(up, 0x04, tmp);
--
-- serial_outp(up, UART_LCR, 0);
-- }
- uart_resume_port(&serial8250_reg, &up->port);
- }
-
-@@ -3159,12 +2101,8 @@ static int __init serial8250_init(void)
- "%d ports, IRQ sharing %sabled\n", nr_uarts,
- share_irqs ? "en" : "dis");
-
--#ifdef CONFIG_SPARC
-- ret = sunserial_register_minors(&serial8250_reg, UART_NR);
--#else
- serial8250_reg.nr = UART_NR;
- ret = uart_register_driver(&serial8250_reg);
--#endif
- if (ret)
- goto out;
-
-@@ -3189,11 +2127,7 @@ static int __init serial8250_init(void)
- put_dev:
- platform_device_put(serial8250_isa_devs);
- unreg_uart_drv:
--#ifdef CONFIG_SPARC
-- sunserial_unregister_minors(&serial8250_reg, UART_NR);
--#else
- uart_unregister_driver(&serial8250_reg);
--#endif
- out:
- return ret;
- }
-@@ -3212,11 +2146,7 @@ static void __exit serial8250_exit(void)
- platform_driver_unregister(&serial8250_isa_driver);
- platform_device_unregister(isa_dev);
-
--#ifdef CONFIG_SPARC
-- sunserial_unregister_minors(&serial8250_reg, UART_NR);
--#else
- uart_unregister_driver(&serial8250_reg);
--#endif
- }
-
- module_init(serial8250_init);
-@@ -3235,8 +2165,4 @@ MODULE_PARM_DESC(share_irqs, "Share IRQs
- module_param(nr_uarts, uint, 0644);
- MODULE_PARM_DESC(nr_uarts, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS) ")");
-
--#ifdef CONFIG_SERIAL_8250_RSA
--module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444);
--MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
--#endif
- MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR);
---- linux-2.6.30.9/drivers/serial/8250.h 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/serial/8250.h 2013-05-02 01:47:55.684226900 +0300
-@@ -60,20 +60,4 @@ struct serial8250_config {
- #define SERIAL8250_SHARE_IRQS 0
- #endif
-
--#if defined(__alpha__) && !defined(CONFIG_PCI)
--/*
-- * Digital did something really horribly wrong with the OUT1 and OUT2
-- * lines on at least some ALPHA's. The failure mode is that if either
-- * is cleared, the machine locks up with endless interrupts.
-- */
--#define ALPHA_KLUDGE_MCR (UART_MCR_OUT2 | UART_MCR_OUT1)
--#elif defined(CONFIG_SBC8560)
--/*
-- * WindRiver did something similarly broken on their SBC8560 board. The
-- * UART tristates its IRQ output while OUT2 is clear, but they pulled
-- * the interrupt line _up_ instead of down, so if we register the IRQ
-- * while the UART is in that state, we die in an IRQ storm. */
--#define ALPHA_KLUDGE_MCR (UART_MCR_OUT2)
--#else
- #define ALPHA_KLUDGE_MCR 0
--#endif
---- linux-2.6.30.9/drivers/serial/Kconfig 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/serial/Kconfig 2013-05-02 01:47:55.686226899 +0300
-@@ -1,9 +1,10 @@
- #
- # Serial device configuration
- #
-+# $Id: Kconfig,v 1.11 2004/03/11 18:08:04 lethal Exp $
-+#
-
- menu "Serial drivers"
-- depends on HAS_IOMEM
-
- #
- # The new 8250/16550 serial drivers
-@@ -59,61 +60,6 @@ config SERIAL_8250_CONSOLE
- kernel will automatically use the first serial line, /dev/ttyS0, as
- system console.
-
-- You can set that using a kernel command line option such as
-- "console=uart8250,io,0x3f8,9600n8"
-- "console=uart8250,mmio,0xff5e0000,115200n8".
-- and it will switch to normal serial console when the corresponding
-- port is ready.
-- "earlycon=uart8250,io,0x3f8,9600n8"
-- "earlycon=uart8250,mmio,0xff5e0000,115200n8".
-- it will not only setup early console.
--
-- If unsure, say N.
--
--config FIX_EARLYCON_MEM
-- bool
-- depends on X86
-- default y
--
--config SERIAL_8250_GSC
-- tristate
-- depends on SERIAL_8250 && GSC
-- default SERIAL_8250
--
--config SERIAL_8250_PCI
-- tristate "8250/16550 PCI device support" if EMBEDDED
-- depends on SERIAL_8250 && PCI
-- default SERIAL_8250
-- help
-- This builds standard PCI serial support. You may be able to
-- disable this feature if you only need legacy serial support.
-- Saves about 9K.
--
--config SERIAL_8250_PNP
-- tristate "8250/16550 PNP device support" if EMBEDDED
-- depends on SERIAL_8250 && PNP
-- default SERIAL_8250
-- help
-- This builds standard PNP serial support. You may be able to
-- disable this feature if you only need legacy serial support.
--
--config SERIAL_8250_HP300
-- tristate
-- depends on SERIAL_8250 && HP300
-- default SERIAL_8250
--
--config SERIAL_8250_CS
-- tristate "8250/16550 PCMCIA device support"
-- depends on PCMCIA && SERIAL_8250
-- ---help---
-- Say Y here to enable support for 16-bit PCMCIA serial devices,
-- including serial port cards, modems, and the modem functions of
-- multi-function Ethernet/modem cards. (PCMCIA- or PC-cards are
-- credit-card size devices often used with laptops.)
--
-- To compile this driver as a module, choose M here: the
-- module will be called serial_cs.
--
- If unsure, say N.
-
- config SERIAL_8250_NR_UARTS
-@@ -163,58 +109,6 @@ config SERIAL_8250_MANY_PORTS
- say N here to save some memory. You can also say Y if you have an
- "intelligent" multiport card such as Cyclades, Digiboards, etc.
-
--#
--# Multi-port serial cards
--#
--
--config SERIAL_8250_FOURPORT
-- tristate "Support Fourport cards"
-- depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
-- help
-- Say Y here if you have an AST FourPort serial board.
--
-- To compile this driver as a module, choose M here: the module
-- will be called 8250_fourport.
--
--config SERIAL_8250_ACCENT
-- tristate "Support Accent cards"
-- depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
-- help
-- Say Y here if you have an Accent Async serial board.
--
-- To compile this driver as a module, choose M here: the module
-- will be called 8250_accent.
--
--config SERIAL_8250_BOCA
-- tristate "Support Boca cards"
-- depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
-- help
-- Say Y here if you have a Boca serial board. Please read the Boca
-- mini-HOWTO, available from <http://www.tldp.org/docs.html#howto>
--
-- To compile this driver as a module, choose M here: the module
-- will be called 8250_boca.
--
--config SERIAL_8250_EXAR_ST16C554
-- tristate "Support Exar ST16C554/554D Quad UART"
-- depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
-- help
-- The Uplogix Envoy TU301 uses this Exar Quad UART. If you are
-- tinkering with your Envoy TU301, or have a machine with this UART,
-- say Y here.
--
-- To compile this driver as a module, choose M here: the module
-- will be called 8250_exar_st16c554.
--
--config SERIAL_8250_HUB6
-- tristate "Support Hub6 cards"
-- depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
-- help
-- Say Y here if you have a HUB6 serial board.
--
-- To compile this driver as a module, choose M here: the module
-- will be called 8250_hub6.
--
- config SERIAL_8250_SHARE_IRQ
- bool "Support for sharing serial interrupts"
- depends on SERIAL_8250_EXTENDED
-@@ -223,1214 +117,48 @@ config SERIAL_8250_SHARE_IRQ
- serial ports on the same board to share a single IRQ. To enable
- support for this in the serial driver, say Y here.
-
--config SERIAL_8250_DETECT_IRQ
-- bool "Autodetect IRQ on standard ports (unsafe)"
-- depends on SERIAL_8250_EXTENDED
-- help
-- Say Y here if you want the kernel to try to guess which IRQ
-- to use for your serial port.
--
-- This is considered unsafe; it is far better to configure the IRQ in
-- a boot script using the setserial command.
--
-- If unsure, say N.
--
--config SERIAL_8250_RSA
-- bool "Support RSA serial ports"
-- depends on SERIAL_8250_EXTENDED
-- help
-- ::: To be written :::
--
--config SERIAL_8250_MCA
-- tristate "Support 8250-type ports on MCA buses"
-- depends on SERIAL_8250 != n && MCA
-- help
-- Say Y here if you have a MCA serial ports.
--
-- To compile this driver as a module, choose M here: the module
-- will be called 8250_mca.
--
--config SERIAL_8250_ACORN
-- tristate "Acorn expansion card serial port support"
-- depends on ARCH_ACORN && SERIAL_8250
-- help
-- If you have an Atomwide Serial card or Serial Port card for an Acorn
-- system, say Y to this option. The driver can handle 1, 2, or 3 port
-- cards. If unsure, say N.
--
--config SERIAL_8250_AU1X00
-- bool "Au1x00 serial port support"
-- depends on SERIAL_8250 != n && SOC_AU1X00
-- help
-- If you have an Au1x00 SOC based board and want to use the serial port,
-- say Y to this option. The driver can handle up to 4 serial ports,
-- depending on the SOC. If unsure, say N.
--
--config SERIAL_8250_RM9K
-- bool "Support for MIPS RM9xxx integrated serial port"
-- depends on SERIAL_8250 != n && SERIAL_RM9000
-- select SERIAL_8250_SHARE_IRQ
-- help
-- Selecting this option will add support for the integrated serial
-- port hardware found on MIPS RM9122 and similar processors.
-- If unsure, say N.
--
--comment "Non-8250 serial port support"
--
--config SERIAL_AMBA_PL010
-- tristate "ARM AMBA PL010 serial port support"
-- depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE)
-- select SERIAL_CORE
-- help
-- This selects the ARM(R) AMBA(R) PrimeCell PL010 UART. If you have
-- an Integrator/AP or Integrator/PP2 platform, or if you have a
-- Cirrus Logic EP93xx CPU, say Y or M here.
--
-- If unsure, say N.
--
--config SERIAL_AMBA_PL010_CONSOLE
-- bool "Support for console on AMBA serial port"
-- depends on SERIAL_AMBA_PL010=y
-- select SERIAL_CORE_CONSOLE
-- ---help---
-- Say Y here if you wish to use an AMBA PrimeCell UART as the system
-- console (the system console is the device which receives all kernel
-- messages and warnings and which allows logins in single user mode).
--
-- Even if you say Y here, the currently visible framebuffer console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttyAM0". (Try "man bootparam" or see the documentation of
-- your boot loader (lilo or loadlin) about how to pass options to the
-- kernel at boot time.)
--
--config SERIAL_AMBA_PL011
-- tristate "ARM AMBA PL011 serial port support"
-- depends on ARM_AMBA
-- select SERIAL_CORE
-- help
-- This selects the ARM(R) AMBA(R) PrimeCell PL011 UART. If you have
-- an Integrator/PP2, Integrator/CP or Versatile platform, say Y or M
-- here.
--
-- If unsure, say N.
--
--config SERIAL_AMBA_PL011_CONSOLE
-- bool "Support for console on AMBA serial port"
-- depends on SERIAL_AMBA_PL011=y
-- select SERIAL_CORE_CONSOLE
-- ---help---
-- Say Y here if you wish to use an AMBA PrimeCell UART as the system
-- console (the system console is the device which receives all kernel
-- messages and warnings and which allows logins in single user mode).
--
-- Even if you say Y here, the currently visible framebuffer console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttyAMA0". (Try "man bootparam" or see the documentation of
-- your boot loader (lilo or loadlin) about how to pass options to the
-- kernel at boot time.)
--
--config SERIAL_SB1250_DUART
-- tristate "BCM1xxx on-chip DUART serial support"
-- depends on SIBYTE_SB1xxx_SOC=y
-- select SERIAL_CORE
-- default y
-- ---help---
-- Support for the asynchronous serial interface (DUART) included in
-- the BCM1250 and derived System-On-a-Chip (SOC) devices. Note that
-- the letter D in DUART stands for "dual", which is how the device
-- is implemented. Depending on the SOC configuration there may be
-- one or more DUARTs available of which all are handled.
--
-- If unsure, say Y. To compile this driver as a module, choose M here:
-- the module will be called sb1250-duart.
--
--config SERIAL_SB1250_DUART_CONSOLE
-- bool "Support for console on a BCM1xxx DUART serial port"
-- depends on SERIAL_SB1250_DUART=y
-- select SERIAL_CORE_CONSOLE
-- default y
-- ---help---
-- If you say Y here, it will be possible to use a serial port as the
-- system console (the system console is the device which receives all
-- kernel messages and warnings and which allows logins in single user
-- mode).
--
-- If unsure, say Y.
--
--config SERIAL_ATMEL
-- bool "AT91 / AT32 on-chip serial port support"
-- depends on (ARM && ARCH_AT91) || AVR32
-- select SERIAL_CORE
-- help
-- This enables the driver for the on-chip UARTs of the Atmel
-- AT91 and AT32 processors.
--
--config SERIAL_ATMEL_CONSOLE
-- bool "Support for console on AT91 / AT32 serial port"
-- depends on SERIAL_ATMEL=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Say Y here if you wish to use an on-chip UART on a Atmel
-- AT91 or AT32 processor as the system console (the system
-- console is the device which receives all kernel messages and
-- warnings and which allows logins in single user mode).
--
--config SERIAL_ATMEL_PDC
-- bool "Support DMA transfers on AT91 / AT32 serial port"
-- depends on SERIAL_ATMEL
-- default y
-- help
-- Say Y here if you wish to use the PDC to do DMA transfers to
-- and from the Atmel AT91 / AT32 serial port. In order to
-- actually use DMA transfers, make sure that the use_dma_tx
-- and use_dma_rx members in the atmel_uart_data struct is set
-- appropriately for each port.
--
-- Note that break and error handling currently doesn't work
-- properly when DMA is enabled. Make sure that ports where
-- this matters don't use DMA.
--
--config SERIAL_ATMEL_TTYAT
-- bool "Install as device ttyATn instead of ttySn"
-- depends on SERIAL_ATMEL=y
-- help
-- Say Y here if you wish to have the internal AT91 / AT32 UARTs
-- appear as /dev/ttyATn (major 204, minor starting at 154)
-- instead of the normal /dev/ttySn (major 4, minor starting at
-- 64). This is necessary if you also want other UARTs, such as
-- external 8250/16C550 compatible UARTs.
-- The ttySn nodes are legally reserved for the 8250 serial driver
-- but are often misused by other serial drivers.
--
-- To use this, you should create suitable ttyATn device nodes in
-- /dev/, and pass "console=ttyATn" to the kernel.
--
-- Say Y if you have an external 8250/16C550 UART. If unsure, say N.
--
--config SERIAL_KS8695
-- bool "Micrel KS8695 (Centaur) serial port support"
-- depends on ARCH_KS8695
-- select SERIAL_CORE
-- help
-- This selects the Micrel Centaur KS8695 UART. Say Y here.
--
--config SERIAL_KS8695_CONSOLE
-- bool "Support for console on KS8695 (Centaur) serial port"
-- depends on SERIAL_KS8695=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Say Y here if you wish to use a KS8695 (Centaur) UART as the
-- system console (the system console is the device which
-- receives all kernel messages and warnings and which allows
-- logins in single user mode).
--
--config SERIAL_CLPS711X
-- tristate "CLPS711X serial port support"
-- depends on ARM && ARCH_CLPS711X
-- select SERIAL_CORE
-- help
-- ::: To be written :::
--
--config SERIAL_CLPS711X_CONSOLE
-- bool "Support for console on CLPS711X serial port"
-- depends on SERIAL_CLPS711X=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Even if you say Y here, the currently visible virtual console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttyCL1". (Try "man bootparam" or see the documentation of
-- your boot loader (lilo or loadlin) about how to pass options to the
-- kernel at boot time.)
--
--config SERIAL_SAMSUNG
-- tristate "Samsung SoC serial support"
-- depends on ARM && PLAT_S3C
-- select SERIAL_CORE
-- help
-- Support for the on-chip UARTs on the Samsung S3C24XX series CPUs,
-- providing /dev/ttySAC0, 1 and 2 (note, some machines may not
-- provide all of these ports, depending on how the serial port
-- pins are configured.
--
--config SERIAL_SAMSUNG_UARTS
-- int
-- depends on ARM && PLAT_S3C
-- default 2 if ARCH_S3C2400
-- default 4 if ARCH_S3C64XX || CPU_S3C2443
-- default 3
-- help
-- Select the number of available UART ports for the Samsung S3C
-- serial driver
--
--config SERIAL_SAMSUNG_DEBUG
-- bool "Samsung SoC serial debug"
-- depends on SERIAL_SAMSUNG && DEBUG_LL
-- help
-- Add support for debugging the serial driver. Since this is
-- generally being used as a console, we use our own output
-- routines that go via the low-level debug printascii()
-- function.
--
--config SERIAL_SAMSUNG_CONSOLE
-- bool "Support for console on Samsung SoC serial port"
-- depends on SERIAL_SAMSUNG=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Allow selection of the S3C24XX on-board serial ports for use as
-- an virtual console.
--
-- Even if you say Y here, the currently visible virtual console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttySACx". (Try "man bootparam" or see the documentation of
-- your boot loader about how to pass options to the kernel at
-- boot time.)
--
--config SERIAL_S3C2400
-- tristate "Samsung S3C2410 Serial port support"
-- depends on ARM && SERIAL_SAMSUNG && CPU_S3C2400
-- default y if CPU_S3C2400
-- help
-- Serial port support for the Samsung S3C2400 SoC
--
--config SERIAL_S3C2410
-- tristate "Samsung S3C2410 Serial port support"
-- depends on SERIAL_SAMSUNG && CPU_S3C2410
-- default y if CPU_S3C2410
-- help
-- Serial port support for the Samsung S3C2410 SoC
--
--config SERIAL_S3C2412
-- tristate "Samsung S3C2412/S3C2413 Serial port support"
-- depends on SERIAL_SAMSUNG && CPU_S3C2412
-- default y if CPU_S3C2412
-- help
-- Serial port support for the Samsung S3C2412 and S3C2413 SoC
--
--config SERIAL_S3C2440
-- tristate "Samsung S3C2440/S3C2442 Serial port support"
-- depends on SERIAL_SAMSUNG && (CPU_S3C2440 || CPU_S3C2442)
-- default y if CPU_S3C2440
-- default y if CPU_S3C2442
-- help
-- Serial port support for the Samsung S3C2440 and S3C2442 SoC
--
--config SERIAL_S3C24A0
-- tristate "Samsung S3C24A0 Serial port support"
-- depends on SERIAL_SAMSUNG && CPU_S3C24A0
-- default y if CPU_S3C24A0
-- help
-- Serial port support for the Samsung S3C24A0 SoC
--
--config SERIAL_S3C6400
-- tristate "Samsung S3C6400/S3C6410 Serial port support"
-- depends on SERIAL_SAMSUNG && (CPU_S3C600 || CPU_S3C6410)
-- default y
-- help
-- Serial port support for the Samsung S3C6400 and S3C6410
-- SoCs
--
--config SERIAL_MAX3100
-- tristate "MAX3100 support"
-- depends on SPI
-- select SERIAL_CORE
-- help
-- MAX3100 chip support
--
--config SERIAL_DZ
-- bool "DECstation DZ serial driver"
-- depends on MACH_DECSTATION && 32BIT
-- select SERIAL_CORE
-- default y
-- ---help---
-- DZ11-family serial controllers for DECstations and VAXstations,
-- including the DC7085, M7814, and M7819.
--
--config SERIAL_DZ_CONSOLE
-- bool "Support console on DECstation DZ serial driver"
-- depends on SERIAL_DZ=y
-- select SERIAL_CORE_CONSOLE
-- default y
-- ---help---
-- If you say Y here, it will be possible to use a serial port as the
-- system console (the system console is the device which receives all
-- kernel messages and warnings and which allows logins in single user
-- mode).
--
-- Note that the firmware uses ttyS3 as the serial console on
-- DECstations that use this driver.
--
-- If unsure, say Y.
--
--config SERIAL_ZS
-- tristate "DECstation Z85C30 serial support"
-- depends on MACH_DECSTATION
-- select SERIAL_CORE
-- default y
-- ---help---
-- Support for the Zilog 85C350 serial communications controller used
-- for serial ports in newer DECstation systems. These include the
-- DECsystem 5900 and all models of the DECstation and DECsystem 5000
-- systems except from model 200.
--
-- If unsure, say Y. To compile this driver as a module, choose M here:
-- the module will be called zs.
--
--config SERIAL_ZS_CONSOLE
-- bool "Support for console on a DECstation Z85C30 serial port"
-- depends on SERIAL_ZS=y
-- select SERIAL_CORE_CONSOLE
-- default y
-- ---help---
-- If you say Y here, it will be possible to use a serial port as the
-- system console (the system console is the device which receives all
-- kernel messages and warnings and which allows logins in single user
-- mode).
--
-- Note that the firmware uses ttyS1 as the serial console on the
-- Maxine and ttyS3 on the others using this driver.
--
-- If unsure, say Y.
--
--config SERIAL_21285
-- tristate "DC21285 serial port support"
-- depends on ARM && FOOTBRIDGE
-- select SERIAL_CORE
-- help
-- If you have a machine based on a 21285 (Footbridge) StrongARM(R)/
-- PCI bridge you can enable its onboard serial port by enabling this
-- option.
--
--config SERIAL_21285_CONSOLE
-- bool "Console on DC21285 serial port"
-- depends on SERIAL_21285=y
-- select SERIAL_CORE_CONSOLE
-- help
-- If you have enabled the serial port on the 21285 footbridge you can
-- make it the console by answering Y to this option.
--
-- Even if you say Y here, the currently visible virtual console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttyFB". (Try "man bootparam" or see the documentation of
-- your boot loader (lilo or loadlin) about how to pass options to the
-- kernel at boot time.)
--
--config SERIAL_MPSC
-- bool "Marvell MPSC serial port support"
-- depends on PPC32 && MV64X60
-- select SERIAL_CORE
-- help
-- Say Y here if you want to use the Marvell MPSC serial controller.
--
--config SERIAL_MPSC_CONSOLE
-- bool "Support for console on Marvell MPSC serial port"
-- depends on SERIAL_MPSC
-- select SERIAL_CORE_CONSOLE
-- help
-- Say Y here if you want to support a serial console on a Marvell MPSC.
--
--config SERIAL_PXA
-- bool "PXA serial port support"
-- depends on ARCH_PXA || ARCH_MMP
-- select SERIAL_CORE
-- help
-- If you have a machine based on an Intel XScale PXA2xx CPU you
-- can enable its onboard serial ports by enabling this option.
--
--config SERIAL_PXA_CONSOLE
-- bool "Console on PXA serial port"
-- depends on SERIAL_PXA
-- select SERIAL_CORE_CONSOLE
-- help
-- If you have enabled the serial port on the Intel XScale PXA
-- CPU you can make it the console by answering Y to this option.
--
-- Even if you say Y here, the currently visible virtual console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttySA0". (Try "man bootparam" or see the documentation of
-- your boot loader (lilo or loadlin) about how to pass options to the
-- kernel at boot time.)
--
--config SERIAL_SA1100
-- bool "SA1100 serial port support"
-- depends on ARM && ARCH_SA1100
-- select SERIAL_CORE
-- help
-- If you have a machine based on a SA1100/SA1110 StrongARM(R) CPU you
-- can enable its onboard serial port by enabling this option.
-- Please read <file:Documentation/arm/SA1100/serial_UART> for further
-- info.
--
--config SERIAL_SA1100_CONSOLE
-- bool "Console on SA1100 serial port"
-- depends on SERIAL_SA1100
-- select SERIAL_CORE_CONSOLE
-- help
-- If you have enabled the serial port on the SA1100/SA1110 StrongARM
-- CPU you can make it the console by answering Y to this option.
--
-- Even if you say Y here, the currently visible virtual console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttySA0". (Try "man bootparam" or see the documentation of
-- your boot loader (lilo or loadlin) about how to pass options to the
-- kernel at boot time.)
--
--config SERIAL_BFIN
-- tristate "Blackfin serial port support"
-- depends on BLACKFIN
-- select SERIAL_CORE
-- select SERIAL_BFIN_UART0 if (BF531 || BF532 || BF533 || BF561)
-- help
-- Add support for the built-in UARTs on the Blackfin.
--
-- To compile this driver as a module, choose M here: the
-- module will be called bfin_5xx.
--
--config SERIAL_BFIN_CONSOLE
-- bool "Console on Blackfin serial port"
-- depends on SERIAL_BFIN=y
-- select SERIAL_CORE_CONSOLE
--
--choice
-- prompt "UART Mode"
-- depends on SERIAL_BFIN
-- default SERIAL_BFIN_DMA
-- help
-- This driver supports the built-in serial ports of the Blackfin family
-- of CPUs
--
--config SERIAL_BFIN_DMA
-- bool "DMA mode"
-- depends on !DMA_UNCACHED_NONE && KGDB_SERIAL_CONSOLE=n
-- help
-- This driver works under DMA mode. If this option is selected, the
-- blackfin simple dma driver is also enabled.
--
--config SERIAL_BFIN_PIO
-- bool "PIO mode"
-- help
-- This driver works under PIO mode.
--
--endchoice
--
--config SERIAL_BFIN_UART0
-- bool "Enable UART0"
-- depends on SERIAL_BFIN
-- help
-- Enable UART0
--
--config BFIN_UART0_CTSRTS
-- bool "Enable UART0 hardware flow control"
-- depends on SERIAL_BFIN_UART0
-- help
-- Enable hardware flow control in the driver. Using GPIO emulate the CTS/RTS
-- signal.
--
--config UART0_CTS_PIN
-- int "UART0 CTS pin"
-- depends on BFIN_UART0_CTSRTS && !BF548
-- default 23
-- help
-- The default pin is GPIO_GP7.
-- Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
--
--config UART0_RTS_PIN
-- int "UART0 RTS pin"
-- depends on BFIN_UART0_CTSRTS && !BF548
-- default 22
-- help
-- The default pin is GPIO_GP6.
-- Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
--
--config SERIAL_BFIN_UART1
-- bool "Enable UART1"
-- depends on SERIAL_BFIN && (!BF531 && !BF532 && !BF533 && !BF561)
-- help
-- Enable UART1
--
--config BFIN_UART1_CTSRTS
-- bool "Enable UART1 hardware flow control"
-- depends on SERIAL_BFIN_UART1
-- help
-- Enable hardware flow control in the driver. Using GPIO emulate the CTS/RTS
-- signal.
--
--config UART1_CTS_PIN
-- int "UART1 CTS pin"
-- depends on BFIN_UART1_CTSRTS && !BF548
-- default -1
-- help
-- Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
--
--config UART1_RTS_PIN
-- int "UART1 RTS pin"
-- depends on BFIN_UART1_CTSRTS && !BF548
-- default -1
-- help
-- Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
--
--config SERIAL_BFIN_UART2
-- bool "Enable UART2"
-- depends on SERIAL_BFIN && (BF54x || BF538 || BF539)
-- help
-- Enable UART2
--
--config BFIN_UART2_CTSRTS
-- bool "Enable UART2 hardware flow control"
-- depends on SERIAL_BFIN_UART2
-- help
-- Enable hardware flow control in the driver. Using GPIO emulate the CTS/RTS
-- signal.
--
--config UART2_CTS_PIN
-- int "UART2 CTS pin"
-- depends on BFIN_UART2_CTSRTS && !BF548
-- default -1
-- help
-- Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
--
--config UART2_RTS_PIN
-- int "UART2 RTS pin"
-- depends on BFIN_UART2_CTSRTS && !BF548
-- default -1
-- help
-- Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
--
--config SERIAL_BFIN_UART3
-- bool "Enable UART3"
-- depends on SERIAL_BFIN && (BF54x)
-- help
-- Enable UART3
--
--config BFIN_UART3_CTSRTS
-- bool "Enable UART3 hardware flow control"
-- depends on SERIAL_BFIN_UART3
-- help
-- Enable hardware flow control in the driver. Using GPIO emulate the CTS/RTS
-- signal.
--
--config UART3_CTS_PIN
-- int "UART3 CTS pin"
-- depends on BFIN_UART3_CTSRTS && !BF548
-- default -1
-- help
-- Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
--
--config UART3_RTS_PIN
-- int "UART3 RTS pin"
-- depends on BFIN_UART3_CTSRTS && !BF548
-- default -1
-- help
-- Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
--
--config SERIAL_IMX
-- bool "IMX serial port support"
-- depends on ARM && (ARCH_IMX || ARCH_MXC)
-- select SERIAL_CORE
-- help
-- If you have a machine based on a Motorola IMX CPU you
-- can enable its onboard serial port by enabling this option.
--
--config SERIAL_IMX_CONSOLE
-- bool "Console on IMX serial port"
-- depends on SERIAL_IMX
-- select SERIAL_CORE_CONSOLE
-- help
-- If you have enabled the serial port on the Motorola IMX
-- CPU you can make it the console by answering Y to this option.
--
-- Even if you say Y here, the currently visible virtual console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttySA0". (Try "man bootparam" or see the documentation of
-- your boot loader (lilo or loadlin) about how to pass options to the
-- kernel at boot time.)
--
--config SERIAL_UARTLITE
-- tristate "Xilinx uartlite serial port support"
-- depends on PPC32 || MICROBLAZE
-- select SERIAL_CORE
-- help
-- Say Y here if you want to use the Xilinx uartlite serial controller.
--
-- To compile this driver as a module, choose M here: the
-- module will be called uartlite.ko.
--
--config SERIAL_UARTLITE_CONSOLE
-- bool "Support for console on Xilinx uartlite serial port"
-- depends on SERIAL_UARTLITE=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Say Y here if you wish to use a Xilinx uartlite as the system
-- console (the system console is the device which receives all kernel
-- messages and warnings and which allows logins in single user mode).
--
--config SERIAL_SUNCORE
-- bool
-- depends on SPARC
-- select SERIAL_CORE
-- select SERIAL_CORE_CONSOLE
-- default y
--
--config SERIAL_SUNZILOG
-- tristate "Sun Zilog8530 serial support"
-- depends on SPARC
-- help
-- This driver supports the Zilog8530 serial ports found on many Sparc
-- systems. Say Y or M if you want to be able to these serial ports.
--
--config SERIAL_SUNZILOG_CONSOLE
-- bool "Console on Sun Zilog8530 serial port"
-- depends on SERIAL_SUNZILOG=y
-- help
-- If you would like to be able to use the Zilog8530 serial port
-- on your Sparc system as the console, you can do so by answering
-- Y to this option.
--
--config SERIAL_SUNSU
-- tristate "Sun SU serial support"
-- depends on SPARC && PCI
-- help
-- This driver supports the 8250 serial ports that run the keyboard and
-- mouse on (PCI) UltraSPARC systems. Say Y or M if you want to be able
-- to these serial ports.
--
--config SERIAL_SUNSU_CONSOLE
-- bool "Console on Sun SU serial port"
-- depends on SERIAL_SUNSU=y
-- help
-- If you would like to be able to use the SU serial port
-- on your Sparc system as the console, you can do so by answering
-- Y to this option.
--
--config SERIAL_MUX
-- tristate "Serial MUX support"
-- depends on GSC
-- select SERIAL_CORE
-- default y
-- ---help---
-- Saying Y here will enable the hardware MUX serial driver for
-- the Nova, K class systems and D class with a 'remote control card'.
-- The hardware MUX is not 8250/16550 compatible therefore the
-- /dev/ttyB0 device is shared between the Serial MUX and the PDC
-- software console. The following steps need to be completed to use
-- the Serial MUX:
--
-- 1. create the device entry (mknod /dev/ttyB0 c 11 0)
-- 2. Edit the /etc/inittab to start a getty listening on /dev/ttyB0
-- 3. Add device ttyB0 to /etc/securetty (if you want to log on as
-- root on this console.)
-- 4. Change the kernel command console parameter to: console=ttyB0
--
--config SERIAL_MUX_CONSOLE
-- bool "Support for console on serial MUX"
-- depends on SERIAL_MUX=y
-- select SERIAL_CORE_CONSOLE
-- default y
--
--config PDC_CONSOLE
-- bool "PDC software console support"
-- depends on PARISC && !SERIAL_MUX && VT
-- default n
-- help
-- Saying Y here will enable the software based PDC console to be
-- used as the system console. This is useful for machines in
-- which the hardware based console has not been written yet. The
-- following steps must be competed to use the PDC console:
--
-- 1. create the device entry (mknod /dev/ttyB0 c 11 0)
-- 2. Edit the /etc/inittab to start a getty listening on /dev/ttyB0
-- 3. Add device ttyB0 to /etc/securetty (if you want to log on as
-- root on this console.)
-- 4. Change the kernel command console parameter to: console=ttyB0
--
--config SERIAL_SUNSAB
-- tristate "Sun Siemens SAB82532 serial support"
-- depends on SPARC && PCI
-- help
-- This driver supports the Siemens SAB82532 DUSCC serial ports on newer
-- (PCI) UltraSPARC systems. Say Y or M if you want to be able to these
-- serial ports.
--
--config SERIAL_SUNSAB_CONSOLE
-- bool "Console on Sun Siemens SAB82532 serial port"
-- depends on SERIAL_SUNSAB=y
-- help
-- If you would like to be able to use the SAB82532 serial port
-- on your Sparc system as the console, you can do so by answering
-- Y to this option.
--
--config SERIAL_SUNHV
-- bool "Sun4v Hypervisor Console support"
-- depends on SPARC64
-- help
-- This driver supports the console device found on SUN4V Sparc
-- systems. Say Y if you want to be able to use this device.
--
--config SERIAL_IP22_ZILOG
-- tristate "SGI Zilog8530 serial support"
-- depends on SGI_HAS_ZILOG
-- select SERIAL_CORE
-- help
-- This driver supports the Zilog8530 serial ports found on SGI
-- systems. Say Y or M if you want to be able to these serial ports.
--
--config SERIAL_IP22_ZILOG_CONSOLE
-- bool "Console on SGI Zilog8530 serial port"
-- depends on SERIAL_IP22_ZILOG=y
-- select SERIAL_CORE_CONSOLE
--
--config SERIAL_SH_SCI
-- tristate "SuperH SCI(F) serial port support"
-- depends on SUPERH || H8300
-- select SERIAL_CORE
--
--config SERIAL_SH_SCI_NR_UARTS
-- int "Maximum number of SCI(F) serial ports"
-- depends on SERIAL_SH_SCI
-- default "2"
--
--config SERIAL_SH_SCI_CONSOLE
-- bool "Support for console on SuperH SCI(F)"
-- depends on SERIAL_SH_SCI=y
-- select SERIAL_CORE_CONSOLE
--
--config SERIAL_PNX8XXX
-- bool "Enable PNX8XXX SoCs' UART Support"
-- depends on MIPS && (SOC_PNX8550 || SOC_PNX833X)
-- select SERIAL_CORE
-- help
-- If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330
-- and you want to use serial ports, say Y. Otherwise, say N.
--
--config SERIAL_PNX8XXX_CONSOLE
-- bool "Enable PNX8XX0 serial console"
-- depends on SERIAL_PNX8XXX
-- select SERIAL_CORE_CONSOLE
-- help
-- If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330
-- and you want to use serial console, say Y. Otherwise, say N.
--
- config SERIAL_CORE
- tristate
-
- config SERIAL_CORE_CONSOLE
- bool
-
--config CONSOLE_POLL
-- bool
--
--config SERIAL_68328
-- bool "68328 serial support"
-- depends on M68328 || M68EZ328 || M68VZ328
-- help
-- This driver supports the built-in serial port of the Motorola 68328
-- (standard, EZ and VZ varieties).
--
--config SERIAL_68328_RTS_CTS
-- bool "Support RTS/CTS on 68328 serial port"
-- depends on SERIAL_68328
--
--config SERIAL_MCF
-- bool "Coldfire serial support"
-- depends on COLDFIRE
-- select SERIAL_CORE
-- help
-- This serial driver supports the Freescale Coldfire serial ports.
--
--config SERIAL_MCF_BAUDRATE
-- int "Default baudrate for Coldfire serial ports"
-- depends on SERIAL_MCF
-- default 19200
-- help
-- This setting lets you define what the default baudrate is for the
-- ColdFire serial ports. The usual default varies from board to board,
-- and this setting is a way of catering for that.
--
--config SERIAL_MCF_CONSOLE
-- bool "Coldfire serial console support"
-- depends on SERIAL_MCF
-- select SERIAL_CORE_CONSOLE
-- help
-- Enable a ColdFire internal serial port to be the system console.
--
--config SERIAL_68360_SMC
-- bool "68360 SMC uart support"
-- depends on M68360
-- help
-- This driver supports the SMC serial ports of the Motorola 68360 CPU.
--
--config SERIAL_68360_SCC
-- bool "68360 SCC uart support"
-- depends on M68360
-- help
-- This driver supports the SCC serial ports of the Motorola 68360 CPU.
--
--config SERIAL_68360
-- bool
-- depends on SERIAL_68360_SMC || SERIAL_68360_SCC
-- default y
--
--config SERIAL_PMACZILOG
-- tristate "PowerMac z85c30 ESCC support"
-- depends on PPC_OF && PPC_PMAC
-- select SERIAL_CORE
-- help
-- This driver supports the Zilog z85C30 serial ports found on
-- PowerMac machines.
-- Say Y or M if you want to be able to these serial ports.
--
--config SERIAL_PMACZILOG_TTYS
-- bool "Use ttySn device nodes for Zilog z85c30"
-- depends on SERIAL_PMACZILOG
-- help
-- The pmac_zilog driver for the z85C30 chip on many powermacs
-- historically used the device numbers for /dev/ttySn. The
-- 8250 serial port driver also uses these numbers, which means
-- the two drivers being unable to coexist; you could not use
-- both z85C30 and 8250 type ports at the same time.
--
-- If this option is not selected, the pmac_zilog driver will
-- use the device numbers allocated for /dev/ttyPZn. This allows
-- the pmac_zilog and 8250 drivers to co-exist, but may cause
-- existing userspace setups to break. Programs that need to
-- access the built-in serial ports on powermacs will need to
-- be reconfigured to use /dev/ttyPZn instead of /dev/ttySn.
--
-- If you enable this option, any z85c30 ports in the system will
-- be registered as ttyS0 onwards as in the past, and you will be
-- unable to use the 8250 module for PCMCIA or other 16C550-style
-- UARTs.
--
-- Say N unless you need the z85c30 ports on your powermac
-- to appear as /dev/ttySn.
--
--config SERIAL_PMACZILOG_CONSOLE
-- bool "Console on PowerMac z85c30 serial port"
-- depends on SERIAL_PMACZILOG=y
-- select SERIAL_CORE_CONSOLE
-- help
-- If you would like to be able to use the z85c30 serial port
-- on your PowerMac as the console, you can do so by answering
-- Y to this option.
--
--config SERIAL_LH7A40X
-- tristate "Sharp LH7A40X embedded UART support"
-- depends on ARM && ARCH_LH7A40X
-- select SERIAL_CORE
-- help
-- This enables support for the three on-board UARTs of the
-- Sharp LH7A40X series CPUs. Choose Y or M.
--
--config SERIAL_LH7A40X_CONSOLE
-- bool "Support for console on Sharp LH7A40X serial port"
-- depends on SERIAL_LH7A40X=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Say Y here if you wish to use one of the serial ports as the
-- system console--the system console is the device which
-- receives all kernel messages and warnings and which allows
-- logins in single user mode.
--
-- Even if you say Y here, the currently visible framebuffer console
-- (/dev/tty0) will still be used as the default system console, but
-- you can alter that using a kernel command line, for example
-- "console=ttyAM1".
--
--config SERIAL_CPM
-- tristate "CPM SCC/SMC serial port support"
-- depends on CPM2 || 8xx
-- select SERIAL_CORE
-- help
-- This driver supports the SCC and SMC serial ports on Motorola
-- embedded PowerPC that contain a CPM1 (8xx) or CPM2 (8xxx)
--
--config SERIAL_CPM_CONSOLE
-- bool "Support for console on CPM SCC/SMC serial port"
-- depends on SERIAL_CPM=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Say Y here if you wish to use a SCC or SMC CPM UART as the system
-- console (the system console is the device which receives all kernel
-- messages and warnings and which allows logins in single user mode).
--
-- Even if you say Y here, the currently visible framebuffer console
-- (/dev/tty0) will still be used as the system console by default, but
-- you can alter that using a kernel command line option such as
-- "console=ttyCPM0". (Try "man bootparam" or see the documentation of
-- your boot loader (lilo or loadlin) about how to pass options to the
-- kernel at boot time.)
--
--config SERIAL_SGI_L1_CONSOLE
-- bool "SGI Altix L1 serial console support"
-- depends on IA64_GENERIC || IA64_SGI_SN2
-- select SERIAL_CORE
-- select SERIAL_CORE_CONSOLE
-- help
-- If you have an SGI Altix and you would like to use the system
-- controller serial port as your console (you want this!),
-- say Y. Otherwise, say N.
--
--config SERIAL_MPC52xx
-- tristate "Freescale MPC52xx/MPC512x family PSC serial support"
-- depends on PPC_MPC52xx || PPC_MPC512x
-- select SERIAL_CORE
-- help
-- This driver supports MPC52xx and MPC512x PSC serial ports. If you would
-- like to use them, you must answer Y or M to this option. Note that
-- for use as console, it must be included in kernel and not as a
-- module.
--
--config SERIAL_MPC52xx_CONSOLE
-- bool "Console on a Freescale MPC52xx/MPC512x family PSC serial port"
-- depends on SERIAL_MPC52xx=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Select this options if you'd like to use one of the PSC serial port
-- of the Freescale MPC52xx family as a console.
--
--config SERIAL_MPC52xx_CONSOLE_BAUD
-- int "Freescale MPC52xx/MPC512x family PSC serial port baud"
-- depends on SERIAL_MPC52xx_CONSOLE=y
-- default "9600"
-- help
-- Select the MPC52xx console baud rate.
-- This value is only used if the bootloader doesn't pass in the
-- console baudrate
--
--config SERIAL_ICOM
-- tristate "IBM Multiport Serial Adapter"
-- depends on PCI && (PPC_ISERIES || PPC_PSERIES)
-- select SERIAL_CORE
-- select FW_LOADER
-- help
-- This driver is for a family of multiport serial adapters
-- including 2 port RVX, 2 port internal modem, 4 port internal
-- modem and a split 1 port RVX and 1 port internal modem.
--
-- This driver can also be built as a module. If so, the module
-- will be called icom.
--
--config SERIAL_M32R_SIO
-- bool "M32R SIO I/F"
-- depends on M32R
-- default y
-- select SERIAL_CORE
-- help
-- Say Y here if you want to use the M32R serial controller.
--
--config SERIAL_M32R_SIO_CONSOLE
-- bool "use SIO console"
-- depends on SERIAL_M32R_SIO=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Say Y here if you want to support a serial console.
--
-- If you use an M3T-M32700UT or an OPSPUT platform,
-- please say also y for SERIAL_M32R_PLDSIO.
--
--config SERIAL_M32R_PLDSIO
-- bool "M32R SIO I/F on a PLD"
-- depends on SERIAL_M32R_SIO=y && (PLAT_OPSPUT || PLAT_USRV || PLAT_M32700UT)
-- default n
-- help
-- Say Y here if you want to use the M32R serial controller
-- on a PLD (Programmable Logic Device).
--
-- If you use an M3T-M32700UT or an OPSPUT platform,
-- please say Y.
--
--config SERIAL_TXX9
-- bool "TMPTX39XX/49XX SIO support"
-- depends on HAS_TXX9_SERIAL
-- select SERIAL_CORE
-- default y
--
--config HAS_TXX9_SERIAL
-- bool
--
--config SERIAL_TXX9_NR_UARTS
-- int "Maximum number of TMPTX39XX/49XX SIO ports"
-- depends on SERIAL_TXX9
-- default "6"
--
--config SERIAL_TXX9_CONSOLE
-- bool "TMPTX39XX/49XX SIO Console support"
-- depends on SERIAL_TXX9=y
-- select SERIAL_CORE_CONSOLE
--
--config SERIAL_TXX9_STDSERIAL
-- bool "TX39XX/49XX SIO act as standard serial"
-- depends on !SERIAL_8250 && SERIAL_TXX9
--
--config SERIAL_VR41XX
-- tristate "NEC VR4100 series Serial Interface Unit support"
-- depends on CPU_VR41XX
-- select SERIAL_CORE
-- help
-- If you have a NEC VR4100 series processor and you want to use
-- Serial Interface Unit(SIU) or Debug Serial Interface Unit(DSIU)
-- (not include VR4111/VR4121 DSIU), say Y. Otherwise, say N.
--
--config SERIAL_VR41XX_CONSOLE
-- bool "Enable NEC VR4100 series Serial Interface Unit console"
-- depends on SERIAL_VR41XX=y
-- select SERIAL_CORE_CONSOLE
-- help
-- If you have a NEC VR4100 series processor and you want to use
-- a console on a serial port, say Y. Otherwise, say N.
--
--config SERIAL_JSM
-- tristate "Digi International NEO PCI Support"
-- depends on PCI
-- select SERIAL_CORE
-- help
-- This is a driver for Digi International's Neo series
-- of cards which provide multiple serial ports. You would need
-- something like this to connect more than two modems to your Linux
-- box, for instance in order to become a dial-in server. This driver
-- supports PCI boards only.
--
-- If you have a card like this, say Y here, otherwise say N.
--
-- To compile this driver as a module, choose M here: the
-- module will be called jsm.
--
--config SERIAL_SGI_IOC4
-- tristate "SGI IOC4 controller serial support"
-- depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC4
-- select SERIAL_CORE
-- help
-- If you have an SGI Altix with an IOC4 based Base IO card
-- and wish to use the serial ports on this card, say Y.
-- Otherwise, say N.
--
--config SERIAL_SGI_IOC3
-- tristate "SGI Altix IOC3 serial support"
-- depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC3
-- select SERIAL_CORE
-- help
-- If you have an SGI Altix with an IOC3 serial card,
-- say Y or M. Otherwise, say N.
--
--config SERIAL_NETX
-- tristate "NetX serial port support"
-- depends on ARM && ARCH_NETX
-- select SERIAL_CORE
-- help
-- If you have a machine based on a Hilscher NetX SoC you
-- can enable its onboard serial port by enabling this option.
--
-- To compile this driver as a module, choose M here: the
-- module will be called netx-serial.
--
--config SERIAL_NETX_CONSOLE
-- bool "Console on NetX serial port"
-- depends on SERIAL_NETX=y
-- select SERIAL_CORE_CONSOLE
-- help
-- If you have enabled the serial port on the Hilscher NetX SoC
-- you can make it the console by answering Y to this option.
--
--config SERIAL_OF_PLATFORM
-- tristate "Serial port on Open Firmware platform bus"
-- depends on PPC_OF || MICROBLAZE
-- depends on SERIAL_8250 || SERIAL_OF_PLATFORM_NWPSERIAL
-- help
-- If you have a PowerPC based system that has serial ports
-- on a platform specific bus, you should enable this option.
-- Currently, only 8250 compatible ports are supported, but
-- others can easily be added.
--
--config SERIAL_OF_PLATFORM_NWPSERIAL
-- tristate "NWP serial port driver"
-- depends on PPC_OF && PPC_DCR
-- select SERIAL_OF_PLATFORM
-- select SERIAL_CORE_CONSOLE
-- select SERIAL_CORE
-- help
-- This driver supports the cell network processor nwp serial
-- device.
--
--config SERIAL_OF_PLATFORM_NWPSERIAL_CONSOLE
-- bool "Console on NWP serial port"
-- depends on SERIAL_OF_PLATFORM_NWPSERIAL=y
-- select SERIAL_CORE_CONSOLE
-- help
-- Support for Console on the NWP serial ports.
--
--config SERIAL_QE
-- tristate "Freescale QUICC Engine serial port support"
-- depends on QUICC_ENGINE
-- select SERIAL_CORE
-- select FW_LOADER
-- default n
-- help
-- This driver supports the QE serial ports on Freescale embedded
-- PowerPC that contain a QUICC Engine.
--
--config SERIAL_SC26XX
-- tristate "SC2681/SC2692 serial port support"
-- depends on SNI_RM
-- select SERIAL_CORE
-- help
-- This is a driver for the onboard serial ports of
-- older RM400 machines.
--
--config SERIAL_SC26XX_CONSOLE
-- bool "Console on SC2681/SC2692 serial port"
-- depends on SERIAL_SC26XX
-- select SERIAL_CORE_CONSOLE
-- help
-- Support for Console on SC2681/SC2692 serial ports.
--
--config SERIAL_BFIN_SPORT
-- tristate "Blackfin SPORT emulate UART (EXPERIMENTAL)"
-- depends on BLACKFIN && EXPERIMENTAL
-- select SERIAL_CORE
-+comment "8250 compatible port support"
-+config SERIAL_RTL8198_UART1
-+ bool "8198 UART1 support"
-+ depends on SERIAL_8250 && SERIAL_8250_NR_UARTS >= 2 && SERIAL_8250_RUNTIME_UARTS >= 2
-+ help
-+ Enable 8198 UART1 support, and this MAY add an uart device to ttyS1.
-+ NOTE: We don't provide option for this port to be console.
-+
-+config SERIAL_SC16IS7X0
-+ bool "SC16IS7x0 series (I2C bus) support"
-+ depends on SERIAL_8250 && SERIAL_8250_NR_UARTS >= 2 && SERIAL_8250_RUNTIME_UARTS >= 2
- help
-- Enable SPORT emulate UART on Blackfin series.
--
-- To compile this driver as a module, choose M here: the
-- module will be called bfin_sport_uart.
--
-+ Enable sc16is7x0 definition is to add an UART device to ttyS1.
-+ This is based on standard 8250, and doesn't affect original setting.
- choice
-- prompt "Baud rate for Blackfin SPORT UART"
-- depends on SERIAL_BFIN_SPORT
-- default SERIAL_SPORT_BAUD_RATE_57600
-+ prompt "Crystal for SC16IS7x0 XTAL1"
-+ depends on SERIAL_SC16IS7X0
- help
-- Choose a baud rate for the SPORT UART, other uart settings are
-- 8 bit, 1 stop bit, no parity, no flow control.
--
--config SERIAL_SPORT_BAUD_RATE_115200
-- bool "115200"
--
--config SERIAL_SPORT_BAUD_RATE_57600
-- bool "57600"
--
--config SERIAL_SPORT_BAUD_RATE_38400
-- bool "38400"
--
--config SERIAL_SPORT_BAUD_RATE_19200
-- bool "19200"
--
--config SERIAL_SPORT_BAUD_RATE_9600
-- bool "9600"
-+ Crystal for SC16IS7x0 XTAL1.
-+ This is factor of baudrate, so bad parameter will cause UART to be
-+ abnormal.
-+ config SERIAL_SC16IS7X0_XTAL1_CLK_1843200
-+ bool "1.8432 MHZ"
-+ config SERIAL_SC16IS7X0_XTAL1_CLK_14746500
-+ bool "14.7465 MHZ (NXP demoboard)"
- endchoice
--
--config SPORT_BAUD_RATE
-- int
-- depends on SERIAL_BFIN_SPORT
-- default 115200 if (SERIAL_SPORT_BAUD_RATE_115200)
-- default 57600 if (SERIAL_SPORT_BAUD_RATE_57600)
-- default 38400 if (SERIAL_SPORT_BAUD_RATE_38400)
-- default 19200 if (SERIAL_SPORT_BAUD_RATE_19200)
-- default 9600 if (SERIAL_SPORT_BAUD_RATE_9600)
--
-+config SERIAL_SC16IS7X0_CONSOLE
-+ bool "Console on SC16IS7x0 port (ttyS1)"
-+ depends on SERIAL_SC16IS7X0 && SERIAL_8250_CONSOLE
-+ help
-+ If you don't check this option, we will use standard 8250 as console.
-+ Here, 8250 and sc16is7x0 occups ttyS0 and ttyS1 respectively.
-+ Notice 1:
-+ You need add "console=ttyS1" to CONFIG_CMDLINE, or console output will be incorrect.
-+ Notice 2:
-+ If you want to make user space's stdout to this port,
-+ device (major,minor) of /dev/console has to be ttyS1 (4,65)
-+ instead of ttyS0 (4,64).
- endmenu
---- linux-2.6.30.9/drivers/serial/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/serial/Makefile 2013-05-02 01:47:55.686226899 +0300
-@@ -1,79 +1,35 @@
- #
- # Makefile for the kernel serial device drivers.
- #
-+ifeq ($(CONFIG_SERIAL_SC16IS7X0),y)
-+ EXTRA_CFLAGS += -DCONFIG_RTK_VOIP_DRIVERS_PCM8972B_FAMILY
-+endif
-
-+ifeq ($(CONFIG_SND_RTL8197D_SOC_ALC5628),y)
-+ EXTRA_CFLAGS += -DCONFIG_RTK_VOIP_DRIVERS_PCM89xxD
-+endif
- obj-$(CONFIG_SERIAL_CORE) += serial_core.o
--obj-$(CONFIG_SERIAL_21285) += 21285.o
-
- # These Sparc drivers have to appear before others such as 8250
- # which share ttySx minor node space. Otherwise console device
- # names change and other unplesantries.
--obj-$(CONFIG_SERIAL_SUNCORE) += suncore.o
--obj-$(CONFIG_SERIAL_SUNHV) += sunhv.o
--obj-$(CONFIG_SERIAL_SUNZILOG) += sunzilog.o
--obj-$(CONFIG_SERIAL_SUNSU) += sunsu.o
--obj-$(CONFIG_SERIAL_SUNSAB) += sunsab.o
-
- obj-$(CONFIG_SERIAL_8250) += 8250.o
- obj-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o
- obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o
- obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o
--obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o
--obj-$(CONFIG_SERIAL_8250_CS) += serial_cs.o
--obj-$(CONFIG_SERIAL_8250_ACORN) += 8250_acorn.o
- obj-$(CONFIG_SERIAL_8250_CONSOLE) += 8250_early.o
--obj-$(CONFIG_SERIAL_8250_FOURPORT) += 8250_fourport.o
--obj-$(CONFIG_SERIAL_8250_ACCENT) += 8250_accent.o
--obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_boca.o
--obj-$(CONFIG_SERIAL_8250_EXAR_ST16C554) += 8250_exar_st16c554.o
--obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o
--obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o
--obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o
--obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o
--obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
--obj-$(CONFIG_SERIAL_PXA) += pxa.o
--obj-$(CONFIG_SERIAL_PNX8XXX) += pnx8xxx_uart.o
--obj-$(CONFIG_SERIAL_SA1100) += sa1100.o
--obj-$(CONFIG_SERIAL_BFIN) += bfin_5xx.o
--obj-$(CONFIG_SERIAL_BFIN_SPORT) += bfin_sport_uart.o
--obj-$(CONFIG_SERIAL_SAMSUNG) += samsung.o
--obj-$(CONFIG_SERIAL_S3C2400) += s3c2400.o
--obj-$(CONFIG_SERIAL_S3C2410) += s3c2410.o
--obj-$(CONFIG_SERIAL_S3C2412) += s3c2412.o
--obj-$(CONFIG_SERIAL_S3C2440) += s3c2440.o
--obj-$(CONFIG_SERIAL_S3C24A0) += s3c24a0.o
--obj-$(CONFIG_SERIAL_S3C6400) += s3c6400.o
--obj-$(CONFIG_SERIAL_MAX3100) += max3100.o
--obj-$(CONFIG_SERIAL_IP22_ZILOG) += ip22zilog.o
--obj-$(CONFIG_SERIAL_MUX) += mux.o
--obj-$(CONFIG_SERIAL_68328) += 68328serial.o
--obj-$(CONFIG_SERIAL_68360) += 68360serial.o
--obj-$(CONFIG_SERIAL_MCF) += mcf.o
--obj-$(CONFIG_SERIAL_PMACZILOG) += pmac_zilog.o
--obj-$(CONFIG_SERIAL_LH7A40X) += serial_lh7a40x.o
--obj-$(CONFIG_SERIAL_DZ) += dz.o
--obj-$(CONFIG_SERIAL_ZS) += zs.o
--obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o
--obj-$(CONFIG_SERIAL_SGI_L1_CONSOLE) += sn_console.o
--obj-$(CONFIG_SERIAL_CPM) += cpm_uart/
--obj-$(CONFIG_SERIAL_IMX) += imx.o
--obj-$(CONFIG_SERIAL_MPC52xx) += mpc52xx_uart.o
--obj-$(CONFIG_SERIAL_ICOM) += icom.o
--obj-$(CONFIG_SERIAL_M32R_SIO) += m32r_sio.o
--obj-$(CONFIG_SERIAL_MPSC) += mpsc.o
--obj-$(CONFIG_SERIAL_SB1250_DUART) += sb1250-duart.o
--obj-$(CONFIG_ETRAX_SERIAL) += crisv10.o
--obj-$(CONFIG_SERIAL_SC26XX) += sc26xx.o
--obj-$(CONFIG_SERIAL_JSM) += jsm/
--obj-$(CONFIG_SERIAL_TXX9) += serial_txx9.o
--obj-$(CONFIG_SERIAL_VR41XX) += vr41xx_siu.o
--obj-$(CONFIG_SERIAL_SGI_IOC4) += ioc4_serial.o
--obj-$(CONFIG_SERIAL_SGI_IOC3) += ioc3_serial.o
--obj-$(CONFIG_SERIAL_ATMEL) += atmel_serial.o
--obj-$(CONFIG_SERIAL_UARTLITE) += uartlite.o
--obj-$(CONFIG_SERIAL_NETX) += netx-serial.o
- obj-$(CONFIG_SERIAL_OF_PLATFORM) += of_serial.o
- obj-$(CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL) += nwpserial.o
--obj-$(CONFIG_SERIAL_KS8695) += serial_ks8695.o
- obj-$(CONFIG_KGDB_SERIAL_CONSOLE) += kgdboc.o
--obj-$(CONFIG_SERIAL_QE) += ucc_uart.o
-+obj-$(CONFIG_SERIAL_SC16IS7X0) += 8250_sc16is7x0.o
-+obj-$(CONFIG_SERIAL_SC16IS7X0) += i2c.o
-+obj-$(CONFIG_SERIAL_SC16IS7X0) += gpio_8972b.o
-+
-+ifneq ($(CONFIG_SERIAL_SC16IS7X0),y)
-+ obj-$(CONFIG_SND_RTL8197D_SOC_ALC5628) += i2c.o
-+endif
-+obj-$(CONFIG_SND_RTL819X_SOC) += gpio_8972d.o
-+obj-$(CONFIG_SND_RTL8197D_SOC_ALC5628) += i2c_alc5628.o
-+
-+EXTRA_CFLAGS += -Iinclude/asm-mips/rtl865x/
---- linux-2.6.30.9/drivers/serial/serial_core.c 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/serial/serial_core.c 2013-05-02 01:47:55.689226899 +0300
-@@ -417,7 +417,7 @@ uart_get_divisor(struct uart_port *port,
- * Old custom speed handling.
- */
- if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
-- quot = port->custom_divisor;
-+ quot = 3; //port->custom_divisor;
- else
- quot = (port->uartclk + (8 * baud)) / (16 * baud);
-
-@@ -2140,12 +2140,14 @@ uart_report_port(struct uart_driver *drv
- break;
- case UPIO_MEM:
- case UPIO_MEM32:
-- case UPIO_AU:
-- case UPIO_TSI:
- case UPIO_DWAPB:
- snprintf(address, sizeof(address),
- "MMIO 0x%llx", (unsigned long long)port->mapbase);
- break;
-+ case UPIO_I2C:
-+ snprintf(address, sizeof(address),
-+ "I2C 0x%lx", port->iobase);
-+ break;
- default:
- strlcpy(address, "*unknown*", sizeof(address));
- break;
-@@ -2349,8 +2351,13 @@ int uart_register_driver(struct uart_dri
- normal->type = TTY_DRIVER_TYPE_SERIAL;
- normal->subtype = SERIAL_TYPE_NORMAL;
- normal->init_termios = tty_std_termios;
-+#if defined(CONFIG_SERIAL_SC16IS7X0) || defined(CONFIG_SERIAL_RTL8198_UART1)
-+ normal->init_termios.c_cflag = B38400 | CS8 | CREAD | HUPCL | CLOCAL;
-+ normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 38400;
-+#else
- normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
- normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600;
-+#endif
- normal->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
- normal->driver_state = drv;
- tty_set_operations(normal, &uart_ops);
-@@ -2554,10 +2561,10 @@ int uart_match_port(struct uart_port *po
- (port1->hub6 == port2->hub6);
- case UPIO_MEM:
- case UPIO_MEM32:
-- case UPIO_AU:
-- case UPIO_TSI:
- case UPIO_DWAPB:
- return (port1->mapbase == port2->mapbase);
-+ case UPIO_I2C:
-+ return (port1->iobase == port2->iobase);
- }
- return 0;
- }
---- linux-2.6.30.9/drivers/staging/Kconfig 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/staging/Kconfig 2013-05-02 01:47:55.708226898 +0300
-@@ -85,6 +87,8 @@ source "drivers/staging/altpciechdma/Kco
-
- source "drivers/staging/rtl8187se/Kconfig"
-
-+source "drivers/staging/rtl8192su/Kconfig"
-+
- source "drivers/staging/rspiusb/Kconfig"
-
- source "drivers/staging/mimio/Kconfig"
---- linux-2.6.30.9/drivers/staging/Makefile 2009-10-05 18:38:08.000000000 +0300
-+++ linux-2.6.30.9-rsdk/drivers/staging/Makefile 2013-05-02 01:47:55.708226898 +0300
-@@ -25,6 +25,7 @@ obj-$(CONFIG_ASUS_OLED) += asus_oled/
- obj-$(CONFIG_PANEL) += panel/
- obj-$(CONFIG_ALTERA_PCIE_CHDMA) += altpciechdma/
- obj-$(CONFIG_RTL8187SE) += rtl8187se/
-+obj-$(CONFIG_RTL8192SU) += rtl8192su/
- obj-$(CONFIG_USB_RSPI) += rspiusb/
- obj-$(CONFIG_INPUT_MIMIO) += mimio/
- obj-$(CONFIG_TRANZPORT) += frontier/