Re: Re: [PATCH] Fix Default to 'y' for SR9800 Device Driver, settingto 'n'

2014-02-13 Thread liujunliang_ljl
Dear David :

Thanks all the same.


2014-02-14 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2014-02-14  07:42:24 
收件人: sergei.shtylyov 
抄送: liujunliang_ljl; thierry.reding; horms; joe; romieu; gregkh; netdev; 
linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] Fix Default to 'y' for SR9800 Device Driver, settingto 'n' 
 
From: Sergei Shtylyov 
Date: Fri, 14 Feb 2014 03:38:17 +0300
> Hello.
> 
> On 02/14/2014 02:32 AM, David Miller wrote:
> 
>>> From: Liu Junliang 
> 
>>> Signed-off-by: Liu Junliang 
> 
>> I think it's more canonical to specify no default at all.
> 
>That's what he did, no?
Indeed, my bad, patch applied, thanks!
.


Re: Re: [PATCH] Fix Default to 'y' for SR9800 Device Driver, settingto 'n'

2014-02-13 Thread liujunliang_ljl
Dear David :

Thanks all the same.


2014-02-14 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2014-02-14  07:42:24 
收件人: sergei.shtylyov 
抄送: liujunliang_ljl; thierry.reding; horms; joe; romieu; gregkh; netdev; 
linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] Fix Default to 'y' for SR9800 Device Driver, settingto 'n' 
 
From: Sergei Shtylyov sergei.shtyl...@cogentembedded.com
Date: Fri, 14 Feb 2014 03:38:17 +0300
 Hello.
 
 On 02/14/2014 02:32 AM, David Miller wrote:
 
 From: Liu Junliang liujunliang_...@163.com
 
 Signed-off-by: Liu Junliang liujunliang_...@163.com
 
 I think it's more canonical to specify no default at all.
 
That's what he did, no?
Indeed, my bad, patch applied, thanks!
.


[PATCH] Fix Default to 'y' for SR9800 Device Driver, setting to 'n'

2014-02-12 Thread liujunliang_ljl
From: Liu Junliang 


Signed-off-by: Liu Junliang 
---
 drivers/net/usb/Kconfig |1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 2551bf6..82df7c3 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -295,7 +295,6 @@ config USB_NET_SR9800
tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
depends on USB_USBNET
select CRC32
-   default y
---help---
  Say Y if you want to use one of the following 100Mbps USB Ethernet
  device based on the CoreChip-sz SR9800 chip.
-- 
1.7.9.5


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 DeviceDriver Support

2014-02-12 Thread liujunliang_ljl
Dear Thierry :

For this driver, we can set it as 'n', and There is no 
rule of thumb as to which should default to y.

Thanks for your advice.

Thanks again.



2014-02-13 



liujunliang_ljl 


   
发件人: Thierry Reding 
发送时间: 2014-02-12  18:12:52 
收件人: liujunliang_ljl 
抄送: davem; horms; joe; romieu; gregkh; netdev; linux-usb; linux-kernel; 
sunhecheng 
主题: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 DeviceDriver 
Support 
 
On Mon, Feb 10, 2014 at 01:33:39PM +0800, liujunliang_...@163.com wrote:
> From: Liu Junliang 
> 
> 
> Signed-off-by: Liu Junliang 
> ---
>  drivers/net/usb/Kconfig  |   16 +
>  drivers/net/usb/Makefile |1 +
>  drivers/net/usb/sr9800.c |  873 
> ++
>  drivers/net/usb/sr9800.h |  202 +++
>  4 files changed, 1092 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/net/usb/sr9800.c
>  create mode 100644 drivers/net/usb/sr9800.h
> 
> diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
> index 47b0f73..2551bf6 100644
> --- a/drivers/net/usb/Kconfig
> +++ b/drivers/net/usb/Kconfig
> @@ -291,6 +291,22 @@ config USB_NET_SR9700
> This option adds support for CoreChip-sz SR9700 based USB 1.1
> 10/100 Ethernet adapters.
>  
> +config USB_NET_SR9800
> + tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
> + depends on USB_USBNET
> + select CRC32
> + default y
Why is this selected by default? I can see that some of the other USB
network drivers are also selected by default, but not all of them. Is
there some rule of thumb as to which should default to y and which
shouldn't?
Thierry
-BEGIN PGP SIGNATURE-
Version: GnuPG v2.0.22 (GNU/Linux)
iQIcBAEBAgAGBQJS+0kdAAoJEN0jrNd/PrOhXvwQAJIW4vgv0NkyQVo5jSvzeLY4
9PFCrtd6N1n+O7P99x38JCCD9lWtfdin1EZfj+UicCanup2WzpyBWHeBhdSN4oZA
/+C+TgEIuX0+Be11IXeUOGMP9a3k/12HY3oHuz7BA2JjcK6PnfMxaEC7iGGJSjgz
q4Goa5kSqjvNgbP8h5bQPTNtMnRdsSytI7PMJbl4t1ho0V7H3pSo9zD7rxaPhmtE
v/18VQawGcY83Hr0B0Q18XAnNXaQMLZTvdhVfDUxB5VKT4Xhcri0m4adbAzMI9kR
K9CEChkDn68y13drJVILKqUjW+4LMQHAsQV07yl98Sqk7LYOedL9mQOnIL0crjWa
OAmLHwLv0ED25W1Hv3UdeSpBdIkO9cD0PCa7vHQnv7lpTlkaDyYelKLQ2D+GXrCw
1L/341ak9QEGiCU1TiOHDblnsN+OtCt0Pt+hijLHFl4TQKw3QIUoZLa4bQuDPM8M
juTSV63HRjiDlNGvtjBezlR9GFu5w3SJuNSNsFkZ7ADJwjz9On9JaDwH/Ad7AqmZ
ylE+zzbIpOWjyNToMH2dattpeVZkIfGkS02y6PcIx51EGMw5B8l6qKLB9YpkJpwR
7rhMYjpLKIn/6rRGlwmZKYnWYl7p/FdI0yOnVbtMYx406ivUNc+kgvmx5l1mXhT7
b8gKKYYA0pMEMXjgnkK1
=3y7X
-END PGP SIGNATURE-


[PATCH] Fix Default to 'y' for SR9800 Device Driver, setting to 'n'

2014-02-12 Thread liujunliang_ljl
From: Liu Junliang liujunliang_...@163.com


Signed-off-by: Liu Junliang liujunliang_...@163.com
---
 drivers/net/usb/Kconfig |1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 2551bf6..82df7c3 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -295,7 +295,6 @@ config USB_NET_SR9800
tristate CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices
depends on USB_USBNET
select CRC32
-   default y
---help---
  Say Y if you want to use one of the following 100Mbps USB Ethernet
  device based on the CoreChip-sz SR9800 chip.
-- 
1.7.9.5


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 DeviceDriver Support

2014-02-12 Thread liujunliang_ljl
Dear Thierry :

For this driver, we can set it as 'n', and There is no 
rule of thumb as to which should default to y.

Thanks for your advice.

Thanks again.



2014-02-13 



liujunliang_ljl 


   
发件人: Thierry Reding 
发送时间: 2014-02-12  18:12:52 
收件人: liujunliang_ljl 
抄送: davem; horms; joe; romieu; gregkh; netdev; linux-usb; linux-kernel; 
sunhecheng 
主题: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 DeviceDriver 
Support 
 
On Mon, Feb 10, 2014 at 01:33:39PM +0800, liujunliang_...@163.com wrote:
 From: Liu Junliang liujunliang_...@163.com
 
 
 Signed-off-by: Liu Junliang liujunliang_...@163.com
 ---
  drivers/net/usb/Kconfig  |   16 +
  drivers/net/usb/Makefile |1 +
  drivers/net/usb/sr9800.c |  873 
 ++
  drivers/net/usb/sr9800.h |  202 +++
  4 files changed, 1092 insertions(+), 0 deletions(-)
  create mode 100644 drivers/net/usb/sr9800.c
  create mode 100644 drivers/net/usb/sr9800.h
 
 diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
 index 47b0f73..2551bf6 100644
 --- a/drivers/net/usb/Kconfig
 +++ b/drivers/net/usb/Kconfig
 @@ -291,6 +291,22 @@ config USB_NET_SR9700
 This option adds support for CoreChip-sz SR9700 based USB 1.1
 10/100 Ethernet adapters.
  
 +config USB_NET_SR9800
 + tristate CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices
 + depends on USB_USBNET
 + select CRC32
 + default y
Why is this selected by default? I can see that some of the other USB
network drivers are also selected by default, but not all of them. Is
there some rule of thumb as to which should default to y and which
shouldn't?
Thierry
-BEGIN PGP SIGNATURE-
Version: GnuPG v2.0.22 (GNU/Linux)
iQIcBAEBAgAGBQJS+0kdAAoJEN0jrNd/PrOhXvwQAJIW4vgv0NkyQVo5jSvzeLY4
9PFCrtd6N1n+O7P99x38JCCD9lWtfdin1EZfj+UicCanup2WzpyBWHeBhdSN4oZA
/+C+TgEIuX0+Be11IXeUOGMP9a3k/12HY3oHuz7BA2JjcK6PnfMxaEC7iGGJSjgz
q4Goa5kSqjvNgbP8h5bQPTNtMnRdsSytI7PMJbl4t1ho0V7H3pSo9zD7rxaPhmtE
v/18VQawGcY83Hr0B0Q18XAnNXaQMLZTvdhVfDUxB5VKT4Xhcri0m4adbAzMI9kR
K9CEChkDn68y13drJVILKqUjW+4LMQHAsQV07yl98Sqk7LYOedL9mQOnIL0crjWa
OAmLHwLv0ED25W1Hv3UdeSpBdIkO9cD0PCa7vHQnv7lpTlkaDyYelKLQ2D+GXrCw
1L/341ak9QEGiCU1TiOHDblnsN+OtCt0Pt+hijLHFl4TQKw3QIUoZLa4bQuDPM8M
juTSV63HRjiDlNGvtjBezlR9GFu5w3SJuNSNsFkZ7ADJwjz9On9JaDwH/Ad7AqmZ
ylE+zzbIpOWjyNToMH2dattpeVZkIfGkS02y6PcIx51EGMw5B8l6qKLB9YpkJpwR
7rhMYjpLKIn/6rRGlwmZKYnWYl7p/FdI0yOnVbtMYx406ivUNc+kgvmx5l1mXhT7
b8gKKYYA0pMEMXjgnkK1
=3y7X
-END PGP SIGNATURE-


Re: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver Support

2014-02-10 Thread liujunliang_ljl
Dear Miller :

Thanks a lot.


2014-02-11 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2014-02-11  08:54:00 
收件人: liujunliang_ljl 
抄送: joe; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver 
Support 
 
From: liujunliang_...@163.com
Date: Mon, 10 Feb 2014 14:31:42 +0800
> From: Liu Junliang 
> 
> 
> Signed-off-by: Liu Junliang 
Applied, thanks.
N�Р骒r��yb�X�肚�v�^�)藓{.n�+�伐�{��赙zXФ�≤�}��财�z�:+v�����赙zZ+��+zf"�h���~i���z��wア�?�ㄨ��&�)撷f��^j谦y�m��@A�a囤�
0鹅h���i

Re: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver Support

2014-02-10 Thread liujunliang_ljl
Dear Miller :

Thanks a lot.


2014-02-11 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2014-02-11  08:54:00 
收件人: liujunliang_ljl 
抄送: joe; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver 
Support 
 
From: liujunliang_...@163.com
Date: Mon, 10 Feb 2014 14:31:42 +0800
 From: Liu Junliang liujunliang_...@163.com
 
 
 Signed-off-by: Liu Junliang liujunliang_...@163.com
Applied, thanks.
N�Р骒r��yb�X�肚�v�^�)藓{.n�+�伐�{��赙zXФ�≤�}��财�z�j:+v�����赙zZ+��+zf"�h���~i���z��wア�?�ㄨ���)撷f��^j谦y�m��@A�a囤�
0鹅h���i

[PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 Device Driver Support

2014-02-09 Thread liujunliang_ljl
From: Liu Junliang 


Signed-off-by: Liu Junliang 
---
 drivers/net/usb/Kconfig  |   16 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9800.c |  870 ++
 drivers/net/usb/sr9800.h |  202 +++
 4 files changed, 1089 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/usb/sr9800.c
 create mode 100644 drivers/net/usb/sr9800.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 47b0f73..2551bf6 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -291,6 +291,22 @@ config USB_NET_SR9700
  This option adds support for CoreChip-sz SR9700 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9800
+   tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
+   depends on USB_USBNET
+   select CRC32
+   default y
+   ---help---
+ Say Y if you want to use one of the following 100Mbps USB Ethernet
+ device based on the CoreChip-sz SR9800 chip.
+
+ This driver makes the adapter appear as a normal Ethernet interface,
+ typically on eth0, if it is the only ethernet device, or perhaps on
+ eth1, if you have a PCI or ISA ethernet card installed.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sr9800.
+
 config USB_NET_SMSC75XX
tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e8..433f0a0 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER)+= cdc_ether.o r815x.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
 obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
+obj-$(CONFIG_USB_NET_SR9800)   += sr9800.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000..4175eb9
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,870 @@
+/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
+ *
+ * Author : Liu Junliang 
+ *
+ * Based on asix_common.c, asix_devices.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.*
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "sr9800.h"
+
+static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+   u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
+ data, size);
+   if ((err != size) && (err >= 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
+ data, size);
+   if ((err != size) && (err >= 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static void
+sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+  u16 size, void *data)
+{
+   usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
+  size);
+}
+
+static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+{
+   int offset = 0;
+
+   while (offset + sizeof(u32) < skb->len) {
+   struct sk_buff *sr_skb;
+   u16 size;
+   u32 header = get_unaligned_le32(skb->data + offset);
+
+   offset += sizeof(u32);
+   /* get the packet length */
+   size = (u16) (header & 0x7ff);
+   if (size != ((~header >> 16) & 0x07ff)) {
+   netdev_err(dev->net, "%s : Bad Header Length\n",
+  __func__);
+   return 0;
+   }
+
+   if ((size > dev->net->mtu + ETH_HLEN + VLAN_HLEN) ||
+   (size + offset > skb->len)) {
+   netdev_err(dev->net, "%s : Bad RX Length %d\n",
+  __func__, size);
+   return 0;
+   }
+   sr_skb = netdev_alloc_skb_ip_align(dev->net, size);
+   if (!sr_skb)
+   return 0;
+
+   skb_put(sr_skb, size);
+   memcpy(sr_skb->data, skb->data + offset, size);
+   usbnet_skb_return(dev, sr_skb);
+
+   offset += (size + 1) & 0xfffe;
+   }
+
+   if (skb->len != offset) {
+ 

Re: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver Support

2014-02-09 Thread liujunliang_ljl
Dear Joe :

Thanks a lot for your detail checking.


2014-02-10 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2014-02-10  13:47:08 
收件人: liujunliang_ljl 
抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver 
Support 
 
On Mon, 2014-02-10 at 13:33 +0800, liujunliang_...@163.com wrote:
> diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
[]
> + netdev_dbg(dev->net, "mac addr : 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n",
> +dev->net->dev_addr[0], dev->net->dev_addr[1],
> +dev->net->dev_addr[2], dev->net->dev_addr[3],
> +dev->net->dev_addr[4], dev->net->dev_addr[5]);
mac addresses are assumed to be hex and don't need 0x prefixes.
Also, there's a kernel vsprintf extension "%pM" for mac addresses.
netdev_dbg(dev->net, "mac addr: %pM\n", dev->net->dev_addr);
.


[PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 Device Driver Support

2014-02-09 Thread liujunliang_ljl
From: Liu Junliang 


Signed-off-by: Liu Junliang 
---
 drivers/net/usb/Kconfig  |   16 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9800.c |  873 ++
 drivers/net/usb/sr9800.h |  202 +++
 4 files changed, 1092 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/usb/sr9800.c
 create mode 100644 drivers/net/usb/sr9800.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 47b0f73..2551bf6 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -291,6 +291,22 @@ config USB_NET_SR9700
  This option adds support for CoreChip-sz SR9700 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9800
+   tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
+   depends on USB_USBNET
+   select CRC32
+   default y
+   ---help---
+ Say Y if you want to use one of the following 100Mbps USB Ethernet
+ device based on the CoreChip-sz SR9800 chip.
+
+ This driver makes the adapter appear as a normal Ethernet interface,
+ typically on eth0, if it is the only ethernet device, or perhaps on
+ eth1, if you have a PCI or ISA ethernet card installed.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sr9800.
+
 config USB_NET_SMSC75XX
tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e8..433f0a0 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER)+= cdc_ether.o r815x.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
 obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
+obj-$(CONFIG_USB_NET_SR9800)   += sr9800.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000..51da04f
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,873 @@
+/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
+ *
+ * Author : Liu Junliang 
+ *
+ * Based on asix_common.c, asix_devices.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.*
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "sr9800.h"
+
+static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+   u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
+ data, size);
+   if ((err != size) && (err >= 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
+ data, size);
+   if ((err != size) && (err >= 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static void
+sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+  u16 size, void *data)
+{
+   usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
+  size);
+}
+
+static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+{
+   int offset = 0;
+
+   while (offset + sizeof(u32) < skb->len) {
+   struct sk_buff *sr_skb;
+   u16 size;
+   u32 header = get_unaligned_le32(skb->data + offset);
+
+   offset += sizeof(u32);
+   /* get the packet length */
+   size = (u16) (header & 0x7ff);
+   if (size != ((~header >> 16) & 0x07ff)) {
+   netdev_err(dev->net, "%s : Bad Header Length\n",
+  __func__);
+   return 0;
+   }
+
+   if ((size > dev->net->mtu + ETH_HLEN + VLAN_HLEN) ||
+   (size + offset > skb->len)) {
+   netdev_err(dev->net, "%s : Bad RX Length %d\n",
+  __func__, size);
+   return 0;
+   }
+   sr_skb = netdev_alloc_skb_ip_align(dev->net, size);
+   if (!sr_skb)
+   return 0;
+
+   skb_put(sr_skb, size);
+   memcpy(sr_skb->data, skb->data + offset, size);
+   usbnet_skb_return(dev, sr_skb);
+
+   offset += (size + 1) & 0xfffe;
+   }
+
+   if (skb->len != offset) {
+ 

[PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 Device Driver Support

2014-02-09 Thread liujunliang_ljl
From: Liu Junliang liujunliang_...@163.com


Signed-off-by: Liu Junliang liujunliang_...@163.com
---
 drivers/net/usb/Kconfig  |   16 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9800.c |  873 ++
 drivers/net/usb/sr9800.h |  202 +++
 4 files changed, 1092 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/usb/sr9800.c
 create mode 100644 drivers/net/usb/sr9800.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 47b0f73..2551bf6 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -291,6 +291,22 @@ config USB_NET_SR9700
  This option adds support for CoreChip-sz SR9700 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9800
+   tristate CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices
+   depends on USB_USBNET
+   select CRC32
+   default y
+   ---help---
+ Say Y if you want to use one of the following 100Mbps USB Ethernet
+ device based on the CoreChip-sz SR9800 chip.
+
+ This driver makes the adapter appear as a normal Ethernet interface,
+ typically on eth0, if it is the only ethernet device, or perhaps on
+ eth1, if you have a PCI or ISA ethernet card installed.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sr9800.
+
 config USB_NET_SMSC75XX
tristate SMSC LAN75XX based USB 2.0 gigabit ethernet devices
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e8..433f0a0 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER)+= cdc_ether.o r815x.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
 obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
+obj-$(CONFIG_USB_NET_SR9800)   += sr9800.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000..51da04f
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,873 @@
+/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
+ *
+ * Author : Liu Junliang liujunliang_...@163.com
+ *
+ * Based on asix_common.c, asix_devices.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed as is without any warranty of any
+ * kind, whether express or implied.*
+ */
+
+#include linux/module.h
+#include linux/kmod.h
+#include linux/init.h
+#include linux/netdevice.h
+#include linux/etherdevice.h
+#include linux/ethtool.h
+#include linux/workqueue.h
+#include linux/mii.h
+#include linux/usb.h
+#include linux/crc32.h
+#include linux/usb/usbnet.h
+#include linux/slab.h
+#include linux/if_vlan.h
+
+#include sr9800.h
+
+static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+   u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
+ data, size);
+   if ((err != size)  (err = 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
+ data, size);
+   if ((err != size)  (err = 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static void
+sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+  u16 size, void *data)
+{
+   usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
+  size);
+}
+
+static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+{
+   int offset = 0;
+
+   while (offset + sizeof(u32)  skb-len) {
+   struct sk_buff *sr_skb;
+   u16 size;
+   u32 header = get_unaligned_le32(skb-data + offset);
+
+   offset += sizeof(u32);
+   /* get the packet length */
+   size = (u16) (header  0x7ff);
+   if (size != ((~header  16)  0x07ff)) {
+   netdev_err(dev-net, %s : Bad Header Length\n,
+  __func__);
+   return 0;
+   }
+
+   if ((size  dev-net-mtu + ETH_HLEN + VLAN_HLEN) ||
+   (size + offset  skb-len)) {
+   netdev_err(dev-net, %s : Bad RX Length %d\n,
+  __func__, size);
+   return 0;
+   }
+   sr_skb = netdev_alloc_skb_ip_align(dev-net, size);
+   if (!sr_skb)
+   return 0;
+
+   skb_put(sr_skb, 

Re: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver Support

2014-02-09 Thread liujunliang_ljl
Dear Joe :

Thanks a lot for your detail checking.


2014-02-10 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2014-02-10  13:47:08 
收件人: liujunliang_ljl 
抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver 
Support 
 
On Mon, 2014-02-10 at 13:33 +0800, liujunliang_...@163.com wrote:
 diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
[]
 + netdev_dbg(dev-net, mac addr : 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n,
 +dev-net-dev_addr[0], dev-net-dev_addr[1],
 +dev-net-dev_addr[2], dev-net-dev_addr[3],
 +dev-net-dev_addr[4], dev-net-dev_addr[5]);
mac addresses are assumed to be hex and don't need 0x prefixes.
Also, there's a kernel vsprintf extension %pM for mac addresses.
netdev_dbg(dev-net, mac addr: %pM\n, dev-net-dev_addr);
.


[PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 Device Driver Support

2014-02-09 Thread liujunliang_ljl
From: Liu Junliang liujunliang_...@163.com


Signed-off-by: Liu Junliang liujunliang_...@163.com
---
 drivers/net/usb/Kconfig  |   16 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9800.c |  870 ++
 drivers/net/usb/sr9800.h |  202 +++
 4 files changed, 1089 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/usb/sr9800.c
 create mode 100644 drivers/net/usb/sr9800.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 47b0f73..2551bf6 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -291,6 +291,22 @@ config USB_NET_SR9700
  This option adds support for CoreChip-sz SR9700 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9800
+   tristate CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices
+   depends on USB_USBNET
+   select CRC32
+   default y
+   ---help---
+ Say Y if you want to use one of the following 100Mbps USB Ethernet
+ device based on the CoreChip-sz SR9800 chip.
+
+ This driver makes the adapter appear as a normal Ethernet interface,
+ typically on eth0, if it is the only ethernet device, or perhaps on
+ eth1, if you have a PCI or ISA ethernet card installed.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sr9800.
+
 config USB_NET_SMSC75XX
tristate SMSC LAN75XX based USB 2.0 gigabit ethernet devices
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e8..433f0a0 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER)+= cdc_ether.o r815x.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
 obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
+obj-$(CONFIG_USB_NET_SR9800)   += sr9800.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000..4175eb9
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,870 @@
+/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
+ *
+ * Author : Liu Junliang liujunliang_...@163.com
+ *
+ * Based on asix_common.c, asix_devices.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed as is without any warranty of any
+ * kind, whether express or implied.*
+ */
+
+#include linux/module.h
+#include linux/kmod.h
+#include linux/init.h
+#include linux/netdevice.h
+#include linux/etherdevice.h
+#include linux/ethtool.h
+#include linux/workqueue.h
+#include linux/mii.h
+#include linux/usb.h
+#include linux/crc32.h
+#include linux/usb/usbnet.h
+#include linux/slab.h
+#include linux/if_vlan.h
+
+#include sr9800.h
+
+static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+   u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
+ data, size);
+   if ((err != size)  (err = 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
+ data, size);
+   if ((err != size)  (err = 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static void
+sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+  u16 size, void *data)
+{
+   usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
+  size);
+}
+
+static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+{
+   int offset = 0;
+
+   while (offset + sizeof(u32)  skb-len) {
+   struct sk_buff *sr_skb;
+   u16 size;
+   u32 header = get_unaligned_le32(skb-data + offset);
+
+   offset += sizeof(u32);
+   /* get the packet length */
+   size = (u16) (header  0x7ff);
+   if (size != ((~header  16)  0x07ff)) {
+   netdev_err(dev-net, %s : Bad Header Length\n,
+  __func__);
+   return 0;
+   }
+
+   if ((size  dev-net-mtu + ETH_HLEN + VLAN_HLEN) ||
+   (size + offset  skb-len)) {
+   netdev_err(dev-net, %s : Bad RX Length %d\n,
+  __func__, size);
+   return 0;
+   }
+   sr_skb = netdev_alloc_skb_ip_align(dev-net, size);
+   if (!sr_skb)
+   return 0;
+
+   skb_put(sr_skb, 

[PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 Device Driver Support

2014-02-06 Thread liujunliang_ljl
From: Liu Junliang 


Signed-off-by: Liu Junliang 
---
 drivers/net/usb/Kconfig  |   16 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9800.c |  874 ++
 drivers/net/usb/sr9800.h |  202 +++
 4 files changed, 1093 insertions(+)
 create mode 100644 drivers/net/usb/sr9800.c
 create mode 100644 drivers/net/usb/sr9800.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 47b0f73..2551bf6 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -291,6 +291,22 @@ config USB_NET_SR9700
  This option adds support for CoreChip-sz SR9700 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9800
+   tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
+   depends on USB_USBNET
+   select CRC32
+   default y
+   ---help---
+ Say Y if you want to use one of the following 100Mbps USB Ethernet
+ device based on the CoreChip-sz SR9800 chip.
+
+ This driver makes the adapter appear as a normal Ethernet interface,
+ typically on eth0, if it is the only ethernet device, or perhaps on
+ eth1, if you have a PCI or ISA ethernet card installed.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sr9800.
+
 config USB_NET_SMSC75XX
tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e8..433f0a0 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER)+= cdc_ether.o r815x.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
 obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
+obj-$(CONFIG_USB_NET_SR9800)   += sr9800.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000..c333f32
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,874 @@
+/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
+ *
+ * Author : Liu Junliang 
+ *
+ * Based on asix_common.c, asix_devices.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.*
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "sr9800.h"
+
+static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+   u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
+ data, size);
+   if ((err != size) && (err >= 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
+ data, size);
+   if ((err != size) && (err >= 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static void
+sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+  u16 size, void *data)
+{
+   usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
+  size);
+}
+
+static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+{
+   int offset = 0;
+
+   while (offset + sizeof(u32) < skb->len) {
+   struct sk_buff *sr_skb;
+   u16 size;
+   u32 header = get_unaligned_le32(skb->data + offset);
+
+   offset += sizeof(u32);
+   /* get the packet length */
+   size = (u16) (header & 0x7ff);
+   if (size != ((~header >> 16) & 0x07ff)) {
+   netdev_err(dev->net, "%s : Bad Header Length\n",
+  __func__);
+   return 0;
+   }
+
+   if ((size > dev->net->mtu + ETH_HLEN + VLAN_HLEN) ||
+   (size + offset > skb->len)) {
+   netdev_err(dev->net, "%s : Bad RX Length %d\n",
+  __func__, size);
+   return 0;
+   }
+   sr_skb = netdev_alloc_skb_ip_align(dev->net, size);
+   if (!sr_skb)
+   return 0;
+
+   skb_put(sr_skb, size);
+   memcpy(sr_skb->data, skb->data + offset, size);
+   usbnet_skb_return(dev, sr_skb);
+
+   offset += (size + 1) & 0xfffe;
+   }
+
+   if (skb->len != offset) {
+   

Re: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver Support

2014-02-06 Thread liujunliang_ljl
Dear Joe :

I'm sorry that I reply so late, because I have just spent new 
chinese year.

I will resubmit SR9800 Driver today.

Thanks a lot.


2014-02-07 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2014-01-28  16:59:38 
收件人: liujunliang_ljl 
抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver 
Support 
 
On Tue, 2014-01-28 at 16:36 +0800, liujunliang_...@163.com wrote:
> From: Liu Junliang 
trivial comments...
> diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
[]
> +static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
> +{
[]
> + if (size != ((~header >> 16) & 0x07ff)) {
> + netdev_err(dev->net,
> +"sr_rx_fixup() Bad Header Length\n");
printks with embedded functions names are
generally better using "%s: ", __func__
netdev_err(dev->net, "%s: Bad header length\n",
   __func__);
[]
> + netdev_err(dev->net,
> +"sr_rx_fixup() Bad RX Length %d\n", size);
etc.
> + if (skb->len != offset) {
> + netdev_err(dev->net, "sr_rx_fixup() Bad SKB Length %d\n",
> +skb->len);
etc.
[]
> +static inline int sr9800_set_default_mode(struct usbnet *dev)
> +{
rather a big function to inline
[]
> + if (ret < 0) {
> + netdev_dbg(dev->net, "Write IPG,IPG1,IPG2 failed: %d", ret);
missing newline terminations
> + netdev_dbg(dev->net, "RX_CTL is 0x%04x after all initializations",
> +rx_ctl);
etc...
N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�:+v���zZ+��+zf���h���~i���z��w���?�&�)ߢf��^jǫy�m��@A�a���
0��h���i

Re: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver Support

2014-02-06 Thread liujunliang_ljl
Dear Joe :

I'm sorry that I reply so late, because I have just spent new 
chinese year.

I will resubmit SR9800 Driver today.

Thanks a lot.


2014-02-07 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2014-01-28  16:59:38 
收件人: liujunliang_ljl 
抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800Device Driver 
Support 
 
On Tue, 2014-01-28 at 16:36 +0800, liujunliang_...@163.com wrote:
 From: Liu Junliang liujunliang_...@163.com
trivial comments...
 diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
[]
 +static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
 +{
[]
 + if (size != ((~header  16)  0x07ff)) {
 + netdev_err(dev-net,
 +sr_rx_fixup() Bad Header Length\n);
printks with embedded functions names are
generally better using %s: , __func__
netdev_err(dev-net, %s: Bad header length\n,
   __func__);
[]
 + netdev_err(dev-net,
 +sr_rx_fixup() Bad RX Length %d\n, size);
etc.
 + if (skb-len != offset) {
 + netdev_err(dev-net, sr_rx_fixup() Bad SKB Length %d\n,
 +skb-len);
etc.
[]
 +static inline int sr9800_set_default_mode(struct usbnet *dev)
 +{
rather a big function to inline
[]
 + if (ret  0) {
 + netdev_dbg(dev-net, Write IPG,IPG1,IPG2 failed: %d, ret);
missing newline terminations
 + netdev_dbg(dev-net, RX_CTL is 0x%04x after all initializations,
 +rx_ctl);
etc...
N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�j:+v���zZ+��+zf���h���~i���z��w���?��)ߢf��^jǫy�m��@A�a���
0��h���i

[PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 Device Driver Support

2014-02-06 Thread liujunliang_ljl
From: Liu Junliang liujunliang_...@163.com


Signed-off-by: Liu Junliang liujunliang_...@163.com
---
 drivers/net/usb/Kconfig  |   16 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9800.c |  874 ++
 drivers/net/usb/sr9800.h |  202 +++
 4 files changed, 1093 insertions(+)
 create mode 100644 drivers/net/usb/sr9800.c
 create mode 100644 drivers/net/usb/sr9800.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 47b0f73..2551bf6 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -291,6 +291,22 @@ config USB_NET_SR9700
  This option adds support for CoreChip-sz SR9700 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9800
+   tristate CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices
+   depends on USB_USBNET
+   select CRC32
+   default y
+   ---help---
+ Say Y if you want to use one of the following 100Mbps USB Ethernet
+ device based on the CoreChip-sz SR9800 chip.
+
+ This driver makes the adapter appear as a normal Ethernet interface,
+ typically on eth0, if it is the only ethernet device, or perhaps on
+ eth1, if you have a PCI or ISA ethernet card installed.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sr9800.
+
 config USB_NET_SMSC75XX
tristate SMSC LAN75XX based USB 2.0 gigabit ethernet devices
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e8..433f0a0 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER)+= cdc_ether.o r815x.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
 obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
+obj-$(CONFIG_USB_NET_SR9800)   += sr9800.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000..c333f32
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,874 @@
+/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
+ *
+ * Author : Liu Junliang liujunliang_...@163.com
+ *
+ * Based on asix_common.c, asix_devices.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed as is without any warranty of any
+ * kind, whether express or implied.*
+ */
+
+#include linux/module.h
+#include linux/kmod.h
+#include linux/init.h
+#include linux/netdevice.h
+#include linux/etherdevice.h
+#include linux/ethtool.h
+#include linux/workqueue.h
+#include linux/mii.h
+#include linux/usb.h
+#include linux/crc32.h
+#include linux/usb/usbnet.h
+#include linux/slab.h
+#include linux/if_vlan.h
+
+#include sr9800.h
+
+static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+   u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
+ data, size);
+   if ((err != size)  (err = 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
+ data, size);
+   if ((err != size)  (err = 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static void
+sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+  u16 size, void *data)
+{
+   usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
+  size);
+}
+
+static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+{
+   int offset = 0;
+
+   while (offset + sizeof(u32)  skb-len) {
+   struct sk_buff *sr_skb;
+   u16 size;
+   u32 header = get_unaligned_le32(skb-data + offset);
+
+   offset += sizeof(u32);
+   /* get the packet length */
+   size = (u16) (header  0x7ff);
+   if (size != ((~header  16)  0x07ff)) {
+   netdev_err(dev-net, %s : Bad Header Length\n,
+  __func__);
+   return 0;
+   }
+
+   if ((size  dev-net-mtu + ETH_HLEN + VLAN_HLEN) ||
+   (size + offset  skb-len)) {
+   netdev_err(dev-net, %s : Bad RX Length %d\n,
+  __func__, size);
+   return 0;
+   }
+   sr_skb = netdev_alloc_skb_ip_align(dev-net, size);
+   if (!sr_skb)
+   return 0;
+
+   skb_put(sr_skb, size);
+  

[PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 Device Driver Support

2014-01-28 Thread liujunliang_ljl
From: Liu Junliang 


Signed-off-by: Liu Junliang 
---
 drivers/net/usb/Kconfig  |   16 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9800.c |  874 ++
 drivers/net/usb/sr9800.h |  202 +++
 4 files changed, 1093 insertions(+)
 create mode 100644 drivers/net/usb/sr9800.c
 create mode 100644 drivers/net/usb/sr9800.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 47b0f73..2551bf6 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -291,6 +291,22 @@ config USB_NET_SR9700
  This option adds support for CoreChip-sz SR9700 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9800
+   tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
+   depends on USB_USBNET
+   select CRC32
+   default y
+   ---help---
+ Say Y if you want to use one of the following 100Mbps USB Ethernet
+ device based on the CoreChip-sz SR9800 chip.
+
+ This driver makes the adapter appear as a normal Ethernet interface,
+ typically on eth0, if it is the only ethernet device, or perhaps on
+ eth1, if you have a PCI or ISA ethernet card installed.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sr9800.
+
 config USB_NET_SMSC75XX
tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e8..433f0a0 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER)+= cdc_ether.o r815x.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
 obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
+obj-$(CONFIG_USB_NET_SR9800)   += sr9800.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000..ab15973
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,874 @@
+/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
+ *
+ * Author : Liu Junliang 
+ *
+ * Based on asix_common.c, asix_devices.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.*
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "sr9800.h"
+
+static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+   u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
+ data, size);
+   if ((err != size) && (err >= 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
+ data, size);
+   if ((err != size) && (err >= 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static void
+sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+  u16 size, void *data)
+{
+   usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
+  size);
+}
+
+static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+{
+   int offset = 0;
+
+   while (offset + sizeof(u32) < skb->len) {
+   struct sk_buff *sr_skb;
+   u16 size;
+   u32 header = get_unaligned_le32(skb->data + offset);
+
+   offset += sizeof(u32);
+   /* get the packet length */
+   size = (u16) (header & 0x7ff);
+   if (size != ((~header >> 16) & 0x07ff)) {
+   netdev_err(dev->net,
+  "sr_rx_fixup() Bad Header Length\n");
+   return 0;
+   }
+
+   if ((size > dev->net->mtu + ETH_HLEN + VLAN_HLEN) ||
+   (size + offset > skb->len)) {
+   netdev_err(dev->net,
+  "sr_rx_fixup() Bad RX Length %d\n", size);
+   return 0;
+   }
+   sr_skb = netdev_alloc_skb_ip_align(dev->net, size);
+   if (!sr_skb)
+   return 0;
+
+   skb_put(sr_skb, size);
+   memcpy(sr_skb->data, skb->data + offset, size);
+   usbnet_skb_return(dev, sr_skb);
+
+   offset += (size + 1) & 0xfffe;
+   }
+
+   if (skb->len != offset) {
+   

[PATCH] USB2NET : SR9800 : One chip USB2.0 USB2NET SR9800 Device Driver Support

2014-01-28 Thread liujunliang_ljl
From: Liu Junliang liujunliang_...@163.com


Signed-off-by: Liu Junliang liujunliang_...@163.com
---
 drivers/net/usb/Kconfig  |   16 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9800.c |  874 ++
 drivers/net/usb/sr9800.h |  202 +++
 4 files changed, 1093 insertions(+)
 create mode 100644 drivers/net/usb/sr9800.c
 create mode 100644 drivers/net/usb/sr9800.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 47b0f73..2551bf6 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -291,6 +291,22 @@ config USB_NET_SR9700
  This option adds support for CoreChip-sz SR9700 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9800
+   tristate CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices
+   depends on USB_USBNET
+   select CRC32
+   default y
+   ---help---
+ Say Y if you want to use one of the following 100Mbps USB Ethernet
+ device based on the CoreChip-sz SR9800 chip.
+
+ This driver makes the adapter appear as a normal Ethernet interface,
+ typically on eth0, if it is the only ethernet device, or perhaps on
+ eth1, if you have a PCI or ISA ethernet card installed.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sr9800.
+
 config USB_NET_SMSC75XX
tristate SMSC LAN75XX based USB 2.0 gigabit ethernet devices
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index b17b5e8..433f0a0 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_NET_CDCETHER)+= cdc_ether.o r815x.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
 obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
+obj-$(CONFIG_USB_NET_SR9800)   += sr9800.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
new file mode 100644
index 000..ab15973
--- /dev/null
+++ b/drivers/net/usb/sr9800.c
@@ -0,0 +1,874 @@
+/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices
+ *
+ * Author : Liu Junliang liujunliang_...@163.com
+ *
+ * Based on asix_common.c, asix_devices.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed as is without any warranty of any
+ * kind, whether express or implied.*
+ */
+
+#include linux/module.h
+#include linux/kmod.h
+#include linux/init.h
+#include linux/netdevice.h
+#include linux/etherdevice.h
+#include linux/ethtool.h
+#include linux/workqueue.h
+#include linux/mii.h
+#include linux/usb.h
+#include linux/crc32.h
+#include linux/usb/usbnet.h
+#include linux/slab.h
+#include linux/if_vlan.h
+
+#include sr9800.h
+
+static int sr_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+   u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, cmd, SR_REQ_RD_REG, value, index,
+ data, size);
+   if ((err != size)  (err = 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static int sr_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+u16 size, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, cmd, SR_REQ_WR_REG, value, index,
+ data, size);
+   if ((err != size)  (err = 0))
+   err = -EINVAL;
+
+   return err;
+}
+
+static void
+sr_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
+  u16 size, void *data)
+{
+   usbnet_write_cmd_async(dev, cmd, SR_REQ_WR_REG, value, index, data,
+  size);
+}
+
+static int sr_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+{
+   int offset = 0;
+
+   while (offset + sizeof(u32)  skb-len) {
+   struct sk_buff *sr_skb;
+   u16 size;
+   u32 header = get_unaligned_le32(skb-data + offset);
+
+   offset += sizeof(u32);
+   /* get the packet length */
+   size = (u16) (header  0x7ff);
+   if (size != ((~header  16)  0x07ff)) {
+   netdev_err(dev-net,
+  sr_rx_fixup() Bad Header Length\n);
+   return 0;
+   }
+
+   if ((size  dev-net-mtu + ETH_HLEN + VLAN_HLEN) ||
+   (size + offset  skb-len)) {
+   netdev_err(dev-net,
+  sr_rx_fixup() Bad RX Length %d\n, size);
+   return 0;
+   }
+   sr_skb = netdev_alloc_skb_ip_align(dev-net, size);
+   if (!sr_skb)
+   return 0;
+
+   skb_put(sr_skb, size);
+   

Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver Support

2013-09-22 Thread liujunliang_ljl
Dear Miller :

I'm sorry to trouble you that How about the process for 
SR9700 Device Driver release?

Thanks a lot.


2013-09-22 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2013-09-04  10:27:14 
收件人: liujunliang_ljl 
抄送: horms; joe; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver 
Support 
 
From: liujunliang_...@163.com
Date: Sun,  1 Sep 2013 19:38:08 +0800
> From: Liu Junliang 
> 
> Signed-off-by: Liu Junliang 
Applied, thanks.


Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver Support

2013-09-22 Thread liujunliang_ljl
Dear Miller :

I'm sorry to trouble you that How about the process for 
SR9700 Device Driver release?

Thanks a lot.


2013-09-22 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2013-09-04  10:27:14 
收件人: liujunliang_ljl 
抄送: horms; joe; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver 
Support 
 
From: liujunliang_...@163.com
Date: Sun,  1 Sep 2013 19:38:08 +0800
 From: Liu Junliang liujunliang_...@163.com
 
 Signed-off-by: Liu Junliang liujunliang_...@163.com
Applied, thanks.


Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver Support

2013-09-03 Thread liujunliang_ljl
Dear David Miller :

Thanks a lot.

I'm sorry that I just wonder to know which kernel 
version will release this driver, thanks again. 


2013-09-04 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2013-09-04  10:27:14 
收件人: liujunliang_ljl 
抄送: horms; joe; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver 
Support 
 
From: liujunliang_...@163.com
Date: Sun,  1 Sep 2013 19:38:08 +0800
> From: Liu Junliang 
> 
> Signed-off-by: Liu Junliang 
Applied, thanks.
N�Р骒r��yb�X�肚�v�^�)藓{.n�+�伐�{��赙zXФ�≤�}��财�z�:+v�����赙zZ+��+zf"�h���~i���z��wア�?�ㄨ��&�)撷f��^j谦y�m��@A�a囤�
0鹅h���i

Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver Support

2013-09-03 Thread liujunliang_ljl
Dear David Miller :

Thanks a lot.

I'm sorry that I just wonder to know which kernel 
version will release this driver, thanks again. 


2013-09-04 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2013-09-04  10:27:14 
收件人: liujunliang_ljl 
抄送: horms; joe; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver 
Support 
 
From: liujunliang_...@163.com
Date: Sun,  1 Sep 2013 19:38:08 +0800
 From: Liu Junliang liujunliang_...@163.com
 
 Signed-off-by: Liu Junliang liujunliang_...@163.com
Applied, thanks.
N�Р骒r��yb�X�肚�v�^�)藓{.n�+�伐�{��赙zXФ�≤�}��财�z�j:+v�����赙zZ+��+zf"�h���~i���z��wア�?�ㄨ���)撷f��^j谦y�m��@A�a囤�
0鹅h���i

[PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support

2013-09-01 Thread liujunliang_ljl
From: Liu Junliang 


Signed-off-by: Liu Junliang 
---
 drivers/net/usb/Kconfig  |8 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9700.c |  560 ++
 drivers/net/usb/sr9700.h |  173 ++
 4 files changed, 742 insertions(+)
 create mode 100644 drivers/net/usb/sr9700.c
 create mode 100644 drivers/net/usb/sr9700.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 287cc62..a94b196 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -272,6 +272,14 @@ config USB_NET_DM9601
  This option adds support for Davicom DM9601 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9700
+   tristate "CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices"
+   depends on USB_USBNET
+   select CRC32
+   help
+ This option adds support for CoreChip-sz SR9700 based USB 1.1
+ 10/100 Ethernet adapters.
+
 config USB_NET_SMSC75XX
tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index 9ab5c9d..bba87a2 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_USB_NET_AX88179_178A)  += ax88179_178a.o
 obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
+obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
new file mode 100644
index 000..7ec3e0e
--- /dev/null
+++ b/drivers/net/usb/sr9700.c
@@ -0,0 +1,560 @@
+/*
+ * CoreChip-sz SR9700 one chip USB 1.1 Ethernet Devices
+ *
+ * Author : Liu Junliang 
+ *
+ * Based on dm9601.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "sr9700.h"
+
+static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG, 0, reg, data,
+ length);
+   if ((err != length) && (err >= 0))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG, 0, reg, data,
+  length);
+   if ((err >= 0) && (err < length))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value)
+{
+   return sr_read(dev, reg, 1, value);
+}
+
+static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
+{
+   return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   value, reg, NULL, 0);
+}
+
+static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  0, reg, data, length);
+}
+
+static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  value, reg, NULL, 0);
+}
+
+static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)
+{
+   int i;
+
+   for (i = 0; i < SR_SHARE_TIMEOUT; i++) {
+   u8 tmp = 0;
+   int ret;
+
+   udelay(1);
+   ret = sr_read_reg(dev, EPCR, );
+   if (ret < 0)
+   return ret;
+
+   /* ready */
+   if (!(tmp & EPCR_ERRE))
+   return 0;
+   }
+
+   netdev_err(dev->net, "%s write timed out!\n", phy ? "phy" : "eeprom");
+
+   return -EIO;
+}
+
+static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg,
+ __le16 *value)
+{
+   int ret;
+
+   mutex_lock(>phy_mutex);
+
+   sr_write_reg(dev, EPAR, phy ? (reg | EPAR_PHY_ADR) : reg);
+   sr_write_reg(dev, EPCR, phy ? (EPCR_EPOS | EPCR_ERPRR) : EPCR_ERPRR);
+
+   ret = wait_phy_eeprom_ready(dev, phy);
+   if (ret < 0)
+   goto out_unlock;
+
+   sr_write_reg(dev, EPCR, 0x0);
+   ret = sr_read(dev, EPDR, 2, value);
+
+   netdev_dbg(dev->net, "read shared %d 0x%02x returned 0x%04x, %d\n",
+  phy, reg, *value, ret);
+
+out_unlock:
+   mutex_unlock(>phy_mutex);
+   return ret;
+}
+
+static int sr_share_write_word(struct usbnet *dev, int phy, u8 reg,
+  __le16 value)
+{
+   int ret;
+
+   

[PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support

2013-09-01 Thread liujunliang_ljl
From: Liu Junliang liujunliang_...@163.com


Signed-off-by: Liu Junliang liujunliang_...@163.com
---
 drivers/net/usb/Kconfig  |8 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9700.c |  560 ++
 drivers/net/usb/sr9700.h |  173 ++
 4 files changed, 742 insertions(+)
 create mode 100644 drivers/net/usb/sr9700.c
 create mode 100644 drivers/net/usb/sr9700.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 287cc62..a94b196 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -272,6 +272,14 @@ config USB_NET_DM9601
  This option adds support for Davicom DM9601 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9700
+   tristate CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices
+   depends on USB_USBNET
+   select CRC32
+   help
+ This option adds support for CoreChip-sz SR9700 based USB 1.1
+ 10/100 Ethernet adapters.
+
 config USB_NET_SMSC75XX
tristate SMSC LAN75XX based USB 2.0 gigabit ethernet devices
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index 9ab5c9d..bba87a2 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_USB_NET_AX88179_178A)  += ax88179_178a.o
 obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
+obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
new file mode 100644
index 000..7ec3e0e
--- /dev/null
+++ b/drivers/net/usb/sr9700.c
@@ -0,0 +1,560 @@
+/*
+ * CoreChip-sz SR9700 one chip USB 1.1 Ethernet Devices
+ *
+ * Author : Liu Junliang liujunliang_...@163.com
+ *
+ * Based on dm9601.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed as is without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include linux/module.h
+#include linux/sched.h
+#include linux/stddef.h
+#include linux/init.h
+#include linux/netdevice.h
+#include linux/etherdevice.h
+#include linux/ethtool.h
+#include linux/mii.h
+#include linux/usb.h
+#include linux/crc32.h
+#include linux/usb/usbnet.h
+
+#include sr9700.h
+
+static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG, 0, reg, data,
+ length);
+   if ((err != length)  (err = 0))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG, 0, reg, data,
+  length);
+   if ((err = 0)  (err  length))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value)
+{
+   return sr_read(dev, reg, 1, value);
+}
+
+static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
+{
+   return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   value, reg, NULL, 0);
+}
+
+static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  0, reg, data, length);
+}
+
+static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  value, reg, NULL, 0);
+}
+
+static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)
+{
+   int i;
+
+   for (i = 0; i  SR_SHARE_TIMEOUT; i++) {
+   u8 tmp = 0;
+   int ret;
+
+   udelay(1);
+   ret = sr_read_reg(dev, EPCR, tmp);
+   if (ret  0)
+   return ret;
+
+   /* ready */
+   if (!(tmp  EPCR_ERRE))
+   return 0;
+   }
+
+   netdev_err(dev-net, %s write timed out!\n, phy ? phy : eeprom);
+
+   return -EIO;
+}
+
+static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg,
+ __le16 *value)
+{
+   int ret;
+
+   mutex_lock(dev-phy_mutex);
+
+   sr_write_reg(dev, EPAR, phy ? (reg | EPAR_PHY_ADR) : reg);
+   sr_write_reg(dev, EPCR, phy ? (EPCR_EPOS | EPCR_ERPRR) : EPCR_ERPRR);
+
+   ret = wait_phy_eeprom_ready(dev, phy);
+   if (ret  0)
+   goto out_unlock;
+
+   sr_write_reg(dev, EPCR, 0x0);
+   ret = sr_read(dev, EPDR, 2, value);
+
+   netdev_dbg(dev-net, read shared %d 0x%02x returned 0x%04x, %d\n,
+  phy, reg, *value, ret);
+
+out_unlock:
+   

Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support

2013-08-28 Thread liujunliang_ljl
Dear David : 

Thanks a lot. please check the patch. thanks again.


2013-08-29 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2013-08-29  05:44:06 
收件人: liujunliang_ljl 
抄送: horms; joe; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver 
Support 
 
From: liujunliang_...@163.com
Date: Sat, 24 Aug 2013 19:26:00 +0800
> From: liujl 
Your proper name is not "liujl", please put something more reasonable
here and also in your Signoff.
Also, integrate Joe Perches's white space fixes into this patch as part
of your resubmission.
Thank you.


[PATCH] USB2NET : SR9700 : One Chip USB 1.1 USB2NET SR9700 Device Driver Support

2013-08-28 Thread liujunliang_ljl
From: Liu Junliang 


Signed-off-by: Liu Junliang 
---
 drivers/net/usb/Kconfig  |8 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9700.c |  558 ++
 drivers/net/usb/sr9700.h |  172 ++
 4 files changed, 739 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/usb/sr9700.c
 create mode 100644 drivers/net/usb/sr9700.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 287cc62..a94b196 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -272,6 +272,14 @@ config USB_NET_DM9601
  This option adds support for Davicom DM9601 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9700
+   tristate "CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices"
+   depends on USB_USBNET
+   select CRC32
+   help
+ This option adds support for CoreChip-sz SR9700 based USB 1.1
+ 10/100 Ethernet adapters.
+
 config USB_NET_SMSC75XX
tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index 9ab5c9d..bba87a2 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_USB_NET_AX88179_178A)  += ax88179_178a.o
 obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
+obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
new file mode 100644
index 000..76e11f5
--- /dev/null
+++ b/drivers/net/usb/sr9700.c
@@ -0,0 +1,558 @@
+/*
+ * CoreChip-sz SR9700 one chip USB 1.1 Ethernet Devices
+ *
+ * Author : Liu Junliang 
+ *
+ * Based on dm9601.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "sr9700.h"
+
+static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG,
+ 0, reg, data, length);
+   if ((err != length) && (err >= 0))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  0, reg, data, length);
+   if ((err >= 0) && (err < length))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value)
+{
+   return sr_read(dev, reg, 1, value);
+}
+
+static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
+{
+   return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   value, reg, NULL, 0);
+}
+
+static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  0, reg, data, length);
+}
+
+static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  value, reg, NULL, 0);
+}
+
+static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)
+{
+   int i, ret;
+
+   ret = 0;
+   for (i = 0; i < SR_SHARE_TIMEOUT; i++) {
+   u8 tmp = 0;
+
+   udelay(1);
+   ret = sr_read_reg(dev, EPCR, );
+   if (ret < 0)
+   goto out;
+
+   /* ready */
+   if ((tmp & EPCR_ERRE) == 0)
+   break;
+   }
+
+   if (i >= SR_SHARE_TIMEOUT) {
+   netdev_err(dev->net, "%s write timed out!\n",
+  phy ? "phy" : "eeprom");
+   ret = -EIO;
+   goto out;
+   }
+
+out:
+   return ret;
+}
+
+static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg,
+ __le16 *value)
+{
+   int ret;
+
+   mutex_lock(>phy_mutex);
+
+   sr_write_reg(dev, EPAR, phy ? (reg | 0x40) : reg);
+   sr_write_reg(dev, EPCR, phy ? 0xc : 0x4);
+
+   ret = wait_phy_eeprom_ready(dev, phy);
+   if (ret < 0)
+   goto out;
+
+   sr_write_reg(dev, EPCR, 0x0);
+   ret = sr_read(dev, EPDR, 2, value);
+
+   netdev_dbg(dev->net, "read shared %d 0x%02x returned 0x%04x, %d\n",
+  phy, reg, *value, ret);
+
+out:
+   mutex_unlock(>phy_mutex);
+   return ret;
+}
+
+static int sr_share_write_word(struct usbnet *dev, int phy, 

[PATCH] USB2NET : SR9700 : One Chip USB 1.1 USB2NET SR9700 Device Driver Support

2013-08-28 Thread liujunliang_ljl
From: Liu Junliang liujunliang_...@163.com


Signed-off-by: Liu Junliang liujunliang_...@163.com
---
 drivers/net/usb/Kconfig  |8 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9700.c |  558 ++
 drivers/net/usb/sr9700.h |  172 ++
 4 files changed, 739 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/usb/sr9700.c
 create mode 100644 drivers/net/usb/sr9700.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 287cc62..a94b196 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -272,6 +272,14 @@ config USB_NET_DM9601
  This option adds support for Davicom DM9601 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9700
+   tristate CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices
+   depends on USB_USBNET
+   select CRC32
+   help
+ This option adds support for CoreChip-sz SR9700 based USB 1.1
+ 10/100 Ethernet adapters.
+
 config USB_NET_SMSC75XX
tristate SMSC LAN75XX based USB 2.0 gigabit ethernet devices
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index 9ab5c9d..bba87a2 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_USB_NET_AX88179_178A)  += ax88179_178a.o
 obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
+obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
new file mode 100644
index 000..76e11f5
--- /dev/null
+++ b/drivers/net/usb/sr9700.c
@@ -0,0 +1,558 @@
+/*
+ * CoreChip-sz SR9700 one chip USB 1.1 Ethernet Devices
+ *
+ * Author : Liu Junliang liujunliang_...@163.com
+ *
+ * Based on dm9601.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed as is without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include linux/module.h
+#include linux/sched.h
+#include linux/stddef.h
+#include linux/init.h
+#include linux/netdevice.h
+#include linux/etherdevice.h
+#include linux/ethtool.h
+#include linux/mii.h
+#include linux/usb.h
+#include linux/crc32.h
+#include linux/usb/usbnet.h
+
+#include sr9700.h
+
+static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG,
+ 0, reg, data, length);
+   if ((err != length)  (err = 0))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  0, reg, data, length);
+   if ((err = 0)  (err  length))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value)
+{
+   return sr_read(dev, reg, 1, value);
+}
+
+static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
+{
+   return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   value, reg, NULL, 0);
+}
+
+static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  0, reg, data, length);
+}
+
+static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+  value, reg, NULL, 0);
+}
+
+static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)
+{
+   int i, ret;
+
+   ret = 0;
+   for (i = 0; i  SR_SHARE_TIMEOUT; i++) {
+   u8 tmp = 0;
+
+   udelay(1);
+   ret = sr_read_reg(dev, EPCR, tmp);
+   if (ret  0)
+   goto out;
+
+   /* ready */
+   if ((tmp  EPCR_ERRE) == 0)
+   break;
+   }
+
+   if (i = SR_SHARE_TIMEOUT) {
+   netdev_err(dev-net, %s write timed out!\n,
+  phy ? phy : eeprom);
+   ret = -EIO;
+   goto out;
+   }
+
+out:
+   return ret;
+}
+
+static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg,
+ __le16 *value)
+{
+   int ret;
+
+   mutex_lock(dev-phy_mutex);
+
+   sr_write_reg(dev, EPAR, phy ? (reg | 0x40) : reg);
+   sr_write_reg(dev, EPCR, phy ? 0xc : 0x4);
+
+   ret = wait_phy_eeprom_ready(dev, phy);
+   if (ret  0)
+   goto out;
+
+   sr_write_reg(dev, EPCR, 0x0);
+   ret = sr_read(dev, EPDR, 2, value);
+
+   netdev_dbg(dev-net, read shared 

Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support

2013-08-28 Thread liujunliang_ljl
Dear David : 

Thanks a lot. please check the patch. thanks again.


2013-08-29 



liujunliang_ljl 



发件人: David Miller 
发送时间: 2013-08-29  05:44:06 
收件人: liujunliang_ljl 
抄送: horms; joe; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver 
Support 
 
From: liujunliang_...@163.com
Date: Sat, 24 Aug 2013 19:26:00 +0800
 From: liujl liujunliang_...@163.com
Your proper name is not liujl, please put something more reasonable
here and also in your Signoff.
Also, integrate Joe Perches's white space fixes into this patch as part
of your resubmission.
Thank you.


Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support

2013-08-25 Thread liujunliang_ljl
DearJoe :

I'm sorry to ask you that, do you need me to merge the 
patch and re-send it again.

And which version of kernel will release this driver.

Thanks a lot and apologizing for making you trouble.

Thanks again.


2013-08-26 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2013-08-25  02:15:19 
收件人: liujunliang_ljl 
抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver 
Support 
 
Some whitespace and neatening fixups.
Some conversions from 4 indent tabs to normal tabs
Signed-off-by: Joe Perches 
---
Just doing this instead of commenting about spacing
again.
 drivers/net/usb/sr9700.c | 127 +--
 1 file changed, 67 insertions(+), 60 deletions(-)
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
index 27c86ec..4262b9d 100644
--- a/drivers/net/usb/sr9700.c
+++ b/drivers/net/usb/sr9700.c
@@ -29,7 +29,7 @@ static int sr_read(struct usbnet *dev, u8 reg, u16 length, 
void *data)
  int err;

  err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG,
- 0, reg, data, length);
+   0, reg, data, length);
  if ((err != length) && (err >= 0))
  err = -EINVAL;
  return err;
@@ -40,7 +40,7 @@ static int sr_write(struct usbnet *dev, u8 reg, u16 length, 
void *data)
  int err;

  err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
- 0, reg, data, length);
+0, reg, data, length);
  if ((err >= 0) && (err < length))
  err = -EINVAL;
  return err;
@@ -54,19 +54,19 @@ static int sr_read_reg(struct usbnet *dev, u8 reg, u8 
*value)
 static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
 {
  return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
- value, reg, NULL, 0);
+ value, reg, NULL, 0);
 }

 static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data)
 {
  usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
- 0, reg, data, length);
+0, reg, data, length);
 }

 static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
 {
  usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
- value, reg, NULL, 0);
+value, reg, NULL, 0);
 }

 static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)
@@ -89,7 +89,7 @@ static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)

  if (i >= SR_SHARE_TIMEOUT) {
  netdev_err(dev->net, "%s write timed out!\n",
- phy ? "phy" : "eeprom");
+phy ? "phy" : "eeprom");
  ret = -EIO;
  goto out;
  }
@@ -98,7 +98,8 @@ out:
  return ret;
 }

-static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 
*value)
+static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg,
+   __le16 *value)
 {
  int ret;

@@ -115,14 +116,15 @@ static int sr_share_read_word(struct usbnet *dev, int 
phy, u8 reg, __le16 *value
  ret = sr_read(dev, EPDR, 2, value);

  netdev_dbg(dev->net, "read shared %d 0x%02x returned 0x%04x, %d\n",
- phy, reg, *value, ret);
+phy, reg, *value, ret);

 out:
  mutex_unlock(>phy_mutex);
  return ret;
 }

-static int sr_share_write_word(struct usbnet *dev, int phy, u8 reg, __le16 
value)
+static int sr_share_write_word(struct usbnet *dev, int phy, u8 reg,
+__le16 value)
 {
  int ret;

@@ -156,7 +158,8 @@ static int sr9700_get_eeprom_len(struct net_device *dev)
  return SR_EEPROM_LEN;
 }

-static int sr9700_get_eeprom(struct net_device *net, struct ethtool_eeprom 
*eeprom, u8 *data)
+static int sr9700_get_eeprom(struct net_device *net,
+  struct ethtool_eeprom *eeprom, u8 *data)
 {
  struct usbnet *dev = netdev_priv(net);
  __le16 *ebuf = (__le16 *)data;
@@ -168,7 +171,8 @@ static int sr9700_get_eeprom(struct net_device *net, struct 
ethtool_eeprom *eepr
  return -EINVAL;

  for (i = 0; i < eeprom->len / 2; i++)
- ret = sr_read_eeprom_word(dev, eeprom->offset / 2 + i, [i]);
+ ret = sr_read_eeprom_word(dev, eeprom->offset / 2 + i,
+   [i]);

  return ret;
 }
@@ -199,12 +203,13 @@ static int sr_mdio_read(struct net_device *netdev, int 
phy_id, int loc)
  res = le16_to_cpu(res) & ~BMSR_LSTATUS;

  netdev_dbg(dev->net, "sr_mdio_read() phy_id=0x%02x, loc=0x%02x, 
returns=0x%04x\n",
- phy_id, loc, res);
+phy_id, loc, res);

  return res;
 }

-static void sr_mdio_write(struct net_device *netdev, int phy_id, int loc, int 
val)
+static void sr_mdio_write(struct net_device *netdev, int phy_id, int loc,
+   int val)
 {
  struct usbnet *dev = netdev_priv(netdev);
  __le16 res = cpu_to_le16(val);
@@ -215,7 +220,7 @@ static void sr_mdio_write(struct net_device *netdev, int 
phy_id, int loc, int va
  }

  netdev_dbg(dev->net, "sr_mdio_write() phy_id=0x%02x, loc=0x%02x, 
val=0x%04x\n",
- phy_id, loc, val);
+phy_id, loc, val);

  sr_share_write_word(dev, 1, loc, res)

Re: Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver Support

2013-08-25 Thread liujunliang_ljl
Dear all :

Thanks a lot.


2013-08-26 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2013-08-26  10:19:35 
收件人: liujunliang_ljl 
抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device 
Driver Support 
 
On Mon, 2013-08-26 at 10:14 +0800, liujunliang_ljl wrote:
> do you need me to merge the patch and re-send it again.
I do not.
> And which version of kernel will release this driver.
No idea.
That's up to David Miller or Greg KH to pick
up the driver and maybe take the follow-on
patch I sent.
I just sent the patch because you seemed to
have a bit of difficulty integrating the
suggestions others were giving you.
> Thanks a lot and apologizing for making you trouble.
Oh, no worries.  It was a trifle.
cheers, Joe
.


Re: Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device Driver Support

2013-08-25 Thread liujunliang_ljl
Dear all :

Thanks a lot.


2013-08-26 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2013-08-26  10:19:35 
收件人: liujunliang_ljl 
抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NETSR9700Device 
Driver Support 
 
On Mon, 2013-08-26 at 10:14 +0800, liujunliang_ljl wrote:
 do you need me to merge the patch and re-send it again.
I do not.
 And which version of kernel will release this driver.
No idea.
That's up to David Miller or Greg KH to pick
up the driver and maybe take the follow-on
patch I sent.
I just sent the patch because you seemed to
have a bit of difficulty integrating the
suggestions others were giving you.
 Thanks a lot and apologizing for making you trouble.
Oh, no worries.  It was a trifle.
cheers, Joe
.


Re: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support

2013-08-25 Thread liujunliang_ljl
DearJoe :

I'm sorry to ask you that, do you need me to merge the 
patch and re-send it again.

And which version of kernel will release this driver.

Thanks a lot and apologizing for making you trouble.

Thanks again.


2013-08-26 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2013-08-25  02:15:19 
收件人: liujunliang_ljl 
抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 
主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver 
Support 
 
Some whitespace and neatening fixups.
Some conversions from 4 indent tabs to normal tabs
Signed-off-by: Joe Perches j...@perches.com
---
Just doing this instead of commenting about spacing
again.
 drivers/net/usb/sr9700.c | 127 +--
 1 file changed, 67 insertions(+), 60 deletions(-)
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
index 27c86ec..4262b9d 100644
--- a/drivers/net/usb/sr9700.c
+++ b/drivers/net/usb/sr9700.c
@@ -29,7 +29,7 @@ static int sr_read(struct usbnet *dev, u8 reg, u16 length, 
void *data)
  int err;

  err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG,
- 0, reg, data, length);
+   0, reg, data, length);
  if ((err != length)  (err = 0))
  err = -EINVAL;
  return err;
@@ -40,7 +40,7 @@ static int sr_write(struct usbnet *dev, u8 reg, u16 length, 
void *data)
  int err;

  err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
- 0, reg, data, length);
+0, reg, data, length);
  if ((err = 0)  (err  length))
  err = -EINVAL;
  return err;
@@ -54,19 +54,19 @@ static int sr_read_reg(struct usbnet *dev, u8 reg, u8 
*value)
 static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
 {
  return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
- value, reg, NULL, 0);
+ value, reg, NULL, 0);
 }

 static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data)
 {
  usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
- 0, reg, data, length);
+0, reg, data, length);
 }

 static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
 {
  usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
- value, reg, NULL, 0);
+value, reg, NULL, 0);
 }

 static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)
@@ -89,7 +89,7 @@ static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)

  if (i = SR_SHARE_TIMEOUT) {
  netdev_err(dev-net, %s write timed out!\n,
- phy ? phy : eeprom);
+phy ? phy : eeprom);
  ret = -EIO;
  goto out;
  }
@@ -98,7 +98,8 @@ out:
  return ret;
 }

-static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 
*value)
+static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg,
+   __le16 *value)
 {
  int ret;

@@ -115,14 +116,15 @@ static int sr_share_read_word(struct usbnet *dev, int 
phy, u8 reg, __le16 *value
  ret = sr_read(dev, EPDR, 2, value);

  netdev_dbg(dev-net, read shared %d 0x%02x returned 0x%04x, %d\n,
- phy, reg, *value, ret);
+phy, reg, *value, ret);

 out:
  mutex_unlock(dev-phy_mutex);
  return ret;
 }

-static int sr_share_write_word(struct usbnet *dev, int phy, u8 reg, __le16 
value)
+static int sr_share_write_word(struct usbnet *dev, int phy, u8 reg,
+__le16 value)
 {
  int ret;

@@ -156,7 +158,8 @@ static int sr9700_get_eeprom_len(struct net_device *dev)
  return SR_EEPROM_LEN;
 }

-static int sr9700_get_eeprom(struct net_device *net, struct ethtool_eeprom 
*eeprom, u8 *data)
+static int sr9700_get_eeprom(struct net_device *net,
+  struct ethtool_eeprom *eeprom, u8 *data)
 {
  struct usbnet *dev = netdev_priv(net);
  __le16 *ebuf = (__le16 *)data;
@@ -168,7 +171,8 @@ static int sr9700_get_eeprom(struct net_device *net, struct 
ethtool_eeprom *eepr
  return -EINVAL;

  for (i = 0; i  eeprom-len / 2; i++)
- ret = sr_read_eeprom_word(dev, eeprom-offset / 2 + i, ebuf[i]);
+ ret = sr_read_eeprom_word(dev, eeprom-offset / 2 + i,
+   ebuf[i]);

  return ret;
 }
@@ -199,12 +203,13 @@ static int sr_mdio_read(struct net_device *netdev, int 
phy_id, int loc)
  res = le16_to_cpu(res)  ~BMSR_LSTATUS;

  netdev_dbg(dev-net, sr_mdio_read() phy_id=0x%02x, loc=0x%02x, 
returns=0x%04x\n,
- phy_id, loc, res);
+phy_id, loc, res);

  return res;
 }

-static void sr_mdio_write(struct net_device *netdev, int phy_id, int loc, int 
val)
+static void sr_mdio_write(struct net_device *netdev, int phy_id, int loc,
+   int val)
 {
  struct usbnet *dev = netdev_priv(netdev);
  __le16 res = cpu_to_le16(val);
@@ -215,7 +220,7 @@ static void sr_mdio_write(struct net_device *netdev, int 
phy_id, int loc, int va
  }

  netdev_dbg(dev-net, sr_mdio_write() phy_id=0x%02x, loc=0x%02x, 
val=0x%04x\n,
- phy_id, loc, val);
+phy_id, loc, val);

  sr_share_write_word(dev, 1, loc, res);
 }
@@ -242,15 +247,15 @@ static int sr9700_ioctl(struct net_device *net, struct 
ifreq *rq, int cmd)
 }

 static const struct ethtool_ops

[PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700 Device Driver Support

2013-08-24 Thread liujunliang_ljl
From: liujl 


Signed-off-by: liujl 
---
 drivers/net/usb/Kconfig  |8 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9700.c |  551 ++
 drivers/net/usb/sr9700.h |  172 ++
 4 files changed, 732 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/usb/sr9700.c
 create mode 100644 drivers/net/usb/sr9700.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 287cc62..a94b196 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -272,6 +272,14 @@ config USB_NET_DM9601
  This option adds support for Davicom DM9601 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9700
+   tristate "CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices"
+   depends on USB_USBNET
+   select CRC32
+   help
+ This option adds support for CoreChip-sz SR9700 based USB 1.1
+ 10/100 Ethernet adapters.
+
 config USB_NET_SMSC75XX
tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index 9ab5c9d..bba87a2 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_USB_NET_AX88179_178A)  += ax88179_178a.o
 obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
+obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
new file mode 100644
index 000..27c86ec
--- /dev/null
+++ b/drivers/net/usb/sr9700.c
@@ -0,0 +1,551 @@
+/*
+ * CoreChip-sz SR9700 one chip USB 1.1 Ethernet Devices
+ *
+ * Author : liujl 
+ *
+ * Based on dm9601.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "sr9700.h"
+
+static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG,
+   0, reg, data, length);
+   if ((err != length) && (err >= 0))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   0, reg, data, length);
+   if ((err >= 0) && (err < length))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value)
+{
+   return sr_read(dev, reg, 1, value);
+}
+
+static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
+{
+   return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   value, reg, NULL, 0);
+}
+
+static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   0, reg, data, length);
+}
+
+static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   value, reg, NULL, 0);
+}
+
+static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)
+{
+   int i, ret;
+
+   ret = 0;
+   for (i = 0; i < SR_SHARE_TIMEOUT; i++) {
+   u8 tmp = 0;
+
+   udelay(1);
+   ret = sr_read_reg(dev, EPCR, );
+   if (ret < 0)
+   goto out;
+
+   /* ready */
+   if ((tmp & EPCR_ERRE) == 0)
+   break;
+   }
+
+   if (i >= SR_SHARE_TIMEOUT) {
+   netdev_err(dev->net, "%s write timed out!\n",
+   phy ? "phy" : "eeprom");
+   ret = -EIO;
+   goto out;
+   }
+
+out:
+   return ret;
+}
+
+static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 
*value)
+{
+   int ret;
+
+   mutex_lock(>phy_mutex);
+
+   sr_write_reg(dev, EPAR, phy ? (reg | 0x40) : reg);
+   sr_write_reg(dev, EPCR, phy ? 0xc : 0x4);
+
+   ret = wait_phy_eeprom_ready(dev, phy);
+   if (ret < 0)
+   goto out;
+
+   sr_write_reg(dev, EPCR, 0x0);
+   ret = sr_read(dev, EPDR, 2, value);
+
+   netdev_dbg(dev->net, "read shared %d 0x%02x returned 0x%04x, %d\n",
+   phy, reg, *value, ret);
+
+out:
+   mutex_unlock(>phy_mutex);
+   return ret;
+}
+
+static int 

[PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700 Device Driver Support

2013-08-24 Thread liujunliang_ljl
From: liujl liujunliang_...@163.com


Signed-off-by: liujl liujunliang_...@163.com
---
 drivers/net/usb/Kconfig  |8 +
 drivers/net/usb/Makefile |1 +
 drivers/net/usb/sr9700.c |  551 ++
 drivers/net/usb/sr9700.h |  172 ++
 4 files changed, 732 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/usb/sr9700.c
 create mode 100644 drivers/net/usb/sr9700.h

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 287cc62..a94b196 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -272,6 +272,14 @@ config USB_NET_DM9601
  This option adds support for Davicom DM9601 based USB 1.1
  10/100 Ethernet adapters.
 
+config USB_NET_SR9700
+   tristate CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices
+   depends on USB_USBNET
+   select CRC32
+   help
+ This option adds support for CoreChip-sz SR9700 based USB 1.1
+ 10/100 Ethernet adapters.
+
 config USB_NET_SMSC75XX
tristate SMSC LAN75XX based USB 2.0 gigabit ethernet devices
depends on USB_USBNET
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index 9ab5c9d..bba87a2 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_USB_NET_AX88179_178A)  += ax88179_178a.o
 obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
 obj-$(CONFIG_USB_NET_CDC_EEM)  += cdc_eem.o
 obj-$(CONFIG_USB_NET_DM9601)   += dm9601.o
+obj-$(CONFIG_USB_NET_SR9700)   += sr9700.o
 obj-$(CONFIG_USB_NET_SMSC75XX) += smsc75xx.o
 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
 obj-$(CONFIG_USB_NET_GL620A)   += gl620a.o
diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
new file mode 100644
index 000..27c86ec
--- /dev/null
+++ b/drivers/net/usb/sr9700.c
@@ -0,0 +1,551 @@
+/*
+ * CoreChip-sz SR9700 one chip USB 1.1 Ethernet Devices
+ *
+ * Author : liujl liujunliang_...@163.com
+ *
+ * Based on dm9601.c
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed as is without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include linux/module.h
+#include linux/sched.h
+#include linux/stddef.h
+#include linux/init.h
+#include linux/netdevice.h
+#include linux/etherdevice.h
+#include linux/ethtool.h
+#include linux/mii.h
+#include linux/usb.h
+#include linux/crc32.h
+#include linux/usb/usbnet.h
+
+#include sr9700.h
+
+static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG,
+   0, reg, data, length);
+   if ((err != length)  (err = 0))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   int err;
+
+   err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   0, reg, data, length);
+   if ((err = 0)  (err  length))
+   err = -EINVAL;
+   return err;
+}
+
+static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value)
+{
+   return sr_read(dev, reg, 1, value);
+}
+
+static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
+{
+   return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   value, reg, NULL, 0);
+}
+
+static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   0, reg, data, length);
+}
+
+static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
+{
+   usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
+   value, reg, NULL, 0);
+}
+
+static int wait_phy_eeprom_ready(struct usbnet *dev, int phy)
+{
+   int i, ret;
+
+   ret = 0;
+   for (i = 0; i  SR_SHARE_TIMEOUT; i++) {
+   u8 tmp = 0;
+
+   udelay(1);
+   ret = sr_read_reg(dev, EPCR, tmp);
+   if (ret  0)
+   goto out;
+
+   /* ready */
+   if ((tmp  EPCR_ERRE) == 0)
+   break;
+   }
+
+   if (i = SR_SHARE_TIMEOUT) {
+   netdev_err(dev-net, %s write timed out!\n,
+   phy ? phy : eeprom);
+   ret = -EIO;
+   goto out;
+   }
+
+out:
+   return ret;
+}
+
+static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 
*value)
+{
+   int ret;
+
+   mutex_lock(dev-phy_mutex);
+
+   sr_write_reg(dev, EPAR, phy ? (reg | 0x40) : reg);
+   sr_write_reg(dev, EPCR, phy ? 0xc : 0x4);
+
+   ret = wait_phy_eeprom_ready(dev, phy);
+   if (ret  0)
+   goto out;
+
+   sr_write_reg(dev, EPCR, 0x0);
+   ret = sr_read(dev, EPDR, 2, value);
+
+   

Re: Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700DeviceDriver into the Linux Kernel

2013-08-22 Thread liujunliang_ljl
Dear all :

Thanks all of you about your attentions and suggestions, and I 
think firstly I should read the documentations carefully.

and then commiting the patch. 

Thanks all of you for your help and welcome all of you to come 
to china.

Thanks again.



2013-08-22 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2013-08-21  19:34:10 
收件人: liujunliang_ljl 
抄送: Francois Romieu; gregkh; sunhecheng; linux-usb; netdev; linux-kernel 
主题: Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700DeviceDriver 
into the Linux Kernel 
 
On Wed, 2013-08-21 at 18:07 +0800, liujunliang_ljl wrote:
>  Thanks a lot and I have been fixed all the problems mentioned above. please 
> check the following patch and thanks again. 
Just trivial comments below:
> diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
[]
> +static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
> +{
> + usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
> + value, reg, NULL, 0);
> +}
> +
> +static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 
> *value)
> +{
[]
> + netdev_dbg(dev->net, "read shared %d 0x%02x returned 0x%04x, %d\n",
> +phy, reg, *value, ret);
You have a lot of code that uses inconsistent
indentation.  Code in drivers/net and drivers/usb/net
generally prefers to use alignment to parenthesis for
multi-line statements
The first could use
usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
   value, reg, NULL, 0);
and the second
netdev_dbg(dev->net, "read shared %d 0x%02x returned 0x%04x, %d\n",
   phy, reg, *value, ret);
Maximal use of 8 space indentation tabs followed by
minimal spaces.
There are many of these above.
> +static int sr9700_get_eeprom(struct net_device *net, struct ethtool_eeprom 
> *eeprom, u8 *data)
[]
> + for (i = 0; i < eeprom->len / 2; i++)
> + ret = sr_read_eeprom_word(dev, eeprom->offset / 2 + i, [i]);
One too many tabs for the second line, a few of these...
[]
> +static int sr_mdio_read(struct net_device *netdev, int phy_id, int loc)
[]
> + if (rc == 1)
> + return le16_to_cpu(res) | BMSR_LSTATUS;
> + else
> + return le16_to_cpu(res) & ~BMSR_LSTATUS;
The code below the returns here is unreachable.
> +
> + netdev_dbg(dev->net,
> +"sr_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n",
> +phy_id, loc, le16_to_cpu(res));
> +
> + return le16_to_cpu(res);
> +}
You might try to use scripts/checkpatch.pl --strict if you
care about these.  It should flag most of these coding
style inconsistencies.
N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�:+v���zZ+��+zf���h���~i���z��w���?�&�)ߢf��^jǫy�m��@A�a���
0��h���i

Re: Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700DeviceDriver into the Linux Kernel

2013-08-22 Thread liujunliang_ljl
Dear all :

Thanks all of you about your attentions and suggestions, and I 
think firstly I should read the documentations carefully.

and then commiting the patch. 

Thanks all of you for your help and welcome all of you to come 
to china.

Thanks again.



2013-08-22 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2013-08-21  19:34:10 
收件人: liujunliang_ljl 
抄送: Francois Romieu; gregkh; sunhecheng; linux-usb; netdev; linux-kernel 
主题: Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700DeviceDriver 
into the Linux Kernel 
 
On Wed, 2013-08-21 at 18:07 +0800, liujunliang_ljl wrote:
  Thanks a lot and I have been fixed all the problems mentioned above. please 
 check the following patch and thanks again. 
Just trivial comments below:
 diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
[]
 +static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
 +{
 + usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
 + value, reg, NULL, 0);
 +}
 +
 +static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 
 *value)
 +{
[]
 + netdev_dbg(dev-net, read shared %d 0x%02x returned 0x%04x, %d\n,
 +phy, reg, *value, ret);
You have a lot of code that uses inconsistent
indentation.  Code in drivers/net and drivers/usb/net
generally prefers to use alignment to parenthesis for
multi-line statements
The first could use
usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
   value, reg, NULL, 0);
and the second
netdev_dbg(dev-net, read shared %d 0x%02x returned 0x%04x, %d\n,
   phy, reg, *value, ret);
Maximal use of 8 space indentation tabs followed by
minimal spaces.
There are many of these above.
 +static int sr9700_get_eeprom(struct net_device *net, struct ethtool_eeprom 
 *eeprom, u8 *data)
[]
 + for (i = 0; i  eeprom-len / 2; i++)
 + ret = sr_read_eeprom_word(dev, eeprom-offset / 2 + i, ebuf[i]);
One too many tabs for the second line, a few of these...
[]
 +static int sr_mdio_read(struct net_device *netdev, int phy_id, int loc)
[]
 + if (rc == 1)
 + return le16_to_cpu(res) | BMSR_LSTATUS;
 + else
 + return le16_to_cpu(res)  ~BMSR_LSTATUS;
The code below the returns here is unreachable.
 +
 + netdev_dbg(dev-net,
 +sr_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n,
 +phy_id, loc, le16_to_cpu(res));
 +
 + return le16_to_cpu(res);
 +}
You might try to use scripts/checkpatch.pl --strict if you
care about these.  It should flag most of these coding
style inconsistencies.
N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�j:+v���zZ+��+zf���h���~i���z��w���?��)ߢf��^jǫy�m��@A�a���
0��h���i

Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into the Linux Kernel

2013-08-21 Thread liujunliang_ljl
* Product ID register */
+#definePID 0x2A/* 0x2A ~ 0x2B 2 bytes for PID 
*/
+/* CHIP Revision register */
+#defineCHIPR   0x2C
+/* 0x2D --> 0xEF unused */
+/* USB Device Address */
+#defineUSBDA   0xF0
+#defineUSBDA_USBFA (0x7F << 0)
+/* RX packet Counter Reg */
+#defineRXC 0xF1
+/* Tx packet Counter & USB Status Reg */
+#defineTXC_USBS0xF2
+#defineTXC_USBS_TXC0   (1 << 0)
+#defineTXC_USBS_TXC1   (1 << 1)
+#defineTXC_USBS_TXC2   (1 << 2)
+#defineTXC_USBS_EP1RDY (1 << 5)
+#define    TXC_USBS_SUSFLAG(1 << 6)
+#defineTXC_USBS_RXFAULT    (1 << 7)
+/* USB Control register */
+#defineUSBC0xF4
+#defineUSBC_EP3NAK (1 << 4)
+#defineUSBC_EP3ACK (1 << 5)
+
+/* Register access commands and flags */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+/* parameters */
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_ADDR_FLAG  0x80
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   /* 2bytes header */
+#defineSR_RX_OVERHEAD  7   /* 3bytes header + 4crc tail */
+
+#endif /* _SR9700_H */





2013-08-21 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2013-08-21  04:58:27 
收件人: Francois Romieu 
抄送: liujunliang_ljl; gregkh; sunhecheng; linux-usb; netdev; linux-kernel 
主题: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into 
the Linux Kernel 
 
On Tue, 2013-08-20 at 22:46 +0200, Francois Romieu wrote:
> liujunliang_ljl  :
> > + if (i >= SR_SHARE_TIMEOUT) {
> > + netdev_err(dev->net, "%s read timed out!", phy ? "phy" : "eeprom");
netdev_, like almost all other printk
messages needs a terminating "\n" newline to
avoid any possible message interleaving by other
printks.
> > + if (!is_valid_ether_addr(addr->sa_data)) {
> > + dev_err(>dev, "not setting invalid mac address %pM\n",
> > + addr->sa_data);
> 
>  dev_err(>dev, "not setting invalid mac address %pM\n",
>  addr->sa_data);
prefer netdev_ to dev_ where possible.
N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�:+v���zZ+��+zf���h���~i���z��w���?�&�)ߢf��^jǫy�m��@A�a���
0��h���i

Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into the Linux Kernel

2013-08-21 Thread liujunliang_ljl
   0x27
+/* Vendor ID register */
+#defineVID 0x28/* 0x28 ~ 0x29 2 bytes for VID 
*/
+/* Product ID register */
+#definePID 0x2A/* 0x2A ~ 0x2B 2 bytes for PID 
*/
+/* CHIP Revision register */
+#defineCHIPR   0x2C
+/* 0x2D --> 0xEF unused */
+/* USB Device Address */
+#defineUSBDA   0xF0
+#defineUSBDA_USBFA (0x7F << 0)
+/* RX packet Counter Reg */
+#defineRXC 0xF1
+/* Tx packet Counter & USB Status Reg */
+#defineTXC_USBS0xF2
+#defineTXC_USBS_TXC0   (1 << 0)
+#defineTXC_USBS_TXC1   (1 << 1)
+#defineTXC_USBS_TXC2   (1 << 2)
+#defineTXC_USBS_EP1RDY (1 << 5)
+#defineTXC_USBS_SUSFLAG(1 << 6)
+#defineTXC_USBS_RXFAULT(1 << 7)
+/* USB Control register */
+#defineUSBC0xF4
+#defineUSBC_EP3NAK (1 << 4)
+#define    USBC_EP3ACK (1 << 5)
+
+/* Register access commands and flags */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+/* parameters */
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_ADDR_FLAG  0x80
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   /* 2bytes header */
+#defineSR_RX_OVERHEAD  7   /* 3bytes header + 4crc tail */
+
+#endif /* _SR9700_H */



2013-08-21 



liujunliang_ljl 



发件人: Francois Romieu 
发送时间: 2013-08-21  04:46:12 
收件人: liujunliang_ljl 
抄送: gregkh; sunhecheng; linux-usb; netdev; linux-kernel 
主题: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into 
the Linux Kernel 
 
liujunliang_ljl  :
[...]
> We want to merge SR9700 device driver into the Linux Kernel. The following
> is the Linux 3.10.7 version patch for SR9700, Please give us the assessment
> and support.
Welcome. Go ahead.
[...]
> diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
> new file mode 100644
> index 000..6a6429a
> --- /dev/null
> +++ b/drivers/net/usb/sr9700.c
[...]
> +static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data)
> +{
> + int err;
> +
> + err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG,
> + 0, reg, data, length);
err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG, 0, reg, data,
  length);
> + if(err != length && err >= 0)
 ^^ missing space
> + err = -EINVAL;
> + return err;
> +}
> +
> +static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data)
> +{
> + int err;
> +
> + err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
> + 0, reg, data, length);
See above.
> + if (err >= 0 && err < length)
> + err = -EINVAL;
> + 
> + return err;
> +}
> +
> +static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value)
> +{
> + return sr_read(dev, reg, 1, value);
> +}
> +
> +static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
> +{
> + return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
> +value, reg, NULL, 0);
Sic.
> +}
> +
> +static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void 
> *data)
> +{
> + usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
> + 0, reg, data, length);
Sic.
> +}
> +
> +static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
> +{
> + usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
> + value, reg, NULL, 0);
Sic.
> +}
> +
> +static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 
> *value)
> +{
> + int ret, i;
> +
> + mutex_lock(>phy_mutex);
> +
> + sr_write_reg(dev, EPAR, phy ? (reg | 0x40) : reg);
> + sr_write_reg(dev, EPCR, phy ? 0xc : 0x4);
> +
> + for (i = 0; i < SR_SHARE_TIMEOUT; i++) {
> + u8 tmp = 0;
> +
> + udelay(1);
> + ret = sr_read_reg(dev, EPCR, );
> + if (ret < 0)
> + goto out;
goto out_unlock;
> +
> + /* ready */
> + if ((tmp & 1) == 0)
if ((tmp & EPCR_ERRE) == 0)
> + break;
> + }
> +
> + if (i >= SR_SHARE_TIMEOUT) {
> + netdev_err(dev->net, "%s read timed out!", phy ? "phy" : "eeprom");
> + ret = -EIO;
> + goto out;
> + }
> +
> + sr_write_reg(dev, EPCR, 0x0);
> + ret = sr_read(dev, EPDR, 2, value);
> +
> + netdev_dbg(dev->net, "

Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into the Linux Kernel

2013-08-21 Thread liujunliang_ljl
TRPAH   0x23
+/* Rx sdram Write Pointer Address Low */
+#defineRWPAL   0x24
+/* Rx sdram Write Pointer Address High */
+#defineRWPAH   0x25
+/* Rx sdram Read Pointer Address Low */
+#defineRRPAL   0x26
+/* Rx sdram Read Pointer Address High */
+#defineRRPAH   0x27
+/* Vendor ID register */
+#defineVID 0x28/* 0x28 ~ 0x29 2 bytes for VID 
*/
+/* Product ID register */
+#definePID 0x2A/* 0x2A ~ 0x2B 2 bytes for PID 
*/
+/* CHIP Revision register */
+#defineCHIPR   0x2C
+/* 0x2D --> 0xEF unused */
+/* USB Device Address */
+#defineUSBDA   0xF0
+#defineUSBDA_USBFA (0x7F << 0)
+/* RX packet Counter Reg */
+#defineRXC 0xF1
+/* Tx packet Counter & USB Status Reg */
+#defineTXC_USBS0xF2
+#defineTXC_USBS_TXC0   (1 << 0)
+#defineTXC_USBS_TXC1   (1 << 1)
+#defineTXC_USBS_TXC2   (1 << 2)
+#defineTXC_USBS_EP1RDY (1 << 5)
+#define    TXC_USBS_SUSFLAG(1 << 6)
+#define    TXC_USBS_RXFAULT(1 << 7)
+/* USB Control register */
+#defineUSBC0xF4
+#defineUSBC_EP3NAK (1 << 4)
+#defineUSBC_EP3ACK     (1 << 5)
+
+/* Register access commands and flags */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+/* parameters */
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_ADDR_FLAG  0x80
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   /* 2bytes header */
+#defineSR_RX_OVERHEAD  7   /* 3bytes header + 4crc tail */
+
+#endif /* _SR9700_H */




2013-08-21 



liujunliang_ljl 



发件人: Ben Hutchings 
发送时间: 2013-08-20  21:36:50 
收件人: liujunliang_ljl 
抄送: gregkh; linux-usb; netdev; linux-kernel; sunhecheng 
主题: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into 
the Linux Kernel 
 
On Tue, 2013-08-20 at 18:50 +0800, liujunliang_ljl wrote:
> Dear Gregkh & all :
> 
>  I am the software engineer Liu Junliang from ShenZhen CoreChips high 
> technology company, on the market of SR9700 chip is designed and owned by us. 
> SR9700 is a type of USB to Ethernet Converter and is compatible with 
> USB 1.1 protocol, We want to merge SR9700 device driver into the Linux 
> Kernel. The following is the Linux 3.10.7 version patch for SR9700, Please 
> give us the assessment and support.
> Thanks a lot.
As this is a net driver, the relevant maintainer is David Miller and not
Greg.
There are some style errors here which can be found using
scripts/checkpatch.pl.  You'll need to fix those and re-submit.  I'll
point out some more problems inline.
> --- /dev/null
> +++ b/drivers/net/usb/sr9700.c
[...]
> +static int sr9700_get_eeprom(struct net_device *net, struct ethtool_eeprom 
> *eeprom, u8 * data)
> +{
> + struct usbnet *dev = netdev_priv(net);
> + __le16 *ebuf = (__le16 *) data;
> + int i;
> +
> + /* access is 16bit */
> + if ((eeprom->offset % 2) || (eeprom->len % 2))
> + return -EINVAL;
You're really supposed to handle these cases by shifting as necessary.
> + for (i = 0; i < eeprom->len / 2; i++) {
> + if (sr_read_eeprom_word(dev, eeprom->offset / 2 + i, [i]) < 0)
> + return -EINVAL;
You should pass up the error code, not substitute -EINVAL.
[...]
> +static void sr9700_get_drvinfo(struct net_device *net, struct 
> ethtool_drvinfo *info)
> +{
> + /* Inherit standard device info */
> + usbnet_get_drvinfo(net, info);
> + info->eedump_len = SR_EEPROM_LEN;
You don't need to set eedump_len; the ethtool core will set it after
calling sr9700_get_eeprom_len().  So you don't need your own
implementation of get_drvinfo at all.
[...]
> +static int sr9700_bind(struct usbnet *dev, struct usb_interface *intf)
> +{
[...]
> + /* read MAC */
> + if (sr_read(dev, PAR, ETH_ALEN, dev->net->dev_addr) < 0) {
> + printk(KERN_ERR "Error reading MAC address\n");
> + ret = -ENODEV;
> + goto out;
> + }
[...]
I think this should read the MAC address from EEPROM and copy it to both
dev_addr to perm_addr.  MAC address changes should not persist if the
driver is reloaded.
Ben.
-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�:+v���zZ+��+zf���h���~i���z��w���?�&�)ߢf��^jǫy�m��@A�a���
0��h���i

Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into the Linux Kernel

2013-08-21 Thread liujunliang_ljl
TXC_USBS_TXC1   (1  1)
+#defineTXC_USBS_TXC2   (1  2)
+#defineTXC_USBS_EP1RDY (1  5)
+#defineTXC_USBS_SUSFLAG(1  6)
+#defineTXC_USBS_RXFAULT(1  7)
+/* USB Control register */
+#defineUSBC0xF4
+#defineUSBC_EP3NAK (1  4)
+#defineUSBC_EP3ACK (1  5)
+
+/* Register access commands and flags */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+/* parameters */
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_ADDR_FLAG  0x80
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   /* 2bytes header */
+#defineSR_RX_OVERHEAD  7   /* 3bytes header + 4crc tail */
+
+#endif /* _SR9700_H */




2013-08-21 



liujunliang_ljl 



发件人: Ben Hutchings 
发送时间: 2013-08-20  21:36:50 
收件人: liujunliang_ljl 
抄送: gregkh; linux-usb; netdev; linux-kernel; sunhecheng 
主题: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into 
the Linux Kernel 
 
On Tue, 2013-08-20 at 18:50 +0800, liujunliang_ljl wrote:
 Dear Gregkh  all :
 
  I am the software engineer Liu Junliang from ShenZhen CoreChips high 
 technology company, on the market of SR9700 chip is designed and owned by us. 
 SR9700 is a type of USB to Ethernet Converter and is compatible with 
 USB 1.1 protocol, We want to merge SR9700 device driver into the Linux 
 Kernel. The following is the Linux 3.10.7 version patch for SR9700, Please 
 give us the assessment and support.
 Thanks a lot.
As this is a net driver, the relevant maintainer is David Miller and not
Greg.
There are some style errors here which can be found using
scripts/checkpatch.pl.  You'll need to fix those and re-submit.  I'll
point out some more problems inline.
 --- /dev/null
 +++ b/drivers/net/usb/sr9700.c
[...]
 +static int sr9700_get_eeprom(struct net_device *net, struct ethtool_eeprom 
 *eeprom, u8 * data)
 +{
 + struct usbnet *dev = netdev_priv(net);
 + __le16 *ebuf = (__le16 *) data;
 + int i;
 +
 + /* access is 16bit */
 + if ((eeprom-offset % 2) || (eeprom-len % 2))
 + return -EINVAL;
You're really supposed to handle these cases by shifting as necessary.
 + for (i = 0; i  eeprom-len / 2; i++) {
 + if (sr_read_eeprom_word(dev, eeprom-offset / 2 + i, ebuf[i])  0)
 + return -EINVAL;
You should pass up the error code, not substitute -EINVAL.
[...]
 +static void sr9700_get_drvinfo(struct net_device *net, struct 
 ethtool_drvinfo *info)
 +{
 + /* Inherit standard device info */
 + usbnet_get_drvinfo(net, info);
 + info-eedump_len = SR_EEPROM_LEN;
You don't need to set eedump_len; the ethtool core will set it after
calling sr9700_get_eeprom_len().  So you don't need your own
implementation of get_drvinfo at all.
[...]
 +static int sr9700_bind(struct usbnet *dev, struct usb_interface *intf)
 +{
[...]
 + /* read MAC */
 + if (sr_read(dev, PAR, ETH_ALEN, dev-net-dev_addr)  0) {
 + printk(KERN_ERR Error reading MAC address\n);
 + ret = -ENODEV;
 + goto out;
 + }
[...]
I think this should read the MAC address from EEPROM and copy it to both
dev_addr to perm_addr.  MAC address changes should not persist if the
driver is reloaded.
Ben.
-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�j:+v���zZ+��+zf���h���~i���z��w���?��)ߢf��^jǫy�m��@A�a���
0��h���i

Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into the Linux Kernel

2013-08-21 Thread liujunliang_ljl
 (1  4)
+#defineUSBC_EP3ACK (1  5)
+
+/* Register access commands and flags */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+/* parameters */
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_ADDR_FLAG  0x80
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   /* 2bytes header */
+#defineSR_RX_OVERHEAD  7   /* 3bytes header + 4crc tail */
+
+#endif /* _SR9700_H */



2013-08-21 



liujunliang_ljl 



发件人: Francois Romieu 
发送时间: 2013-08-21  04:46:12 
收件人: liujunliang_ljl 
抄送: gregkh; sunhecheng; linux-usb; netdev; linux-kernel 
主题: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into 
the Linux Kernel 
 
liujunliang_ljl liujunliang_...@163.com :
[...]
 We want to merge SR9700 device driver into the Linux Kernel. The following
 is the Linux 3.10.7 version patch for SR9700, Please give us the assessment
 and support.
Welcome. Go ahead.
[...]
 diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
 new file mode 100644
 index 000..6a6429a
 --- /dev/null
 +++ b/drivers/net/usb/sr9700.c
[...]
 +static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data)
 +{
 + int err;
 +
 + err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG,
 + 0, reg, data, length);
err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG, 0, reg, data,
  length);
 + if(err != length  err = 0)
 ^^ missing space
 + err = -EINVAL;
 + return err;
 +}
 +
 +static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data)
 +{
 + int err;
 +
 + err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
 + 0, reg, data, length);
See above.
 + if (err = 0  err  length)
 + err = -EINVAL;
 + 
 + return err;
 +}
 +
 +static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value)
 +{
 + return sr_read(dev, reg, 1, value);
 +}
 +
 +static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value)
 +{
 + return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG,
 +value, reg, NULL, 0);
Sic.
 +}
 +
 +static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void 
 *data)
 +{
 + usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
 + 0, reg, data, length);
Sic.
 +}
 +
 +static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
 +{
 + usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG,
 + value, reg, NULL, 0);
Sic.
 +}
 +
 +static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 
 *value)
 +{
 + int ret, i;
 +
 + mutex_lock(dev-phy_mutex);
 +
 + sr_write_reg(dev, EPAR, phy ? (reg | 0x40) : reg);
 + sr_write_reg(dev, EPCR, phy ? 0xc : 0x4);
 +
 + for (i = 0; i  SR_SHARE_TIMEOUT; i++) {
 + u8 tmp = 0;
 +
 + udelay(1);
 + ret = sr_read_reg(dev, EPCR, tmp);
 + if (ret  0)
 + goto out;
goto out_unlock;
 +
 + /* ready */
 + if ((tmp  1) == 0)
if ((tmp  EPCR_ERRE) == 0)
 + break;
 + }
 +
 + if (i = SR_SHARE_TIMEOUT) {
 + netdev_err(dev-net, %s read timed out!, phy ? phy : eeprom);
 + ret = -EIO;
 + goto out;
 + }
 +
 + sr_write_reg(dev, EPCR, 0x0);
 + ret = sr_read(dev, EPDR, 2, value);
 +
 + netdev_dbg(dev-net, read shared %d 0x%02x returned 0x%04x, %d,
 +phy, reg, *value, ret);
 +
 + out:
   ^ please remove space.
 + mutex_unlock(dev-phy_mutex);
 + return ret;
 +}
 +
 +static int sr_share_write_word(struct usbnet *dev, int phy, u8 reg, __le16 
 value)
 +{
 + int ret, i;
 +
 + mutex_lock(dev-phy_mutex);
 +
 + ret = sr_write(dev, EPDR, 2, value);
 + if (ret  0)
 + goto out;
 +
 + sr_write_reg(dev, EPAR, phy ? (reg | 0x40) : reg);
 + sr_write_reg(dev, EPCR, phy ? 0x1a : 0x12);
 +
 + for (i = 0; i  SR_SHARE_TIMEOUT; i++) {
 + u8 tmp = 0;
 +
 + udelay(1);
 + ret = sr_read_reg(dev, EPCR, tmp);
 + if (ret  0)
 + goto out;
 +
 + /* ready */
 + if ((tmp  1) == 0)
 + break;
 + }
The 11 lines above are identical in sr_share_read_word. Please refactor.
[...]
 +static int sr_mdio_read(struct net_device *netdev, int phy_id, int loc)
 +{
 + struct usbnet *dev = netdev_priv(netdev);
 +
 + __le16 res;
Excess empty line.
 + int rc = 0;
 +
 + if (phy_id) {
 + netdev_dbg(dev-net, Only internal phy supported);
 + return 0;
 + }
 +
 + /* Access NSR_LINKST bit for link status instead of MII_BMSR */
 + if(loc == MII_BMSR){
 ^^   ^^
Missing spaces.
 + u8 value;
Excess tabs and missing empty line.
 + sr_read_reg(dev, NSR, value);
 + if(value  NSR_LINKST) {
Excess tabs, missing spaces, useless {.
 + rc = 1;
 + }
 + }
 + sr_share_read_word(dev, 1, loc, res);
 + if(rc == 1)
 + return (le16_to_cpu(res) | BMSR_LSTATUS);
 + else
 + return (le16_to_cpu(res)  ~BMSR_LSTATUS);
Excess ( (aka return is not a function

Re: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into the Linux Kernel

2013-08-21 Thread liujunliang_ljl
 and flags */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+/* parameters */
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_ADDR_FLAG  0x80
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   /* 2bytes header */
+#defineSR_RX_OVERHEAD  7   /* 3bytes header + 4crc tail */
+
+#endif /* _SR9700_H */





2013-08-21 



liujunliang_ljl 



发件人: Joe Perches 
发送时间: 2013-08-21  04:58:27 
收件人: Francois Romieu 
抄送: liujunliang_ljl; gregkh; sunhecheng; linux-usb; netdev; linux-kernel 
主题: Re: [PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 DeviceDriver into 
the Linux Kernel 
 
On Tue, 2013-08-20 at 22:46 +0200, Francois Romieu wrote:
 liujunliang_ljl liujunliang_...@163.com :
  + if (i = SR_SHARE_TIMEOUT) {
  + netdev_err(dev-net, %s read timed out!, phy ? phy : eeprom);
netdev_level, like almost all other printk
messages needs a terminating \n newline to
avoid any possible message interleaving by other
printks.
  + if (!is_valid_ether_addr(addr-sa_data)) {
  + dev_err(net-dev, not setting invalid mac address %pM\n,
  + addr-sa_data);
 
  dev_err(net-dev, not setting invalid mac address %pM\n,
  addr-sa_data);
prefer netdev_level to dev_level where possible.
N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�j:+v���zZ+��+zf���h���~i���z��w���?��)ߢf��^jǫy�m��@A�a���
0��h���i

[PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 Device Driver into the Linux Kernel

2013-08-20 Thread liujunliang_ljl
0x16
+#definePRR 0x1F
+#defineTWPAL   0x20
+#defineTWPAH   0x21
+#defineTRPAL   0x22
+#defineTRPAH   0x23
+#defineRWPAL   0x24
+#defineRWPAH   0x25
+#defineRRPAL   0x26
+#defineRRPAH   0x27
+#defineVID 0x28
+#definePID 0x2A
+#defineCHIPR   0x2C
+#defineUSBDA   0xF0
+#defineRXC 0xF1
+#defineTXC_USBS0xF2
+#defineUSBC0xF4
+
+/* Bit definition for registers */
+// Network Control Reg
+#defineNCR_RST (1 << 0)
+#defineNCR_LBK (3 << 1)
+#defineNCR_FDX (1 << 3)
+#defineNCR_WAKEEN  (1 << 6)
+// Network Status Reg
+#defineNSR_RXRDY   (1 << 0)
+#defineNSR_RXOV(1 << 1)
+#defineNSR_TX1END  (1 << 2)
+#defineNSR_TX2END  (1 << 3)
+#defineNSR_TXFULL  (1 << 4)
+#defineNSR_WAKEST  (1 << 5)
+#defineNSR_LINKST  (1 << 6)
+#defineNSR_SPEED   (1 << 7)
+// Tx Control Reg
+#defineTCR_CRC_DIS (1 << 1)
+#defineTCR_PAD_DIS (1 << 2)
+#defineTCR_LC_CARE (1 << 3)
+#defineTCR_CRS_CARE(1 << 4)
+#defineTCR_EXCECM  (1 << 5)
+#defineTCR_LF_EN   (1 << 6)
+// Tx Status Reg for Packet 1
+#defineTSR1_EC (1 << 2)
+#defineTSR1_COL(1 << 3)
+#defineTSR1_LC (1 << 4)
+#defineTSR1_NC (1 << 5)
+#defineTSR1_LOC(1 << 6)
+#defineTSR1_TLF(1 << 7)
+// Tx Status Reg for Packet 2
+#defineTSR2_EC (1 << 2)
+#defineTSR2_COL(1 << 3)
+#defineTSR2_LC (1 << 4)
+#defineTSR2_NC (1 << 5)
+#defineTSR2_LOC(1 << 6)
+#defineTSR2_TLF(1 << 7)
+// Rx Control Reg
+#defineRCR_RXEN(1 << 0)
+#defineRCR_PRMSC   (1 << 1)
+#defineRCR_RUNT(1 << 2)
+#defineRCR_ALL (1 << 3)
+#defineRCR_DIS_CRC (1 << 4)
+#defineRCR_DIS_LONG(1 << 5)
+// Rx Status Reg
+#defineRSR_AE  (1 << 2)
+#defineRSR_MF  (1 << 6)
+#defineRSR_RF  (1 << 7)
+// Recv Overflow Counter Reg
+#defineROCR_ROC(0x7F << 0)
+#defineROCR_RXFU   (1 << 7)
+// Back Pressure Threshold Reg
+#defineBPTR_JPT(0x0F << 0)
+#defineBPTR_BPHW   (0x0F << 4)
+// Flow Control Threshold Reg
+#defineFCTR_LWOT   (0x0F << 0)
+#defineFCTR_HWOT   (0x0F << 4)
+// rx/tx Flow Control Reg
+#defineFCR_FLCE(1 << 0)
+#defineFCR_BKPA(1 << 4)
+#defineFCR_TXPEN   (1 << 5)
+#defineFCR_TXPF(1 << 6)
+#defineFCR_TXP0(1 << 7)
+// EEPROM & PHY Control Reg
+#defineEPCR_ERRE   (1 << 0)
+#defineEPCR_ERPRW  (1 << 1)
+#defineEPCR_ERPRR  (1 << 2)
+#defineEPCR_EPOS   (1 << 3)
+#defineEPCR_WEP(1 << 4)
+// EEPROM & PHY Address Reg
+#defineEPAR_EROA   (0x3F << 0)
+#defineEPAR_PHY_ADR(0x03 << 6)
+// Wakeup Control Reg
+#defineWCR_MAGICST (1 << 0)
+#defineWCR_LINKST  (1 << 2)
+#defineWCR_MAGICEN (1 << 3)
+#defineWCR_LINKEN  (1 << 5)
+// Phy Reset Reg
+#definePRR_PHY_RST (1 << 0)
+// USB Device Address Reg
+#defineUSBDA_USBFA (0x7F << 0)
+// TX packet Counter & USB Status Reg
+#defineTXC_USBS_TXC0   (1 << 0)
+#defineTXC_USBS_TXC1   (1 << 1)
+#defineTXC_USBS_TXC2   (1 << 2)
+#defineTXC_USBS_EP1RDY (1 << 5)
+#defineTXC_USBS_SUSFLAG(1 << 6)
+#defineTXC_USBS_RXFAULT(1 << 7)
+// USB Control Reg
+#defineUSBC_EP3NAK (1 << 4)
+#defineUSBC_EP3ACK (1 << 5)
+
+/* Variables */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   // 2bytes header
+#defineSR_RX_OVERHEAD  7   // 3bytes header + 4crc tail
+
+/*--*/


--
2013-08-20 
liujunliang_ljl 
www.corechip-sz.com


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 Device Driver into the Linux Kernel

2013-08-20 Thread liujunliang_ljl
6
+#definePRR 0x1F
+#defineTWPAL   0x20
+#defineTWPAH   0x21
+#defineTRPAL   0x22
+#defineTRPAH   0x23
+#defineRWPAL   0x24
+#defineRWPAH   0x25
+#defineRRPAL   0x26
+#defineRRPAH   0x27
+#defineVID 0x28
+#definePID 0x2A
+#defineCHIPR   0x2C
+#defineUSBDA   0xF0
+#defineRXC 0xF1
+#defineTXC_USBS0xF2
+#defineUSBC0xF4
+
+/* Bit definition for registers */
+// Network Control Reg
+#defineNCR_RST (1 << 0)
+#defineNCR_LBK (3 << 1)
+#defineNCR_FDX (1 << 3)
+#defineNCR_WAKEEN  (1 << 6)
+// Network Status Reg
+#defineNSR_RXRDY   (1 << 0)
+#defineNSR_RXOV(1 << 1)
+#defineNSR_TX1END  (1 << 2)
+#defineNSR_TX2END  (1 << 3)
+#defineNSR_TXFULL  (1 << 4)
+#defineNSR_WAKEST  (1 << 5)
+#defineNSR_LINKST  (1 << 6)
+#defineNSR_SPEED   (1 << 7)
+// Tx Control Reg
+#defineTCR_CRC_DIS (1 << 1)
+#defineTCR_PAD_DIS (1 << 2)
+#defineTCR_LC_CARE (1 << 3)
+#defineTCR_CRS_CARE(1 << 4)
+#defineTCR_EXCECM  (1 << 5)
+#defineTCR_LF_EN   (1 << 6)
+// Tx Status Reg for Packet 1
+#defineTSR1_EC (1 << 2)
+#defineTSR1_COL(1 << 3)
+#defineTSR1_LC (1 << 4)
+#defineTSR1_NC (1 << 5)
+#defineTSR1_LOC(1 << 6)
+#defineTSR1_TLF(1 << 7)
+// Tx Status Reg for Packet 2
+#defineTSR2_EC (1 << 2)
+#defineTSR2_COL(1 << 3)
+#defineTSR2_LC (1 << 4)
+#defineTSR2_NC (1 << 5)
+#defineTSR2_LOC(1 << 6)
+#defineTSR2_TLF(1 << 7)
+// Rx Control Reg
+#defineRCR_RXEN(1 << 0)
+#defineRCR_PRMSC   (1 << 1)
+#defineRCR_RUNT(1 << 2)
+#defineRCR_ALL (1 << 3)
+#defineRCR_DIS_CRC (1 << 4)
+#defineRCR_DIS_LONG(1 << 5)
+// Rx Status Reg
+#defineRSR_AE  (1 << 2)
+#defineRSR_MF  (1 << 6)
+#defineRSR_RF  (1 << 7)
+// Recv Overflow Counter Reg
+#defineROCR_ROC(0x7F << 0)
+#defineROCR_RXFU   (1 << 7)
+// Back Pressure Threshold Reg
+#defineBPTR_JPT(0x0F << 0)
+#defineBPTR_BPHW   (0x0F << 4)
+// Flow Control Threshold Reg
+#defineFCTR_LWOT   (0x0F << 0)
+#defineFCTR_HWOT   (0x0F << 4)
+// rx/tx Flow Control Reg
+#defineFCR_FLCE(1 << 0)
+#defineFCR_BKPA(1 << 4)
+#defineFCR_TXPEN   (1 << 5)
+#defineFCR_TXPF(1 << 6)
+#defineFCR_TXP0(1 << 7)
+// EEPROM & PHY Control Reg
+#defineEPCR_ERRE   (1 << 0)
+#defineEPCR_ERPRW  (1 << 1)
+#defineEPCR_ERPRR  (1 << 2)
+#defineEPCR_EPOS   (1 << 3)
+#defineEPCR_WEP(1 << 4)
+// EEPROM & PHY Address Reg
+#defineEPAR_EROA   (0x3F << 0)
+#defineEPAR_PHY_ADR(0x03 << 6)
+// Wakeup Control Reg
+#defineWCR_MAGICST (1 << 0)
+#defineWCR_LINKST  (1 << 2)
+#defineWCR_MAGICEN (1 << 3)
+#defineWCR_LINKEN  (1 << 5)
+// Phy Reset Reg
+#definePRR_PHY_RST (1 << 0)
+// USB Device Address Reg
+#defineUSBDA_USBFA (0x7F << 0)
+// TX packet Counter & USB Status Reg
+#defineTXC_USBS_TXC0   (1 << 0)
+#defineTXC_USBS_TXC1   (1 << 1)
+#defineTXC_USBS_TXC2   (1 << 2)
+#defineTXC_USBS_EP1RDY (1 << 5)
+#defineTXC_USBS_SUSFLAG(1 << 6)
+#defineTXC_USBS_RXFAULT(1 << 7)
+// USB Control Reg
+#defineUSBC_EP3NAK (1 << 4)
+#defineUSBC_EP3ACK (1 << 5)
+
+/* Variables */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   // 2bytes header
+#defineSR_RX_OVERHEAD  7   // 3bytes header + 4crc tail
+
+/*--*/


--
2013-08-20 
liujunliang_ljl 
www.corechip-sz.com


[PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 Device Driver into the Linux Kernel

2013-08-20 Thread liujunliang_ljl
+#defineRXC 0xF1
+#defineTXC_USBS0xF2
+#defineUSBC0xF4
+
+/* Bit definition for registers */
+// Network Control Reg
+#defineNCR_RST (1  0)
+#defineNCR_LBK (3  1)
+#defineNCR_FDX (1  3)
+#defineNCR_WAKEEN  (1  6)
+// Network Status Reg
+#defineNSR_RXRDY   (1  0)
+#defineNSR_RXOV(1  1)
+#defineNSR_TX1END  (1  2)
+#defineNSR_TX2END  (1  3)
+#defineNSR_TXFULL  (1  4)
+#defineNSR_WAKEST  (1  5)
+#defineNSR_LINKST  (1  6)
+#defineNSR_SPEED   (1  7)
+// Tx Control Reg
+#defineTCR_CRC_DIS (1  1)
+#defineTCR_PAD_DIS (1  2)
+#defineTCR_LC_CARE (1  3)
+#defineTCR_CRS_CARE(1  4)
+#defineTCR_EXCECM  (1  5)
+#defineTCR_LF_EN   (1  6)
+// Tx Status Reg for Packet 1
+#defineTSR1_EC (1  2)
+#defineTSR1_COL(1  3)
+#defineTSR1_LC (1  4)
+#defineTSR1_NC (1  5)
+#defineTSR1_LOC(1  6)
+#defineTSR1_TLF(1  7)
+// Tx Status Reg for Packet 2
+#defineTSR2_EC (1  2)
+#defineTSR2_COL(1  3)
+#defineTSR2_LC (1  4)
+#defineTSR2_NC (1  5)
+#defineTSR2_LOC(1  6)
+#defineTSR2_TLF(1  7)
+// Rx Control Reg
+#defineRCR_RXEN(1  0)
+#defineRCR_PRMSC   (1  1)
+#defineRCR_RUNT(1  2)
+#defineRCR_ALL (1  3)
+#defineRCR_DIS_CRC (1  4)
+#defineRCR_DIS_LONG(1  5)
+// Rx Status Reg
+#defineRSR_AE  (1  2)
+#defineRSR_MF  (1  6)
+#defineRSR_RF  (1  7)
+// Recv Overflow Counter Reg
+#defineROCR_ROC(0x7F  0)
+#defineROCR_RXFU   (1  7)
+// Back Pressure Threshold Reg
+#defineBPTR_JPT(0x0F  0)
+#defineBPTR_BPHW   (0x0F  4)
+// Flow Control Threshold Reg
+#defineFCTR_LWOT   (0x0F  0)
+#defineFCTR_HWOT   (0x0F  4)
+// rx/tx Flow Control Reg
+#defineFCR_FLCE(1  0)
+#defineFCR_BKPA(1  4)
+#defineFCR_TXPEN   (1  5)
+#defineFCR_TXPF(1  6)
+#defineFCR_TXP0(1  7)
+// EEPROM  PHY Control Reg
+#defineEPCR_ERRE   (1  0)
+#defineEPCR_ERPRW  (1  1)
+#defineEPCR_ERPRR  (1  2)
+#defineEPCR_EPOS   (1  3)
+#defineEPCR_WEP(1  4)
+// EEPROM  PHY Address Reg
+#defineEPAR_EROA   (0x3F  0)
+#defineEPAR_PHY_ADR(0x03  6)
+// Wakeup Control Reg
+#defineWCR_MAGICST (1  0)
+#defineWCR_LINKST  (1  2)
+#defineWCR_MAGICEN (1  3)
+#defineWCR_LINKEN  (1  5)
+// Phy Reset Reg
+#definePRR_PHY_RST (1  0)
+// USB Device Address Reg
+#defineUSBDA_USBFA (0x7F  0)
+// TX packet Counter  USB Status Reg
+#defineTXC_USBS_TXC0   (1  0)
+#defineTXC_USBS_TXC1   (1  1)
+#defineTXC_USBS_TXC2   (1  2)
+#defineTXC_USBS_EP1RDY (1  5)
+#defineTXC_USBS_SUSFLAG(1  6)
+#defineTXC_USBS_RXFAULT(1  7)
+// USB Control Reg
+#defineUSBC_EP3NAK (1  4)
+#defineUSBC_EP3ACK (1  5)
+
+/* Variables */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   // 2bytes header
+#defineSR_RX_OVERHEAD  7   // 3bytes header + 4crc tail
+
+/*--*/


--
2013-08-20 
liujunliang_ljl 
www.corechip-sz.com


[PATCH-SR9700] Merge USB 1.1 Ethernet Adapter SR9700 Device Driver into the Linux Kernel

2013-08-20 Thread liujunliang_ljl
   0xF0
+#defineRXC 0xF1
+#defineTXC_USBS0xF2
+#defineUSBC0xF4
+
+/* Bit definition for registers */
+// Network Control Reg
+#defineNCR_RST (1  0)
+#defineNCR_LBK (3  1)
+#defineNCR_FDX (1  3)
+#defineNCR_WAKEEN  (1  6)
+// Network Status Reg
+#defineNSR_RXRDY   (1  0)
+#defineNSR_RXOV(1  1)
+#defineNSR_TX1END  (1  2)
+#defineNSR_TX2END  (1  3)
+#defineNSR_TXFULL  (1  4)
+#defineNSR_WAKEST  (1  5)
+#defineNSR_LINKST  (1  6)
+#defineNSR_SPEED   (1  7)
+// Tx Control Reg
+#defineTCR_CRC_DIS (1  1)
+#defineTCR_PAD_DIS (1  2)
+#defineTCR_LC_CARE (1  3)
+#defineTCR_CRS_CARE(1  4)
+#defineTCR_EXCECM  (1  5)
+#defineTCR_LF_EN   (1  6)
+// Tx Status Reg for Packet 1
+#defineTSR1_EC (1  2)
+#defineTSR1_COL(1  3)
+#defineTSR1_LC (1  4)
+#defineTSR1_NC (1  5)
+#defineTSR1_LOC(1  6)
+#defineTSR1_TLF(1  7)
+// Tx Status Reg for Packet 2
+#defineTSR2_EC (1  2)
+#defineTSR2_COL(1  3)
+#defineTSR2_LC (1  4)
+#defineTSR2_NC (1  5)
+#defineTSR2_LOC(1  6)
+#defineTSR2_TLF(1  7)
+// Rx Control Reg
+#defineRCR_RXEN(1  0)
+#defineRCR_PRMSC   (1  1)
+#defineRCR_RUNT(1  2)
+#defineRCR_ALL (1  3)
+#defineRCR_DIS_CRC (1  4)
+#defineRCR_DIS_LONG(1  5)
+// Rx Status Reg
+#defineRSR_AE  (1  2)
+#defineRSR_MF  (1  6)
+#defineRSR_RF  (1  7)
+// Recv Overflow Counter Reg
+#defineROCR_ROC(0x7F  0)
+#defineROCR_RXFU   (1  7)
+// Back Pressure Threshold Reg
+#defineBPTR_JPT(0x0F  0)
+#defineBPTR_BPHW   (0x0F  4)
+// Flow Control Threshold Reg
+#defineFCTR_LWOT   (0x0F  0)
+#defineFCTR_HWOT   (0x0F  4)
+// rx/tx Flow Control Reg
+#defineFCR_FLCE(1  0)
+#defineFCR_BKPA(1  4)
+#defineFCR_TXPEN   (1  5)
+#defineFCR_TXPF(1  6)
+#defineFCR_TXP0(1  7)
+// EEPROM  PHY Control Reg
+#defineEPCR_ERRE   (1  0)
+#defineEPCR_ERPRW  (1  1)
+#defineEPCR_ERPRR  (1  2)
+#defineEPCR_EPOS   (1  3)
+#defineEPCR_WEP(1  4)
+// EEPROM  PHY Address Reg
+#defineEPAR_EROA   (0x3F  0)
+#defineEPAR_PHY_ADR(0x03  6)
+// Wakeup Control Reg
+#defineWCR_MAGICST (1  0)
+#defineWCR_LINKST  (1  2)
+#defineWCR_MAGICEN (1  3)
+#defineWCR_LINKEN  (1  5)
+// Phy Reset Reg
+#definePRR_PHY_RST (1  0)
+// USB Device Address Reg
+#defineUSBDA_USBFA (0x7F  0)
+// TX packet Counter  USB Status Reg
+#defineTXC_USBS_TXC0   (1  0)
+#defineTXC_USBS_TXC1   (1  1)
+#defineTXC_USBS_TXC2   (1  2)
+#defineTXC_USBS_EP1RDY (1  5)
+#defineTXC_USBS_SUSFLAG(1  6)
+#defineTXC_USBS_RXFAULT(1  7)
+// USB Control Reg
+#defineUSBC_EP3NAK (1  4)
+#defineUSBC_EP3ACK (1  5)
+
+/* Variables */
+#defineSR_RD_REGS  0x00
+#defineSR_WR_REGS  0x01
+#defineSR_WR_REG   0x03
+#defineSR_REQ_RD_REG   (USB_DIR_IN | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+#defineSR_REQ_WR_REG   (USB_DIR_OUT | USB_TYPE_VENDOR | 
USB_RECIP_DEVICE)
+
+#defineSR_SHARE_TIMEOUT1000
+#defineSR_EEPROM_LEN   256
+#defineSR_MCAST_SIZE   8
+#defineSR_MCAST_MAX64
+#defineSR_TX_OVERHEAD  2   // 2bytes header
+#defineSR_RX_OVERHEAD  7   // 3bytes header + 4crc tail
+
+/*--*/


--
2013-08-20 
liujunliang_ljl 
www.corechip-sz.com


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/