* Fw: [Bug 43277] New: net/e1000e set mtu larger than 1500 fails
From: Stephen Hemminger @ 2012-05-22 18:19 UTC (permalink / raw)
To: netdev; +Cc: e1000-devel
Begin forwarded message:
Date: Tue, 22 May 2012 18:13:21 +0000 (UTC)
From: bugzilla-daemon@bugzilla.kernel.org
To: shemminger@linux-foundation.org
Subject: [Bug 43277] New: net/e1000e set mtu larger than 1500 fails
https://bugzilla.kernel.org/show_bug.cgi?id=43277
Summary: net/e1000e set mtu larger than 1500 fails
Product: Networking
Version: 2.5
Kernel Version: 3.4
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: IPV4
AssignedTo: shemminger@linux-foundation.org
ReportedBy: che@chrekh.se
Regression: Yes
In kernel 3.4 I can no longer use jumbo-frames with my e1000e network
interface.
$ sudo ip link set eth1 mtu 9000
RTNETLINK answers: Invalid argument
Card-info (from kernel-log)
e1000e 0000:05:00.1: eth1: (PCI Express:2.5GT/s:Width x4) 00:1b:78:59:84:25
e1000e 0000:05:00.1: eth1: Intel(R) PRO/1000 Network Connection
e1000e 0000:05:00.1: eth1: MAC: 0, PHY: 4, PBA No: D51930-003
I have bisected and found:
70495a500d787c0c90a136acf454cb7d0eecd82e is the first bad commit
--
Configure bugmail: https://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
^ permalink raw reply
* Re: [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
From: Joe Perches @ 2012-05-22 18:17 UTC (permalink / raw)
To: David Daney
Cc: devicetree-discuss, Grant Likely, Rob Herring, David S. Miller,
netdev, linux-kernel, linux-mips, Andy Fleming, David Daney
In-Reply-To: <1337709592-23347-5-git-send-email-ddaney.cavm@gmail.com>
On Tue, 2012-05-22 at 10:59 -0700, David Daney wrote:
> From: David Daney <david.daney@cavium.com>
trivia:
> diff --git a/drivers/net/phy/bcm87xx.c b/drivers/net/phy/bcm87xx.c
[]
> @@ -0,0 +1,237 @@
> +static int bcm87xx_of_reg_init(struct phy_device *phydev)
> +{
> + const __be32 *paddr;
> + int len, i, ret;
> +
> + if (!phydev->dev.of_node)
> + return 0;
> +
> + paddr = of_get_property(phydev->dev.of_node,
> + "broadcom,c45-reg-init", &len);
> + if (!paddr || len < (4 * sizeof(*paddr)))
> + return 0;
> +
> + ret = 0;
> + len /= sizeof(*paddr);
> + for (i = 0; i < len - 3; i += 4) {
> + u16 devid = be32_to_cpup(paddr + i);
> + u16 reg = be32_to_cpup(paddr + i + 1);
> + u16 mask = be32_to_cpup(paddr + i + 2);
> + u16 val_bits = be32_to_cpup(paddr + i + 3);
> + int val;
These might read better as
len /= 4;
for (i = 0; i < len; i++) {
u16 devid = be32_to_cpu(*paddr++);
u16 reg = be32_to_cpu(*paddr++);
u16 mask = be32_to_cpu(*paddr++);
u16 val_bits = be32_to_cpu(*paddr++);
...
}
^ permalink raw reply
* Re: [PATCH] xen/netback: calculate correctly the SKB slots.
From: Konrad Rzeszutek Wilk @ 2012-05-22 18:09 UTC (permalink / raw)
To: Ian Campbell
Cc: Ben Hutchings, xen-devel@lists.xensource.com,
netdev@vger.kernel.org, davem@davemloft.net,
linux-kernel@vger.kernel.org, Adnan Misherfi
In-Reply-To: <1337678512.10118.40.camel@zakaz.uk.xensource.com>
> > > wrong, which caused the RX ring to be erroneously declared full,
> > > and the receive queue to be stopped. The problem shows up when two
> > > guest running on the same server tries to communicates using large
.. snip..
> > The function name is xen_netbk_count_skb_slots() in net-next. This
> > appears to depend on the series in
> > <http://lists.xen.org/archives/html/xen-devel/2012-01/msg00982.html>.
>
> Yes, I don't think that patchset was intended for prime time just yet.
> Can this issue be reproduced without it?
It was based on 3.4, but the bug and work to fix this was done on top of
a 3.4 version of netback backported in a 3.0 kernel. Let me double check
whether there were some missing patches.
>
> > > int i, copy_off;
> > >
> > > count = DIV_ROUND_UP(
> > > - offset_in_page(skb->data)+skb_headlen(skb), PAGE_SIZE);
> > > + offset_in_page(skb->data + skb_headlen(skb)), PAGE_SIZE);
> >
> > The new version would be equivalent to:
> > count = offset_in_page(skb->data + skb_headlen(skb)) != 0;
> > which is not right, as netbk_gop_skb() will use one slot per page.
>
> Just outside the context of this patch we separately count the frag
> pages.
>
> However I think you are right if skb->data covers > 1 page, since the
> new version can only ever return 0 or 1. I expect this patch papers over
> the underlying issue by not stopping often enough, rather than actually
> fixing the underlying issue.
Ah, any thoughts? Have you guys seen this behavior as well?
>
> > The real problem is likely that you're not using the same condition to
> > stop and wake the queue.
>
> Agreed, it would be useful to see the argument for this patch presented
> in that light. In particular the relationship between
> xenvif_rx_schedulable() (used to wake queue) and
> xen_netbk_must_stop_queue() (used to stop queue).
Do you have any debug patches to ... do open-heart surgery on the
rings of netback as its hitting the issues Adnan has found?
>
> As it stands the description describes a setup which can repro the
> problem but doesn't really analyse what actually happens, nor justify
> the correctness of the fix.
Hm, Adnan - you dug in to this and you got tons of notes. Could you
describe what you saw that caused this?
^ permalink raw reply
* Re: [PATCH] xen/netback: calculate correctly the SKB slots.
From: Konrad Rzeszutek Wilk @ 2012-05-22 18:01 UTC (permalink / raw)
To: Ben Hutchings
Cc: xen-devel, ian.campbell, netdev, davem, linux-kernel,
Adnan Misherfi
In-Reply-To: <1337627640.2979.33.camel@bwh-desktop.uk.solarflarecom.com>
On Mon, May 21, 2012 at 08:14:00PM +0100, Ben Hutchings wrote:
> On Mon, 2012-05-21 at 13:36 -0400, Konrad Rzeszutek Wilk wrote:
> > From: Adnan Misherfi <adnan.misherfi@oracle.com>
> >
> > A programming error cause the calculation of receive SKB slots to be
> > wrong, which caused the RX ring to be erroneously declared full,
> > and the receive queue to be stopped. The problem shows up when two
> > guest running on the same server tries to communicates using large
> > MTUs. Each guest is connected to a bridge with VLAN over bond
> > interface, so traffic from one guest leaves the server on one bridge
> > and comes back to the second guest on the second bridge. This can be
> > reproduces using ping, and one guest as follow:
> >
> > - Create active-back bond (bond0)
> > - Set up VLAN 5 on bond0 (bond0.5)
> > - Create a bridge (br1)
> > - Add bond0.5 to a bridge (br1)
> > - Start a guest and connect it to br1
> > - Set MTU of 9000 across the link
> >
> > Ping the guest from an external host using packet sizes of 3991, and
> > 4054; ping -s 3991 -c 128 "Guest-IP-Address"
> >
> > At the beginning ping works fine, but after a while ping packets do
> > not reach the guest because the RX ring becomes full, and the queue
> > get stopped. Once the problem accrued, the only way to get out of it
> > is to reboot the guest, or use xm network-detach/network-attach.
> >
> > ping works for packets sizes 3990,3992, and many other sizes including
> > 4000,5000,9000, and 1500 ..etc. MTU size of 3991,4054 are the sizes
> > that quickly reproduce this problem.
> >
> > Signed-off-by: Adnan Misherfi <adnan.misherfi@oracle.com>
> > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> > ---
> > drivers/net/xen-netback/netback.c | 2 +-
> > 1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
> > index 957cf9d..e382e5b 100644
> > --- a/drivers/net/xen-netback/netback.c
> > +++ b/drivers/net/xen-netback/netback.c
> > @@ -212,7 +212,7 @@ unsigned int xenvif_count_skb_slots(struct xenvif *vif, struct sk_buff *skb)
>
> The function name is xen_netbk_count_skb_slots() in net-next. This
> appears to depend on the series in
> <http://lists.xen.org/archives/html/xen-devel/2012-01/msg00982.html>.
Ah, this was based off 3.4.
>
> > int i, copy_off;
> >
> > count = DIV_ROUND_UP(
> > - offset_in_page(skb->data)+skb_headlen(skb), PAGE_SIZE);
> > + offset_in_page(skb->data + skb_headlen(skb)), PAGE_SIZE);
>
> The new version would be equivalent to:
> count = offset_in_page(skb->data + skb_headlen(skb)) != 0;
> which is not right, as netbk_gop_skb() will use one slot per page.
>
> The real problem is likely that you're not using the same condition to
> stop and wake the queue. Though it appears you're also missing an
Hmm..
> smp_mb() at the top of xenvif_notify_tx_completion().
>
> Ben.
>
> > copy_off = skb_headlen(skb) % PAGE_SIZE;
> >
>
> --
> 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.
^ permalink raw reply
* [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY.
From: David Daney @ 2012-05-22 17:59 UTC (permalink / raw)
To: devicetree-discuss, Grant Likely, Rob Herring, David S. Miller,
netdev
Cc: linux-kernel, linux-mips, Andy Fleming, David Daney
In-Reply-To: <1337709592-23347-1-git-send-email-ddaney.cavm@gmail.com>
From: David Daney <david.daney@cavium.com>
These phys do *not* implement the standard IEEE 802.3 clause 45
registers. PHY to driver matching is done with OF compatible
properties.
Signed-off-by: David Daney <david.daney@cavium.com>
---
.../devicetree/bindings/net/cortina-cs4321.txt | 27 +
drivers/net/phy/Kconfig | 6 +
drivers/net/phy/Makefile | 1 +
drivers/net/phy/cs4321-ucode.h | 4378 ++++++++++++++++++++
drivers/net/phy/cs4321.c | 1147 +++++
5 files changed, 5559 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/cortina-cs4321.txt
create mode 100644 drivers/net/phy/cs4321-ucode.h
create mode 100644 drivers/net/phy/cs4321.c
diff --git a/Documentation/devicetree/bindings/net/cortina-cs4321.txt b/Documentation/devicetree/bindings/net/cortina-cs4321.txt
new file mode 100644
index 0000000..a1b6f48
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/cortina-cs4321.txt
@@ -0,0 +1,27 @@
+Cortina CS4321 dual RXAIU/quad XAUI 10G Ethernet PHYs. Each PHY
+within the package is mostly independent and has the following
+properties. These phys do *not* implement the standard IEEE 802.3
+clause 45 registers.
+
+Required Properties:
+
+- compatible : "cortina,cs4321" or "cortina,cs4318".
+- reg : The address on the system management bus (MDIO/I2C/SPI address)
+- cortina,host-mode : Either "rxaui" or "xaui", the protocol used to
+ communicate with the Ethernet MAC.
+
+Optional Properties:
+
+- interrupts : One set of cells (per the interrupt-parent) for the
+ interrupt line.
+- interrupt-parent : Standard interrupt-parent property for the interrupt.
+
+Example:
+
+ phy0: ethernet-phy@4 {
+ reg = <0x04>;
+ compatible = "cortina,cs4318";
+ interrupt-parent = <&gpio>;
+ interrupts = <11 8>; /* Pin 11, active low */
+ cortina,host-mode = "rxaui";
+ };
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index 9e36c8f..1d977f9 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -72,6 +72,12 @@ config BCM87XX_PHY
help
Currently supports the BCM8706 and BCM8727 10G Ethernet PHYs.
+config CS4318_PHY
+ tristate "Driver for Cortina cs4318 quad-10G Ethernet PHY"
+ help
+ Currently supports only the Cortina cs4318 PHY. This may be
+ configured as either a quad-RXAUI or dual-XAUI device.
+
config ICPLUS_PHY
tristate "Drivers for ICPlus PHYs"
---help---
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index 6d2dc6c..c99f64c 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -13,6 +13,7 @@ obj-$(CONFIG_VITESSE_PHY) += vitesse.o
obj-$(CONFIG_BROADCOM_PHY) += broadcom.o
obj-$(CONFIG_BCM63XX_PHY) += bcm63xx.o
obj-$(CONFIG_BCM87XX_PHY) += bcm87xx.o
+obj-$(CONFIG_CS4318_PHY) += cs4321.o
obj-$(CONFIG_ICPLUS_PHY) += icplus.o
obj-$(CONFIG_REALTEK_PHY) += realtek.o
obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
diff --git a/drivers/net/phy/cs4321-ucode.h b/drivers/net/phy/cs4321-ucode.h
new file mode 100644
index 0000000..98f05ac
--- /dev/null
+++ b/drivers/net/phy/cs4321-ucode.h
@@ -0,0 +1,4378 @@
+/*
+ * Copyright (C) 2011 by Cortina Systems, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+/*
+ * The following arrays contain the microcode data to download to the
+ * device.
+ */
+static u16 cs4321_microcode_prolog[] = {
+ /* Addr, Data */
+ 0x001c, 0x0001,
+ 0x0020, 0x8004,
+ 0x0240, 0x0008,
+ 0x024f, 0x0000
+};
+
+/*
+ * Each slice is written:
+ * 0x024f, slice_number
+ * for each element in slice:
+ * 0x0201, first_value
+ * 0x0202, second_value
+ * 0x0200, element index + 0x9000
+ */
+static u16 cs4321_microcode_slices[8][512 * 2] = {{
+ 0x009a, 0xb616,
+ 0x0060, 0x01e6,
+ 0x0088, 0xbf02,
+ 0x0000, 0x0000,
+ 0x0083, 0xc184,
+ 0x0003, 0xc084,
+ 0x0083, 0x4f4b,
+ 0x0003, 0x4190,
+ 0x0003, 0x4f83,
+ 0x0083, 0x408e,
+ 0x0083, 0xe0db,
+ 0x0083, 0xc0ec,
+ 0x0003, 0xc0eb,
+ 0x0003, 0xc0ee,
+ 0x0083, 0xc0ea,
+ 0x0003, 0xc696,
+ 0x0004, 0xed04,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x0060, 0x01e6,
+ 0x0083, 0xc086,
+ 0x001a, 0xb701,
+ 0x0060, 0x01e6,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x0020, 0x001f,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x0060, 0x01e6,
+ 0x0003, 0xc2bf,
+ 0x0060, 0x01e6,
+ 0x008a, 0xde02,
+ 0x0080, 0x0023,
+ 0x008e, 0x8502,
+ 0x0080, 0x0015,
+ 0x0018, 0x9300,
+ 0x0003, 0x0393,
+ 0x001b, 0x4f80,
+ 0x0083, 0x0380,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x0083, 0xc0b9,
+ 0x0083, 0xc7ff,
+ 0x0003, 0xc082,
+ 0x0024, 0x8508,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x00a0, 0x0035,
+ 0x000f, 0x8585,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0x49b8,
+ 0x0083, 0xc052,
+ 0x0098, 0x5200,
+ 0x0083, 0x0352,
+ 0x0099, 0xb853,
+ 0x0003, 0x03b8,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x00a4, 0x8505,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x0020, 0x0043,
+ 0x008f, 0x8587,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x009a, 0x0104,
+ 0x0083, 0x03b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0093, 0x0000,
+ 0x001f, 0x8761,
+ 0x0003, 0x03f6,
+ 0x001a, 0x0160,
+ 0x001e, 0x03f6,
+ 0x0003, 0x03f6,
+ 0x0017, 0xd103,
+ 0x0041, 0x0056,
+ 0x0083, 0xd1fb,
+ 0x0080, 0x005d,
+ 0x001a, 0x0094,
+ 0x0017, 0xf603,
+ 0x0041, 0x005c,
+ 0x001a, 0x0094,
+ 0x0083, 0x03fb,
+ 0x0080, 0x005d,
+ 0x0083, 0xf6fb,
+ 0x0003, 0xc0e4,
+ 0x0018, 0xe400,
+ 0x0003, 0x03e4,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0083, 0xcbf9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc1b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xcff9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc2b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd5b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcef9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0397,
+ 0x0003, 0xd398,
+ 0x0083, 0xd399,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x009f, 0xe40f,
+ 0x0017, 0xd703,
+ 0x00c1, 0x005e,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x008b, 0x8515,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x000b, 0x8511,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x008b, 0x850d,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0004, 0xb609,
+ 0x008b, 0x8508,
+ 0x001a, 0x001c,
+ 0x0097, 0x03b6,
+ 0x0041, 0x00a6,
+ 0x0097, 0xb64b,
+ 0x0041, 0x00a6,
+ 0x0083, 0xb64b,
+ 0x0083, 0xb84c,
+ 0x001a, 0x000b,
+ 0x0097, 0x5203,
+ 0x00a1, 0x0037,
+ 0x0083, 0x4cb8,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x00a4, 0x8505,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x00a0, 0x00b2,
+ 0x008f, 0x8584,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0397,
+ 0x0003, 0xd398,
+ 0x0083, 0xd399,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x001b, 0x57ba,
+ 0x0083, 0x03b9,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0380,
+ 0x0083, 0x0380,
+ 0x001a, 0xb701,
+ 0x0060, 0x01e6,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x0020, 0x00ce,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x0060, 0x01e6,
+ 0x0003, 0xc2bf,
+ 0x0060, 0x01e6,
+ 0x009b, 0x57a3,
+ 0x0060, 0x01dc,
+ 0x0083, 0x03ef,
+ 0x009b, 0x57a0,
+ 0x0060, 0x01dc,
+ 0x0083, 0x03dc,
+ 0x0018, 0xee00,
+ 0x0003, 0x03ee,
+ 0x0017, 0x59ee,
+ 0x0041, 0x011f,
+ 0x0003, 0xc0ee,
+ 0x0084, 0xed0f,
+ 0x009a, 0x8086,
+ 0x0083, 0x03bf,
+ 0x009a, 0x3408,
+ 0x0060, 0x01e6,
+ 0x001a, 0xb40b,
+ 0x0060, 0x01e6,
+ 0x0097, 0xbf60,
+ 0x0020, 0x00e5,
+ 0x0083, 0xbf60,
+ 0x0003, 0xc1bf,
+ 0x0080, 0x00e6,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x0060, 0x01e6,
+ 0x0093, 0x0000,
+ 0x001f, 0x8761,
+ 0x0003, 0x03f6,
+ 0x001a, 0x0160,
+ 0x001e, 0x03f6,
+ 0x0003, 0x03f6,
+ 0x0017, 0xd103,
+ 0x00c1, 0x00f2,
+ 0x0083, 0xd1fb,
+ 0x0000, 0x00f9,
+ 0x001a, 0x0094,
+ 0x0017, 0xf603,
+ 0x00c1, 0x00f8,
+ 0x001a, 0x0094,
+ 0x0083, 0x03fb,
+ 0x0000, 0x00f9,
+ 0x0083, 0xf6fb,
+ 0x009b, 0xa155,
+ 0x0003, 0x03e2,
+ 0x009a, 0x0055,
+ 0x0017, 0xe203,
+ 0x00c1, 0x0103,
+ 0x0084, 0xb90b,
+ 0x001f, 0xc10f,
+ 0x009e, 0xb903,
+ 0x0083, 0x03b9,
+ 0x0080, 0x0109,
+ 0x0097, 0x54e2,
+ 0x00c1, 0x0109,
+ 0x0017, 0xb957,
+ 0x0020, 0x0109,
+ 0x0098, 0xb900,
+ 0x0083, 0x03b9,
+ 0x009e, 0x55c4,
+ 0x0097, 0xb903,
+ 0x00c1, 0x0114,
+ 0x0004, 0xff13,
+ 0x009f, 0xff0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x0019, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x0000, 0x011f,
+ 0x0099, 0xcc55,
+ 0x0097, 0x03b9,
+ 0x0041, 0x011f,
+ 0x009f, 0xff0f,
+ 0x0097, 0x03c7,
+ 0x0041, 0x011f,
+ 0x0018, 0xff00,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x009e, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x0085, 0xeb07,
+ 0x0003, 0xc145,
+ 0x0098, 0xea00,
+ 0x0083, 0x03ea,
+ 0x0097, 0x48ea,
+ 0x0041, 0x0134,
+ 0x0083, 0xc1eb,
+ 0x008f, 0xdc0a,
+ 0x001b, 0xa055,
+ 0x0017, 0xc903,
+ 0x00c1, 0x012d,
+ 0x0083, 0xc045,
+ 0x0083, 0xc242,
+ 0x0000, 0x0134,
+ 0x0003, 0xc245,
+ 0x0003, 0xc042,
+ 0x0000, 0x0134,
+ 0x001b, 0xa055,
+ 0x0097, 0xc103,
+ 0x00c1, 0x012d,
+ 0x0000, 0x012a,
+ 0x001b, 0xa355,
+ 0x0017, 0xcc03,
+ 0x00c1, 0x013c,
+ 0x001f, 0xc80f,
+ 0x009e, 0xd303,
+ 0x0003, 0x0344,
+ 0x0003, 0xc843,
+ 0x0000, 0x0145,
+ 0x008f, 0xef06,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xd344,
+ 0x0083, 0xc043,
+ 0x0000, 0x0145,
+ 0x0017, 0xc503,
+ 0x00c1, 0x013f,
+ 0x0000, 0x0137,
+ 0x009b, 0xa155,
+ 0x0003, 0x03e2,
+ 0x001a, 0x0040,
+ 0x0017, 0xe203,
+ 0x0041, 0x0152,
+ 0x0083, 0xc296,
+ 0x009f, 0xd20f,
+ 0x0019, 0xc103,
+ 0x0083, 0x0398,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xd298,
+ 0x0003, 0xc696,
+ 0x009b, 0xa755,
+ 0x0017, 0x5a03,
+ 0x00c1, 0x015c,
+ 0x009a, 0x000a,
+ 0x009e, 0xd303,
+ 0x0083, 0x0346,
+ 0x009a, 0x000a,
+ 0x0003, 0x0347,
+ 0x0000, 0x0164,
+ 0x000f, 0xa704,
+ 0x0003, 0xd346,
+ 0x0003, 0xc047,
+ 0x0000, 0x0164,
+ 0x009b, 0xa755,
+ 0x0097, 0xc203,
+ 0x0041, 0x015d,
+ 0x0080, 0x0156,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0344,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0345,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0346,
+ 0x0003, 0x0399,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0088, 0xde22,
+ 0x001a, 0x000d,
+ 0x009e, 0x8303,
+ 0x0083, 0x0383,
+ 0x0003, 0xcc4b,
+ 0x009c, 0x58e5,
+ 0x0003, 0x034d,
+ 0x009e, 0x834b,
+ 0x0083, 0x0383,
+ 0x001c, 0x4bc1,
+ 0x0003, 0x034b,
+ 0x0017, 0x4b4d,
+ 0x0020, 0x0184,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0000, 0x017a,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0091, 0x834b,
+ 0x0083, 0x0383,
+ 0x009d, 0x4bc1,
+ 0x0003, 0x034b,
+ 0x0017, 0x4bc9,
+ 0x00a0, 0x0191,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0080, 0x0187,
+ 0x001a, 0x001f,
+ 0x0091, 0x8303,
+ 0x0083, 0x0383,
+ 0x0000, 0x0198,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0080, 0x019a,
+ 0x0000, 0x0006,
+ 0x0091, 0x40ca,
+ 0x0011, 0x5c03,
+ 0x0003, 0x038e,
+ 0x001e, 0x41c5,
+ 0x001e, 0x0348,
+ 0x0003, 0x0390,
+ 0x001f, 0xc80f,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0343,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0342,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0347,
+ 0x0003, 0x0399,
+ 0x0083, 0xcbf9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc1b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x0083, 0x408e,
+ 0x0003, 0x4190,
+ 0x009f, 0xc50f,
+ 0x0099, 0x03c9,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x0003, 0xcff9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc2b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd5b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcef9,
+ 0x0098, 0xec00,
+ 0x0083, 0x03ec,
+ 0x009a, 0x0050,
+ 0x0097, 0x03ec,
+ 0x00c1, 0x01d8,
+ 0x0003, 0x5886,
+ 0x0003, 0xc0db,
+ 0x008b, 0x85bf,
+ 0x0080, 0x00c4,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00ae, 0x8005,
+ 0x000f, 0x0303,
+ 0x001e, 0x035f,
+ 0x00e1, 0x0000,
+ 0x0099, 0x5f03,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf85,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+}, {
+ 0x009a, 0xb616,
+ 0x0009, 0xbf02,
+ 0x0000, 0x0000,
+ 0x0083, 0xc184,
+ 0x0003, 0xc084,
+ 0x0083, 0x4f4b,
+ 0x0083, 0x408e,
+ 0x0003, 0x4f83,
+ 0x0003, 0x4190,
+ 0x0083, 0xe0db,
+ 0x0083, 0xc0ec,
+ 0x0004, 0xed04,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x00e0, 0x01a5,
+ 0x0083, 0xc086,
+ 0x001a, 0xb701,
+ 0x00e0, 0x01a5,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x0020, 0x001a,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x00e0, 0x01a5,
+ 0x0003, 0xc2bf,
+ 0x00e0, 0x01a5,
+ 0x008a, 0xde02,
+ 0x0000, 0x001e,
+ 0x008e, 0x8502,
+ 0x0080, 0x0010,
+ 0x0018, 0x9300,
+ 0x0003, 0x0393,
+ 0x001b, 0x4f80,
+ 0x0083, 0x0380,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x0083, 0xc0b9,
+ 0x0083, 0xc7ff,
+ 0x0003, 0xc082,
+ 0x0024, 0x8508,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x00a0, 0x0030,
+ 0x000c, 0x8585,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0x49b8,
+ 0x0083, 0xc052,
+ 0x0098, 0x5200,
+ 0x0083, 0x0352,
+ 0x0099, 0xb853,
+ 0x0003, 0x03b8,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x00a4, 0x8505,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x0020, 0x003e,
+ 0x008f, 0x8587,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x009a, 0x0104,
+ 0x0083, 0x03b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0060, 0x01ae,
+ 0x0003, 0xc0e4,
+ 0x0018, 0xe400,
+ 0x0003, 0x03e4,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0060, 0x01c2,
+ 0x00e0, 0x01cf,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0397,
+ 0x0003, 0xd398,
+ 0x0083, 0xd399,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x009f, 0xe40f,
+ 0x0017, 0xd703,
+ 0x00c1, 0x0049,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x008b, 0x8515,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x000b, 0x8511,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x008b, 0x850d,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0004, 0xb609,
+ 0x008b, 0x8508,
+ 0x001a, 0x001c,
+ 0x0097, 0x03b6,
+ 0x0041, 0x0077,
+ 0x0097, 0xb64b,
+ 0x0041, 0x0077,
+ 0x0083, 0xb64b,
+ 0x0083, 0xb84c,
+ 0x001a, 0x000b,
+ 0x0097, 0x5203,
+ 0x00a1, 0x0032,
+ 0x0011, 0x4c51,
+ 0x0003, 0x03b8,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x00a4, 0x8505,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x00a0, 0x0084,
+ 0x008f, 0x8584,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0397,
+ 0x0003, 0xd398,
+ 0x0083, 0xd399,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x001b, 0x57ba,
+ 0x0083, 0x03b9,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0380,
+ 0x0083, 0x0380,
+ 0x001a, 0xb701,
+ 0x00e0, 0x01a5,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x00a0, 0x00a0,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x00e0, 0x01a5,
+ 0x0003, 0xc2bf,
+ 0x00e0, 0x01a5,
+ 0x001b, 0x57a1,
+ 0x00e0, 0x01e2,
+ 0x0083, 0x03f2,
+ 0x009b, 0x57a0,
+ 0x00e0, 0x01e2,
+ 0x0083, 0x03dc,
+ 0x0083, 0x4a9c,
+ 0x0098, 0xea00,
+ 0x0083, 0x03ea,
+ 0x001f, 0xce0f,
+ 0x0097, 0x03ea,
+ 0x00c1, 0x00e6,
+ 0x0084, 0xed0f,
+ 0x009a, 0x8086,
+ 0x0083, 0x03bf,
+ 0x009a, 0x3408,
+ 0x00e0, 0x01a5,
+ 0x001a, 0xb40b,
+ 0x00e0, 0x01a5,
+ 0x0097, 0xbf60,
+ 0x00a0, 0x00b8,
+ 0x0083, 0xbf60,
+ 0x0003, 0xc1bf,
+ 0x0080, 0x00b9,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x00e0, 0x01a5,
+ 0x0060, 0x01ae,
+ 0x009b, 0xa155,
+ 0x0042, 0x0000,
+ 0x0083, 0x03ea,
+ 0x009f, 0xc90f,
+ 0x0097, 0xea03,
+ 0x00c1, 0x00c7,
+ 0x009f, 0xc90f,
+ 0x001e, 0x03c6,
+ 0x0097, 0x03ea,
+ 0x00c1, 0x00ce,
+ 0x0080, 0x00d5,
+ 0x009f, 0xfa0f,
+ 0x0097, 0x03cd,
+ 0x0020, 0x00d5,
+ 0x0041, 0x00d2,
+ 0x0018, 0xfa00,
+ 0x0003, 0x03fa,
+ 0x0080, 0x00d5,
+ 0x009f, 0xfa0f,
+ 0x0017, 0xc003,
+ 0x0020, 0x00d5,
+ 0x00c1, 0x00cb,
+ 0x009f, 0xfa0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03fa,
+ 0x0083, 0xc0ea,
+ 0x001b, 0xa355,
+ 0x0003, 0x03e2,
+ 0x009e, 0x54c9,
+ 0x0017, 0xe203,
+ 0x00c1, 0x00e0,
+ 0x0084, 0xb90b,
+ 0x001f, 0xc10f,
+ 0x009e, 0xb903,
+ 0x0083, 0x03b9,
+ 0x0080, 0x00e6,
+ 0x0097, 0x54e2,
+ 0x00c1, 0x00e6,
+ 0x0017, 0xb957,
+ 0x0020, 0x00e6,
+ 0x0098, 0xb900,
+ 0x0083, 0x03b9,
+ 0x009e, 0x55c4,
+ 0x0097, 0xb903,
+ 0x00c1, 0x00f1,
+ 0x0004, 0xff13,
+ 0x009f, 0xff0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x0019, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x0000, 0x00fc,
+ 0x0099, 0xcc55,
+ 0x0097, 0x03b9,
+ 0x0041, 0x00fc,
+ 0x009f, 0xff0f,
+ 0x0097, 0x03c7,
+ 0x0041, 0x00fc,
+ 0x0018, 0xff00,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x009e, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x008f, 0xf20c,
+ 0x009b, 0xa155,
+ 0x0097, 0x5d03,
+ 0x00c1, 0x0105,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0003, 0x0344,
+ 0x0003, 0xc243,
+ 0x0080, 0x010c,
+ 0x0083, 0xd344,
+ 0x0083, 0xc043,
+ 0x0080, 0x010c,
+ 0x009b, 0xa155,
+ 0x0097, 0xc103,
+ 0x00c1, 0x0105,
+ 0x0080, 0x0100,
+ 0x001b, 0xa055,
+ 0x0097, 0xc803,
+ 0x00c1, 0x0114,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0345,
+ 0x0083, 0xc242,
+ 0x0000, 0x0120,
+ 0x0003, 0xd345,
+ 0x0003, 0xc042,
+ 0x008f, 0xdc0a,
+ 0x0097, 0xc103,
+ 0x0041, 0x0120,
+ 0x001b, 0xa055,
+ 0x0017, 0xc003,
+ 0x0041, 0x0120,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0345,
+ 0x0083, 0xc242,
+ 0x0003, 0xd346,
+ 0x0003, 0xc047,
+ 0x008f, 0xa70a,
+ 0x009b, 0xa755,
+ 0x0097, 0xce03,
+ 0x00c1, 0x012b,
+ 0x001e, 0x46c8,
+ 0x0083, 0x0346,
+ 0x0091, 0x47c8,
+ 0x0003, 0x0347,
+ 0x0080, 0x0130,
+ 0x0080, 0x0130,
+ 0x009b, 0xa755,
+ 0x0097, 0xc103,
+ 0x00c1, 0x012b,
+ 0x0000, 0x0126,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x000f, 0xa60a,
+ 0x001b, 0xa655,
+ 0x0097, 0xce03,
+ 0x0041, 0x013b,
+ 0x001e, 0x46c2,
+ 0x0083, 0x0346,
+ 0x0091, 0x47c2,
+ 0x0003, 0x0347,
+ 0x0000, 0x0140,
+ 0x0000, 0x0140,
+ 0x001b, 0xa655,
+ 0x0097, 0xc103,
+ 0x0041, 0x013b,
+ 0x0080, 0x0136,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0345,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0344,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0346,
+ 0x0003, 0x0399,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0088, 0xde1e,
+ 0x001f, 0xcd0f,
+ 0x009e, 0x8303,
+ 0x0083, 0x0383,
+ 0x0003, 0xcc4b,
+ 0x009c, 0x58c8,
+ 0x0003, 0x034d,
+ 0x009e, 0x834b,
+ 0x0083, 0x0383,
+ 0x001c, 0x4bc1,
+ 0x0003, 0x034b,
+ 0x0017, 0x4b4d,
+ 0x0020, 0x0160,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0080, 0x0156,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0091, 0x834b,
+ 0x0083, 0x0383,
+ 0x009d, 0x4bc1,
+ 0x0003, 0x034b,
+ 0x0017, 0x4bc9,
+ 0x00a0, 0x016d,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0080, 0x0163,
+ 0x0003, 0x4f83,
+ 0x0091, 0x40ca,
+ 0x0011, 0x5c03,
+ 0x0003, 0x038e,
+ 0x001e, 0x41c5,
+ 0x001e, 0x0348,
+ 0x0003, 0x0390,
+ 0x0091, 0x40ca,
+ 0x001e, 0x0348,
+ 0x009e, 0x0358,
+ 0x0083, 0x038f,
+ 0x001f, 0xc80f,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x0080, 0x017e,
+ 0x0000, 0x0005,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0342,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0343,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0347,
+ 0x0003, 0x0399,
+ 0x0060, 0x01c2,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x001e, 0x4058,
+ 0x009e, 0x0358,
+ 0x0003, 0x038e,
+ 0x0003, 0x4190,
+ 0x0099, 0x4058,
+ 0x0083, 0x038f,
+ 0x001a, 0x0025,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x00e0, 0x01cf,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0098, 0xec00,
+ 0x0083, 0x03ec,
+ 0x009a, 0x0050,
+ 0x0097, 0x03ec,
+ 0x00c1, 0x019f,
+ 0x0003, 0x5886,
+ 0x0003, 0xc0db,
+ 0x008b, 0x85a2,
+ 0x0000, 0x0096,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf85,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0093, 0x0000,
+ 0x001f, 0x8761,
+ 0x0003, 0x03f6,
+ 0x001a, 0x0160,
+ 0x001e, 0x03f6,
+ 0x0003, 0x03f6,
+ 0x0017, 0xd103,
+ 0x00c1, 0x01b8,
+ 0x0083, 0xd1fb,
+ 0x0000, 0x01bf,
+ 0x001a, 0x0094,
+ 0x0017, 0xf603,
+ 0x00c1, 0x01be,
+ 0x001a, 0x0094,
+ 0x0083, 0x03fb,
+ 0x0000, 0x01bf,
+ 0x0083, 0xf6fb,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcbf9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc1b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xcff9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc2b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd5b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcef9,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00ae, 0x8005,
+ 0x000f, 0x0303,
+ 0x001e, 0x035f,
+ 0x00e1, 0x0000,
+ 0x0099, 0x5f03,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+}, {
+ 0x009a, 0xb616,
+ 0x00e0, 0x01db,
+ 0x008b, 0xbf02,
+ 0x0000, 0x0000,
+ 0x0083, 0xc184,
+ 0x0003, 0xc084,
+ 0x0004, 0xed04,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x00e0, 0x01db,
+ 0x0083, 0x408e,
+ 0x0003, 0x4f83,
+ 0x0003, 0x4190,
+ 0x0083, 0x4f4b,
+ 0x0083, 0xe0db,
+ 0x0083, 0xc0ec,
+ 0x0083, 0xc0ea,
+ 0x0083, 0xc086,
+ 0x001a, 0xb701,
+ 0x00e0, 0x01db,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x0020, 0x001c,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x00e0, 0x01db,
+ 0x0003, 0xc2bf,
+ 0x00e0, 0x01db,
+ 0x008a, 0xde02,
+ 0x0080, 0x0020,
+ 0x008e, 0x8502,
+ 0x0000, 0x0012,
+ 0x0083, 0xc44d,
+ 0x0018, 0x9300,
+ 0x0003, 0x0393,
+ 0x001b, 0x4f80,
+ 0x0083, 0x0380,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x0083, 0xc0b9,
+ 0x0083, 0xc7ff,
+ 0x0003, 0xc082,
+ 0x0024, 0x8507,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x0020, 0x0032,
+ 0x000f, 0x8585,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0x49b8,
+ 0x0083, 0xc052,
+ 0x0003, 0xf3fa,
+ 0x0080, 0x003e,
+ 0x0018, 0x9600,
+ 0x0003, 0x0396,
+ 0x0083, 0xf1fa,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x0083, 0x49b8,
+ 0x0083, 0xc052,
+ 0x0098, 0x5200,
+ 0x0083, 0x0352,
+ 0x0099, 0xb853,
+ 0x0003, 0x03b8,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x00a4, 0x8505,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x0020, 0x004a,
+ 0x008f, 0x8587,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x009a, 0x0104,
+ 0x0083, 0x03b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00e0, 0x01e4,
+ 0x0003, 0xc0e4,
+ 0x0018, 0xe400,
+ 0x0003, 0x03e4,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0060, 0x01ba,
+ 0x0060, 0x01c8,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0397,
+ 0x0003, 0xd398,
+ 0x0083, 0xd399,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x009f, 0xe40f,
+ 0x0017, 0xd703,
+ 0x0041, 0x0055,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x008b, 0x8516,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x000b, 0x8512,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x008b, 0x850e,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0004, 0xb60a,
+ 0x000b, 0x8509,
+ 0x001a, 0x001c,
+ 0x0097, 0x03b6,
+ 0x0041, 0x0081,
+ 0x0097, 0xb64b,
+ 0x0041, 0x0081,
+ 0x0083, 0xb64b,
+ 0x0083, 0xb84c,
+ 0x0003, 0x964d,
+ 0x001a, 0x000b,
+ 0x0097, 0x5203,
+ 0x00a1, 0x003e,
+ 0x009f, 0x960f,
+ 0x0017, 0x03c5,
+ 0x0021, 0x0036,
+ 0x0083, 0x4cb8,
+ 0x0003, 0x4d96,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x00a4, 0x8505,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x0020, 0x0091,
+ 0x008f, 0x8584,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0397,
+ 0x0003, 0xd398,
+ 0x0083, 0xd399,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x001b, 0x57ba,
+ 0x0083, 0x03b9,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0380,
+ 0x0083, 0x0380,
+ 0x009b, 0x57a3,
+ 0x00e0, 0x01b2,
+ 0x0083, 0x03ef,
+ 0x001b, 0x57a1,
+ 0x00e0, 0x01b2,
+ 0x0083, 0x03f2,
+ 0x009b, 0x57a0,
+ 0x00e0, 0x01b2,
+ 0x0083, 0x03dc,
+ 0x009b, 0x57a5,
+ 0x00e0, 0x01b2,
+ 0x0083, 0x03f4,
+ 0x0083, 0x4a9c,
+ 0x0098, 0xea00,
+ 0x0083, 0x03ea,
+ 0x001f, 0xc80f,
+ 0x0097, 0x03ea,
+ 0x0041, 0x00f0,
+ 0x0084, 0xed0f,
+ 0x009a, 0x8086,
+ 0x0083, 0x03bf,
+ 0x009a, 0x3408,
+ 0x00e0, 0x01db,
+ 0x001a, 0xb40b,
+ 0x00e0, 0x01db,
+ 0x0097, 0xbf60,
+ 0x0020, 0x00c1,
+ 0x0083, 0xbf60,
+ 0x0003, 0xc1bf,
+ 0x0080, 0x00c2,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x00e0, 0x01db,
+ 0x00e0, 0x01e4,
+ 0x001b, 0xa555,
+ 0x0042, 0x0000,
+ 0x0083, 0x03ea,
+ 0x009f, 0xc90f,
+ 0x0019, 0x03c4,
+ 0x0097, 0xea03,
+ 0x0041, 0x00d1,
+ 0x009f, 0xc90f,
+ 0x009e, 0x03c4,
+ 0x0097, 0x03ea,
+ 0x0041, 0x00d8,
+ 0x0080, 0x00df,
+ 0x009f, 0xfa0f,
+ 0x0097, 0x03f1,
+ 0x0020, 0x00df,
+ 0x00c1, 0x00dc,
+ 0x0018, 0xfa00,
+ 0x0003, 0x03fa,
+ 0x0080, 0x00df,
+ 0x009f, 0xfa0f,
+ 0x0017, 0xf303,
+ 0x0020, 0x00df,
+ 0x00c1, 0x00d5,
+ 0x009f, 0xfa0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03fa,
+ 0x0083, 0xc0ea,
+ 0x001b, 0xa355,
+ 0x0003, 0x03e2,
+ 0x009e, 0x54c9,
+ 0x0017, 0xe203,
+ 0x00c1, 0x00ea,
+ 0x0084, 0xb90b,
+ 0x001f, 0xc10f,
+ 0x009e, 0xb903,
+ 0x0083, 0x03b9,
+ 0x0000, 0x00f0,
+ 0x0097, 0x54e2,
+ 0x0041, 0x00f0,
+ 0x0017, 0xb957,
+ 0x00a0, 0x00f0,
+ 0x0098, 0xb900,
+ 0x0083, 0x03b9,
+ 0x009e, 0x55c4,
+ 0x0097, 0xb903,
+ 0x00c1, 0x00fb,
+ 0x0004, 0xff13,
+ 0x009f, 0xff0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x0019, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x0080, 0x0106,
+ 0x0099, 0xcc55,
+ 0x0097, 0x03b9,
+ 0x00c1, 0x0106,
+ 0x009f, 0xff0f,
+ 0x0097, 0x03c7,
+ 0x00c1, 0x0106,
+ 0x0018, 0xff00,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x009e, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x000f, 0xf216,
+ 0x001b, 0xa555,
+ 0x0017, 0x03c9,
+ 0x00c1, 0x0111,
+ 0x009b, 0xa755,
+ 0x0097, 0x03c8,
+ 0x00c1, 0x0111,
+ 0x009b, 0xa155,
+ 0x0017, 0xc903,
+ 0x0041, 0x0119,
+ 0x0080, 0x0114,
+ 0x009b, 0xa155,
+ 0x0017, 0x5603,
+ 0x0041, 0x0119,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0003, 0x0344,
+ 0x0003, 0xc243,
+ 0x0000, 0x0120,
+ 0x0083, 0xd344,
+ 0x0083, 0xc043,
+ 0x0000, 0x0120,
+ 0x009b, 0xa155,
+ 0x0097, 0xc103,
+ 0x0041, 0x0119,
+ 0x0080, 0x0114,
+ 0x008f, 0xf40a,
+ 0x001b, 0xa555,
+ 0x0097, 0x5403,
+ 0x0041, 0x0129,
+ 0x001e, 0x44cc,
+ 0x0003, 0x0344,
+ 0x0091, 0x43cc,
+ 0x0083, 0x0343,
+ 0x0080, 0x012e,
+ 0x0080, 0x012e,
+ 0x001b, 0xa555,
+ 0x0017, 0xc503,
+ 0x0041, 0x0129,
+ 0x0080, 0x0124,
+ 0x001b, 0xa055,
+ 0x0097, 0xc803,
+ 0x00c1, 0x0136,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0345,
+ 0x0083, 0xc242,
+ 0x0080, 0x0142,
+ 0x0003, 0xd345,
+ 0x0003, 0xc042,
+ 0x008f, 0xdc0a,
+ 0x0097, 0xc103,
+ 0x00c1, 0x0142,
+ 0x001b, 0xa055,
+ 0x0017, 0xc003,
+ 0x00c1, 0x0142,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0345,
+ 0x0083, 0xc242,
+ 0x0003, 0xd346,
+ 0x0003, 0xc047,
+ 0x008f, 0xa70a,
+ 0x009b, 0xa755,
+ 0x0017, 0xc903,
+ 0x00c1, 0x014d,
+ 0x001e, 0x46c8,
+ 0x0083, 0x0346,
+ 0x0091, 0x47c8,
+ 0x0003, 0x0347,
+ 0x0000, 0x0152,
+ 0x0000, 0x0152,
+ 0x009b, 0xa755,
+ 0x0097, 0xc103,
+ 0x00c1, 0x014d,
+ 0x0080, 0x0148,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0x9e9f,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0345,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0344,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0346,
+ 0x0003, 0x0399,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0088, 0xde24,
+ 0x0000, 0x0167,
+ 0x0000, 0x0006,
+ 0x001a, 0x000d,
+ 0x009e, 0x8303,
+ 0x0083, 0x0383,
+ 0x0003, 0xcc4b,
+ 0x009c, 0x58e5,
+ 0x0003, 0x034d,
+ 0x009e, 0x834b,
+ 0x0083, 0x0383,
+ 0x001c, 0x4bc1,
+ 0x0003, 0x034b,
+ 0x0017, 0x4b4d,
+ 0x0020, 0x0177,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0000, 0x016d,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0091, 0x834b,
+ 0x0083, 0x0383,
+ 0x009d, 0x4bc1,
+ 0x0003, 0x034b,
+ 0x0017, 0x4bc9,
+ 0x0020, 0x0184,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0000, 0x017a,
+ 0x001a, 0x001f,
+ 0x0091, 0x8303,
+ 0x0083, 0x0383,
+ 0x0080, 0x018b,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0091, 0x40ca,
+ 0x0011, 0x5c03,
+ 0x0003, 0x038e,
+ 0x001e, 0x41c5,
+ 0x001e, 0x0348,
+ 0x0003, 0x0390,
+ 0x001f, 0xc80f,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0342,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0343,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0347,
+ 0x0003, 0x0399,
+ 0x0060, 0x01ba,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x0083, 0x408e,
+ 0x0003, 0x4190,
+ 0x001a, 0x0025,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x0060, 0x01c8,
+ 0x0098, 0xec00,
+ 0x0083, 0x03ec,
+ 0x009a, 0x0050,
+ 0x0097, 0x03ec,
+ 0x0041, 0x01b0,
+ 0x0003, 0x5886,
+ 0x0003, 0xc0db,
+ 0x000b, 0x85ca,
+ 0x0000, 0x00a3,
+ 0x00ae, 0x8005,
+ 0x000f, 0x0303,
+ 0x001e, 0x035f,
+ 0x00e1, 0x0000,
+ 0x0099, 0x5f03,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcbf9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc1b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xcff9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc2b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd5b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcef9,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf85,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0093, 0x0000,
+ 0x001f, 0x8761,
+ 0x0003, 0x03f6,
+ 0x009a, 0x0170,
+ 0x001e, 0x03f6,
+ 0x0003, 0x03f6,
+ 0x0017, 0xd103,
+ 0x00c1, 0x01ee,
+ 0x0083, 0xd1fb,
+ 0x0080, 0x01f5,
+ 0x001a, 0x0094,
+ 0x0017, 0xf603,
+ 0x0041, 0x01f4,
+ 0x001a, 0x0094,
+ 0x0083, 0x03fb,
+ 0x0080, 0x01f5,
+ 0x0083, 0xf6fb,
+ 0x009a, 0x00e7,
+ 0x0017, 0x03f6,
+ 0x0041, 0x01fd,
+ 0x001a, 0x00ec,
+ 0x0017, 0x03f6,
+ 0x0041, 0x01fe,
+ 0x0003, 0xeb81,
+ 0x0000, 0x01fe,
+ 0x0003, 0xe781,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+}, {
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x009a, 0xb616,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf86,
+ 0x000a, 0xbf02,
+ 0x0080, 0x0007,
+ 0x0004, 0xed04,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x0060, 0x0123,
+ 0x0083, 0x408e,
+ 0x0003, 0x4190,
+ 0x0083, 0xc184,
+ 0x0083, 0x4f4b,
+ 0x0003, 0xccfc,
+ 0x0003, 0xc0e1,
+ 0x0018, 0x9300,
+ 0x0003, 0x0393,
+ 0x0003, 0xc084,
+ 0x0083, 0xc086,
+ 0x0003, 0x4f83,
+ 0x0083, 0xe0db,
+ 0x001a, 0xb701,
+ 0x0060, 0x0123,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x0020, 0x002a,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x0060, 0x0123,
+ 0x0003, 0xc2bf,
+ 0x0060, 0x0123,
+ 0x008a, 0xde02,
+ 0x0000, 0x002e,
+ 0x008e, 0x8502,
+ 0x0080, 0x0020,
+ 0x0093, 0x0000,
+ 0x001f, 0x8761,
+ 0x0003, 0x03f6,
+ 0x009a, 0x0170,
+ 0x001e, 0x03f6,
+ 0x0003, 0x03f6,
+ 0x0017, 0xd103,
+ 0x00c1, 0x0038,
+ 0x0083, 0xd1fb,
+ 0x0000, 0x003f,
+ 0x001a, 0x0094,
+ 0x0017, 0xf603,
+ 0x00c1, 0x003e,
+ 0x001a, 0x0094,
+ 0x0083, 0x03fb,
+ 0x0000, 0x003f,
+ 0x0083, 0xf6fb,
+ 0x0091, 0xc951,
+ 0x0083, 0x0391,
+ 0x001b, 0x4f80,
+ 0x0083, 0x0380,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x0083, 0x49b8,
+ 0x0083, 0xc0b9,
+ 0x0083, 0xc7ff,
+ 0x009f, 0xcc0f,
+ 0x0099, 0x03c9,
+ 0x0003, 0x039a,
+ 0x0003, 0xc096,
+ 0x0003, 0xc04d,
+ 0x0003, 0xc082,
+ 0x0024, 0xde03,
+ 0x0042, 0x0000,
+ 0x00a4, 0x8581,
+ 0x0080, 0x0058,
+ 0x0018, 0x9600,
+ 0x0003, 0x0396,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x0003, 0xf3fa,
+ 0x0008, 0x9302,
+ 0x0083, 0xf1fa,
+ 0x0011, 0x5149,
+ 0x0003, 0x03b8,
+ 0x0083, 0xc052,
+ 0x009f, 0x960f,
+ 0x0017, 0x03c0,
+ 0x0021, 0x0065,
+ 0x009f, 0xcc0f,
+ 0x0099, 0x03c5,
+ 0x0003, 0x03fc,
+ 0x0080, 0x0076,
+ 0x009f, 0x960f,
+ 0x0097, 0x03c1,
+ 0x0021, 0x006c,
+ 0x009f, 0xcc0f,
+ 0x0099, 0x03c5,
+ 0x0003, 0x03fc,
+ 0x0080, 0x0076,
+ 0x009f, 0x960f,
+ 0x0097, 0x03c2,
+ 0x00a1, 0x0073,
+ 0x009f, 0xcc0f,
+ 0x0019, 0x03c1,
+ 0x0003, 0x03fc,
+ 0x0080, 0x0076,
+ 0x009f, 0xcc0f,
+ 0x0019, 0x03c1,
+ 0x0003, 0x03fc,
+ 0x0098, 0x5200,
+ 0x0083, 0x0352,
+ 0x0099, 0xb853,
+ 0x0003, 0x03b8,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x00a4, 0x8505,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x00a0, 0x0082,
+ 0x008f, 0x8587,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x009a, 0x0104,
+ 0x0083, 0x03b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc0e4,
+ 0x0018, 0xe400,
+ 0x0003, 0x03e4,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0083, 0xcbf9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc1b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xcff9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc2b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd5b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcef9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0397,
+ 0x0003, 0xd398,
+ 0x0083, 0xd399,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x009f, 0xe40f,
+ 0x0017, 0xd703,
+ 0x00c1, 0x008c,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x000b, 0x8517,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x008b, 0x8513,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x000b, 0x850f,
+ 0x0083, 0x5089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0084, 0xb60b,
+ 0x000b, 0x850a,
+ 0x001a, 0x001c,
+ 0x0097, 0x03b6,
+ 0x00c1, 0x00d6,
+ 0x0097, 0xb64b,
+ 0x00c1, 0x00d6,
+ 0x0083, 0xb64b,
+ 0x0083, 0xb84c,
+ 0x0003, 0x964d,
+ 0x0003, 0xfc4e,
+ 0x0018, 0xe100,
+ 0x0003, 0x03e1,
+ 0x0003, 0xc0e2,
+ 0x001f, 0xc80f,
+ 0x0099, 0xc303,
+ 0x0097, 0x5203,
+ 0x00a1, 0x0076,
+ 0x009f, 0x960f,
+ 0x0017, 0x03c3,
+ 0x0021, 0x0053,
+ 0x0003, 0x4d96,
+ 0x0011, 0x4c51,
+ 0x0003, 0x03b8,
+ 0x0003, 0x4efc,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x00a4, 0x8505,
+ 0x001b, 0x57ba,
+ 0x0097, 0x5703,
+ 0x0020, 0x00ec,
+ 0x008f, 0x8584,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0397,
+ 0x0003, 0xd398,
+ 0x0083, 0xd399,
+ 0x009a, 0x0104,
+ 0x0083, 0x03b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x0011, 0x51ae,
+ 0x0083, 0x03ae,
+ 0x0083, 0xc086,
+ 0x0003, 0xc04d,
+ 0x001b, 0x57ba,
+ 0x0083, 0x03b9,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0380,
+ 0x0083, 0x0380,
+ 0x0003, 0xc0f5,
+ 0x0003, 0x554b,
+ 0x009a, 0x00b2,
+ 0x0017, 0xf603,
+ 0x00c1, 0x0112,
+ 0x001a, 0x0040,
+ 0x0003, 0x03f5,
+ 0x0099, 0x034b,
+ 0x001c, 0x4bc8,
+ 0x001c, 0x03c4,
+ 0x0099, 0x0355,
+ 0x0000, 0x0115,
+ 0x001c, 0x4bc8,
+ 0x009c, 0x03c3,
+ 0x0099, 0x0355,
+ 0x0003, 0x034b,
+ 0x009a, 0x0028,
+ 0x0003, 0x03e7,
+ 0x0003, 0xc99a,
+ 0x0083, 0xc55e,
+ 0x0083, 0xc0ec,
+ 0x0003, 0xc494,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf85,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+}, {
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc0e8,
+ 0x0000, 0x000f,
+ 0x00ae, 0x8005,
+ 0x000f, 0x0303,
+ 0x001e, 0x035f,
+ 0x00e1, 0x0000,
+ 0x0099, 0x5f03,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x00a8, 0xe80d,
+ 0x001a, 0xb701,
+ 0x00e0, 0x01f0,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x00a0, 0x001b,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x00e0, 0x01f0,
+ 0x0003, 0xc2bf,
+ 0x00e0, 0x01f0,
+ 0x0080, 0x001c,
+ 0x0083, 0xc1e8,
+ 0x009b, 0x57a3,
+ 0x00e0, 0x0008,
+ 0x0083, 0x03ef,
+ 0x001b, 0x57a2,
+ 0x00e0, 0x0008,
+ 0x0003, 0x03f0,
+ 0x001b, 0x57a1,
+ 0x00e0, 0x0008,
+ 0x0083, 0x03f2,
+ 0x009b, 0x57a0,
+ 0x00e0, 0x0008,
+ 0x0083, 0x03dc,
+ 0x009b, 0x57a5,
+ 0x00e0, 0x0008,
+ 0x0083, 0x03f4,
+ 0x0083, 0x4a9c,
+ 0x0098, 0xea00,
+ 0x0083, 0x03ea,
+ 0x001f, 0xc80f,
+ 0x0097, 0x03ea,
+ 0x0041, 0x0108,
+ 0x0084, 0xed0f,
+ 0x009a, 0x8086,
+ 0x0083, 0x03bf,
+ 0x009a, 0x3408,
+ 0x00e0, 0x01f0,
+ 0x001a, 0xb40b,
+ 0x00e0, 0x01f0,
+ 0x0097, 0xbf60,
+ 0x0020, 0x003d,
+ 0x0083, 0xbf60,
+ 0x0003, 0xc1bf,
+ 0x0080, 0x003e,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x00e0, 0x01f0,
+ 0x0093, 0x0000,
+ 0x001f, 0x8761,
+ 0x0003, 0x03f6,
+ 0x009a, 0x0170,
+ 0x001e, 0x03f6,
+ 0x0003, 0x03f6,
+ 0x0017, 0xd103,
+ 0x00c1, 0x004a,
+ 0x0083, 0xd1fb,
+ 0x0080, 0x0051,
+ 0x001a, 0x0094,
+ 0x0017, 0xf603,
+ 0x0041, 0x0050,
+ 0x001a, 0x0094,
+ 0x0083, 0x03fb,
+ 0x0080, 0x0051,
+ 0x0083, 0xf6fb,
+ 0x009a, 0x00d4,
+ 0x0017, 0x03f6,
+ 0x0041, 0x005c,
+ 0x001a, 0x00dc,
+ 0x0017, 0x03f6,
+ 0x0041, 0x005f,
+ 0x0083, 0xb1fe,
+ 0x0003, 0xcdf1,
+ 0x001a, 0x0040,
+ 0x0003, 0x03f5,
+ 0x0000, 0x005f,
+ 0x0083, 0xc3fe,
+ 0x0083, 0xebf1,
+ 0x0003, 0xc0f5,
+ 0x009b, 0xa155,
+ 0x0083, 0x03ea,
+ 0x009f, 0xc90f,
+ 0x0019, 0x03c4,
+ 0x0097, 0xea03,
+ 0x0041, 0x0093,
+ 0x001f, 0xc80f,
+ 0x0019, 0x03c2,
+ 0x0097, 0xea03,
+ 0x00c1, 0x006d,
+ 0x000f, 0xa82a,
+ 0x009b, 0xa755,
+ 0x0097, 0x03c8,
+ 0x0041, 0x0074,
+ 0x009b, 0xa855,
+ 0x0083, 0x03ea,
+ 0x008f, 0xa824,
+ 0x001f, 0xc80f,
+ 0x0099, 0x03c3,
+ 0x0097, 0x03ea,
+ 0x0041, 0x0093,
+ 0x009f, 0xcc0f,
+ 0x0019, 0x03c1,
+ 0x0017, 0x03fc,
+ 0x0041, 0x007b,
+ 0x009f, 0xfc0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03fc,
+ 0x009b, 0xa855,
+ 0x0083, 0x03ea,
+ 0x009b, 0xa755,
+ 0x0019, 0x03c8,
+ 0x0097, 0xea03,
+ 0x00c1, 0x00a4,
+ 0x009b, 0xa755,
+ 0x0017, 0x03c5,
+ 0x0041, 0x0088,
+ 0x000f, 0xa820,
+ 0x009b, 0xa855,
+ 0x0097, 0xc403,
+ 0x00c1, 0x00a4,
+ 0x009e, 0xf14d,
+ 0x0017, 0xfa03,
+ 0x0020, 0x00bc,
+ 0x00c1, 0x008f,
+ 0x0018, 0xfa00,
+ 0x0003, 0x03fa,
+ 0x0080, 0x00bc,
+ 0x009f, 0xfa0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03fa,
+ 0x0080, 0x00bc,
+ 0x001b, 0xa055,
+ 0x0097, 0xc403,
+ 0x00c1, 0x009b,
+ 0x0017, 0x03c6,
+ 0x0041, 0x0099,
+ 0x0080, 0x009d,
+ 0x0003, 0xc75e,
+ 0x0080, 0x009d,
+ 0x0083, 0xc55e,
+ 0x0080, 0x009d,
+ 0x009f, 0xcc0f,
+ 0x0019, 0x035e,
+ 0x0017, 0xfc03,
+ 0x0020, 0x00a4,
+ 0x00c1, 0x00ab,
+ 0x0018, 0xfc00,
+ 0x0003, 0x03fc,
+ 0x009f, 0xfa0f,
+ 0x0017, 0xf303,
+ 0x0041, 0x00af,
+ 0x009f, 0xfa0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03fa,
+ 0x0080, 0x00bc,
+ 0x009f, 0xfc0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03fc,
+ 0x0080, 0x00a4,
+ 0x000f, 0xa804,
+ 0x0018, 0xfa00,
+ 0x0003, 0x03fa,
+ 0x0080, 0x00bc,
+ 0x009b, 0xa855,
+ 0x0083, 0x03ea,
+ 0x009f, 0xc60f,
+ 0x0097, 0x03ea,
+ 0x00c1, 0x00bc,
+ 0x0004, 0xfa04,
+ 0x009f, 0xfa0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03fa,
+ 0x009b, 0xa755,
+ 0x0097, 0x03c4,
+ 0x00c1, 0x00ce,
+ 0x001b, 0xa655,
+ 0x0097, 0x03c4,
+ 0x00c1, 0x00ce,
+ 0x009b, 0xa255,
+ 0x0097, 0x5b03,
+ 0x00c1, 0x00ce,
+ 0x009b, 0xa855,
+ 0x0097, 0x5b03,
+ 0x00c1, 0x00ce,
+ 0x009f, 0x4d0f,
+ 0x0017, 0x03c6,
+ 0x0041, 0x00d1,
+ 0x0018, 0x4d00,
+ 0x0003, 0x034d,
+ 0x0000, 0x00d1,
+ 0x0084, 0x4d03,
+ 0x009e, 0x4dc1,
+ 0x0003, 0x034d,
+ 0x0083, 0xc0ea,
+ 0x001b, 0xa355,
+ 0x0003, 0x03e2,
+ 0x009e, 0x54c9,
+ 0x0017, 0xe203,
+ 0x0041, 0x00de,
+ 0x001f, 0xc20f,
+ 0x0097, 0x03b9,
+ 0x00c1, 0x00e6,
+ 0x001f, 0xc20f,
+ 0x009e, 0xb903,
+ 0x0083, 0x03b9,
+ 0x0080, 0x00e6,
+ 0x0097, 0x54e2,
+ 0x00c1, 0x00e6,
+ 0x001e, 0x57c2,
+ 0x0097, 0xb903,
+ 0x0020, 0x00e6,
+ 0x001f, 0xc20f,
+ 0x0019, 0xb903,
+ 0x0083, 0x03b9,
+ 0x0019, 0x4bb9,
+ 0x0003, 0x034b,
+ 0x009d, 0x4bc8,
+ 0x001d, 0x03c3,
+ 0x0083, 0x03e9,
+ 0x001e, 0x4b03,
+ 0x0003, 0x034b,
+ 0x0099, 0xf555,
+ 0x0097, 0xe903,
+ 0x0041, 0x00fa,
+ 0x0084, 0xff18,
+ 0x009f, 0xff0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x0019, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x0019, 0x4b58,
+ 0x0003, 0x034b,
+ 0x0000, 0x0108,
+ 0x009a, 0x009f,
+ 0x0099, 0x03f5,
+ 0x0097, 0x03e9,
+ 0x0041, 0x0108,
+ 0x009f, 0xff0f,
+ 0x0097, 0x03c7,
+ 0x0041, 0x0108,
+ 0x0018, 0xff00,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x009e, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x009e, 0x4b58,
+ 0x0003, 0x034b,
+ 0x009b, 0xa855,
+ 0x0083, 0x03e3,
+ 0x009a, 0x000a,
+ 0x0097, 0x03e3,
+ 0x00c1, 0x010f,
+ 0x0083, 0xc8e7,
+ 0x0080, 0x0114,
+ 0x0003, 0xcfe7,
+ 0x009b, 0xa255,
+ 0x0017, 0xc903,
+ 0x00c1, 0x0114,
+ 0x0003, 0xcce7,
+ 0x008f, 0xf20c,
+ 0x009b, 0xa155,
+ 0x0017, 0xe703,
+ 0x00c1, 0x011d,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0003, 0x0344,
+ 0x0003, 0xc243,
+ 0x0080, 0x0124,
+ 0x0083, 0xd344,
+ 0x0083, 0xc043,
+ 0x0080, 0x0124,
+ 0x009b, 0xa155,
+ 0x0097, 0xc103,
+ 0x00c1, 0x011d,
+ 0x0080, 0x0118,
+ 0x000f, 0xa702,
+ 0x0000, 0x012f,
+ 0x000f, 0xa802,
+ 0x0000, 0x012f,
+ 0x009b, 0xa855,
+ 0x0017, 0x03c6,
+ 0x0041, 0x012f,
+ 0x008f, 0xf40a,
+ 0x001b, 0xa555,
+ 0x0097, 0xc103,
+ 0x0041, 0x0134,
+ 0x001e, 0x44cc,
+ 0x0003, 0x0344,
+ 0x0091, 0x43cc,
+ 0x0083, 0x0343,
+ 0x0080, 0x0139,
+ 0x0080, 0x0139,
+ 0x001b, 0xa555,
+ 0x0097, 0xc803,
+ 0x0041, 0x0134,
+ 0x0000, 0x012f,
+ 0x001b, 0xa055,
+ 0x0097, 0xc803,
+ 0x00c1, 0x0141,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0345,
+ 0x0083, 0xc242,
+ 0x0080, 0x014d,
+ 0x0003, 0xd345,
+ 0x0003, 0xc042,
+ 0x008f, 0xdc0a,
+ 0x0097, 0xc103,
+ 0x00c1, 0x014d,
+ 0x001b, 0xa055,
+ 0x0017, 0xc003,
+ 0x00c1, 0x014d,
+ 0x001f, 0xc20f,
+ 0x009e, 0xd303,
+ 0x0083, 0x0345,
+ 0x0083, 0xc242,
+ 0x0003, 0xcfe1,
+ 0x009b, 0xa755,
+ 0x0017, 0x03c5,
+ 0x00c1, 0x0156,
+ 0x000f, 0xa804,
+ 0x009b, 0xa855,
+ 0x0017, 0x03c5,
+ 0x00c1, 0x0156,
+ 0x0003, 0xc0e1,
+ 0x001f, 0xc40f,
+ 0x001e, 0x5a03,
+ 0x0097, 0x039e,
+ 0x00c1, 0x0160,
+ 0x009b, 0xa155,
+ 0x0097, 0xcd03,
+ 0x0041, 0x015e,
+ 0x0080, 0x0160,
+ 0x0099, 0x5ac0,
+ 0x0003, 0x03e1,
+ 0x008f, 0xf00b,
+ 0x009b, 0xa255,
+ 0x0017, 0xe103,
+ 0x00c1, 0x0169,
+ 0x001e, 0x45c8,
+ 0x0083, 0x0345,
+ 0x0091, 0x42c8,
+ 0x0003, 0x0342,
+ 0x0080, 0x016f,
+ 0x0042, 0x0000,
+ 0x0080, 0x016f,
+ 0x009b, 0xa255,
+ 0x0097, 0xc103,
+ 0x00c1, 0x0169,
+ 0x0000, 0x0164,
+ 0x0003, 0xd346,
+ 0x0003, 0xc047,
+ 0x008f, 0xa70a,
+ 0x009b, 0xa755,
+ 0x0097, 0xce03,
+ 0x0041, 0x017a,
+ 0x001e, 0x46c8,
+ 0x0083, 0x0346,
+ 0x0091, 0x47c8,
+ 0x0003, 0x0347,
+ 0x0000, 0x017f,
+ 0x0000, 0x017f,
+ 0x009b, 0xa755,
+ 0x0097, 0xc103,
+ 0x0041, 0x017a,
+ 0x0000, 0x0175,
+ 0x000f, 0xa60a,
+ 0x001b, 0xa655,
+ 0x0097, 0xce03,
+ 0x00c1, 0x0188,
+ 0x001e, 0x46c2,
+ 0x0083, 0x0346,
+ 0x0091, 0x47c2,
+ 0x0003, 0x0347,
+ 0x0080, 0x018d,
+ 0x0080, 0x018d,
+ 0x001b, 0xa655,
+ 0x0097, 0xc103,
+ 0x00c1, 0x0188,
+ 0x0000, 0x0183,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0345,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0344,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0346,
+ 0x0003, 0x0399,
+ 0x0083, 0xc0df,
+ 0x0098, 0xdf00,
+ 0x0083, 0x03df,
+ 0x001a, 0x0070,
+ 0x0097, 0x03df,
+ 0x0041, 0x0197,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0091, 0x40ca,
+ 0x0011, 0x5c03,
+ 0x0003, 0x038e,
+ 0x001e, 0x41c5,
+ 0x001e, 0x0348,
+ 0x0003, 0x0390,
+ 0x0091, 0x40ca,
+ 0x001e, 0x0348,
+ 0x009e, 0x0358,
+ 0x0083, 0x038f,
+ 0x001f, 0xc80f,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x0080, 0x01af,
+ 0x0000, 0x000f,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0342,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0343,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0347,
+ 0x0003, 0x0399,
+ 0x0083, 0xcbf9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc1b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x001e, 0x4058,
+ 0x009e, 0x0358,
+ 0x0003, 0x038e,
+ 0x0003, 0x4190,
+ 0x0099, 0x4058,
+ 0x0083, 0x038f,
+ 0x009f, 0xc50f,
+ 0x0099, 0x03cc,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x0003, 0xcff9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc2b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd5b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcef9,
+ 0x0098, 0xec00,
+ 0x0083, 0x03ec,
+ 0x009a, 0x0050,
+ 0x0097, 0x03ec,
+ 0x0041, 0x01e5,
+ 0x0003, 0x5886,
+ 0x0003, 0xc0db,
+ 0x001f, 0xef0f,
+ 0x0017, 0x03d7,
+ 0x0041, 0x01ea,
+ 0x008b, 0x8502,
+ 0x0000, 0x01ae,
+ 0x0083, 0xc394,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf85,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000
+}, {
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x009a, 0xb616,
+ 0x0060, 0x00ee,
+ 0x008d, 0xbf02,
+ 0x0080, 0x0007,
+ 0x0083, 0xc0e0,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0008, 0xe384,
+ 0x0003, 0xc095,
+ 0x0083, 0xc184,
+ 0x0003, 0xc084,
+ 0x0083, 0xd1b9,
+ 0x0083, 0xc7ff,
+ 0x0003, 0xc082,
+ 0x003a, 0x000a,
+ 0x0003, 0x03fa,
+ 0x0003, 0x4190,
+ 0x0003, 0x4f83,
+ 0x0083, 0x408e,
+ 0x0004, 0xed04,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x0060, 0x00ee,
+ 0x0083, 0xc086,
+ 0x001a, 0xb701,
+ 0x0060, 0x00ee,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x0020, 0x002a,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x0060, 0x00ee,
+ 0x0003, 0xc2bf,
+ 0x0060, 0x00ee,
+ 0x008a, 0xde02,
+ 0x0000, 0x002e,
+ 0x008e, 0x8502,
+ 0x0080, 0x0020,
+ 0x0018, 0x9300,
+ 0x0003, 0x0393,
+ 0x00fa, 0x8040,
+ 0x0091, 0x03c1,
+ 0x0091, 0x0380,
+ 0x0083, 0x0380,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x0083, 0xd1b9,
+ 0x0083, 0xc7ff,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00ba, 0x0117,
+ 0x0083, 0x03bf,
+ 0x003a, 0x3b80,
+ 0x0060, 0x00ee,
+ 0x0083, 0xc182,
+ 0x009a, 0x0104,
+ 0x0083, 0x03b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x001f, 0xf80f,
+ 0x0011, 0x03d2,
+ 0x0083, 0x03f8,
+ 0x0000, 0x004b,
+ 0x0080, 0x0010,
+ 0x0083, 0xc0e3,
+ 0x0003, 0x618c,
+ 0x0083, 0x628d,
+ 0x00ba, 0x0010,
+ 0x0083, 0x03e0,
+ 0x0003, 0xe171,
+ 0x009f, 0x710f,
+ 0x009b, 0x03cd,
+ 0x0003, 0x0371,
+ 0x00e0, 0x0114,
+ 0x0060, 0x0123,
+ 0x00e0, 0x0171,
+ 0x0003, 0xc074,
+ 0x0060, 0x01ae,
+ 0x0003, 0xc0e7,
+ 0x0003, 0xc0e8,
+ 0x0098, 0xe600,
+ 0x0083, 0x03e6,
+ 0x003a, 0x0011,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x00ac, 0xda02,
+ 0x002a, 0xda0a,
+ 0x0008, 0x8605,
+ 0x0060, 0x0125,
+ 0x0060, 0x01ae,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0060, 0x0173,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0080, 0x005d,
+ 0x003a, 0x0012,
+ 0x0083, 0x03e0,
+ 0x0011, 0x7274,
+ 0x0082, 0x0f74,
+ 0x00ba, 0xdc74,
+ 0x005a, 0x0257,
+ 0x0083, 0x0375,
+ 0x00ba, 0x0020,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0123,
+ 0x00e0, 0x0171,
+ 0x0060, 0x01b9,
+ 0x0060, 0x01ae,
+ 0x003a, 0x0021,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x0029, 0x86b1,
+ 0x00ac, 0xda02,
+ 0x002a, 0xda0a,
+ 0x00ba, 0x0023,
+ 0x0083, 0x03e0,
+ 0x0088, 0x8602,
+ 0x0000, 0x0093,
+ 0x00ba, 0x002c,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0173,
+ 0x0083, 0x7273,
+ 0x0000, 0x0078,
+ 0x003a, 0x0024,
+ 0x0083, 0x03e0,
+ 0x009e, 0x7072,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002b, 0x0322,
+ 0x0097, 0x7f72,
+ 0x0020, 0x00ae,
+ 0x0011, 0x7274,
+ 0x0082, 0x0f74,
+ 0x0060, 0x01b9,
+ 0x0000, 0x007e,
+ 0x0083, 0x7072,
+ 0x0060, 0x017a,
+ 0x003a, 0x0027,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x00a9, 0x86ce,
+ 0x00ac, 0xda02,
+ 0x002a, 0xda14,
+ 0x003a, 0x0028,
+ 0x0083, 0x03e0,
+ 0x001f, 0x750f,
+ 0x0017, 0x0366,
+ 0x00c1, 0x00a8,
+ 0x00ba, 0x0029,
+ 0x0083, 0x03e0,
+ 0x0003, 0x71e8,
+ 0x0060, 0x0125,
+ 0x0083, 0x7372,
+ 0x0060, 0x0173,
+ 0x0060, 0x01ae,
+ 0x0000, 0x0078,
+ 0x0003, 0x7471,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x71e1,
+ 0x00e0, 0x0114,
+ 0x0000, 0x00a0,
+ 0x0080, 0x00b0,
+ 0x0080, 0x004a,
+ 0x003a, 0x0030,
+ 0x0083, 0x03e0,
+ 0x0003, 0x678c,
+ 0x001b, 0x7271,
+ 0x0020, 0x00b9,
+ 0x0083, 0x7270,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00e0, 0x013c,
+ 0x0060, 0x01b9,
+ 0x0060, 0x01ad,
+ 0x00ba, 0x0031,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x00a9, 0x868f,
+ 0x00ac, 0xda02,
+ 0x00aa, 0xda08,
+ 0x0060, 0x0173,
+ 0x00ba, 0x0034,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x0029, 0x8696,
+ 0x00ac, 0xda85,
+ 0x00aa, 0xda97,
+ 0x0008, 0x868d,
+ 0x0083, 0xc08a,
+ 0x003a, 0x0041,
+ 0x0083, 0x03e0,
+ 0x001f, 0x700f,
+ 0x001c, 0x03c4,
+ 0x0011, 0x0372,
+ 0x0003, 0x03e4,
+ 0x003a, 0x0088,
+ 0x0017, 0x03e4,
+ 0x00a0, 0x00e7,
+ 0x0028, 0xe3a4,
+ 0x0003, 0xc2e3,
+ 0x0000, 0x00d8,
+ 0x0003, 0xc07e,
+ 0x0080, 0x00da,
+ 0x00a4, 0x860a,
+ 0x0080, 0x00d6,
+ 0x00ac, 0xda02,
+ 0x0000, 0x00ca,
+ 0x003a, 0x0009,
+ 0x0099, 0x037e,
+ 0x0082, 0x0f7e,
+ 0x0017, 0x7ee2,
+ 0x0041, 0x00e2,
+ 0x0080, 0x00da,
+ 0x0003, 0xc1e3,
+ 0x00ba, 0x1000,
+ 0x0011, 0x0395,
+ 0x0003, 0x0395,
+ 0x0000, 0x00ca,
+ 0x0003, 0xc794,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf85,
+ 0x0028, 0xe54c,
+ 0x00a9, 0xe575,
+ 0x001f, 0xe50f,
+ 0x009d, 0x03c2,
+ 0x00a8, 0x0375,
+ 0x0029, 0x0375,
+ 0x001f, 0xe50f,
+ 0x009d, 0x03c4,
+ 0x00a8, 0x0373,
+ 0x0029, 0x0373,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc0da,
+ 0x0003, 0x6489,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0x7dda,
+ 0x0083, 0x6589,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0019, 0x6465,
+ 0x009b, 0x034f,
+ 0x0099, 0x03c9,
+ 0x0019, 0x03c8,
+ 0x0019, 0x0375,
+ 0x0002, 0x0f75,
+ 0x00e1, 0x0000,
+ 0x00a8, 0xe3e1,
+ 0x003a, 0xbada,
+ 0x0083, 0x03e0,
+ 0x0000, 0x0110,
+ 0x009f, 0x710f,
+ 0x009d, 0x03c2,
+ 0x00a9, 0x0305,
+ 0x0028, 0x0306,
+ 0x0029, 0x7107,
+ 0x00a8, 0x7108,
+ 0x0000, 0x0110,
+ 0x0003, 0xc87f,
+ 0x00e1, 0x0000,
+ 0x0003, 0xc47f,
+ 0x00e1, 0x0000,
+ 0x0003, 0xc27f,
+ 0x00e1, 0x0000,
+ 0x0003, 0xc17f,
+ 0x00e1, 0x0000,
+ 0x0003, 0x7f70,
+ 0x0080, 0x013c,
+ 0x001f, 0x700f,
+ 0x009d, 0x03c2,
+ 0x00a9, 0x030a,
+ 0x00a8, 0x030e,
+ 0x00a9, 0x7010,
+ 0x0028, 0x7002,
+ 0x0000, 0x0110,
+ 0x009f, 0x710f,
+ 0x009d, 0x03c2,
+ 0x0009, 0x0303,
+ 0x0003, 0xc870,
+ 0x0080, 0x013c,
+ 0x009f, 0x710f,
+ 0x009d, 0x03c2,
+ 0x0088, 0x0303,
+ 0x0003, 0xc470,
+ 0x0080, 0x013c,
+ 0x0009, 0x7103,
+ 0x0003, 0xc270,
+ 0x0080, 0x013c,
+ 0x0088, 0x718d,
+ 0x0003, 0xc170,
+ 0x0080, 0x013c,
+ 0x0003, 0xc1e5,
+ 0x0083, 0xc0bf,
+ 0x003a, 0x0018,
+ 0x0000, 0x00ee,
+ 0x0083, 0xc0e5,
+ 0x001f, 0xf70f,
+ 0x001b, 0x0377,
+ 0x0002, 0x0f7a,
+ 0x001f, 0x700f,
+ 0x009d, 0x03c2,
+ 0x00a9, 0x0305,
+ 0x00a8, 0x0308,
+ 0x00a9, 0x700d,
+ 0x00a8, 0x7012,
+ 0x0000, 0x0110,
+ 0x001f, 0x7a0f,
+ 0x0083, 0x03f7,
+ 0x0003, 0xc378,
+ 0x0000, 0x0161,
+ 0x001f, 0xc10f,
+ 0x001c, 0x03c4,
+ 0x0091, 0x037a,
+ 0x0083, 0x03f7,
+ 0x0003, 0xc378,
+ 0x0000, 0x0161,
+ 0x001f, 0xc20f,
+ 0x001c, 0x03c4,
+ 0x0091, 0x037a,
+ 0x0083, 0x03f7,
+ 0x0083, 0xc778,
+ 0x0000, 0x0161,
+ 0x009f, 0xc30f,
+ 0x001c, 0x03c4,
+ 0x0091, 0x037a,
+ 0x0083, 0x03f7,
+ 0x0083, 0xc778,
+ 0x0000, 0x0161,
+ 0x001f, 0xf80f,
+ 0x009b, 0x0376,
+ 0x0011, 0x0378,
+ 0x0083, 0x03f8,
+ 0x0003, 0xc2e5,
+ 0x003a, 0x0022,
+ 0x0083, 0x03bf,
+ 0x003a, 0x0018,
+ 0x0000, 0x00ee,
+ 0x0083, 0xc0e5,
+ 0x00e1, 0x0000,
+ 0x0000, 0x00ee,
+ 0x0080, 0x017e,
+ 0x0080, 0x0181,
+ 0x0000, 0x01a8,
+ 0x0000, 0x01ab,
+ 0x0083, 0xc872,
+ 0x0000, 0x017a,
+ 0x009f, 0x720f,
+ 0x001c, 0x03c4,
+ 0x0011, 0x0372,
+ 0x009d, 0x03c1,
+ 0x009b, 0x03cd,
+ 0x0082, 0x0f72,
+ 0x0000, 0x017a,
+ 0x0003, 0xc4e5,
+ 0x0083, 0xc0bf,
+ 0x00ba, 0x0015,
+ 0x0080, 0x016c,
+ 0x0003, 0xc8e5,
+ 0x00ba, 0x0016,
+ 0x0080, 0x016c,
+ 0x0083, 0xc0e5,
+ 0x001f, 0xf70f,
+ 0x009b, 0x0376,
+ 0x0002, 0x0f7c,
+ 0x009f, 0x720f,
+ 0x009d, 0x03c2,
+ 0x0029, 0x0304,
+ 0x0028, 0x0306,
+ 0x00a9, 0x7209,
+ 0x0028, 0x720c,
+ 0x0003, 0x7cf7,
+ 0x0003, 0xc37b,
+ 0x0080, 0x019a,
+ 0x0011, 0x7cc1,
+ 0x0083, 0x03f7,
+ 0x0003, 0xc37b,
+ 0x0080, 0x019a,
+ 0x0011, 0x7cc2,
+ 0x0083, 0x03f7,
+ 0x0083, 0xc77b,
+ 0x0080, 0x019a,
+ 0x0091, 0x7cc3,
+ 0x0083, 0x03f7,
+ 0x0083, 0xc77b,
+ 0x0080, 0x019a,
+ 0x009f, 0x810f,
+ 0x009b, 0x0376,
+ 0x0011, 0x037b,
+ 0x0003, 0x0381,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x0083, 0xc9e5,
+ 0x003a, 0x0022,
+ 0x0083, 0x03bf,
+ 0x00ba, 0x0015,
+ 0x0080, 0x016c,
+ 0x0083, 0xcce5,
+ 0x00ba, 0x0016,
+ 0x0080, 0x016c,
+ 0x0083, 0xc0e5,
+ 0x00e1, 0x0000,
+ 0x0000, 0x01ae,
+ 0x001f, 0xc20f,
+ 0x009b, 0x038a,
+ 0x0083, 0x038a,
+ 0x0042, 0x0000,
+ 0x001f, 0xc10f,
+ 0x0091, 0x038a,
+ 0x0083, 0x038a,
+ 0x001a, 0xfffe,
+ 0x009b, 0x0386,
+ 0x0083, 0x0386,
+ 0x00e1, 0x0000,
+ 0x001f, 0xc10f,
+ 0x009b, 0x038a,
+ 0x0083, 0x038a,
+ 0x0042, 0x0000,
+ 0x001f, 0xc20f,
+ 0x0091, 0x038a,
+ 0x0083, 0x038a,
+ 0x001a, 0xfffd,
+ 0x009b, 0x0386,
+ 0x0083, 0x0386,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+}, {
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x009a, 0xb616,
+ 0x0060, 0x00ee,
+ 0x008d, 0xbf02,
+ 0x0080, 0x0007,
+ 0x0083, 0xc0e0,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0008, 0xe384,
+ 0x0003, 0xc095,
+ 0x0083, 0xc184,
+ 0x0003, 0xc084,
+ 0x0083, 0xd1b9,
+ 0x0083, 0xc7ff,
+ 0x0003, 0xc082,
+ 0x003a, 0x000a,
+ 0x0003, 0x03fa,
+ 0x0003, 0x4190,
+ 0x0003, 0x4f83,
+ 0x0083, 0x408e,
+ 0x0004, 0xed04,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3501,
+ 0x0060, 0x00ee,
+ 0x0083, 0xc086,
+ 0x001a, 0xb701,
+ 0x0060, 0x00ee,
+ 0x00ba, 0x0020,
+ 0x009b, 0x03bf,
+ 0x0020, 0x002a,
+ 0x0083, 0xc0bf,
+ 0x001a, 0x3703,
+ 0x0060, 0x00ee,
+ 0x0003, 0xc2bf,
+ 0x0060, 0x00ee,
+ 0x008a, 0xde02,
+ 0x0000, 0x002e,
+ 0x008e, 0x8502,
+ 0x0080, 0x0020,
+ 0x0018, 0x9300,
+ 0x0003, 0x0393,
+ 0x00fa, 0x8040,
+ 0x0091, 0x03c1,
+ 0x0091, 0x0380,
+ 0x0083, 0x0380,
+ 0x0083, 0xd497,
+ 0x0083, 0xd498,
+ 0x0003, 0xd499,
+ 0x0083, 0xd1b9,
+ 0x0083, 0xc7ff,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00ba, 0x0117,
+ 0x0083, 0x03bf,
+ 0x003a, 0x3b80,
+ 0x0060, 0x00ee,
+ 0x0083, 0xc182,
+ 0x009a, 0x0104,
+ 0x0083, 0x03b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x001f, 0xf80f,
+ 0x0011, 0x03d2,
+ 0x0083, 0x03f8,
+ 0x0000, 0x004b,
+ 0x0080, 0x0010,
+ 0x0083, 0xc0e3,
+ 0x0003, 0x618c,
+ 0x0083, 0x628d,
+ 0x00ba, 0x0010,
+ 0x0083, 0x03e0,
+ 0x0003, 0xe171,
+ 0x009f, 0x710f,
+ 0x009b, 0x03cd,
+ 0x0003, 0x0371,
+ 0x00e0, 0x0114,
+ 0x0060, 0x0123,
+ 0x00e0, 0x0171,
+ 0x0003, 0xc074,
+ 0x0060, 0x01ae,
+ 0x0003, 0xc0e7,
+ 0x0003, 0xc0e8,
+ 0x0098, 0xe600,
+ 0x0083, 0x03e6,
+ 0x003a, 0x0011,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x00ac, 0xda02,
+ 0x002a, 0xda0a,
+ 0x0008, 0x8605,
+ 0x0060, 0x0125,
+ 0x0060, 0x01ae,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0060, 0x0173,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0080, 0x005d,
+ 0x003a, 0x0012,
+ 0x0083, 0x03e0,
+ 0x0011, 0x7274,
+ 0x0082, 0x0f74,
+ 0x00ba, 0xdc74,
+ 0x005a, 0x0257,
+ 0x0083, 0x0375,
+ 0x00ba, 0x0020,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0123,
+ 0x00e0, 0x0171,
+ 0x0060, 0x01b9,
+ 0x0060, 0x01ae,
+ 0x003a, 0x0021,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x0029, 0x86b1,
+ 0x00ac, 0xda02,
+ 0x002a, 0xda0a,
+ 0x00ba, 0x0023,
+ 0x0083, 0x03e0,
+ 0x0088, 0x8602,
+ 0x0000, 0x0093,
+ 0x00ba, 0x002c,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0173,
+ 0x0083, 0x7273,
+ 0x0000, 0x0078,
+ 0x003a, 0x0024,
+ 0x0083, 0x03e0,
+ 0x009e, 0x7072,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002b, 0x0322,
+ 0x0097, 0x7f72,
+ 0x0020, 0x00ae,
+ 0x0011, 0x7274,
+ 0x0082, 0x0f74,
+ 0x0060, 0x01b9,
+ 0x0000, 0x007e,
+ 0x0083, 0x7072,
+ 0x0060, 0x017a,
+ 0x003a, 0x0027,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x00a9, 0x86ce,
+ 0x00ac, 0xda02,
+ 0x002a, 0xda14,
+ 0x003a, 0x0028,
+ 0x0083, 0x03e0,
+ 0x001f, 0x750f,
+ 0x0017, 0x0366,
+ 0x00c1, 0x00a8,
+ 0x00ba, 0x0029,
+ 0x0083, 0x03e0,
+ 0x0003, 0x71e8,
+ 0x0060, 0x0125,
+ 0x0083, 0x7372,
+ 0x0060, 0x0173,
+ 0x0060, 0x01ae,
+ 0x0000, 0x0078,
+ 0x0003, 0x7471,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x71e1,
+ 0x00e0, 0x0114,
+ 0x0000, 0x00a0,
+ 0x0080, 0x00b0,
+ 0x0080, 0x004a,
+ 0x003a, 0x0030,
+ 0x0083, 0x03e0,
+ 0x0003, 0x678c,
+ 0x001b, 0x7271,
+ 0x0020, 0x00b9,
+ 0x0083, 0x7270,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00e0, 0x013c,
+ 0x0060, 0x01b9,
+ 0x0060, 0x01ad,
+ 0x00ba, 0x0031,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x00a9, 0x868f,
+ 0x00ac, 0xda02,
+ 0x00aa, 0xda08,
+ 0x0060, 0x0173,
+ 0x00ba, 0x0034,
+ 0x0083, 0x03e0,
+ 0x0060, 0x0101,
+ 0x0029, 0x8696,
+ 0x00ac, 0xda85,
+ 0x00aa, 0xda97,
+ 0x0008, 0x868d,
+ 0x0083, 0xc08a,
+ 0x003a, 0x0041,
+ 0x0083, 0x03e0,
+ 0x001f, 0x700f,
+ 0x001c, 0x03c4,
+ 0x0011, 0x0372,
+ 0x0003, 0x03e4,
+ 0x003a, 0x0088,
+ 0x0017, 0x03e4,
+ 0x00a0, 0x00e7,
+ 0x0028, 0xe3a4,
+ 0x0003, 0xc2e3,
+ 0x0000, 0x00d8,
+ 0x0003, 0xc07e,
+ 0x0080, 0x00da,
+ 0x00a4, 0x860a,
+ 0x0080, 0x00d6,
+ 0x00ac, 0xda02,
+ 0x0000, 0x00ca,
+ 0x003a, 0x0009,
+ 0x0099, 0x037e,
+ 0x0082, 0x0f7e,
+ 0x0017, 0x7ee2,
+ 0x0041, 0x00e2,
+ 0x0080, 0x00da,
+ 0x0003, 0xc1e3,
+ 0x00ba, 0x1000,
+ 0x0011, 0x0395,
+ 0x0003, 0x0395,
+ 0x0000, 0x00ca,
+ 0x0003, 0xc794,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf85,
+ 0x0028, 0xe54c,
+ 0x00a9, 0xe575,
+ 0x001f, 0xe50f,
+ 0x009d, 0x03c2,
+ 0x00a8, 0x0375,
+ 0x0029, 0x0375,
+ 0x001f, 0xe50f,
+ 0x009d, 0x03c4,
+ 0x00a8, 0x0373,
+ 0x0029, 0x0373,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc0da,
+ 0x0003, 0x6489,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0x7dda,
+ 0x0083, 0x6589,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0019, 0x6465,
+ 0x009b, 0x034f,
+ 0x0099, 0x03c9,
+ 0x0019, 0x03c8,
+ 0x0019, 0x0375,
+ 0x0002, 0x0f75,
+ 0x00e1, 0x0000,
+ 0x00a8, 0xe3e1,
+ 0x003a, 0xbada,
+ 0x0083, 0x03e0,
+ 0x0000, 0x0110,
+ 0x009f, 0x710f,
+ 0x009d, 0x03c2,
+ 0x00a9, 0x0305,
+ 0x0028, 0x0306,
+ 0x0029, 0x7107,
+ 0x00a8, 0x7108,
+ 0x0000, 0x0110,
+ 0x0003, 0xc87f,
+ 0x00e1, 0x0000,
+ 0x0003, 0xc47f,
+ 0x00e1, 0x0000,
+ 0x0003, 0xc27f,
+ 0x00e1, 0x0000,
+ 0x0003, 0xc17f,
+ 0x00e1, 0x0000,
+ 0x0003, 0x7f70,
+ 0x0080, 0x013c,
+ 0x001f, 0x700f,
+ 0x009d, 0x03c2,
+ 0x00a9, 0x030a,
+ 0x00a8, 0x030e,
+ 0x00a9, 0x7010,
+ 0x0028, 0x7002,
+ 0x0000, 0x0110,
+ 0x009f, 0x710f,
+ 0x009d, 0x03c2,
+ 0x0009, 0x0303,
+ 0x0003, 0xc870,
+ 0x0080, 0x013c,
+ 0x009f, 0x710f,
+ 0x009d, 0x03c2,
+ 0x0088, 0x0303,
+ 0x0003, 0xc470,
+ 0x0080, 0x013c,
+ 0x0009, 0x7103,
+ 0x0003, 0xc270,
+ 0x0080, 0x013c,
+ 0x0088, 0x718d,
+ 0x0003, 0xc170,
+ 0x0080, 0x013c,
+ 0x0003, 0xc1e5,
+ 0x0083, 0xc0bf,
+ 0x003a, 0x0018,
+ 0x0000, 0x00ee,
+ 0x0083, 0xc0e5,
+ 0x001f, 0xf70f,
+ 0x001b, 0x0377,
+ 0x0002, 0x0f7a,
+ 0x001f, 0x700f,
+ 0x009d, 0x03c2,
+ 0x00a9, 0x0305,
+ 0x00a8, 0x0308,
+ 0x00a9, 0x700d,
+ 0x00a8, 0x7012,
+ 0x0000, 0x0110,
+ 0x001f, 0x7a0f,
+ 0x0083, 0x03f7,
+ 0x0003, 0xc378,
+ 0x0000, 0x0161,
+ 0x001f, 0xc10f,
+ 0x001c, 0x03c4,
+ 0x0091, 0x037a,
+ 0x0083, 0x03f7,
+ 0x0003, 0xc378,
+ 0x0000, 0x0161,
+ 0x001f, 0xc20f,
+ 0x001c, 0x03c4,
+ 0x0091, 0x037a,
+ 0x0083, 0x03f7,
+ 0x0083, 0xc778,
+ 0x0000, 0x0161,
+ 0x009f, 0xc30f,
+ 0x001c, 0x03c4,
+ 0x0091, 0x037a,
+ 0x0083, 0x03f7,
+ 0x0083, 0xc778,
+ 0x0000, 0x0161,
+ 0x001f, 0xf80f,
+ 0x009b, 0x0376,
+ 0x0011, 0x0378,
+ 0x0083, 0x03f8,
+ 0x0003, 0xc2e5,
+ 0x003a, 0x0022,
+ 0x0083, 0x03bf,
+ 0x003a, 0x0018,
+ 0x0000, 0x00ee,
+ 0x0083, 0xc0e5,
+ 0x00e1, 0x0000,
+ 0x0000, 0x00ee,
+ 0x0080, 0x017e,
+ 0x0080, 0x0181,
+ 0x0000, 0x01a8,
+ 0x0000, 0x01ab,
+ 0x0083, 0xc872,
+ 0x0000, 0x017a,
+ 0x009f, 0x720f,
+ 0x001c, 0x03c4,
+ 0x0011, 0x0372,
+ 0x009d, 0x03c1,
+ 0x009b, 0x03cd,
+ 0x0082, 0x0f72,
+ 0x0000, 0x017a,
+ 0x0003, 0xc4e5,
+ 0x0083, 0xc0bf,
+ 0x00ba, 0x0015,
+ 0x0080, 0x016c,
+ 0x0003, 0xc8e5,
+ 0x00ba, 0x0016,
+ 0x0080, 0x016c,
+ 0x0083, 0xc0e5,
+ 0x001f, 0xf70f,
+ 0x009b, 0x0376,
+ 0x0002, 0x0f7c,
+ 0x009f, 0x720f,
+ 0x009d, 0x03c2,
+ 0x0029, 0x0304,
+ 0x0028, 0x0306,
+ 0x00a9, 0x7209,
+ 0x0028, 0x720c,
+ 0x0003, 0x7cf7,
+ 0x0003, 0xc37b,
+ 0x0080, 0x019a,
+ 0x0011, 0x7cc1,
+ 0x0083, 0x03f7,
+ 0x0003, 0xc37b,
+ 0x0080, 0x019a,
+ 0x0011, 0x7cc2,
+ 0x0083, 0x03f7,
+ 0x0083, 0xc77b,
+ 0x0080, 0x019a,
+ 0x0091, 0x7cc3,
+ 0x0083, 0x03f7,
+ 0x0083, 0xc77b,
+ 0x0080, 0x019a,
+ 0x009f, 0x810f,
+ 0x009b, 0x0376,
+ 0x0011, 0x037b,
+ 0x0003, 0x0381,
+ 0x0003, 0xc082,
+ 0x0003, 0xd689,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc182,
+ 0x0083, 0xc9e5,
+ 0x003a, 0x0022,
+ 0x0083, 0x03bf,
+ 0x00ba, 0x0015,
+ 0x0080, 0x016c,
+ 0x0083, 0xcce5,
+ 0x00ba, 0x0016,
+ 0x0080, 0x016c,
+ 0x0083, 0xc0e5,
+ 0x00e1, 0x0000,
+ 0x0000, 0x01ae,
+ 0x001f, 0xc20f,
+ 0x009b, 0x038a,
+ 0x0083, 0x038a,
+ 0x0042, 0x0000,
+ 0x001f, 0xc10f,
+ 0x0091, 0x038a,
+ 0x0083, 0x038a,
+ 0x001a, 0xfffe,
+ 0x009b, 0x0386,
+ 0x0083, 0x0386,
+ 0x00e1, 0x0000,
+ 0x001f, 0xc10f,
+ 0x009b, 0x038a,
+ 0x0083, 0x038a,
+ 0x0042, 0x0000,
+ 0x001f, 0xc20f,
+ 0x0091, 0x038a,
+ 0x0083, 0x038a,
+ 0x001a, 0xfffd,
+ 0x009b, 0x0386,
+ 0x0083, 0x0386,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+}, {
+ 0x0083, 0xc0ec,
+ 0x0003, 0xc0eb,
+ 0x0003, 0xc0ee,
+ 0x0083, 0xc0ea,
+ 0x0003, 0xc696,
+ 0x0060, 0x0158,
+ 0x00ba, 0x0080,
+ 0x0083, 0x03b9,
+ 0x0003, 0xc0ee,
+ 0x0003, 0xc0eb,
+ 0x0018, 0xee00,
+ 0x0003, 0x03ee,
+ 0x00ba, 0x0010,
+ 0x0017, 0x03ee,
+ 0x0041, 0x0011,
+ 0x0060, 0x0131,
+ 0x0003, 0xc0ee,
+ 0x009b, 0x55a1,
+ 0x0097, 0x03ce,
+ 0x00c1, 0x0015,
+ 0x0083, 0xd498,
+ 0x001f, 0xd30f,
+ 0x009e, 0x03c8,
+ 0x0083, 0x0398,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0018, 0xeb00,
+ 0x0003, 0x03eb,
+ 0x00ba, 0x0800,
+ 0x0017, 0x03eb,
+ 0x0041, 0x000a,
+ 0x0003, 0xc0eb,
+ 0x0003, 0xc0ee,
+ 0x009b, 0x57a3,
+ 0x00e0, 0x016c,
+ 0x0083, 0x03ef,
+ 0x009b, 0x57a0,
+ 0x00e0, 0x016c,
+ 0x0083, 0x03dc,
+ 0x0018, 0xee00,
+ 0x0003, 0x03ee,
+ 0x0017, 0x59ee,
+ 0x00c1, 0x003b,
+ 0x0003, 0xc0ee,
+ 0x001f, 0xdf0f,
+ 0x0017, 0x03fa,
+ 0x0041, 0x0039,
+ 0x001f, 0xc10f,
+ 0x001e, 0xfa03,
+ 0x0003, 0x03fa,
+ 0x0060, 0x0158,
+ 0x0060, 0x0131,
+ 0x0085, 0xeb07,
+ 0x0003, 0xc145,
+ 0x0098, 0xea00,
+ 0x0083, 0x03ea,
+ 0x0097, 0x48ea,
+ 0x0041, 0x0050,
+ 0x0083, 0xc1eb,
+ 0x008f, 0xdc0a,
+ 0x001b, 0xa055,
+ 0x0017, 0xc903,
+ 0x00c1, 0x0049,
+ 0x0083, 0xc045,
+ 0x0083, 0xc242,
+ 0x0000, 0x0050,
+ 0x0003, 0xc245,
+ 0x0003, 0xc042,
+ 0x0000, 0x0050,
+ 0x001b, 0xa055,
+ 0x0097, 0xc103,
+ 0x00c1, 0x0049,
+ 0x0080, 0x0046,
+ 0x001b, 0xa355,
+ 0x0017, 0xcc03,
+ 0x00c1, 0x0058,
+ 0x001f, 0xc80f,
+ 0x009e, 0xd303,
+ 0x0003, 0x0344,
+ 0x0003, 0xc843,
+ 0x0080, 0x0061,
+ 0x008f, 0xef06,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xd344,
+ 0x0083, 0xc043,
+ 0x0080, 0x0061,
+ 0x0017, 0xc503,
+ 0x00c1, 0x005b,
+ 0x0000, 0x0053,
+ 0x009b, 0xa155,
+ 0x0003, 0x03f0,
+ 0x001a, 0x0040,
+ 0x0017, 0xf003,
+ 0x00c1, 0x006e,
+ 0x0083, 0xc296,
+ 0x009f, 0xd20f,
+ 0x0019, 0xc103,
+ 0x0083, 0x0398,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xd298,
+ 0x0003, 0xc696,
+ 0x009b, 0xa755,
+ 0x0017, 0x5a03,
+ 0x0041, 0x0078,
+ 0x009a, 0x000a,
+ 0x009e, 0xd303,
+ 0x0083, 0x0346,
+ 0x009a, 0x000a,
+ 0x0003, 0x0347,
+ 0x0080, 0x0080,
+ 0x000f, 0xa704,
+ 0x0003, 0xd346,
+ 0x0003, 0xc047,
+ 0x0080, 0x0080,
+ 0x009b, 0xa755,
+ 0x0097, 0xc203,
+ 0x00c1, 0x0079,
+ 0x0000, 0x0072,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0344,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0345,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0346,
+ 0x0003, 0x0399,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd299,
+ 0x0083, 0xd298,
+ 0x0083, 0xd297,
+ 0x0088, 0xde30,
+ 0x001a, 0x000d,
+ 0x009e, 0x8303,
+ 0x0083, 0x0383,
+ 0x0003, 0xcc4b,
+ 0x001c, 0x58c5,
+ 0x0003, 0x034d,
+ 0x009e, 0x834b,
+ 0x0083, 0x0383,
+ 0x001c, 0x4bc1,
+ 0x0003, 0x034b,
+ 0x0017, 0x4b4d,
+ 0x00a0, 0x00a0,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0000, 0x0096,
+ 0x0060, 0x0119,
+ 0x00a8, 0xe371,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe36e,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe36b,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe368,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x00a8, 0xe365,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe362,
+ 0x0091, 0x834b,
+ 0x0083, 0x0383,
+ 0x009d, 0x4bc1,
+ 0x0003, 0x034b,
+ 0x0017, 0x4bc9,
+ 0x00a0, 0x00bb,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0000, 0x00b1,
+ 0x001a, 0x001f,
+ 0x0091, 0x8303,
+ 0x0083, 0x0383,
+ 0x0080, 0x00d0,
+ 0x0060, 0x0119,
+ 0x0028, 0xe352,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe34f,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe34c,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe349,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe346,
+ 0x0083, 0x6389,
+ 0x0060, 0x0119,
+ 0x0028, 0xe343,
+ 0x0091, 0x40ca,
+ 0x0011, 0x5c03,
+ 0x0003, 0x038e,
+ 0x001e, 0x41c5,
+ 0x001e, 0x0348,
+ 0x0003, 0x0390,
+ 0x001f, 0xc80f,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x009f, 0xd20f,
+ 0x0091, 0x0343,
+ 0x0083, 0x0398,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0342,
+ 0x0083, 0x0397,
+ 0x009f, 0xd20f,
+ 0x0011, 0x0347,
+ 0x0003, 0x0399,
+ 0x0083, 0xcbf9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc1b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xd297,
+ 0x0083, 0xd298,
+ 0x0003, 0xd299,
+ 0x0083, 0x408e,
+ 0x0003, 0x4190,
+ 0x009f, 0xc50f,
+ 0x0099, 0x03c9,
+ 0x0091, 0x0351,
+ 0x0083, 0x0391,
+ 0x0083, 0x0392,
+ 0x0003, 0xcff9,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xc2b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd089,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0xd5b5,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xcef9,
+ 0x0098, 0xec00,
+ 0x0083, 0x03ec,
+ 0x009a, 0x0050,
+ 0x0097, 0x03ec,
+ 0x0041, 0x010e,
+ 0x0003, 0x5886,
+ 0x0003, 0xc0db,
+ 0x008b, 0x8504,
+ 0x0000, 0x0028,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0083, 0xc694,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x003a, 0x0041,
+ 0x0083, 0x03e0,
+ 0x001f, 0x700f,
+ 0x001c, 0x03c4,
+ 0x0011, 0x0372,
+ 0x0003, 0x03e4,
+ 0x00a8, 0xe38d,
+ 0x0003, 0xc2e3,
+ 0x0024, 0x860b,
+ 0x0003, 0xc07e,
+ 0x0080, 0x0124,
+ 0x00ac, 0xda02,
+ 0x00e1, 0x0000,
+ 0x003a, 0x0009,
+ 0x0099, 0x037e,
+ 0x0082, 0x0f7e,
+ 0x0017, 0x7ee2,
+ 0x0041, 0x012c,
+ 0x0080, 0x0124,
+ 0x0003, 0xc1e3,
+ 0x00ba, 0x1000,
+ 0x0011, 0x0395,
+ 0x0003, 0x0395,
+ 0x00e1, 0x0000,
+ 0x009b, 0xa155,
+ 0x0083, 0x03e9,
+ 0x009a, 0x0055,
+ 0x0097, 0xe903,
+ 0x0041, 0x013b,
+ 0x0084, 0xb90b,
+ 0x001f, 0xc10f,
+ 0x009e, 0xb903,
+ 0x0083, 0x03b9,
+ 0x0080, 0x0141,
+ 0x0017, 0x54e9,
+ 0x00c1, 0x0141,
+ 0x0017, 0xb957,
+ 0x0020, 0x0141,
+ 0x0098, 0xb900,
+ 0x0083, 0x03b9,
+ 0x009e, 0x55c4,
+ 0x0097, 0xb903,
+ 0x0041, 0x014c,
+ 0x0004, 0xff13,
+ 0x009f, 0xff0f,
+ 0x009e, 0x03c1,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x0019, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x0000, 0x0157,
+ 0x0099, 0xcc55,
+ 0x0097, 0x03b9,
+ 0x0041, 0x0157,
+ 0x009f, 0xff0f,
+ 0x0097, 0x03c7,
+ 0x0041, 0x0157,
+ 0x0018, 0xff00,
+ 0x0003, 0x03ff,
+ 0x001f, 0xb90f,
+ 0x009e, 0x03c8,
+ 0x0083, 0x03b9,
+ 0x00e1, 0x0000,
+ 0x0093, 0x0000,
+ 0x001f, 0x8761,
+ 0x0003, 0x03f6,
+ 0x001a, 0x0160,
+ 0x001e, 0x03f6,
+ 0x0003, 0x03f6,
+ 0x0017, 0xd103,
+ 0x0041, 0x0162,
+ 0x0083, 0xd1fb,
+ 0x0000, 0x016b,
+ 0x001a, 0x0094,
+ 0x0017, 0xf603,
+ 0x0041, 0x0168,
+ 0x001a, 0x0094,
+ 0x0083, 0x03fb,
+ 0x0000, 0x016b,
+ 0x0083, 0xf6fb,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x00e1, 0x0000,
+ 0x00ae, 0x8005,
+ 0x000f, 0x0303,
+ 0x001e, 0x035f,
+ 0x00e1, 0x0000,
+ 0x0099, 0x5f03,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0003, 0x03be,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x002f, 0xbf00,
+ 0x00aa, 0xbf85,
+ 0x00e1, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+ 0x0042, 0x0000,
+}};
+
+static u16 cs4321_microcode_epilog[] = {
+ /* Addr, Data */
+ 0x0201, 0x8f10, 0x0202, 0x1210, 0x0200, 0x8000,
+ 0x0201, 0x8f13, 0x0202, 0x1313, 0x0200, 0x8001,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8002,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8003,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8004,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8005,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8006,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8007,
+ 0x0201, 0x0000, 0x0202, 0x0300, 0x0200, 0x8008,
+ 0x0201, 0x0000, 0x0202, 0x9101, 0x0200, 0x8009,
+ 0x0201, 0x8000, 0x0202, 0x0e00, 0x0200, 0x800a,
+ 0x0201, 0x0000, 0x0202, 0xffff, 0x0200, 0x800b,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x800c,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x800d,
+ 0x0201, 0x0000, 0x0202, 0x0020, 0x0200, 0x800e,
+ 0x0201, 0x7fff, 0x0202, 0xffff, 0x0200, 0x800f,
+ 0x0201, 0x8000, 0x0202, 0xc350, 0x0200, 0x8010,
+ 0x0201, 0x0000, 0x0202, 0x8000, 0x0200, 0x8011,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8012,
+ 0x0201, 0x0000, 0x0202, 0x0a0a, 0x0200, 0x8013,
+ 0x0201, 0x0000, 0x0202, 0x0064, 0x0200, 0x8014,
+ 0x0201, 0x0000, 0x0202, 0x007f, 0x0200, 0x8015,
+ 0x0201, 0x0000, 0x0202, 0x003a, 0x0200, 0x8016,
+ 0x0201, 0x0000, 0x0202, 0x00ff, 0x0200, 0x8017,
+ 0x0201, 0x0000, 0x0202, 0x0100, 0x0200, 0x8018,
+ 0x0201, 0x0000, 0x0202, 0x0032, 0x0200, 0x8019,
+ 0x0201, 0x0000, 0x0202, 0x0018, 0x0200, 0x801a,
+ 0x0201, 0x0000, 0x0202, 0x0013, 0x0200, 0x801b,
+ 0x0201, 0x0000, 0x0202, 0xff00, 0x0200, 0x801c,
+ 0x0201, 0x0000, 0x0202, 0x0028, 0x0200, 0x801d,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x801e,
+ 0x0201, 0x0000, 0x0202, 0x0080, 0x0200, 0x801f,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8020,
+ 0x0201, 0x00f9, 0x0202, 0xac04, 0x0200, 0x8021,
+ 0x0201, 0x0a42, 0x0202, 0x6b48, 0x0200, 0x8022,
+ 0x0201, 0x8000, 0x0202, 0x19bc, 0x0200, 0x8023,
+ 0x0201, 0x8020, 0x0202, 0x6cc8, 0x0200, 0x8024,
+ 0x0201, 0x8000, 0x0202, 0x14c0, 0x0200, 0x8025,
+ 0x0201, 0x0a76, 0x0202, 0x4c88, 0x0200, 0x8026,
+ 0x0201, 0x015f, 0x0202, 0xcf7a, 0x0200, 0x8027,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8028,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8029,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x802a,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x802b,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x802c,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x802d,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x802e,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x802f,
+ 0x0201, 0x0000, 0x0202, 0x0008, 0x0200, 0x8030,
+ 0x0201, 0x0000, 0x0202, 0x000f, 0x0200, 0x8031,
+ 0x0201, 0x0000, 0x0202, 0x0008, 0x0200, 0x8032,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8033,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8034,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8035,
+ 0x0201, 0xffff, 0x0202, 0xfff0, 0x0200, 0x8036,
+ 0x0201, 0xffff, 0x0202, 0xff0f, 0x0200, 0x8037,
+ 0x0201, 0x0000, 0x0202, 0x0003, 0x0200, 0x8038,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x8039,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x803a,
+ 0x0201, 0x0000, 0x0202, 0x0003, 0x0200, 0x803b,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x803c,
+ 0x0201, 0x2000, 0x0202, 0x0000, 0x0200, 0x803d,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x803e,
+ 0x0201, 0x0000, 0x0202, 0x0000, 0x0200, 0x803f,
+
+ 0x024f, 0x0000,
+ 0x0505, 0x2003,
+ 0x0558, 0x2001,
+ 0x03d4, 0x0100,
+ 0x03d5, 0x00c0,
+ 0x03d3, 0x2919,
+ 0x021c, 0x8020,
+ 0x021d, 0x8040,
+ 0x021e, 0x8040,
+ 0x03d0, 0x0600,
+ 0x0605, 0x1d00,
+ 0x0231, 0x8f05,
+ 0x0003, 0x0020,
+ 0x0004, 0x0021,
+ 0x0005, 0x0020,
+ 0x0006, 0x0100,
+ 0x0007, 0x0020,
+ 0x062a, 0x101b,
+ 0x062b, 0xc010,
+ 0x0529, 0x0808,
+ 0x052a, 0x0000,
+ 0x0504, 0x0055,
+ 0x0622, 0x0001,
+ 0x0521, 0x0001,
+ 0x0300, 0x0008,
+ 0x0308, 0x00e2,
+ 0x0310, 0x00d5,
+ 0x0318, 0x0076,
+ 0x0320, 0x0000,
+ 0x0328, 0x00f0,
+ 0x0338, 0x00f3,
+ 0x0330, 0x00f3,
+ 0x0340, 0x0000,
+ 0x0348, 0x000a,
+ 0x0350, 0x0000,
+ 0x0358, 0x00fc,
+ 0x0360, 0x0000,
+ 0x0301, 0x0008,
+ 0x0309, 0x00ed,
+ 0x0311, 0x00c6,
+ 0x0319, 0x004f,
+ 0x0321, 0x0000,
+ 0x0329, 0x0000,
+ 0x0339, 0x00fd,
+ 0x0331, 0x00fd,
+ 0x0341, 0x0006,
+ 0x0349, 0x0000,
+ 0x0351, 0x000b,
+ 0x0359, 0x0002,
+ 0x0361, 0x0000,
+ 0x0302, 0x0000,
+ 0x030a, 0x0040,
+ 0x0312, 0x00d0,
+ 0x031a, 0x006e,
+ 0x0322, 0x0000,
+ 0x032a, 0x00dc,
+ 0x033a, 0x00d7,
+ 0x0332, 0x00d7,
+ 0x0342, 0x00e6,
+ 0x034a, 0x000c,
+ 0x0352, 0x00fd,
+ 0x035a, 0x0001,
+ 0x0362, 0x0000,
+ 0x0303, 0x0000,
+ 0x030b, 0x00f8,
+ 0x0313, 0x0000,
+ 0x031b, 0x0064,
+ 0x0323, 0x0000,
+ 0x032b, 0x00db,
+ 0x0333, 0x00e6,
+ 0x033b, 0x00e6,
+ 0x0343, 0x00f0,
+ 0x034b, 0x0010,
+ 0x0353, 0x00f8,
+ 0x035b, 0x00f7,
+ 0x0363, 0x0000,
+ 0x0304, 0x0000,
+ 0x030c, 0x0000,
+ 0x0314, 0x0000,
+ 0x031c, 0x0070,
+ 0x0324, 0x0000,
+ 0x032c, 0x0000,
+ 0x033c, 0x0000,
+ 0x0334, 0x0000,
+ 0x0344, 0x0000,
+ 0x034c, 0x0000,
+ 0x0354, 0x0000,
+ 0x035c, 0x0000,
+ 0x0364, 0x0000,
+ 0x0305, 0x0000,
+ 0x030d, 0x00d4,
+ 0x0315, 0x0000,
+ 0x031d, 0x0077,
+ 0x0325, 0x0000,
+ 0x032d, 0x00b7,
+ 0x033d, 0x00f8,
+ 0x0335, 0x00f8,
+ 0x0345, 0x0003,
+ 0x034d, 0x00fd,
+ 0x0355, 0x00fa,
+ 0x035d, 0x00fc,
+ 0x0365, 0x0000,
+ 0x0306, 0x00f5,
+ 0x030e, 0x0040,
+ 0x0316, 0x0000,
+ 0x031e, 0x00ee,
+ 0x0326, 0x0000,
+ 0x032e, 0x0000,
+ 0x0336, 0x0000,
+ 0x033e, 0x0000,
+ 0x0346, 0x0000,
+ 0x034e, 0x0000,
+ 0x0356, 0x0000,
+ 0x035e, 0x0000,
+ 0x0366, 0x0000,
+ 0x0307, 0x00f9,
+ 0x030f, 0x0060,
+ 0x0317, 0x0000,
+ 0x031f, 0x0000,
+ 0x0327, 0x0000,
+ 0x032f, 0x0000,
+ 0x0337, 0x0000,
+ 0x033f, 0x0000,
+ 0x0347, 0x0000,
+ 0x034f, 0x0000,
+ 0x0357, 0x0000,
+ 0x035f, 0x0000,
+ 0x0367, 0x0000,
+ 0x0203, 0xfe03,
+ 0x03d2, 0x0000,
+ 0x040e, 0x0001,
+ 0x022f, 0x0004,
+ 0x040f, 0xedcf,
+ 0x0382, 0x0002,
+ 0x0408, 0xffff,
+ 0x022b, 0x00b0,
+ 0x0205, 0x0603,
+ 0x0227, 0x0000,
+ 0x0404, 0xdfff,
+ 0x0409, 0xf048,
+ 0x0296, 0x0000,
+ 0x029a, 0x0002,
+ 0x028a, 0x000f,
+ 0x0270, 0x0005,
+ 0x0400, 0xd000,
+ 0x020c, 0xf090,
+ 0x0537, 0x0136,
+ 0x0536, 0x0136,
+ 0x0510, 0x0136,
+ 0x050f, 0x0136,
+ 0x0539, 0xa002,
+ 0x0539, 0x2002,
+ 0x0512, 0xa002,
+ 0x0512, 0x2002,
+ 0x0223, 0x0006,
+ 0x021f, 0x0134,
+ 0x0700, 0x0020,
+ 0x0726, 0x0100,
+ 0x0403, 0x0020,
+ 0x0500, 0x1200,
+ 0x0274, 0x0000,
+ 0x024f, 0x0000,
+ 0x000a, 0x1412,
+ 0x0009, 0x2011,
+ 0x0008, 0x0929,
+ 0x0203, 0xfe03,
+ 0x024f, 0x0000,
+ 0x001c, 0x0000,
+ 0x001f, 0xf574,
+};
diff --git a/drivers/net/phy/cs4321.c b/drivers/net/phy/cs4321.c
new file mode 100644
index 0000000..31b4b19
--- /dev/null
+++ b/drivers/net/phy/cs4321.c
@@ -0,0 +1,1147 @@
+/*
+ * Based on code from Cortina Systems, Inc.
+ *
+ * Copyright (C) 2011 by Cortina Systems, Inc.
+ * Copyright (C) 2011 - 2012 Cavium, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/phy.h>
+#include <linux/of.h>
+
+#include "cs4321-ucode.h"
+
+#define CS4321_GLOBAL_CHIP_ID_LSB 0x0
+#define CS4321_GLOBAL_CHIP_ID_MSB 0x1
+#define CS4321_GLOBAL_INGRESS_SOFT_RESET 0xC
+#define CS4321_GLOBAL_EGRESS_SOFT_RESET 0xD
+#define CS4321_GLOBAL_REF_SOFT_RESET 0xE
+#define CS4321_GLOBAL_MPIF_SOFT_RESET 0xF
+#define CS4321_GLOBAL_MPIF_RESET_DOTREG 0x10
+#define CS4321_GLOBAL_INGRESS_FUNCEN 0x12
+#define CS4321_GLOBAL_EGRESS_FUNCEN 0x13
+#define CS4321_GLOBAL_HOST_MULTILANE_FUNCEN 0x14
+#define CS4321_GLOBAL_INGRESS_CLKEN 0x15
+#define CS4321_GLOBAL_INGRESS_CLKEN2 0x16
+#define CS4321_GLOBAL_EGRESS_CLKEN 0x17
+#define CS4321_GLOBAL_EGRESS_CLKEN2 0x18
+#define CS4321_GLOBAL_HOST_MULTILANE_CLKSEL 0x19
+#define CS4321_GLOBAL_MSEQCLKCTRL 0x20
+#define CS4321_GLOBAL_GT_10KHZ_REF_CLK_CNT1 0x2D
+#define CS4321_GLOBAL_GT_10KHZ_REF_CLK_CNT0 0x2E
+#define CS4321_GLOBAL_MISC_CONFIG 0x33
+#define CS4321_GPIO_GPIO3 0x10C
+#define CS4321_GPIO_GPIO3_DRIVE 0x10E
+#define CS4321_GPIO_GPIO10 0x136
+#define CS4321_GPIO_GPIO10_OUTPUT_CFG 0x137
+#define CS4321_GPIO_GPIO_INT 0x16B
+#define CS4321_GPIO_GPIO_INTE 0x16C
+#define CS4321_GPIO_GPIO_INTS 0x16D
+#define CS4321_MSEQ_ENABLE_MSB 0x204
+#define CS4321_MSEQ_SERDES_PARAM_LSB 0x205
+#define CS4321_MSEQ_POWER_DOWN_LSB 0x208
+#define CS4321_MSEQ_POWER_DOWN_MSB 0x209
+#define CS4321_MSEQ_STATUS 0x20a
+#define CS4321_MSEQ_LEAK_INTERVAL_FFE 0x21C
+#define CS4321_MSEQ_COEF_DSP_DRIVE128 0x21F
+#define CS4321_MSEQ_COEF_INIT_SEL 0x223
+#define CS4321_MSEQ_CAL_RX_EQADJ 0x22A
+#define CS4321_MSEQ_CAL_RX_PHSEL 0x22C
+#define CS4321_MSEQ_CAL_RX_SLICER 0x22D
+#define CS4321_MSEQ_CAL_RX_DFE_EQ 0x22E
+#define CS4321_MSEQ_OPTIONS 0x240
+#define CS4321_MSEQ_PC 0x243
+#define CS4321_MSEQ_BANKSELECT 0x24F
+#define CS4321_MSEQ_RESET_COUNT_LSB 0x250
+#define CS4321_MSEQ_SPARE2_LSB 0x270
+#define CS4321_MSEQ_SPARE9_LSB 0x27E
+#define CS4321_MSEQ_SPARE11_LSB 0x282
+#define CS4321_MSEQ_SPARE15_LSB 0x28A
+#define CS4321_MSEQ_SPARE21_LSB 0x296
+#define CS4321_MSEQ_SPARE23_LSB 0x29A
+#define CS4321_DSP_SDS_DSP_COEF_DFE0_SELECT 0x37B
+#define CS4321_DSP_SDS_DSP_COEF_LARGE_LEAK 0x382
+#define CS4321_DSP_SDS_SERDES_SRX_DAC_ENABLEB_LSB 0x400
+#define CS4321_DSP_SDS_SERDES_SRX_DAC_ENABLEB_MSB 0x401
+#define CS4321_DSP_SDS_SERDES_SRX_DAC_BIAS_SELECT0_MSB 0x403
+#define CS4321_DSP_SDS_SERDES_SRX_DAC_BIAS_SELECT1_MSB 0x405
+#define CS4321_DSP_SDS_SERDES_SRX_FFE_DELAY_CTRL 0x409
+#define CS4321_DSP_SDS_SERDES_SRX_FFE_INBUF_CTRL 0x40A
+#define CS4321_DSP_SDS_SERDES_SRX_FFE_PGA_CTRL 0x40B
+#define CS4321_DSP_SDS_SERDES_SRX_FFE_MISC 0x40C
+#define CS4321_DSP_SDS_SERDES_SRX_DFE0_SELECT 0x40E
+#define CS4321_DSP_SDS_SERDES_SRX_DFE_MISC 0x412
+#define CS4321_DSP_SDS_SERDES_SRX_AGC_MISC 0x413
+#define CS4321_LINE_SDS_COMMON_SRX0_RX_CONFIG 0x500
+#define CS4321_LINE_SDS_COMMON_SRX0_RX_CLKDIV_CTRL 0x501
+#define CS4321_LINE_SDS_COMMON_SRX0_RX_LOOP_FILTER 0x503
+#define CS4321_LINE_SDS_COMMON_SRX0_RX_CPA 0x504
+#define CS4321_LINE_SDS_COMMON_SRX0_RX_CPB 0x505
+#define CS4321_LINE_SDS_COMMON_SRX0_RX_VCO_CTRL 0x507
+#define CS4321_LINE_SDS_COMMON_SRX0_RX_SPARE 0x50C
+#define CS4321_LINE_SDS_COMMON_RXVCO0_CONTROL 0x512
+#define CS4321_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLA 0x529
+#define CS4321_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLB 0x52A
+#define CS4321_LINE_SDS_COMMON_STX0_TX_CONFIG_LOCAL_TIMING 0x52B
+#define CS4321_LINE_SDS_COMMON_STXP0_TX_CONFIG 0x52C
+#define CS4321_LINE_SDS_COMMON_STXP0_TX_PWRDN 0x52D
+#define CS4321_LINE_SDS_COMMON_STXP0_TX_CLKOUT_CTRL 0x52F
+#define CS4321_LINE_SDS_COMMON_STXP0_TX_LOOP_FILTER 0x530
+#define CS4321_LINE_SDS_COMMON_TXVCO0_CONTROL 0x539
+#define CS4321_HOST_SDS_COMMON_SRX0_RX_CONFIG 0x600
+#define CS4321_HOST_SDS_COMMON_SRX0_RX_CLKDIV_CTRL 0x601
+#define CS4321_HOST_SDS_COMMON_SRX0_RX_CLKOUT_CTRL 0x602
+#define CS4321_HOST_SDS_COMMON_RXVCO0_CONTROL 0x613
+#define CS4321_HOST_SDS_COMMON_STX0_TX_CONFIG_LOCAL_TIMING 0x62C
+#define CS4321_HOST_SDS_COMMON_STXP0_TX_CONFIG 0x62D
+#define CS4321_HOST_SDS_COMMON_STXP0_TX_PWRDN 0x62E
+#define CS4321_HOST_SDS_COMMON_STXP0_TX_CLKDIV_CTRL 0x62F
+#define CS4321_HOST_SDS_COMMON_STXP0_TX_CLKOUT_CTRL 0x630
+#define CS4321_HOST_SDS_COMMON_TXVCO0_CONTROL 0x63A
+#define CS4321_HOST_ML_SDS_COMMON_SRX0_RX_CONFIG 0x700
+#define CS4321_HOST_ML_SDS_COMMON_SRX0_RX_CLKDIV_CTRL 0x701
+#define CS4321_HOST_ML_SDS_COMMON_RXVCO0_CONTROL 0x70F
+#define CS4321_HOST_ML_SDS_COMMON_STXP0_TX_CONFIG 0x725
+#define CS4321_HOST_ML_SDS_COMMON_STXP0_TX_PWRDN 0x726
+#define CS4321_HOST_ML_SDS_COMMON_STXP0_TX_CLKDIV_CTRL 0x727
+#define CS4321_HOST_ML_SDS_COMMON_TXVCO0_CONTROL 0x731
+#define CS4321_XGPCS_LINE_TX_TXCNTRL 0xA00
+#define CS4321_XGPCS_LINE_RX_RXCNTRL 0xA20
+#define CS4321_XGPCS_HOST_TX_TXCNTRL 0xA80
+#define CS4321_XGPCS_HOST_RX_RXCNTRL 0xAA0
+#define CS4321_GIGEPCS_LINE_CONTROL 0xC00
+#define CS4321_GIGEPCS_HOST_CONTROL 0xC80
+#define CS4321_HIF_COMMON_TXCONTROL3 0xD0B
+#define CS4321_XGRS_LINE_TX_TXCNTRL 0xE00
+#define CS4321_XGRS_LINE_RX_RXCNTRL1 0xE10
+#define CS4321_XGRS_HOST_TX_TXCNTRL 0xE80
+#define CS4321_XGRS_HOST_RX_RXCNTRL1 0xE90
+#define CS4321_XGMAC_LINE_RX_CFG_COM 0xF00
+#define CS4321_XGMAC_LINE_TX_CFG_COM 0xF40
+#define CS4321_XGMAC_LINE_TX_CFG_TX 0xF41
+#define CS4321_XGMAC_LINE_TX_CFG_TX_IFG 0xF43
+#define CS4321_XGMAC_HOST_RX_CFG_COM 0xF80
+#define CS4321_XGMAC_HOST_TX_CFG_COM 0xFC0
+#define CS4321_XGMAC_HOST_TX_CFG_TX 0xFC1
+#define CS4321_XGMAC_HOST_TX_CFG_TX_IFG 0xFC3
+#define CS4321_MAC_LAT_CTRL_RESET 0x3000
+#define CS4321_MAC_LAT_CTRL_CONFIG 0x3001
+#define CS4321_RADJ_INGRESS_RX_NRA_MIN_IFG 0x3204
+#define CS4321_RADJ_INGRESS_RX_NRA_SETTLE 0x3206
+#define CS4321_RADJ_INGRESS_TX_ADD_FILL_DATA1 0x3210
+#define CS4321_RADJ_INGRESS_TX_ADD_FILL_DATA0 0x3211
+#define CS4321_RADJ_INGRESS_TX_ADD_FILL_CTRL 0x3212
+#define CS4321_RADJ_INGRESS_TX_PRA_MIN_IFG 0x3214
+#define CS4321_RADJ_INGRESS_TX_PRA_SETTLE 0x3216
+#define CS4321_RADJ_INGRESS_MISC_RESET 0x3220
+#define CS4321_RADJ_EGRESS_RX_NRA_MIN_IFG 0x3284
+#define CS4321_RADJ_EGRESS_RX_NRA_SETTLE 0x3286
+#define CS4321_RADJ_EGRESS_TX_ADD_FILL_DATA1 0x3290
+#define CS4321_RADJ_EGRESS_TX_ADD_FILL_DATA0 0x3291
+#define CS4321_RADJ_EGRESS_TX_ADD_FILL_CTRL 0x3292
+#define CS4321_RADJ_EGRESS_TX_PRA_MIN_IFG 0x3294
+#define CS4321_RADJ_EGRESS_TX_PRA_SETTLE 0x3296
+#define CS4321_RADJ_EGRESS_MISC_RESET 0x32A0
+#define CS4321_PM_CTRL 0x3400
+#define CS4321_EEPROM_LOADER_CONTROL 0x3F00
+#define CS4321_EEPROM_LOADER_STATUS 0x3F01
+
+
+enum cs4321_host_mode {
+ RXAUI,
+ XAUI
+};
+
+struct cs4321_private {
+ enum cs4321_host_mode mode;
+};
+
+struct cs4321_reg_modify {
+ u16 reg;
+ u16 mask_bits;
+ u16 set_bits;
+};
+
+struct cs4321_multi_seq {
+ int reg_offset;
+ const struct cs4321_reg_modify *seq;
+};
+
+static const struct cs4321_reg_modify cs4321_soft_reset_registers[] = {
+ /* Enable all the clocks */
+ {CS4321_GLOBAL_INGRESS_CLKEN, 0, 0xffff},
+ {CS4321_GLOBAL_INGRESS_CLKEN2, 0, 0xffff},
+ {CS4321_GLOBAL_EGRESS_CLKEN, 0, 0xffff},
+ {CS4321_GLOBAL_EGRESS_CLKEN2, 0, 0xffff},
+ /* Reset MPIF registers */
+ {CS4321_GLOBAL_MPIF_RESET_DOTREG, 0, 0x0},
+ /* Re-assert the reset */
+ {CS4321_GLOBAL_MPIF_RESET_DOTREG, 0, 0xffff},
+
+ /* Disable all the clocks */
+ {CS4321_GLOBAL_INGRESS_CLKEN, 0, 0x0},
+ {CS4321_GLOBAL_INGRESS_CLKEN2, 0, 0x0},
+ {CS4321_GLOBAL_EGRESS_CLKEN, 0, 0x0},
+ {CS4321_GLOBAL_EGRESS_CLKEN2, 0, 0x0},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_68xx_4_nic_init[] = {
+ /* Configure chip for common reference clock */
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_CONFIG, 0, 0x2700},
+ /* Set GPIO3 to drive low to enable laser output*/
+ {CS4321_GPIO_GPIO3_DRIVE, 0, 0},
+ {CS4321_GPIO_GPIO3, 0, 0x11},
+ /* Set GPIO10 as GPIO_INT open-drain active low */
+ {CS4321_GPIO_GPIO_INTE, 0, 0},
+ {CS4321_GPIO_GPIO10_OUTPUT_CFG, 0, 6},
+ {CS4321_GPIO_GPIO10, 0, 0x0719},
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_prefix_seq[] = {
+ /* MPIF DeAssert System Reset */
+ {CS4321_GLOBAL_MPIF_RESET_DOTREG, ~0x0001, 0},
+ /*
+ * Make sure to stall the microsequencer before configuring
+ * the path.
+ */
+ {CS4321_GLOBAL_MSEQCLKCTRL, 0, 0x8004},
+ {CS4321_MSEQ_OPTIONS, 0, 0xf},
+ {CS4321_MSEQ_PC, 0, 0x0},
+ /*
+ * Correct some of the h/w defaults that are incorrect.
+ *
+ * The default value of the bias current is incorrect and needs to
+ * be corrected. This is normally done by Microcode but it doesn't
+ * always run.
+ */
+ {CS4321_DSP_SDS_SERDES_SRX_DAC_BIAS_SELECT0_MSB, 0, 0x20},
+ /*
+ * By default need to power on the voltage monitor since it is required
+ * by the temperature monitor and this is used by the microcode.
+ */
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x0},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_ingress_local_timing_rxaui[] = {
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x0000},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CPA, 0, 0x0057},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_LOOP_FILTER, 0, 0x0007},
+ {CS4321_LINE_SDS_COMMON_STX0_TX_CONFIG_LOCAL_TIMING, 0, 0x0001},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_CLKOUT_CTRL, 0, 0x0864},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_LOOP_FILTER, 0, 0x0027},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_PWRDN, 0, 0x0000},
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, ~0x1, 0x0001},
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, ~0x1, 0x0000},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_egress_local_timing_rxaui[] = {
+ {CS4321_HOST_SDS_COMMON_SRX0_RX_CLKDIV_CTRL, 0, 0x40d1},
+ {CS4321_HOST_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x000c},
+ {CS4321_HOST_SDS_COMMON_STX0_TX_CONFIG_LOCAL_TIMING, 0, 0x0001},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_CLKDIV_CTRL, 0, 0x4091},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_CLKOUT_CTRL, 0, 0x1864},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_CONFIG, 0, 0x090c},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_PWRDN, 0, 0x0000},
+ {CS4321_HOST_ML_SDS_COMMON_SRX0_RX_CLKDIV_CTRL, 0, 0x401d},
+ {CS4321_HOST_ML_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x000c},
+ {CS4321_HOST_ML_SDS_COMMON_STXP0_TX_CLKDIV_CTRL, 0, 0x4019},
+ {CS4321_HOST_ML_SDS_COMMON_STXP0_TX_CONFIG, 0, 0x090c},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, ~0x1, 0x0001},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, ~0x1, 0x0000},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, ~0x2, 0x0001},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, ~0x2, 0x0000},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_line_power_down[] = {
+ {CS4321_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLA, 0, 0x0000},
+ {CS4321_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLB, 0, 0x0000},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x2040},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_VCO_CTRL, 0, 0x01e7},
+ {CS4321_MSEQ_POWER_DOWN_LSB, 0, 0x0000},
+ {CS4321_DSP_SDS_SERDES_SRX_DAC_ENABLEB_MSB, 0, 0xffff},
+ {CS4321_DSP_SDS_SERDES_SRX_DAC_ENABLEB_LSB, 0, 0xffff},
+ {CS4321_DSP_SDS_SERDES_SRX_AGC_MISC, 0, 0x0705},
+ {CS4321_DSP_SDS_SERDES_SRX_DFE_MISC, 0, 0x002b},
+ {CS4321_DSP_SDS_SERDES_SRX_FFE_PGA_CTRL, 0, 0x0021},
+ {CS4321_DSP_SDS_SERDES_SRX_FFE_MISC, 0, 0x0013},
+ {CS4321_DSP_SDS_SERDES_SRX_FFE_INBUF_CTRL, 0, 0x0001},
+ {CS4321_DSP_SDS_SERDES_SRX_DFE0_SELECT, 0, 0x0001},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_ingress_rxaui_pcs_ra[] = {
+ /* Set fen_radj, rx_fen_xgpcs*/
+ {CS4321_GLOBAL_INGRESS_FUNCEN, ~0x0081, 0x0081},
+ /* Set rx_en_radj, rx_en_xgpcs*/
+ {CS4321_GLOBAL_INGRESS_CLKEN, ~0x0021, 0x0021},
+ /* Set tx_en_hif, tx_en_radj*/
+ {CS4321_GLOBAL_INGRESS_CLKEN2, ~0x0120, 0x0120},
+
+ {CS4321_GLOBAL_HOST_MULTILANE_CLKSEL, 0, 0x8000},
+ {CS4321_GLOBAL_HOST_MULTILANE_FUNCEN, 0, 0x0006},
+
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0xffff},
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0x0000},
+ /* MPIF DeAssert Ingress Reset */
+ {CS4321_GLOBAL_MPIF_RESET_DOTREG, ~0x0004, 0},
+
+ {CS4321_XGMAC_LINE_RX_CFG_COM, 0, 0x8010},
+ {CS4321_XGPCS_LINE_RX_RXCNTRL, 0, 0x5000},
+
+ {CS4321_RADJ_INGRESS_RX_NRA_MIN_IFG, 0, 0x0004},
+ {CS4321_RADJ_INGRESS_RX_NRA_SETTLE, 0, 0x0000},
+ {CS4321_RADJ_INGRESS_TX_ADD_FILL_CTRL, 0, 0xf001},
+ {CS4321_RADJ_INGRESS_TX_ADD_FILL_DATA0, 0, 0x0707},
+ {CS4321_RADJ_INGRESS_TX_ADD_FILL_DATA1, 0, 0x0707},
+ {CS4321_RADJ_INGRESS_TX_PRA_MIN_IFG, 0, 0x0004},
+ {CS4321_RADJ_INGRESS_TX_PRA_SETTLE, 0, 0x0000},
+ {CS4321_RADJ_INGRESS_MISC_RESET, 0, 0x0000},
+
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0002},
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0000},
+ {CS4321_RADJ_INGRESS_MISC_RESET, 0, 0x0000},
+
+ {CS4321_PM_CTRL, 0, 0x0000},
+ {CS4321_HIF_COMMON_TXCONTROL3, 0, 0x0010},
+
+ {CS4321_MSEQ_POWER_DOWN_LSB, 0, 0xe01f},
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_egress_rxaui_pcs_ra[] = {
+ /* Set tx_fen_xgpcs, fen_radj */
+ {CS4321_GLOBAL_EGRESS_FUNCEN, ~0x0180, 0x0180},
+ /* Set rx_en_hif, rx_en_radj*/
+ {CS4321_GLOBAL_EGRESS_CLKEN, ~0x0120, 0x0120},
+ /* Set tx_en_radj, tx_en_xgpcs*/
+ {CS4321_GLOBAL_EGRESS_CLKEN2, ~0x0021, 0x0021},
+
+ {CS4321_GLOBAL_HOST_MULTILANE_CLKSEL, 0, 0x8000},
+ {CS4321_GLOBAL_HOST_MULTILANE_FUNCEN, 0, 0x0006},
+
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0xffff},
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0x0000},
+ /* MPIF DeAssert Egress Reset */
+ {CS4321_GLOBAL_MPIF_RESET_DOTREG, ~0x0002, 0},
+
+ {CS4321_XGMAC_LINE_TX_CFG_COM, 0, 0xc000},
+ {CS4321_XGMAC_LINE_TX_CFG_TX_IFG, 0, 0x0005},
+ {CS4321_XGPCS_LINE_TX_TXCNTRL, 0, 0x0000},
+ {CS4321_XGRS_LINE_TX_TXCNTRL, 0, 0xc000},
+
+ {CS4321_RADJ_EGRESS_RX_NRA_MIN_IFG, 0, 0x0004},
+ {CS4321_RADJ_EGRESS_RX_NRA_SETTLE, 0, 0x0000},
+ {CS4321_RADJ_EGRESS_TX_ADD_FILL_CTRL, 0, 0xf001},
+ {CS4321_RADJ_EGRESS_TX_ADD_FILL_DATA0, 0, 0x0707},
+ {CS4321_RADJ_EGRESS_TX_ADD_FILL_DATA1, 0, 0x0707},
+ {CS4321_RADJ_EGRESS_TX_PRA_MIN_IFG, 0, 0x0004},
+ {CS4321_RADJ_EGRESS_TX_PRA_SETTLE, 0, 0x0000},
+ {CS4321_RADJ_EGRESS_MISC_RESET, 0, 0x0000},
+
+ {CS4321_PM_CTRL, 0, 0x0000},
+ {CS4321_HIF_COMMON_TXCONTROL3, 0, 0x0010},
+ {CS4321_MSEQ_POWER_DOWN_LSB, 0, 0xe01f},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_global_timer_156_25[] = {
+ {CS4321_GLOBAL_GT_10KHZ_REF_CLK_CNT0, 0, 15625},
+ {CS4321_GLOBAL_GT_10KHZ_REF_CLK_CNT1, 0, 0},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_mac_latency[] = {
+ {CS4321_MAC_LAT_CTRL_CONFIG, 0, 0},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_ref_clk_src_xaui_rxaui[] = {
+ /* Set edc_stxp_lptime_sel = 1, edc_stxp_pilot_sel = 7 */
+ {CS4321_GLOBAL_MISC_CONFIG, (u16)~0xe700, 0x2700},
+ /* Set STXP_PILOT_SEL = 7, STXP_LPTIME_SEL = 1 */
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_CONFIG, (u16)~0xe700, 0x2700},
+ {0}
+};
+
+
+static const struct cs4321_reg_modify cs4321_init_polarity_inv[] = {
+ /* Inversion disabled*/
+ /* config the slice not to invert polarity on egress */
+ {CS4321_HOST_SDS_COMMON_SRX0_RX_CONFIG, ~0x0800, 0},
+ /* config the slice not to invert polarity on ingress */
+ {CS4321_MSEQ_ENABLE_MSB, ~0x4000, 0},
+ {0}
+};
+
+#if 0
+static const struct cs4321_reg_modify cs4321_hsif_elec_mode_set_cx1_pre[] = {
+ /* Stop the micro-sequencer */
+ {CS4321_GLOBAL_MSEQCLKCTRL, 0, 0x8004},
+ {CS4321_MSEQ_OPTIONS, 0, 0xf},
+ {CS4321_MSEQ_PC, 0, 0x0},
+
+ {CS4321_MSEQ_COEF_DSP_DRIVE128, 0, 0x0114},
+ {CS4321_MSEQ_COEF_INIT_SEL, 0, 0x0004},
+ {CS4321_MSEQ_LEAK_INTERVAL_FFE, 0, 0x8010},
+ {CS4321_MSEQ_BANKSELECT, 0, 0x2},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CPA, 0, 0x55},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_LOOP_FILTER, 0, 0x3},
+ {CS4321_DSP_SDS_SERDES_SRX_DFE0_SELECT, 0, 0x1},
+ {CS4321_DSP_SDS_DSP_COEF_DFE0_SELECT, 0, 0x2},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CPB, 0, 0x2003},
+ {CS4321_DSP_SDS_SERDES_SRX_FFE_DELAY_CTRL, 0, 0xF047},
+ {CS4321_MSEQ_RESET_COUNT_LSB, 0, 0x0},
+ /* enable power savings, ignore optical module LOS */
+ {CS4321_MSEQ_SPARE2_LSB, 0, 0x5},
+
+ {CS4321_MSEQ_SPARE9_LSB, 0, 0x5},
+
+ {CS4321_MSEQ_CAL_RX_PHSEL, 0, 0x23},
+ {CS4321_DSP_SDS_DSP_COEF_LARGE_LEAK, 0, 0x2},
+ {CS4321_DSP_SDS_SERDES_SRX_DAC_ENABLEB_LSB, 0, 0x5000},
+ {CS4321_MSEQ_POWER_DOWN_LSB, 0, 0xFFFF},
+ {CS4321_MSEQ_POWER_DOWN_MSB, 0, 0x0},
+ {CS4321_MSEQ_CAL_RX_SLICER, 0, 0x80},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_SPARE, 0, 0xE0E0},
+ {CS4321_DSP_SDS_SERDES_SRX_DAC_BIAS_SELECT1_MSB, 0, 0xff},
+
+ {CS4321_MSEQ_SERDES_PARAM_LSB, 0, 0x0603},
+ {CS4321_MSEQ_SPARE11_LSB, 0, 0x0603},
+
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_hsif_elec_mode_set_cx1_2in[] = {
+ {CS4321_MSEQ_SPARE15_LSB, 0, 0x0603},
+ {CS4321_MSEQ_SPARE21_LSB, 0, 0xE},
+ {CS4321_MSEQ_SPARE23_LSB, 0, 0x0},
+ {CS4321_MSEQ_CAL_RX_DFE_EQ, 0, 0x3},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_hsif_elec_mode_set_cx1_post[] = {
+ /* Restart the micro-sequencer */
+ {CS4321_GLOBAL_MSEQCLKCTRL, 0, 0x4},
+ {CS4321_MSEQ_OPTIONS, 0, 0x7},
+ {0}
+};
+#endif
+
+static const struct cs4321_reg_modify cs4321_hsif_elec_mode_set_sr_pre[] = {
+ /* Stop the micro-sequencer */
+ {CS4321_GLOBAL_MSEQCLKCTRL, 0, 0x8004},
+ {CS4321_MSEQ_OPTIONS, 0, 0xf},
+ {CS4321_MSEQ_PC, 0, 0x0},
+
+ /* Configure the micro-sequencer for an SR transceiver */
+ {CS4321_MSEQ_COEF_DSP_DRIVE128, 0, 0x0134},
+ {CS4321_MSEQ_COEF_INIT_SEL, 0, 0x0006},
+ {CS4321_MSEQ_LEAK_INTERVAL_FFE, 0, 0x8010},
+ {CS4321_MSEQ_BANKSELECT, 0, 0x0},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CPA, 0, 0x55},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_LOOP_FILTER, 0, 0x3},
+ {CS4321_DSP_SDS_SERDES_SRX_DFE0_SELECT, 0, 0x1},
+ {CS4321_DSP_SDS_DSP_COEF_DFE0_SELECT, 0, 0x2},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CPB, 0, 0x2003},
+ {CS4321_DSP_SDS_SERDES_SRX_FFE_DELAY_CTRL, 0, 0xF048},
+
+ {CS4321_MSEQ_RESET_COUNT_LSB, 0, 0x0},
+ /* enable power savings, ignore */
+ {CS4321_MSEQ_SPARE2_LSB, 0, 0x5},
+
+ {CS4321_MSEQ_SPARE9_LSB, 0, 0x5},
+
+ {CS4321_MSEQ_CAL_RX_PHSEL, 0, 0x1e},
+ {CS4321_DSP_SDS_DSP_COEF_LARGE_LEAK, 0, 0x2},
+ {CS4321_DSP_SDS_SERDES_SRX_DAC_ENABLEB_LSB, 0, 0xD000},
+ {CS4321_MSEQ_POWER_DOWN_LSB, 0, 0xFFFF},
+ {CS4321_MSEQ_POWER_DOWN_MSB, 0, 0x0},
+ {CS4321_MSEQ_CAL_RX_SLICER, 0, 0x80},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_SPARE, 0, 0xE0E0},
+ {CS4321_DSP_SDS_SERDES_SRX_DAC_BIAS_SELECT1_MSB, 0, 0xff},
+
+ /* Setup the trace lengths for the micro-sequencer */
+ {CS4321_MSEQ_SERDES_PARAM_LSB, 0, 0x0603},
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_hsif_elec_mode_set_sr_2in[] = {
+ {CS4321_MSEQ_CAL_RX_EQADJ, 0, 0x0},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_hsif_elec_mode_set_sr_post[] = {
+ {CS4321_MSEQ_CAL_RX_DFE_EQ, 0, 0x0},
+ /* Restart the micro-sequencer */
+ {CS4321_GLOBAL_MSEQCLKCTRL, 0, 0x4},
+ {CS4321_MSEQ_OPTIONS, 0, 0x7},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_resync_vcos_xaui_rxaui[] = {
+ {CS4321_HOST_SDS_COMMON_RXVCO0_CONTROL, (u16)~0x8000, 0x8000},
+ {CS4321_HOST_SDS_COMMON_RXVCO0_CONTROL, (u16)~0x8000, 0},
+
+ {CS4321_HOST_SDS_COMMON_TXVCO0_CONTROL, (u16)~0x8000, 0x8000},
+ {CS4321_HOST_SDS_COMMON_TXVCO0_CONTROL, (u16)~0x8000, 0},
+
+ {CS4321_LINE_SDS_COMMON_RXVCO0_CONTROL, (u16)~0x8000, 0x8000},
+ {CS4321_LINE_SDS_COMMON_RXVCO0_CONTROL, (u16)~0x8000, 0},
+
+ {CS4321_LINE_SDS_COMMON_TXVCO0_CONTROL, (u16)~0x8000, 0x8000},
+ {CS4321_LINE_SDS_COMMON_TXVCO0_CONTROL, (u16)~0x8000, 0},
+
+ {CS4321_HOST_ML_SDS_COMMON_RXVCO0_CONTROL, (u16)~0x8000, 0x8000},
+ {CS4321_HOST_ML_SDS_COMMON_RXVCO0_CONTROL, (u16)~0x8000, 0},
+
+ {CS4321_HOST_ML_SDS_COMMON_TXVCO0_CONTROL, (u16)~0x8000, 0x8000},
+ {CS4321_HOST_ML_SDS_COMMON_TXVCO0_CONTROL, (u16)~0x8000, 0},
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_toggle_resets_xaui_rxaui[] = {
+ {CS4321_HOST_ML_SDS_COMMON_SRX0_RX_CONFIG, ~0x0020, 0},
+ {CS4321_HOST_ML_SDS_COMMON_STXP0_TX_PWRDN, ~0x0100, 0},
+
+ /*
+ * Now that the device is configured toggle the ingress and
+ * egress soft resets to make sure the device re-syncs
+ * properly.
+ */
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x3},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, 0, 0x3},
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0000},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, 0, 0x0000},
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_xaui_egress[] = {
+ {CS4321_LINE_SDS_COMMON_STX0_TX_CONFIG_LOCAL_TIMING, 0, 0x0001},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_CLKOUT_CTRL, 0, 0x0864},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_LOOP_FILTER, 0, 0x0027},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_PWRDN, 0, 0x0000},
+
+ {CS4321_HOST_SDS_COMMON_SRX0_RX_CLKDIV_CTRL, 0, 0x45d2},
+ {CS4321_HOST_SDS_COMMON_SRX0_RX_CLKOUT_CTRL, 0, 0x6a03},
+ {CS4321_HOST_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x000c},
+ {CS4321_HOST_ML_SDS_COMMON_SRX0_RX_CLKDIV_CTRL, 0, 0x412d},
+ {CS4321_HOST_ML_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x000c},
+
+ {CS4321_LINE_SDS_COMMON_STX0_TX_CONFIG_LOCAL_TIMING, 0, 0x0001},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_CLKOUT_CTRL, 0, 0x0864},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_LOOP_FILTER, 0, 0x0027},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_PWRDN, 0, 0x0000},
+
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0003},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, 0, 0xffff},
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0000},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, 0, 0x0000},
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0xffff},
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0x0000},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_xaui_ingress[] = {
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x0000},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CPA, 0, 0x0057},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_LOOP_FILTER, 0, 0x0007},
+
+ {CS4321_HOST_SDS_COMMON_STX0_TX_CONFIG_LOCAL_TIMING, 0, 0x0001},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_CLKDIV_CTRL, 0, 0x4492},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_CLKOUT_CTRL, 0, 0x1864},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_CONFIG, 0, 0x090c},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_PWRDN, 0, 0x0000},
+ {CS4321_HOST_ML_SDS_COMMON_STXP0_TX_CLKDIV_CTRL, 0, 0x4429},
+ {CS4321_HOST_ML_SDS_COMMON_STXP0_TX_CONFIG, 0, 0x090c},
+
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CONFIG, 0, 0x0000},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_CPA, 0, 0x0057},
+ {CS4321_LINE_SDS_COMMON_SRX0_RX_LOOP_FILTER, 0, 0x0007},
+
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0003},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, 0, 0xffff},
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0000},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, 0, 0x0000},
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0xffff},
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0x0000},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_ingress_1[] = {
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0002},
+ {CS4321_GLOBAL_INGRESS_SOFT_RESET, 0, 0x0000},
+ {CS4321_HOST_SDS_COMMON_STXP0_TX_PWRDN, 0, 0x0000},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_2e[] = {
+ {CS4321_GLOBAL_HOST_MULTILANE_CLKSEL, 0, 0x8000},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_2o[] = {
+ {CS4321_GLOBAL_HOST_MULTILANE_CLKSEL, 0, 0x8300},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_ingress_3[] = {
+ /* Set the device in XAUI mode */
+ {CS4321_GLOBAL_HOST_MULTILANE_FUNCEN, 0, 0x0005},
+
+ /* Enable the XGPCS and the Rate Adjust block */
+ /* Set fen_radj, rx_fen_xgpcs */
+ {CS4321_GLOBAL_INGRESS_FUNCEN, ~0x0081, 0x0081},
+
+ /* Setup the clock enables for the XGPCS and Rate Adjust block */
+ /* Set rx_en_radj, rx_en_xgpcs */
+ {CS4321_GLOBAL_INGRESS_CLKEN, ~0x0021, 0x0021},
+
+ /* Setup the clock enables for the HIF and the Rate Adjust block */
+ /* Set tx_en_hif, tx_en_radj */
+ {CS4321_GLOBAL_INGRESS_CLKEN2, ~0x0120, 0x0120},
+
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0xffff},
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0, 0x0000},
+ /* MPIF DeAssert Ingress Reset */
+ {CS4321_GLOBAL_MPIF_RESET_DOTREG, ~0x0004, 0},
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_ingress_4e[] = {
+ {CS4321_XGMAC_LINE_RX_CFG_COM, 0, 0x8010},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_ingress_4o[] = {
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_ingress_5[] = {
+ {CS4321_XGMAC_HOST_TX_CFG_TX_IFG, 0, 0x0005},
+ {CS4321_XGPCS_LINE_RX_RXCNTRL, 0, 0x5000},
+ {CS4321_XGRS_HOST_TX_TXCNTRL, 0, 0xc000},
+ {CS4321_GIGEPCS_LINE_CONTROL, 0, 0x0000},
+ {CS4321_GIGEPCS_HOST_CONTROL, 0, 0x0000},
+
+ {CS4321_RADJ_INGRESS_RX_NRA_MIN_IFG, 0, 0x0004},
+ {CS4321_RADJ_INGRESS_RX_NRA_SETTLE, 0, 0x0000},
+ {CS4321_RADJ_INGRESS_TX_ADD_FILL_CTRL, 0, 0xf001},
+ {CS4321_RADJ_INGRESS_TX_ADD_FILL_DATA0, 0, 0x0707},
+ {CS4321_RADJ_INGRESS_TX_ADD_FILL_DATA1, 0, 0x0707},
+ {CS4321_RADJ_INGRESS_TX_PRA_MIN_IFG, 0, 0x0004},
+ {CS4321_RADJ_INGRESS_TX_PRA_SETTLE, 0, 0x0000},
+ {CS4321_RADJ_INGRESS_MISC_RESET, 0, 0x0000},
+ {CS4321_PM_CTRL, 0, 0x0002},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_6e[] = {
+ {CS4321_HIF_COMMON_TXCONTROL3, 0, 0x0010},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_6o[] = {
+ {CS4321_HIF_COMMON_TXCONTROL3, 0, 0x0011},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_egress_1[] = {
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, 0, 0x1},
+ {CS4321_GLOBAL_EGRESS_SOFT_RESET, 0, 0x0000},
+ {CS4321_LINE_SDS_COMMON_STXP0_TX_PWRDN, 0, 0x0000},
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_egress_3[] = {
+ /* Set the device in XAUI mode */
+ {CS4321_GLOBAL_HOST_MULTILANE_FUNCEN, 0x0005},
+
+ /* Enable the XGPCS and the Rate Adjust block */
+ /* Set tx_fen_xgpcs, fen_radj */
+ {CS4321_GLOBAL_EGRESS_FUNCEN, ~0x0180, 0x0180},
+
+ /* Setup the clock enables for the HIF and the Rate Adjust block */
+ /* Set rx_en_hif, rx_en_radj */
+ {CS4321_GLOBAL_EGRESS_CLKEN, ~0x0120, 0x0120},
+
+ /* Setup the clock enables for the XGPCS and Rate Adjust block */
+ /* Set tx_en_radj, tx_en_xgpcs */
+ {CS4321_GLOBAL_EGRESS_CLKEN2, ~0x0021, 0x0021},
+
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0xffff},
+ {CS4321_GLOBAL_REF_SOFT_RESET, 0x0000},
+
+ /* MPIF DeAssert Egress Reset */
+ {CS4321_GLOBAL_MPIF_RESET_DOTREG, ~0x0002, 0},
+
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_egress_4e[] = {
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_egress_4o[] = {
+ {CS4321_XGMAC_LINE_TX_CFG_COM, 0, 0xc000},
+ {0}
+};
+
+static const struct cs4321_reg_modify cs4321_init_dpath_xaui_pcs_ra_egress_5[] = {
+ {CS4321_XGMAC_LINE_TX_CFG_TX_IFG, 0, 0x0005},
+ {CS4321_XGPCS_LINE_TX_TXCNTRL, 0, 0x0000},
+ {CS4321_XGRS_LINE_TX_TXCNTRL, 0, 0xc000},
+
+ {CS4321_RADJ_EGRESS_RX_NRA_MIN_IFG, 0, 0x0004},
+ {CS4321_RADJ_EGRESS_RX_NRA_SETTLE, 0, 0x0000},
+ {CS4321_RADJ_EGRESS_TX_ADD_FILL_CTRL, 0, 0xf001},
+ {CS4321_RADJ_EGRESS_TX_ADD_FILL_DATA0, 0, 0x0707},
+ {CS4321_RADJ_EGRESS_TX_ADD_FILL_DATA1, 0, 0x0707},
+ {CS4321_RADJ_EGRESS_TX_PRA_MIN_IFG, 0, 0x0004},
+ {CS4321_RADJ_EGRESS_TX_PRA_SETTLE, 0, 0x0000},
+ {CS4321_RADJ_EGRESS_MISC_RESET, 0, 0x0000},
+ {CS4321_PM_CTRL, 0, 0x0002},
+ {0}
+};
+
+const struct cs4321_multi_seq cs4321_init_rxaui_seq[] = {
+ {0, cs4321_init_prefix_seq},
+ {0, cs4321_init_egress_local_timing_rxaui},
+ {0, cs4321_init_ingress_local_timing_rxaui},
+ {0, cs4321_init_dpath_ingress_rxaui_pcs_ra},
+ {0, cs4321_init_dpath_egress_rxaui_pcs_ra},
+ {0, cs4321_resync_vcos_xaui_rxaui},
+ {0, cs4321_toggle_resets_xaui_rxaui},
+ {0, cs4321_hsif_elec_mode_set_sr_pre},
+ {0, cs4321_hsif_elec_mode_set_sr_2in},
+ {0, cs4321_hsif_elec_mode_set_sr_post},
+ {0, cs4321_init_global_timer_156_25},
+ {0, cs4321_init_mac_latency},
+ {0, cs4321_init_ref_clk_src_xaui_rxaui},
+ {0, cs4321_init_polarity_inv},
+
+ {0, NULL}
+};
+
+const struct cs4321_multi_seq cs4321_init_xaui_seq[] = {
+ {0, cs4321_init_prefix_seq},
+ /* Init egress even and odd */
+ {0, cs4321_init_xaui_egress},
+ {1, cs4321_init_xaui_egress},
+
+ /* Init ingress even and odd */
+ {0, cs4321_init_xaui_ingress},
+ {1, cs4321_init_xaui_ingress},
+
+ /* dpath ingress even and odd */
+ {0, cs4321_init_dpath_xaui_pcs_ra_ingress_1},
+ {0, cs4321_init_dpath_xaui_pcs_ra_2e},
+ {0, cs4321_init_dpath_xaui_pcs_ra_ingress_3},
+ {0, cs4321_init_dpath_xaui_pcs_ra_ingress_4e},
+ {0, cs4321_init_dpath_xaui_pcs_ra_ingress_5},
+ {0, cs4321_init_dpath_xaui_pcs_ra_6e},
+
+
+ {1, cs4321_init_dpath_xaui_pcs_ra_ingress_1},
+ {1, cs4321_init_dpath_xaui_pcs_ra_2o},
+ {1, cs4321_init_dpath_xaui_pcs_ra_ingress_3},
+ {1, cs4321_init_dpath_xaui_pcs_ra_ingress_4o},
+ {1, cs4321_init_dpath_xaui_pcs_ra_ingress_5},
+ {1, cs4321_init_dpath_xaui_pcs_ra_6o},
+
+ /* dpath egress even and odd */
+ {0, cs4321_init_dpath_xaui_pcs_ra_egress_1},
+ {0, cs4321_init_dpath_xaui_pcs_ra_2e},
+ {0, cs4321_init_dpath_xaui_pcs_ra_egress_3},
+ {0, cs4321_init_dpath_xaui_pcs_ra_egress_4e},
+ {0, cs4321_init_dpath_xaui_pcs_ra_egress_5},
+ {0, cs4321_init_dpath_xaui_pcs_ra_6e},
+
+ {1, cs4321_init_dpath_xaui_pcs_ra_egress_1},
+ {1, cs4321_init_dpath_xaui_pcs_ra_2o},
+ {1, cs4321_init_dpath_xaui_pcs_ra_egress_3},
+ {1, cs4321_init_dpath_xaui_pcs_ra_egress_4o},
+ {1, cs4321_init_dpath_xaui_pcs_ra_egress_5},
+ {1, cs4321_init_dpath_xaui_pcs_ra_6o},
+
+ /* power down the odd slice's line side */
+ {1, cs4321_init_line_power_down},
+
+ {0, cs4321_resync_vcos_xaui_rxaui},
+ {0, cs4321_toggle_resets_xaui_rxaui},
+ {0, cs4321_hsif_elec_mode_set_sr_pre},
+ {0, cs4321_hsif_elec_mode_set_sr_2in},
+ {0, cs4321_hsif_elec_mode_set_sr_post},
+ {0, cs4321_init_global_timer_156_25},
+ {0, cs4321_init_mac_latency},
+ {0, cs4321_init_ref_clk_src_xaui_rxaui},
+ {0, cs4321_init_polarity_inv},
+
+ {0, NULL}
+};
+
+static int cs4321_phy_read_x(struct phy_device *phydev, int off, u16 regnum)
+{
+ return mdiobus_read(phydev->bus, phydev->addr + off,
+ MII_ADDR_C45 | regnum);
+}
+
+static int cs4321_phy_write_x(struct phy_device *phydev, int off,
+ u16 regnum, u16 val)
+{
+ return mdiobus_write(phydev->bus, phydev->addr + off,
+ MII_ADDR_C45 | regnum, val);
+}
+static int cs4321_phy_read(struct phy_device *phydev, u16 regnum)
+{
+ return cs4321_phy_read_x(phydev, 0, regnum);
+}
+
+static int cs4321_phy_write(struct phy_device *phydev, u16 regnum, u16 val)
+{
+ return cs4321_phy_write_x(phydev, 0, regnum, val);
+}
+
+static int cs4321_write_seq_x(struct phy_device *phydev, int off,
+ const struct cs4321_reg_modify *seq)
+{
+ int last_reg = -1;
+ int last_val = 0;
+ int ret = 0;
+
+ while (seq->reg) {
+ if (seq->mask_bits) {
+ if (last_reg != seq->reg) {
+ ret = cs4321_phy_read_x(phydev, off, seq->reg);
+ if (ret < 0)
+ goto err;
+ last_val = ret;
+ }
+ last_val &= seq->mask_bits;
+ } else {
+ last_val = 0;
+ }
+ last_val |= seq->set_bits;
+ ret = cs4321_phy_write_x(phydev, off, seq->reg, last_val);
+ if (ret < 0)
+ goto err;
+ seq++;
+ }
+err:
+ return ret;
+}
+
+static int cs4321_write_multi_seq(struct phy_device *phydev,
+ const struct cs4321_multi_seq *m)
+{
+ int ret = 0;
+
+ while (m->seq) {
+ ret = cs4321_write_seq_x(phydev, m->reg_offset, m->seq);
+ if (ret)
+ goto err;
+ m++;
+ }
+
+err:
+ return ret;
+}
+
+static int cs4321_write_seq(struct phy_device *phydev,
+ const struct cs4321_reg_modify *seq)
+{
+ return cs4321_write_seq_x(phydev, 0, seq);
+}
+
+static int cs4321_write_multi_reg(struct phy_device *phydev, u16 *dat, int cnt)
+{
+ int i;
+ int ret = 0;
+ for (i = 0; i < (cnt * 2); i += 2) {
+ u16 reg = dat[i];
+ u16 val = dat[i + 1];
+ ret = cs4321_phy_write(phydev, reg, val);
+ if (ret)
+ break;
+ }
+ return ret;
+}
+
+static int cs4321_write_microcode_slice(struct phy_device *phydev, int s)
+{
+ int i;
+ int ret;
+
+ ret = cs4321_phy_write(phydev, 0x024f, s);
+ if (ret)
+ return ret;
+
+ for (i = 0; i < 512; i++) {
+ ret = cs4321_phy_write(phydev,
+ 0x0201,
+ cs4321_microcode_slices[s][2 * i + 0]);
+ if (ret)
+ return ret;
+
+ ret = cs4321_phy_write(phydev,
+ 0x0202,
+ cs4321_microcode_slices[s][2 * i + 1]);
+ if (ret)
+ return ret;
+ ret = cs4321_phy_write(phydev, 0x0200, 0x9000 + i);
+ if (ret)
+ return ret;
+ }
+ return 0;
+}
+
+static int cs4321_write_microcode(struct phy_device *phydev)
+{
+ int i;
+ int ret;
+
+ ret = cs4321_write_multi_reg(phydev,
+ cs4321_microcode_prolog,
+ ARRAY_SIZE(cs4321_microcode_prolog) / 2);
+ if (ret)
+ return ret;
+
+ for (i = 0; i < 8; i++) {
+ ret = cs4321_write_microcode_slice(phydev, i);
+ if (ret)
+ return ret;
+ }
+ ret = cs4321_write_multi_reg(phydev,
+ cs4321_microcode_epilog,
+ ARRAY_SIZE(cs4321_microcode_epilog) / 2);
+ return ret;
+}
+
+static int cs4321_reset(struct phy_device *phydev)
+{
+ int ret;
+ int retry;
+
+ ret = cs4321_phy_write(phydev, CS4321_GLOBAL_MPIF_SOFT_RESET, 0xdead);
+ if (ret)
+ goto err;
+
+ msleep(100);
+
+ /* Disable eeprom loading */
+ ret = cs4321_phy_write(phydev, CS4321_EEPROM_LOADER_CONTROL, 2);
+ if (ret)
+ goto err;
+
+ retry = 0;
+ do {
+ if (retry > 0)
+ mdelay(1);
+ ret = cs4321_phy_read(phydev, CS4321_EEPROM_LOADER_STATUS);
+ if (ret < 0)
+ goto err;
+ retry++;
+ } while ((ret & 4) == 0 && retry < 10);
+
+ if ((ret & 4) == 0) {
+ ret = -ENXIO;
+ goto err;
+ }
+
+ ret = cs4321_write_seq(phydev, cs4321_soft_reset_registers);
+ if (ret)
+ goto err;
+
+ ret = cs4321_write_microcode(phydev);
+ if (ret)
+ goto err;
+
+
+ ret = cs4321_write_seq(phydev, cs4321_68xx_4_nic_init);
+ if (ret)
+ goto err;
+
+err:
+ return ret;
+}
+
+int cs4321_init_rxaui(struct phy_device *phydev)
+{
+ return cs4321_write_multi_seq(phydev,
+ cs4321_init_rxaui_seq);
+}
+
+int cs4321_init_xaui(struct phy_device *phydev)
+{
+ return cs4321_write_multi_seq(phydev,
+ cs4321_init_xaui_seq);
+
+}
+
+int cs4321_config_init(struct phy_device *phydev)
+{
+ int ret;
+ struct cs4321_private *p = phydev->priv;
+ const struct cs4321_multi_seq *init_seq;
+
+ ret = cs4321_reset(phydev);
+ if (ret)
+ goto err;
+
+ init_seq = (p->mode == XAUI) ?
+ cs4321_init_xaui_seq : cs4321_init_rxaui_seq;
+
+ ret = cs4321_write_multi_seq(phydev, init_seq);
+
+ phydev->state = PHY_NOLINK;
+
+err:
+ return ret;
+}
+
+int cs4321_probe(struct phy_device *phydev)
+{
+ int ret = 0;
+ int id_lsb, id_msb;
+ enum cs4321_host_mode host_mode;
+ const char *prop_val;
+ struct cs4321_private *p;
+ /*
+ * CS4312 keeps its ID values in non-standard registers, make
+ * sure we are talking to what we think we are.
+ */
+ id_lsb = cs4321_phy_read(phydev, CS4321_GLOBAL_CHIP_ID_LSB);
+ if (id_lsb < 0) {
+ ret = id_lsb;
+ goto err;
+ }
+
+ id_msb = cs4321_phy_read(phydev, CS4321_GLOBAL_CHIP_ID_MSB);
+ if (id_msb < 0) {
+ ret = id_msb;
+ goto err;
+ }
+
+ if (id_lsb != 0x23E5 || id_msb != 0x1002) {
+ ret = -ENODEV;
+ goto err;
+ }
+ ret = of_property_read_string(phydev->dev.of_node,
+ "cortina,host-mode", &prop_val);
+ if (ret)
+ goto err;
+
+ if (strcmp(prop_val, "rxaui") == 0)
+ host_mode = RXAUI;
+ else if (strcmp(prop_val, "xaui") == 0)
+ host_mode = XAUI;
+ else {
+ dev_err(&phydev->dev,
+ "Invalid \"cortina,host-mode\" property: \"%s\"\n",
+ prop_val);
+ ret = -EINVAL;
+ goto err;
+ }
+ p = devm_kzalloc(&phydev->dev, sizeof(*p), GFP_KERNEL);
+ if (!p) {
+ ret = -ENOMEM;
+ goto err;
+ }
+ p->mode = host_mode;
+ phydev->priv = p;
+err:
+ return ret;
+}
+
+int cs4321_config_aneg(struct phy_device *phydev)
+{
+ return -EINVAL;
+}
+
+int cs4321_read_status(struct phy_device *phydev)
+{
+ int gpio_int_status;
+ int ret = 0;
+
+ gpio_int_status = cs4321_phy_read(phydev, CS4321_GPIO_GPIO_INTS);
+ if (gpio_int_status < 0) {
+ ret = gpio_int_status;
+ goto err;
+ }
+ if (gpio_int_status & 0x8) {
+ /* Up when edc_convergedS set. */
+ phydev->speed = 10000;
+ phydev->duplex = 1;
+ phydev->link = 1;
+ } else {
+ phydev->link = 0;
+ }
+
+err:
+ return ret;
+}
+
+static struct of_device_id cs4321_match[] = {
+ {
+ .compatible = "cortina,cs4321",
+ },
+ {
+ .compatible = "cortina,cs4318",
+ },
+ {},
+};
+MODULE_DEVICE_TABLE(of, cs4321_match);
+
+static struct phy_driver cs4321_phy_driver = {
+ .phy_id = 0xffffffff,
+ .phy_id_mask = 0xffffffff,
+ .name = "Cortina CS4321",
+ .config_init = cs4321_config_init,
+ .probe = cs4321_probe,
+ .config_aneg = cs4321_config_aneg,
+ .read_status = cs4321_read_status,
+ .driver = {
+ .owner = THIS_MODULE,
+ .of_match_table = cs4321_match,
+ },
+};
+
+static int __init cs4321_drv_init(void)
+{
+ int ret;
+
+ ret = phy_driver_register(&cs4321_phy_driver);
+
+ return ret;
+}
+module_init(cs4321_drv_init);
+
+static void __exit cs4321_drv_exit(void)
+{
+ phy_driver_unregister(&cs4321_phy_driver);
+}
+module_exit(cs4321_drv_exit);
--
1.7.2.3
^ permalink raw reply related
* [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
From: David Daney @ 2012-05-22 17:59 UTC (permalink / raw)
To: devicetree-discuss, Grant Likely, Rob Herring, David S. Miller,
netdev
Cc: linux-kernel, linux-mips, Andy Fleming, David Daney
In-Reply-To: <1337709592-23347-1-git-send-email-ddaney.cavm@gmail.com>
From: David Daney <david.daney@cavium.com>
Add a driver for BCM8706 and BCM8727 devices. These are a 10Gig PHYs
which use MII_ADDR_C45 addressing. They are always 10G full duplex, so
there is no autonegotiation. All we do is report link state and send
interrupts when it changes.
If the PHY has a device tree of_node associated with it, the
"broadcom,c45-reg-init" property is used to supply register
initialization values when config_init() is called.
Signed-off-by: David Daney <david.daney@cavium.com>
---
.../devicetree/bindings/net/broadcom-bcm87xx.txt | 29 +++
drivers/net/phy/Kconfig | 5 +
drivers/net/phy/Makefile | 1 +
drivers/net/phy/bcm87xx.c | 237 ++++++++++++++++++++
4 files changed, 272 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt
create mode 100644 drivers/net/phy/bcm87xx.c
diff --git a/Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt b/Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt
new file mode 100644
index 0000000..7c86d5e
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt
@@ -0,0 +1,29 @@
+The Broadcom BCM87XX devices are a family of 10G Ethernet PHYs. They
+have these bindings in addition to the standard PHY bindings.
+
+Compatible: Should contain "broadcom,bcm8706" or "broadcom,bcm8727" and
+ "ethernet-phy-ieee802.3-c45"
+
+Optional Properties:
+
+- broadcom,c45-reg-init : one of more sets of 4 cells. The first cell
+ is the MDIO Manageable Device (MMD) address, the second a register
+ address within the MMD, the third cell contains a mask to be ANDed
+ with the existing register value, and the fourth cell is ORed with
+ he result to yield the new register value. If the third cell has a
+ value of zero, no read of the existing value is performed.
+
+Example:
+
+ ethernet-phy@5 {
+ reg = <5>;
+ compatible = "broadcom,bcm8706", "ethernet-phy-ieee802.3-c45";
+ interrupt-parent = <&gpio>;
+ interrupts = <12 8>; /* Pin 12, active low */
+ /*
+ * Set PMD Digital Control Register for
+ * GPIO[1] Tx/Rx
+ * GPIO[0] R64 Sync Acquired
+ */
+ broadcom,c45-reg-init = <1 0xc808 0xff8f 0x70>;
+ };
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index 32e9be0..9e36c8f 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -67,6 +67,11 @@ config BCM63XX_PHY
---help---
Currently supports the 6348 and 6358 PHYs.
+config BCM87XX_PHY
+ tristate "Driver for Broadcom BCM8706 and BCM8727 PHYs"
+ help
+ Currently supports the BCM8706 and BCM8727 10G Ethernet PHYs.
+
config ICPLUS_PHY
tristate "Drivers for ICPlus PHYs"
---help---
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index f51af68..6d2dc6c 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_SMSC_PHY) += smsc.o
obj-$(CONFIG_VITESSE_PHY) += vitesse.o
obj-$(CONFIG_BROADCOM_PHY) += broadcom.o
obj-$(CONFIG_BCM63XX_PHY) += bcm63xx.o
+obj-$(CONFIG_BCM87XX_PHY) += bcm87xx.o
obj-$(CONFIG_ICPLUS_PHY) += icplus.o
obj-$(CONFIG_REALTEK_PHY) += realtek.o
obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
diff --git a/drivers/net/phy/bcm87xx.c b/drivers/net/phy/bcm87xx.c
new file mode 100644
index 0000000..6883c7c
--- /dev/null
+++ b/drivers/net/phy/bcm87xx.c
@@ -0,0 +1,237 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2011 - 2012 Cavium, Inc.
+ */
+
+#include <linux/module.h>
+#include <linux/phy.h>
+#include <linux/of.h>
+
+#define PHY_ID_BCM8706 0x0143bdc1
+#define PHY_ID_BCM8727 0x0143bff0
+
+#define BCM87XX_PMD_RX_SIGNAL_DETECT (MII_ADDR_C45 | 0x1000a)
+#define BCM87XX_10GBASER_PCS_STATUS (MII_ADDR_C45 | 0x30020)
+#define BCM87XX_XGXS_LANE_STATUS (MII_ADDR_C45 | 0x40018)
+
+#define BCM87XX_LASI_CONTROL (MII_ADDR_C45 | 0x39002)
+#define BCM87XX_LASI_STATUS (MII_ADDR_C45 | 0x39005)
+
+#if IS_ENABLED(CONFIG_OF_MDIO)
+/*
+ * Set and/or override some configuration registers based on the
+ * marvell,reg-init property stored in the of_node for the phydev.
+ *
+ * broadcom,c45-reg-init = <devid reg mask value>,...;
+ *
+ * There may be one or more sets of <devid reg mask value>:
+ *
+ * devid: which sub-device to use.
+ * reg: the register.
+ * mask: if non-zero, ANDed with existing register value.
+ * value: ORed with the masked value and written to the regiser.
+ *
+ */
+static int bcm87xx_of_reg_init(struct phy_device *phydev)
+{
+ const __be32 *paddr;
+ int len, i, ret;
+
+ if (!phydev->dev.of_node)
+ return 0;
+
+ paddr = of_get_property(phydev->dev.of_node,
+ "broadcom,c45-reg-init", &len);
+ if (!paddr || len < (4 * sizeof(*paddr)))
+ return 0;
+
+ ret = 0;
+ len /= sizeof(*paddr);
+ for (i = 0; i < len - 3; i += 4) {
+ u16 devid = be32_to_cpup(paddr + i);
+ u16 reg = be32_to_cpup(paddr + i + 1);
+ u16 mask = be32_to_cpup(paddr + i + 2);
+ u16 val_bits = be32_to_cpup(paddr + i + 3);
+ int val;
+ u32 regnum = MII_ADDR_C45 | (devid << 16) | reg;
+ val = 0;
+ if (mask) {
+ val = phy_read(phydev, regnum);
+ if (val < 0) {
+ ret = val;
+ goto err;
+ }
+ val &= mask;
+ }
+ val |= val_bits;
+
+ ret = phy_write(phydev, regnum, val);
+ if (ret < 0)
+ goto err;
+ }
+err:
+ return ret;
+}
+#else
+static int bcm87xx_of_reg_init(struct phy_device *phydev)
+{
+ return 0;
+}
+#endif /* CONFIG_OF_MDIO */
+
+static int bcm87xx_config_init(struct phy_device *phydev)
+{
+ phydev->supported = SUPPORTED_10000baseR_FEC;
+ phydev->advertising = ADVERTISED_10000baseR_FEC;
+ phydev->state = PHY_NOLINK;
+
+ bcm87xx_of_reg_init(phydev);
+
+ return 0;
+}
+
+static int bcm87xx_config_aneg(struct phy_device *phydev)
+{
+ return -EINVAL;
+}
+
+static int bcm87xx_read_status(struct phy_device *phydev)
+{
+ int rx_signal_detect;
+ int pcs_status;
+ int xgxs_lane_status;
+
+ rx_signal_detect = phy_read(phydev, BCM87XX_PMD_RX_SIGNAL_DETECT);
+ if (rx_signal_detect < 0)
+ return rx_signal_detect;
+
+ if ((rx_signal_detect & 1) == 0)
+ goto no_link;
+
+ pcs_status = phy_read(phydev, BCM87XX_10GBASER_PCS_STATUS);
+ if (pcs_status < 0)
+ return pcs_status;
+
+ if ((pcs_status & 1) == 0)
+ goto no_link;
+
+ xgxs_lane_status = phy_read(phydev, BCM87XX_XGXS_LANE_STATUS);
+ if (xgxs_lane_status < 0)
+ return xgxs_lane_status;
+
+ if ((xgxs_lane_status & 0x1000) == 0)
+ goto no_link;
+
+ phydev->speed = 10000;
+ phydev->link = 1;
+ phydev->duplex = 1;
+ return 0;
+
+no_link:
+ phydev->link = 0;
+ return 0;
+}
+
+static int bcm87xx_config_intr(struct phy_device *phydev)
+{
+ int reg, err;
+
+ reg = phy_read(phydev, BCM87XX_LASI_CONTROL);
+
+ if (reg < 0)
+ return reg;
+
+ if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
+ reg |= 1;
+ else
+ reg &= ~1;
+
+ err = phy_write(phydev, BCM87XX_LASI_CONTROL, reg);
+ return err;
+}
+
+static int bcm87xx_did_interrupt(struct phy_device *phydev)
+{
+ int reg;
+
+ reg = phy_read(phydev, BCM87XX_LASI_STATUS);
+
+ if (reg < 0) {
+ dev_err(&phydev->dev,
+ "Error: Read of BCM87XX_LASI_STATUS failed: %d\n", reg);
+ return 0;
+ }
+ return (reg & 1) != 0;
+}
+
+static int bcm87xx_ack_interrupt(struct phy_device *phydev)
+{
+ /* Reading the LASI status clears it. */
+ bcm87xx_did_interrupt(phydev);
+ return 0;
+}
+
+static int bcm8706_match_phy_device(struct phy_device *phydev)
+{
+ return phydev->c45_ids.device_ids[4] == PHY_ID_BCM8706;
+}
+
+static int bcm8727_match_phy_device(struct phy_device *phydev)
+{
+ return phydev->c45_ids.device_ids[4] == PHY_ID_BCM8727;
+}
+
+static struct phy_driver bcm8706_driver = {
+ .phy_id = PHY_ID_BCM8706,
+ .phy_id_mask = 0xffffffff,
+ .name = "Broadcom BCM8706",
+ .flags = PHY_HAS_INTERRUPT,
+ .config_init = bcm87xx_config_init,
+ .config_aneg = bcm87xx_config_aneg,
+ .read_status = bcm87xx_read_status,
+ .ack_interrupt = bcm87xx_ack_interrupt,
+ .config_intr = bcm87xx_config_intr,
+ .did_interrupt = bcm87xx_did_interrupt,
+ .match_phy_device = bcm8706_match_phy_device,
+ .driver = { .owner = THIS_MODULE },
+};
+
+static struct phy_driver bcm8727_driver = {
+ .phy_id = PHY_ID_BCM8727,
+ .phy_id_mask = 0xffffffff,
+ .name = "Broadcom BCM8727",
+ .flags = PHY_HAS_INTERRUPT,
+ .config_init = bcm87xx_config_init,
+ .config_aneg = bcm87xx_config_aneg,
+ .read_status = bcm87xx_read_status,
+ .ack_interrupt = bcm87xx_ack_interrupt,
+ .config_intr = bcm87xx_config_intr,
+ .did_interrupt = bcm87xx_did_interrupt,
+ .match_phy_device = bcm8727_match_phy_device,
+ .driver = { .owner = THIS_MODULE },
+};
+
+static int __init bcm87xx_init(void)
+{
+ int ret;
+
+ ret = phy_driver_register(&bcm8706_driver);
+ if (ret)
+ goto err;
+
+ ret = phy_driver_register(&bcm8727_driver);
+err:
+ return ret;
+}
+module_init(bcm87xx_init);
+
+static void __exit bcm87xx_exit(void)
+{
+ phy_driver_unregister(&bcm8706_driver);
+ phy_driver_unregister(&bcm8727_driver);
+}
+module_exit(bcm87xx_exit);
+
--
1.7.2.3
^ permalink raw reply related
* [PATCH 3/5] netdev/phy/of: Add more methods for binding PHY devices to drivers.
From: David Daney @ 2012-05-22 17:59 UTC (permalink / raw)
To: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, Grant Likely,
Rob Herring, David S. Miller, netdev-u79uwXL29TY76Z2rM5mHXA
Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA, Andy Fleming,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, David Daney
In-Reply-To: <1337709592-23347-1-git-send-email-ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
Allow PHY drivers to supply their own device matching function
(match_phy_device()), or to be matched OF compatible properties.
PHYs following IEEE802.3 clause 45 have more than one device
identifier constants, which breaks the default device matching code.
Other 10G PHYs don't follow the standard manufacturer/device
identifier register layout standards, but they do use the standard
MDIO bus protocols for register access. Both of these require
adjustments to the PHY driver to device matching code.
If the there is an of_node associated with such a PHY, we can match it
to its driver using the "compatible" properties, just as we do with
certain platform devices. If the "compatible" property match fails,
first check if there is a driver supplied matching function, and if
not fall back to the existing identifier matching rules.
Signed-off-by: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
---
drivers/net/phy/mdio_bus.c | 7 +++++++
include/linux/phy.h | 7 +++++++
2 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 83d5c9f..11c415d 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -22,6 +22,7 @@
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/device.h>
+#include <linux/of_device.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
@@ -305,6 +306,12 @@ static int mdio_bus_match(struct device *dev, struct device_driver *drv)
struct phy_device *phydev = to_phy_device(dev);
struct phy_driver *phydrv = to_phy_driver(drv);
+ if (of_driver_match_device(dev, drv))
+ return 1;
+
+ if (phydrv->match_phy_device)
+ return phydrv->match_phy_device(phydev);
+
return ((phydrv->phy_id & phydrv->phy_id_mask) ==
(phydev->phy_id & phydrv->phy_id_mask));
}
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 283a318..09dc4c3 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -431,6 +431,13 @@ struct phy_driver {
/* Clears up any memory if needed */
void (*remove)(struct phy_device *phydev);
+ /*
+ * Returns true if this is a suitable driver for the given
+ * phydev. If NULL, matching is based on phy_id and
+ * phy_id_mask.
+ */
+ int (*match_phy_device)(struct phy_device *phydev);
+
/* Handles SIOCSHWTSTAMP ioctl for hardware time stamping. */
int (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);
--
1.7.2.3
^ permalink raw reply related
* [PATCH 2/5] netdev/phy/of: Handle IEEE802.3 clause 45 Ethernet PHYs in of_mdiobus_register()
From: David Daney @ 2012-05-22 17:59 UTC (permalink / raw)
To: devicetree-discuss, Grant Likely, Rob Herring, David S. Miller,
netdev
Cc: linux-kernel, linux-mips, Andy Fleming, David Daney
In-Reply-To: <1337709592-23347-1-git-send-email-ddaney.cavm@gmail.com>
From: David Daney <david.daney@cavium.com>
Define two new "compatible" values for Ethernet
PHYs. "ethernet-phy-ieee802.3-c22" and "ethernet-phy-ieee802.3-c45"
are used to indicate a PHY uses the corresponding protocol.
If a PHY is "compatible" with "ethernet-phy-ieee802.3-c45", we
indicate this so that get_phy_device() can properly probe the device.
If get_phy_device() fails, it was probably due to failing the probe of
the PHY identifier registers. Since we have the device tree telling
us the PHY exists, go ahead and add it anyhow with a phy_id of zero.
There may be a driver match based on the "compatible" property.
Signed-off-by: David Daney <david.daney@cavium.com>
---
Documentation/devicetree/bindings/net/phy.txt | 12 +++++++++++-
drivers/of/of_mdio.c | 14 +++++++++++---
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/phy.txt b/Documentation/devicetree/bindings/net/phy.txt
index bb8c742..7cd18fb 100644
--- a/Documentation/devicetree/bindings/net/phy.txt
+++ b/Documentation/devicetree/bindings/net/phy.txt
@@ -14,10 +14,20 @@ Required properties:
- linux,phandle : phandle for this node; likely referenced by an
ethernet controller node.
+Optional Properties:
+
+- compatible: Compatible list, may contain
+ "ethernet-phy-ieee802.3-c22" or "ethernet-phy-ieee802.3-c45" for
+ PHYs that implement IEEE802.3 clause 22 or IEEE802.3 clause 45
+ specifications. If neither of these are specified, the default is to
+ assume clause 22. The compatible list may also contain other
+ elements.
+
Example:
ethernet-phy@0 {
- linux,phandle = <2452000>
+ compatible = "ethernet-phy-ieee802.3-c22";
+ linux,phandle = <2452000>;
interrupt-parent = <40000>;
interrupts = <35 1>;
reg = <0>;
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 2574abd..0f08aaf 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -79,11 +79,19 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
mdio->irq[addr] = PHY_POLL;
}
+ if (of_device_is_compatible(child,
+ "ethernet-phy-ieee802.3-c45"))
+ addr |= MII_ADDR_C45;
+
phy = get_phy_device(mdio, addr);
if (!phy || IS_ERR(phy)) {
- dev_err(&mdio->dev, "error probing PHY at address %i\n",
- addr);
- continue;
+ phy = phy_device_create(mdio, addr, 0, NULL);
+ if (!phy || IS_ERR(phy)) {
+ dev_err(&mdio->dev,
+ "error creating PHY at address %i\n",
+ addr);
+ continue;
+ }
}
/* Associate the OF node with the device structure so it
--
1.7.2.3
^ permalink raw reply related
* [PATCH 1/5] netdev/phy: Handle IEEE802.3 clause 45 Ethernet PHYs
From: David Daney @ 2012-05-22 17:59 UTC (permalink / raw)
To: devicetree-discuss, Grant Likely, Rob Herring, David S. Miller,
netdev
Cc: linux-kernel, linux-mips, Andy Fleming, David Daney
In-Reply-To: <1337709592-23347-1-git-send-email-ddaney.cavm@gmail.com>
From: David Daney <david.daney@cavium.com>
The IEEE802.3 clause 45 MDIO bus protocol allows for directly
addressing PHY registers using a 21 bit address, and is used by many
10G Ethernet PHYS. Already existing is the ability of MDIO bus
drivers to use clause 45, with the MII_ADDR_C45 flag. Here we add
struct phy_c45_device_ids to hold the device identifier registers
present in clause 45. struct phy_device gets a couple of new fields:
c45_ids to hold the identifiers and is_c45 to signal that it is clause
45.
Normally the MII_ADDR_C45 flag is ORed with the register address to
indicate a clause 45 transaction. Here we also use this flag in the
*device* address passed to get_phy_device() to indicate that probing
should be done with clause 45 transactions.
EXPORT phy_device_create() so that the follow-on patch to of_mdio.c
can use it to create phy devices for PHYs, that have non-standard
device identifier registers, based on the device tree bindings.
Signed-off-by: David Daney <david.daney@cavium.com>
---
drivers/net/phy/phy_device.c | 110 +++++++++++++++++++++++++++++++++++++++---
include/linux/phy.h | 25 +++++++++-
2 files changed, 126 insertions(+), 9 deletions(-)
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index de86a55..3f989ef 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -149,8 +149,8 @@ int phy_scan_fixups(struct phy_device *phydev)
}
EXPORT_SYMBOL(phy_scan_fixups);
-static struct phy_device* phy_device_create(struct mii_bus *bus,
- int addr, int phy_id)
+struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
+ struct phy_c45_device_ids *c45_ids)
{
struct phy_device *dev;
@@ -171,8 +171,12 @@ static struct phy_device* phy_device_create(struct mii_bus *bus,
dev->autoneg = AUTONEG_ENABLE;
+ dev->is_c45 = (addr & MII_ADDR_C45) != 0;
+ addr &= ~MII_ADDR_C45;
dev->addr = addr;
dev->phy_id = phy_id;
+ if (c45_ids)
+ dev->c45_ids = *c45_ids;
dev->bus = bus;
dev->dev.parent = bus->parent;
dev->dev.bus = &mdio_bus_type;
@@ -197,20 +201,104 @@ static struct phy_device* phy_device_create(struct mii_bus *bus,
return dev;
}
+EXPORT_SYMBOL(phy_device_create);
+
+/**
+ * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
+ * @bus: the target MII bus
+ * @addr: PHY address on the MII bus
+ * @phy_id: where to store the ID retrieved.
+ * @c45_ids: where to store the c45 ID information.
+ *
+ * If the PHY devices-in-package appears to be valid, it and the
+ * corresponding identifiers are stored in @c45_ids, zero is stored
+ * in @phy_id. Otherwise 0xffffffff is stored in @phy_id. Returns
+ * zero on success.
+ *
+ */
+static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
+ struct phy_c45_device_ids *c45_ids) {
+ int phy_reg;
+ int i, reg_addr;
+
+ /*
+ * Find first non-zero Devices In package. Device
+ * zero is reserved, so don't probe it.
+ */
+ for (i = 1;
+ i < ARRAY_SIZE(c45_ids->device_ids) &&
+ c45_ids->devices_in_package == 0;
+ i++) {
+ reg_addr = MII_ADDR_C45 | i << 16 | 6;
+ phy_reg = mdiobus_read(bus, addr, reg_addr);
+ if (phy_reg < 0)
+ return -EIO;
+ c45_ids->devices_in_package = (phy_reg & 0xffff) << 16;
+
+
+ reg_addr = MII_ADDR_C45 | i << 16 | 5;
+ phy_reg = mdiobus_read(bus, addr, reg_addr);
+ if (phy_reg < 0)
+ return -EIO;
+ c45_ids->devices_in_package |= (phy_reg & 0xffff);
+
+ /*
+ * If mostly Fs, there is no device there,
+ * let's get out of here.
+ */
+ if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
+ *phy_id = 0xffffffff;
+ return 0;
+ }
+ }
+
+ /* Now probe Device Identifiers for each device present. */
+ for (i = 1; i < ARRAY_SIZE(c45_ids->device_ids); i++) {
+ if (!(c45_ids->devices_in_package & (1 << i)))
+ continue;
+
+ reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
+ phy_reg = mdiobus_read(bus, addr, reg_addr);
+ if (phy_reg < 0)
+ return -EIO;
+ c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
+
+
+ reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
+ phy_reg = mdiobus_read(bus, addr, reg_addr);
+ if (phy_reg < 0)
+ return -EIO;
+ c45_ids->device_ids[i] |= (phy_reg & 0xffff);
+ }
+ *phy_id = 0;
+ return 0;
+}
/**
* get_phy_id - reads the specified addr for its ID.
* @bus: the target MII bus
* @addr: PHY address on the MII bus
* @phy_id: where to store the ID retrieved.
+ * @c45_ids: where to store the c45 ID information.
+ *
+ * Description: In the case of a 802.3-c22 PHY, reads the ID registers
+ * of the PHY at @addr on the @bus, stores it in @phy_id and returns
+ * zero on success.
+ *
+ * In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and
+ * its return value is in turn returned.
*
- * Description: Reads the ID registers of the PHY at @addr on the
- * @bus, stores it in @phy_id and returns zero on success.
*/
-static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id)
+static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
+ struct phy_c45_device_ids *c45_ids)
{
int phy_reg;
+ if (addr & MII_ADDR_C45) {
+ addr &= ~MII_ADDR_C45;
+
+ return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
+ }
/* Grab the bits from PHYIR1, and put them
* in the upper half */
phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
@@ -238,14 +326,17 @@ static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id)
*
* Description: Reads the ID registers of the PHY at @addr on the
* @bus, then allocates and returns the phy_device to represent it.
+ * If @addr & MII_ADDR_C45 is not zero, the PHY is assumed to be
+ * 802.3-c45.
*/
struct phy_device * get_phy_device(struct mii_bus *bus, int addr)
{
struct phy_device *dev = NULL;
u32 phy_id;
+ struct phy_c45_device_ids c45_ids = {0};
int r;
- r = get_phy_id(bus, addr, &phy_id);
+ r = get_phy_id(bus, addr, &phy_id, &c45_ids);
if (r)
return ERR_PTR(r);
@@ -253,7 +344,7 @@ struct phy_device * get_phy_device(struct mii_bus *bus, int addr)
if ((phy_id & 0x1fffffff) == 0x1fffffff)
return NULL;
- dev = phy_device_create(bus, addr, phy_id);
+ dev = phy_device_create(bus, addr, phy_id, &c45_ids);
return dev;
}
@@ -446,6 +537,11 @@ static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
/* Assume that if there is no driver, that it doesn't
* exist, and we should use the genphy driver. */
if (NULL == d->driver) {
+ if (phydev->is_c45) {
+ pr_err("No driver for phy %x\n", phydev->phy_id);
+ return -ENODEV;
+ }
+
d->driver = &genphy_driver.driver;
err = d->driver->probe(d);
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 9039009..283a318 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -83,8 +83,12 @@ typedef enum {
*/
#define MII_BUS_ID_SIZE (20 - 3)
-/* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit
- IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */
+/*
+ * Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the
+ * 21 bit IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy
+ * chips. Also may be ORed into the device address in
+ * get_phy_device().
+ */
#define MII_ADDR_C45 (1<<30)
struct device;
@@ -243,6 +247,16 @@ enum phy_state {
PHY_RESUMING
};
+/*
+ * phy_c45_device_ids: 802.3-c45 Device Identifiers
+ *
+ * devices_in_package: Bit vector of devices present.
+ * device_ids: The device identifer for each present device.
+ */
+struct phy_c45_device_ids {
+ u32 devices_in_package;
+ u32 device_ids[8];
+};
/* phy_device: An instance of a PHY
*
@@ -250,6 +264,8 @@ enum phy_state {
* bus: Pointer to the bus this PHY is on
* dev: driver model device structure for this PHY
* phy_id: UID for this device found during discovery
+ * c45_ids: 802.3-c45 Device Identifers if is_c45.
+ * is_c45: Set to true if this phy uses clause 45 addressing.
* state: state of the PHY for management purposes
* dev_flags: Device-specific flags used by the PHY driver.
* addr: Bus address of PHY
@@ -285,6 +301,9 @@ struct phy_device {
u32 phy_id;
+ struct phy_c45_device_ids c45_ids;
+ bool is_c45;
+
enum phy_state state;
u32 dev_flags;
@@ -477,6 +496,8 @@ static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
return mdiobus_write(phydev->bus, phydev->addr, regnum, val);
}
+struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
+ struct phy_c45_device_ids *c45_ids);
struct phy_device* get_phy_device(struct mii_bus *bus, int addr);
int phy_device_register(struct phy_device *phy);
int phy_init_hw(struct phy_device *phydev);
--
1.7.2.3
^ permalink raw reply related
* [PATCH 0/5] netdev/phy: 10G PHY support.
From: David Daney @ 2012-05-22 17:59 UTC (permalink / raw)
To: devicetree-discuss, Grant Likely, Rob Herring, David S. Miller,
netdev
Cc: linux-kernel, linux-mips, Andy Fleming, David Daney
From: David Daney <david.daney@cavium.com>
The existing PHY driver infrastructure supports IEEE 802.3 Clause 22
PHYs used with 10/100/1000MB Ethernet. For 10G Ethernet, many PHYs
use 802.3 Clause 45. These patches attempt to add core support for
this as well as drivers for several different 10G PHY devices.
This is reworked from patches I send about 9 months ago:
http://marc.info/?l=linux-netdev&m=131844282403852
Several of the patches have device tree bindings in them, so the
device tree people get to enjoy them too.
David Daney (5):
netdev/phy: Handle IEEE802.3 clause 45 Ethernet PHYs
netdev/phy/of: Handle IEEE802.3 clause 45 Ethernet PHYs in
of_mdiobus_register()
netdev/phy/of: Add more methods for binding PHY devices to drivers.
netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
netdev/phy: Add driver for Cortina cs4321 quad 10G PHY.
.../devicetree/bindings/net/broadcom-bcm87xx.txt | 29 +
.../devicetree/bindings/net/cortina-cs4321.txt | 27 +
Documentation/devicetree/bindings/net/phy.txt | 12 +-
drivers/net/phy/Kconfig | 11 +
drivers/net/phy/Makefile | 2 +
drivers/net/phy/bcm87xx.c | 237 ++
drivers/net/phy/cs4321-ucode.h | 4378 ++++++++++++++++++++
drivers/net/phy/cs4321.c | 1147 +++++
drivers/net/phy/mdio_bus.c | 7 +
drivers/net/phy/phy_device.c | 110 +-
drivers/of/of_mdio.c | 14 +-
include/linux/phy.h | 32 +-
12 files changed, 5993 insertions(+), 13 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt
create mode 100644 Documentation/devicetree/bindings/net/cortina-cs4321.txt
create mode 100644 drivers/net/phy/bcm87xx.c
create mode 100644 drivers/net/phy/cs4321-ucode.h
create mode 100644 drivers/net/phy/cs4321.c
--
1.7.2.3
^ permalink raw reply
* Re: tcp timestamp issues with google servers
From: Eric Dumazet @ 2012-05-22 17:53 UTC (permalink / raw)
To: Vijay Subramanian; +Cc: Miklos Szeredi, netdev, linux-kernel
In-Reply-To: <CAGK4HS8b2GSub02ShhofCrYQ1XnOT7Rrjm3KcOhCFFkUF1QqBA@mail.gmail.com>
On Tue, 2012-05-22 at 10:38 -0700, Vijay Subramanian wrote:
> >> Maybe tcptraceroute[1] can help you figure this out.
> >>
> >> [1] http://michael.toren.net/code/tcptraceroute/
> >
> >
> > The transparent proxy can intercept TCP connections to port 80/443, and
> > let ICMP being NATed by the box.
>
> Just to be clear..tcptraceroute uses TCP SYN packets to trace the
> route instead of using ICMP packets used by vanilla traceroute
> precisely because
> of the issue you raised.
> The idea is that if the connection is getting terminated at a
> middlebox, the trace will end there. Otherwise, the trace route will
> end
> at destination (google in this case). This avoids the problems of ICMP
> and TCP flows being treated differently by the middlebox.
> Is this approach workable?
Yes probably, thanks for detailed description (I indeed thought it was
traceroute)
^ permalink raw reply
* Re: tcp timestamp issues with google servers
From: Vijay Subramanian @ 2012-05-22 17:38 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Miklos Szeredi, netdev, linux-kernel
In-Reply-To: <1337705285.3361.229.camel@edumazet-glaptop>
>> Maybe tcptraceroute[1] can help you figure this out.
>>
>> [1] http://michael.toren.net/code/tcptraceroute/
>
>
> The transparent proxy can intercept TCP connections to port 80/443, and
> let ICMP being NATed by the box.
Just to be clear..tcptraceroute uses TCP SYN packets to trace the
route instead of using ICMP packets used by vanilla traceroute
precisely because
of the issue you raised.
The idea is that if the connection is getting terminated at a
middlebox, the trace will end there. Otherwise, the trace route will
end
at destination (google in this case). This avoids the problems of ICMP
and TCP flows being treated differently by the middlebox.
Is this approach workable?
Thanks,
Vijay
^ permalink raw reply
* net/wanrouter?
From: Joe Perches @ 2012-05-22 17:33 UTC (permalink / raw)
To: netdev
Does anyone still use this?
^ permalink raw reply
* Re: Strange latency spikes/TX network stalls on Sun Fire X4150(x86) and e1000e
From: Eric Dumazet @ 2012-05-22 17:24 UTC (permalink / raw)
To: Denys Fedoryshchenko; +Cc: Tom Herbert, netdev
In-Reply-To: <eb8cdd693530010d6736baede0cfebd8@visp.net.lb>
On Tue, 2012-05-22 at 20:11 +0300, Denys Fedoryshchenko wrote:
> By the way, if BQL limit is going lower than MTU, is it considered as a
> bug?
> If yes, i can try to upload 3.4 to some servers and add condition to
> WARN_ON if limit < 1500.
There is no problem with BQL limit going lower than the max packet size.
(With TSO it can be 64K)
Remember BQL allows one packet to be sent to device, regardless of its
size.
Next packet might be blocked/stay in Qdisc
If your workload is mostly idle, but sending bursts of 3 packets, then
only one is immediately sent.
Next packets shall wait the TX completion of first packet.
^ permalink raw reply
* Re: [RFC] net: skb_head_is_locked() should use skb_header_cloned()
From: Alexander Duyck @ 2012-05-22 17:23 UTC (permalink / raw)
To: Eric Dumazet; +Cc: David Miller, netdev
In-Reply-To: <1337666034.3361.50.camel@edumazet-glaptop>
On 05/21/2012 10:53 PM, Eric Dumazet wrote:
> Hi David and Alexander
>
> There is no hurry since net-next is closed, but I hit the following
> problem :
>
> When IPv6 conntracking is enabled, code from
> net/ipv6/netfilter/nf_conntrack_reasm.c does a cloning of all skbs to
> build a shadow.
>
> Then we run : (skb here is the head of the 'shadow skb' )
>
> void nf_ct_frag6_output(unsigned int hooknum, struct sk_buff *skb,
> struct net_device *in, struct net_device *out,
> int (*okfn)(struct sk_buff *))
> {
> struct sk_buff *s, *s2;
>
> for (s = NFCT_FRAG6_CB(skb)->orig; s;) {
> nf_conntrack_put_reasm(s->nfct_reasm);
> nf_conntrack_get_reasm(skb);
> s->nfct_reasm = skb;
>
> s2 = s->next;
> s->next = NULL;
>
> NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, s, in, out, okfn,
> NF_IP6_PRI_CONNTRACK_DEFRAG + 1);
> s = s2;
> }
> nf_conntrack_put_reasm(skb);
> }
>
> So when all original skbs are fed to real IPv6 reassembly code, their
> clones are still alive and we hit the condition in skb_try_coalesce() :
>
> if (skb_head_is_locked(from))
> return false;
>
> I was wondering if skb_head_is_locked() should be changed to :
>
> if (!skb->head_frag || skb_header_cloned(skb))
> return false;
>
> Then we could add skb_header_release() calls on the clones of course in
> net/ipv6/netfilter/nf_conntrack_reasm.c
>
> Not-Yet-Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
> include/linux/skbuff.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
> index 0e50171..6509ee1 100644
> --- a/include/linux/skbuff.h
> +++ b/include/linux/skbuff.h
> @@ -2587,7 +2587,7 @@ static inline bool skb_is_recycleable(const struct sk_buff *skb, int skb_size)
> */
> static inline bool skb_head_is_locked(const struct sk_buff *skb)
> {
> - return !skb->head_frag || skb_cloned(skb);
> + return !skb->head_frag || skb_header_cloned(skb);
> }
> #endif /* __KERNEL__ */
> #endif /* _LINUX_SKBUFF_H */
>
>
The problem is that the whole reason for checking skb_cloned was to
avoid reference count issues between the skb and the page. We should
only be using the reference count in one or the other and not both.
Otherwise we open up the possibility of a data corruption if someone
misinterprets a skb_shinfo()->dataref == 1, or skb_header_cloned
returning false when we have the buffer shared between both the sk_buff
and a page.
The skb_header_cloned check only verifies that the portion between
skb->head and skb->data is currently being unused by the other clones.
It doesn't guarantee that skb->head is not being used by any other
sk_buff. As such we run the same risk of messing up the dataref
counting if we were to use it.
The way I see it there are 2 solutions. The first would be to just
split the reference counts and make it so that calls like skb_cloned
have to check both dataref and page count if skb->head_frag is set. The
second option would be to look at something like pskb_expand_head where
we could generate a new head fragment and then memcpy the data over to
that frag in order to "unlock" the head.
Thanks,
Alex
^ permalink raw reply
* Using jiffies for tcp_time_stamp?
From: Srećko Jurić-Kavelj @ 2012-05-22 17:21 UTC (permalink / raw)
To: netdev
In-Reply-To: <CAACrLC39Xdm3vTKUsjz43ZPyEq_vHxR-_Uf56SjSm+kUqxOqZg@mail.gmail.com>
Hi,
Recently I tackled round trip time estimation of a TCP connection.
After implementing a straight-forward approach (time stamping sending
and receiving of data using clock_gettime) I found this article:
http://linuxgazette.net/136/pfeiffer.html (using getsockopt() to get
struct tcp_info). The tcp_info structure conveniently has a rtt field.
Using the first method I get 1-3 ms RTT, and by using the second I get
>=10 ms RTT.
By looking at the code it's clear that the time stamping is done with
jiffies, and my kernel has CONFIG_HZ=100.
I understand that this is for performance reasons (and the RTT
smoothing filter is implemented with bit shifting operations), but
would using a more precise time stamp have significant impact on
performance? Since RTT is used to compute RTO, wouldn't there be any
benefits of having more accurate estimate of this value?
Best regards,
Srećko Jurić-Kavelj, dipl.ing. (Ms.E.E)
Research and Teaching Assistant at University of Zagreb
(Faculty of Electrical Engineering and Computing, Department of
Control and Computer Engineering)
E-mail: srecko.juric-kavelj@fer.hr
URL: http://www.fer.hr/srecko.juric-kavelj
Sanctus Hieronymus: "Parce mihi, Domine, quia dalmata sum!"
^ permalink raw reply
* Re: Strange latency spikes/TX network stalls on Sun Fire X4150(x86) and e1000e
From: Denys Fedoryshchenko @ 2012-05-22 17:11 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Tom Herbert, netdev
In-Reply-To: <1337589620.3361.23.camel@edumazet-glaptop>
On 2012-05-21 11:40, Eric Dumazet wrote:
> On Mon, 2012-05-21 at 10:30 +0200, Eric Dumazet wrote:
>> On Mon, 2012-05-21 at 11:06 +0300, Denys Fedoryshchenko wrote:
>>
>> > Not sure it is a lot of time, after all it is 2 x core quad
>> machine,
>> > should be enough fast for pings.
>> > It will cause stalls on small packets even more seems.
>> >
>> > Tested latest git, net-next, still the same, stalls.
>> > hardware latency detector are silent by the way, so there is no
>> > significant SMI.
>> >
>>
>> I am trying to reproduce your problem here with no luck yet.
>>
>> I wonder of softirq are correctly scheduled on your machine
>>
>
> By the way, fact you have 8 cpus is irrelevant.
>
> Only one cpu has queued the NET_TX_SOFTIRQ softirq (serviced by
> net_tx_action())
>
>
> If this cpu is busy servicing other stuff, no other cpu will help.
>
By the way, if BQL limit is going lower than MTU, is it considered as a
bug?
If yes, i can try to upload 3.4 to some servers and add condition to
WARN_ON if limit < 1500.
---
Denys Fedoryshchenko, Network Engineer, Virtual ISP S.A.L.
^ permalink raw reply
* Re: tcp timestamp issues with google servers
From: Rick Jones @ 2012-05-22 16:58 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: Eric Dumazet, netdev, linux-kernel
In-Reply-To: <87mx50rz34.fsf@tucsk.pomaz.szeredi.hu>
On 05/22/2012 08:54 AM, Miklos Szeredi wrote:
> Eric Dumazet<eric.dumazet@gmail.com> writes:
>
>> On Tue, 2012-05-22 at 17:25 +0200, Miklos Szeredi wrote:
>>
>>> So it appears. The IP address is certainly registered to Google.
>>
>> Good, but you could have a middlebox doing transparent proxying.
>>
>> The SYNACK could be send by this box.
>
> Okay. Is there a way to find out whether there is a middlebox or not?
The source IP in the trace was a 192.168 IP - is it possible/desirable
to reproduce the problem without the device doing NAT in the path?
What is your "public" IP address? Given that, and the IP address to
which you are connecting, it should be possible to validate the RTT you
are seeing. If the geographic/topological location of the destination
Google IP address is far enough from your public source IP that would
show whether the RTT you are seeing is even physically possible and so
could suggest there is a middlebox (other than your NAT), though it
couldn't show there was not a middlebox.
rick jones
^ permalink raw reply
* Re: tcp timestamp issues with google servers
From: Eric Dumazet @ 2012-05-22 16:48 UTC (permalink / raw)
To: Vijay Subramanian; +Cc: Miklos Szeredi, netdev, linux-kernel
In-Reply-To: <CAGK4HS9cGnOcoLAL1pggWvMG1B40rWyqc3BHsddUvnii4EvTcQ@mail.gmail.com>
On Tue, 2012-05-22 at 09:38 -0700, Vijay Subramanian wrote:
> > Okay. Is there a way to find out whether there is a middlebox or not?
> >
>
> Miklos,
> Maybe tcptraceroute[1] can help you figure this out.
>
> Hope this helps.
> Vijay
>
> [1] http://michael.toren.net/code/tcptraceroute/
The transparent proxy can intercept TCP connections to port 80/443, and
let ICMP being NATed by the box.
So its better to check of the delay between SYN and SYNACK is roughly
independent of the HTTP server.
If you have very large range of delays, you can conclude its not a
transparent proxy.
^ permalink raw reply
* Re: TCPBacklogDrops during aggressive bursts of traffic
From: Eric Dumazet @ 2012-05-22 16:45 UTC (permalink / raw)
To: Kieran Mansley; +Cc: Ben Hutchings, netdev
In-Reply-To: <1337704382.1698.53.camel@kjm-desktop.uk.level5networks.com>
On Tue, 2012-05-22 at 17:32 +0100, Kieran Mansley wrote:
> On Tue, 2012-05-22 at 18:12 +0200, Eric Dumazet wrote:
> >
> > __tcp_select_window() ( more precisely tcp_space() takes into account
> > memory used in receive/ofo queue, but not frames in backlog queue)
> >
> > So if you send bursts, it might explain TCP stack continues to
> > advertise
> > a too big window, instead of anticipate the problem.
> >
> > Please try the following patch :
> >
> > diff --git a/include/net/tcp.h b/include/net/tcp.h
> > index e79aa48..82382cb 100644
> > --- a/include/net/tcp.h
> > +++ b/include/net/tcp.h
> > @@ -1042,8 +1042,9 @@ static inline int tcp_win_from_space(int space)
> > /* Note: caller must be prepared to deal with negative returns */
> > static inline int tcp_space(const struct sock *sk)
> > {
> > - return tcp_win_from_space(sk->sk_rcvbuf -
> > - atomic_read(&sk->sk_rmem_alloc));
> > + int used = atomic_read(&sk->sk_rmem_alloc) +
> > sk->sk_backlog.len;
> > +
> > + return tcp_win_from_space(sk->sk_rcvbuf - used);
> > }
> >
> > static inline int tcp_full_space(const struct sock *sk)
>
>
> I can give this a try (not sure when - probably later this week) but I
> think this it is back to front. The patch above will reduce the
> advertised window by sk_backlog.len, but at the time that the window was
> advertised that allowed the dropped packets to be sent the backlog was
> empty. It is later, when the kernel is waking the application and takes
> the socket lock that the backlog starts to be used and the drop happens.
> But reducing the window advertised at this point is futile - the packets
> that will be dropped are already in flight.
>
Not really. If we receive these packets while backlog is empty, then the
sender violates TCP rules.
We advertise tcp window directly from memory we are allowed to consume.
(On the premise sender behaves correctly, not sending bytes in small
packets)
> The problem exists because the backlog has a tighter limit on it than
> the receive window does; I think the backlog should be able to accept
> sk_rcvbuf bytes in addition to what is already in the receive buffer (or
> up to the advertised receive window if that's smaller). At the moment
> it will only accept sk_rcvbuf bytes including what is already in the
> receive buffer. The logic being that in this case we're using the
> backlog because it's in the process of emptying the receive buffer into
> the application, and so the receive buffer will very soon be empty, and
> so we will very soon be able to accept sk_rcvbuf bytes. This is evident
> from the packet capture as the kernel stack is quite happy to accept the
> significant quantity of data that arrives as part of the same burst
> immediately after it has dropped a couple of packets.
>
This is not evident from the capture, you are mistaken.
tcpdump captures packets before tcp stack, it doesnt say if they are :
1) queued in receive of ofo queue
2) queued in socket backlog
3) dropped because we hit socket rcvbuf limit
If socket lock is hold by the user, packets are queued to backlog, or
dropped.
Then, when socket lock is about to be released, we process the backlog.
^ permalink raw reply
* Re: tcp timestamp issues with google servers
From: Vijay Subramanian @ 2012-05-22 16:38 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: Eric Dumazet, netdev, linux-kernel
In-Reply-To: <87mx50rz34.fsf@tucsk.pomaz.szeredi.hu>
> Okay. Is there a way to find out whether there is a middlebox or not?
>
Miklos,
Maybe tcptraceroute[1] can help you figure this out.
Hope this helps.
Vijay
[1] http://michael.toren.net/code/tcptraceroute/
^ permalink raw reply
* Re: TCPBacklogDrops during aggressive bursts of traffic
From: Kieran Mansley @ 2012-05-22 16:32 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Ben Hutchings, netdev
In-Reply-To: <1337703170.3361.217.camel@edumazet-glaptop>
On Tue, 2012-05-22 at 18:12 +0200, Eric Dumazet wrote:
>
> __tcp_select_window() ( more precisely tcp_space() takes into account
> memory used in receive/ofo queue, but not frames in backlog queue)
>
> So if you send bursts, it might explain TCP stack continues to
> advertise
> a too big window, instead of anticipate the problem.
>
> Please try the following patch :
>
> diff --git a/include/net/tcp.h b/include/net/tcp.h
> index e79aa48..82382cb 100644
> --- a/include/net/tcp.h
> +++ b/include/net/tcp.h
> @@ -1042,8 +1042,9 @@ static inline int tcp_win_from_space(int space)
> /* Note: caller must be prepared to deal with negative returns */
> static inline int tcp_space(const struct sock *sk)
> {
> - return tcp_win_from_space(sk->sk_rcvbuf -
> - atomic_read(&sk->sk_rmem_alloc));
> + int used = atomic_read(&sk->sk_rmem_alloc) +
> sk->sk_backlog.len;
> +
> + return tcp_win_from_space(sk->sk_rcvbuf - used);
> }
>
> static inline int tcp_full_space(const struct sock *sk)
I can give this a try (not sure when - probably later this week) but I
think this it is back to front. The patch above will reduce the
advertised window by sk_backlog.len, but at the time that the window was
advertised that allowed the dropped packets to be sent the backlog was
empty. It is later, when the kernel is waking the application and takes
the socket lock that the backlog starts to be used and the drop happens.
But reducing the window advertised at this point is futile - the packets
that will be dropped are already in flight.
The problem exists because the backlog has a tighter limit on it than
the receive window does; I think the backlog should be able to accept
sk_rcvbuf bytes in addition to what is already in the receive buffer (or
up to the advertised receive window if that's smaller). At the moment
it will only accept sk_rcvbuf bytes including what is already in the
receive buffer. The logic being that in this case we're using the
backlog because it's in the process of emptying the receive buffer into
the application, and so the receive buffer will very soon be empty, and
so we will very soon be able to accept sk_rcvbuf bytes. This is evident
from the packet capture as the kernel stack is quite happy to accept the
significant quantity of data that arrives as part of the same burst
immediately after it has dropped a couple of packets.
Perhaps it would be easier for me to write a patch to show this
suggested solution?
Kieran
^ permalink raw reply
* Re: TCPBacklogDrops during aggressive bursts of traffic
From: Eric Dumazet @ 2012-05-22 16:12 UTC (permalink / raw)
To: Kieran Mansley; +Cc: Ben Hutchings, netdev
In-Reply-To: <1337699379.1698.30.camel@kjm-desktop.uk.level5networks.com>
On Tue, 2012-05-22 at 16:09 +0100, Kieran Mansley wrote:
> On Tue, 2012-05-22 at 11:30 +0200, Eric Dumazet wrote:
> > Also can you post a pcap capture of problematic flow ?
>
> I'll email this to you directly. The capture is generated with netserver
> on the system under test, and NetPerf sending from a similar server.
> I've only included the first 1000 frames to keep the capture size down.
> There are 7 retransmissions in that capture, and the TCPBacklogDrops
> counter incremented by 7 during the test, so I'm happy to say they are
> the cause of the drops.
>
> The system under test was running net-next.
>
> I've not tried with another NIC (e.g. tg3) but will see if I can find
> one to test.
Or you could change sfc to allow its frames being coalesced.
>
> I've got a feeling that the drops might be easier to reproduce if I
> taskset the netserver process to a different package than the one that
> is handling the network interrupt for that NIC. This fits with my
> earlier theory in that it is likely to increase the overhead of waking
> the user-level process to satisfy the read and so increase the time
> during which received packets could overflow the backlog. Having a
> relatively aggressive sending TCP also helps, e.g. one that is
> configured to open its congestion window quickly, as this will produce
> more intensive bursts.
__tcp_select_window() ( more precisely tcp_space() takes into account
memory used in receive/ofo queue, but not frames in backlog queue)
So if you send bursts, it might explain TCP stack continues to advertise
a too big window, instead of anticipate the problem.
Please try the following patch :
diff --git a/include/net/tcp.h b/include/net/tcp.h
index e79aa48..82382cb 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1042,8 +1042,9 @@ static inline int tcp_win_from_space(int space)
/* Note: caller must be prepared to deal with negative returns */
static inline int tcp_space(const struct sock *sk)
{
- return tcp_win_from_space(sk->sk_rcvbuf -
- atomic_read(&sk->sk_rmem_alloc));
+ int used = atomic_read(&sk->sk_rmem_alloc) + sk->sk_backlog.len;
+
+ return tcp_win_from_space(sk->sk_rcvbuf - used);
}
static inline int tcp_full_space(const struct sock *sk)
^ permalink raw reply related
* Re: [V2 PATCH 9/9] vhost: zerocopy: poll vq in zerocopy callback
From: Shirley Ma @ 2012-05-22 15:55 UTC (permalink / raw)
To: Jason Wang
Cc: Michael S. Tsirkin, eric.dumazet, netdev, linux-kernel, ebiederm,
davem
In-Reply-To: <4FBB64F7.5090801@redhat.com>
On Tue, 2012-05-22 at 18:05 +0800, Jason Wang wrote:
> On 05/21/2012 11:42 PM, Shirley Ma wrote:
> > On Mon, 2012-05-21 at 14:05 +0800, Jason Wang wrote:
> >>>> - tx polling depends on skb_orphan() which is often called by
> >> device
> >>>> driver when it place the packet into the queue of the devices
> >> instead
> >>>> of when the packets were sent. So it was too early for vhost to
> be
> >>>> notified.
> >>> Then do you think it's better to replace with vhost_poll_queue
> here
> >>> instead?
> >> Just like what does this patch do - calling vhost_poll_queue() in
> >> vhost_zerocopy_callback().
> >>>> - it only works when the pending DMAs exceeds VHOST_MAX_PEND,
> it's
> >>>> highly possible that guest needs to be notified when the pending
> >>>> packets
> >>>> isn't so much.
> >>> In which situation the guest needs to be notified when there is no
> >> TX
> >>> besides buffers run out?
> >> Consider guest call virtqueue_enable_cb_delayed() which means it
> only
> >> need to be notified when 3/4 of pending buffers ( about 178 buffers
> >> (256-MAX_SKB_FRAGS-2)*3/4 ) were sent by host. So vhost_net would
> >> notify
> >> guest when about 60 buffers were pending. Since tx polling is only
> >> enabled when pending packets exceeds VHOST_MAX_PEND 128, so tx work
> >> would not be notified to run and guest would never get the
> interrupt
> >> it
> >> expected to re-enable the queue.
> > So it seems we still need vhost_enable_notify() in handle_tx when
> there
> > is no tx in zerocopy case.
> >
> > Do you know which one is more expensive: the cost of
> vhost_poll_queue()
> > in each zerocopy callback or calling vhost_enable_notify()?
>
> Didn't follow here, do you mean vhost_signal() here?
I meant removing the code in handle_tx for zerocopy as below:
+ if (zcopy) {
/* If more outstanding DMAs, queue the work.
* Handle upend_idx wrap around
*/
num_pends = likely(vq->upend_idx >= vq->done_idx) ?
(vq->upend_idx - vq->done_idx) :
(vq->upend_idx + UIO_MAXIOV - vq->done_idx);
+ /* zerocopy vhost_enable_notify is under zerocopy callback
+ * since it could be too early to notify here */
+ break;
+ }
- if (unlikely(num_pends > VHOST_MAX_PEND)) {
- tx_poll_start(net, sock);
- set_bit(SOCK_ASYNC_NOSPACE, &sock->flags);
- break;
- }
if (unlikely(vhost_enable_notify(&net->dev, vq))) {
vhost_disable_notify(&net->dev, vq);
continue;
}
break;
Thanks
Shirley
^ permalink raw reply
* Re: tcp timestamp issues with google servers
From: Miklos Szeredi @ 2012-05-22 15:54 UTC (permalink / raw)
To: Eric Dumazet; +Cc: netdev, linux-kernel
In-Reply-To: <1337701259.3361.208.camel@edumazet-glaptop>
Eric Dumazet <eric.dumazet@gmail.com> writes:
> On Tue, 2012-05-22 at 17:25 +0200, Miklos Szeredi wrote:
>
>> So it appears. The IP address is certainly registered to Google.
>
> Good, but you could have a middlebox doing transparent proxying.
>
> The SYNACK could be send by this box.
Okay. Is there a way to find out whether there is a middlebox or not?
Thanks,
Miklos
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox