* 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
* 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
* [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
* [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 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 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 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 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
* 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
* 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 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
* 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: [Bug 43277] New: net/e1000e set mtu larger than 1500 fails
From: Stephen Hemminger @ 2012-05-22 18:25 UTC (permalink / raw)
To: che; +Cc: netdev, e1000-devel
In-Reply-To: <20120522111950.4548747c@nehalam.linuxnetplumber.net>
On Tue, 22 May 2012 11:19:50 -0700
Stephen Hemminger <shemminger@vyatta.com> wrote:
>
>
> 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
I believe the problem is detected here. Check system console log (dmesg).
The hardware does not allow receive hashing and checksum offload together
in Jumbo mode.
/*
* IP payload checksum (enabled with jumbos/packet-split when
* Rx checksum is enabled) and generation of RSS hash is
* mutually exclusive in the hardware.
*/
if ((netdev->features & NETIF_F_RXCSUM) &&
(netdev->features & NETIF_F_RXHASH)) {
e_err("Jumbo frames cannot be enabled when both receive checksum offload and receive hashing are enabled. Disable one of the receive offload features before enabling jumbos.\n");
return -EINVAL;
}
^ permalink raw reply
* Re: [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
From: David Daney @ 2012-05-22 18:26 UTC (permalink / raw)
To: Joe Perches
Cc: David Daney, devicetree-discuss@lists.ozlabs.org, Grant Likely,
Rob Herring, David S. Miller, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-mips@linux-mips.org,
Fleming Andy-AFLEMING
In-Reply-To: <1337710660.3432.8.camel@joe2Laptop>
On 05/22/2012 11:17 AM, Joe Perches wrote:
> On Tue, 2012-05-22 at 10:59 -0700, David Daney wrote:
>> From: David Daney<david.daney@cavium.com>
>
> trivia:
As long as we are splitting hairs...
>
>> 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;
Where did the magic value of 4 come from?
> 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++);
Is the main problem that they didn't align, or that the index was
explicit instead of implicit?
^ permalink raw reply
* RE: [Bug 43277] New: net/e1000e set mtu larger than 1500 fails
From: Allan, Bruce W @ 2012-05-22 18:28 UTC (permalink / raw)
To: Stephen Hemminger, che@chrekh.se
Cc: netdev@vger.kernel.org, e1000-devel@lists.sf.net
In-Reply-To: <20120522112518.70294c0e@nehalam.linuxnetplumber.net>
> -----Original Message-----
> From: netdev-owner@vger.kernel.org [mailto:netdev-
> owner@vger.kernel.org] On Behalf Of Stephen Hemminger
> Sent: Tuesday, May 22, 2012 11:25 AM
> To: che@chrekh.se
> Cc: netdev@vger.kernel.org; e1000-devel@lists.sf.net
> Subject: Re: [Bug 43277] New: net/e1000e set mtu larger than 1500
> fails
>
> On Tue, 22 May 2012 11:19:50 -0700
> Stephen Hemminger <shemminger@vyatta.com> wrote:
>
> >
> >
> > 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
>
> I believe the problem is detected here. Check system console log
> (dmesg).
> The hardware does not allow receive hashing and checksum offload
> together
> in Jumbo mode.
>
> /*
> * IP payload checksum (enabled with jumbos/packet-split when
> * Rx checksum is enabled) and generation of RSS hash is
> * mutually exclusive in the hardware.
> */
> if ((netdev->features & NETIF_F_RXCSUM) &&
> (netdev->features & NETIF_F_RXHASH)) {
> e_err("Jumbo frames cannot be enabled when both receive
> checksum offload and receive hashing are enabled. Disable one of the
> receive offload features before enabling jumbos.\n");
> return -EINVAL;
> }
That is correct.
^ permalink raw reply
* Re: [PATCH] xen: do not disable netfront in dom0
From: Konrad Rzeszutek Wilk @ 2012-05-22 18:34 UTC (permalink / raw)
To: Marek Marczykowski, davem
Cc: netdev, Jeremy Fitzhardinge, virtualization, linux-kernel,
xen-devel
In-Reply-To: <20120522130558.D828E6C7@duch.mimuw.edu.pl>
On Sun, May 20, 2012 at 01:45:10PM +0200, Marek Marczykowski wrote:
> Netfront driver can be also useful in dom0, eg when all NICs are assigned to
> some domU (aka driver domain). Then using netback in domU and netfront in dom0
> is the only way to get network access in dom0.
>
> Signed-off-by: Marek Marczykowski <marmarek@invisiblethingslab.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> ---
> drivers/net/xen-netfront.c | 6 ------
> 1 files changed, 0 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
> index 698b905..e31ebff 100644
> --- a/drivers/net/xen-netfront.c
> +++ b/drivers/net/xen-netfront.c
> @@ -1953,9 +1953,6 @@ static int __init netif_init(void)
> if (!xen_domain())
> return -ENODEV;
>
> - if (xen_initial_domain())
> - return 0;
> -
> printk(KERN_INFO "Initialising Xen virtual ethernet driver.\n");
>
> return xenbus_register_frontend(&netfront_driver);
> @@ -1965,9 +1962,6 @@ module_init(netif_init);
>
> static void __exit netif_exit(void)
> {
> - if (xen_initial_domain())
> - return;
> -
> xenbus_unregister_driver(&netfront_driver);
> }
> module_exit(netif_exit);
> --
> 1.7.4.4
^ permalink raw reply
* Re: [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
From: Joe Perches @ 2012-05-22 18:34 UTC (permalink / raw)
To: David Daney
Cc: David Daney, devicetree-discuss@lists.ozlabs.org, Grant Likely,
Rob Herring, David S. Miller, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-mips@linux-mips.org,
Fleming Andy-AFLEMING
In-Reply-To: <4FBBDA70.8020307@cavium.com>
On Tue, 2012-05-22 at 11:26 -0700, David Daney wrote:
> On 05/22/2012 11:17 AM, Joe Perches wrote:
> > On Tue, 2012-05-22 at 10:59 -0700, David Daney wrote:
> >> From: David Daney<david.daney@cavium.com>
> >
> > trivia:
>
> As long as we are splitting hairs...
and zooming in and enhancing...
> >
> >> 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;
>
> Where did the magic value of 4 come from?
equivalence to the original for loop
for (i = 0; i < len - 3; i += 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++);
>
> Is the main problem that they didn't align, or that the index was
> explicit instead of implicit?
There's no real problem, it's just that
i++, be32_to_cpu and *addr++ is a bit
more common and perhaps more easily read.
The alignment's just a visual nicety.
Ignore it if you choose.
cheers, Joe
^ permalink raw reply
* Re: [Bug 43277] New: net/e1000e set mtu larger than 1500 fails
From: Christer Ekholm @ 2012-05-22 18:39 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev, Allan, Bruce W, e1000-devel
In-Reply-To: <20120522112518.70294c0e@nehalam.linuxnetplumber.net>
Stephen Hemminger writes:
> On Tue, 22 May 2012 11:19:50 -0700
> Stephen Hemminger <shemminger@vyatta.com> wrote:
>
>
> I believe the problem is detected here. Check system console log (dmesg).
> The hardware does not allow receive hashing and checksum offload together
> in Jumbo mode.
>
> /*
> * IP payload checksum (enabled with jumbos/packet-split when
> * Rx checksum is enabled) and generation of RSS hash is
> * mutually exclusive in the hardware.
> */
> if ((netdev->features & NETIF_F_RXCSUM) &&
> (netdev->features & NETIF_F_RXHASH)) {
> e_err("Jumbo frames cannot be enabled when both receive checksum offload and receive hashing are enabled. Disable one of the receive offload features before enabling jumbos.\n");
> return -EINVAL;
> }
Yes you are right.
e1000e 0000:05:00.1: eth1: Jumbo frames cannot be enabled when both receive checksum offload and receive hashing are enabled. Disable one of the receive offload features before enabling jumbos.
How stupid of me to not see that.
After turning rxhash of, setting of mtu to 9000 is possible again.
$ sudo ethtool -K eth1 rxhash off
$ sudo ip link set eth1 mtu 9000
Sorry to have wasted your time.
--
Christer
^ permalink raw reply
* Re: [PATCH] rfkill: Add handling when rfkill's type is RFKILL_TYPE_ALL.
From: Johannes Berg @ 2012-05-22 18:46 UTC (permalink / raw)
To: Alex Hung
Cc: linville-2XuSBdqkA4R54TAoqtyWWQ, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1337589439-14605-1-git-send-email-alex.hung-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
On Mon, 2012-05-21 at 16:37 +0800, Alex Hung wrote:
> This rfkill type is supposed to be able to toggles the status of all wireless
> devices; however, no wireless devices will register itself with type
> RFKILL_TYPE_ALL and thus it was previously ignored in __rfkill_switch_all.
>
> Signed-off-by: Alex Hung <alex.hung-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
> ---
> net/rfkill/core.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/rfkill/core.c b/net/rfkill/core.c
> index 5be1957..84dd71a 100644
> --- a/net/rfkill/core.c
> +++ b/net/rfkill/core.c
> @@ -324,7 +324,7 @@ static void __rfkill_switch_all(const enum rfkill_type type, bool blocked)
>
> rfkill_global_states[type].cur = blocked;
> list_for_each_entry(rfkill, &rfkill_list, node) {
> - if (rfkill->type != type)
> + if (rfkill->type != type && type != RFKILL_TYPE_ALL)
> continue;
Sorry, I accidentally replied to this in private and then Alex replied
but it all got lost.
He said he was going to change the eeepc use KEY_RFKILL instead of
KEY_WLAN to switch all types...
So I guess what this change really does is make __rfkill_switch_all() be
able to not only switch all devices of a given type, but also be able to
switch all devices of all types.
Alex, can you please rewrite the commit log to make that clearer?
johannes
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY.
From: Ben Hutchings @ 2012-05-22 18:50 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-6-git-send-email-ddaney.cavm@gmail.com>
On Tue, May 22, 2012 at 10:59:52AM -0700, David Daney wrote:
[...]
> --- /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.
> + *
> + */
[...]
So where's the real source code for it?
If you won't (or can't) provide source code for the microcode then it
should instead be submitted to linux-firmware with a binary
redistribution licence, and the driver should load it with
request_firmware().
Ben.
--
Ben Hutchings
We get into the habit of living before acquiring the habit of thinking.
- Albert Camus
^ permalink raw reply
* Re: [PATCH 0/5] netdev/phy: 10G PHY support.
From: David Miller @ 2012-05-22 18:57 UTC (permalink / raw)
To: ddaney.cavm
Cc: devicetree-discuss, grant.likely, rob.herring, netdev,
linux-kernel, linux-mips, afleming, david.daney
In-Reply-To: <1337709592-23347-1-git-send-email-ddaney.cavm@gmail.com>
As mentioned the other day in my announement, right now it is
inappropriate to submit new feature patches.
You will need to resend these changes when the net-next tree opens
back up, please monitor the netdev list to learn when that has
happened.
^ permalink raw reply
* Re: [Bug 43277] New: net/e1000e set mtu larger than 1500 fails
From: Ben Hutchings @ 2012-05-22 18:59 UTC (permalink / raw)
To: Christer Ekholm; +Cc: Stephen Hemminger, netdev, Allan, Bruce W, e1000-devel
In-Reply-To: <20411.56693.728125.121309@ender.chrekh.se>
On Tue, 2012-05-22 at 20:39 +0200, Christer Ekholm wrote:
> Stephen Hemminger writes:
> > On Tue, 22 May 2012 11:19:50 -0700
> > Stephen Hemminger <shemminger@vyatta.com> wrote:
> >
> >
> > I believe the problem is detected here. Check system console log (dmesg).
> > The hardware does not allow receive hashing and checksum offload together
> > in Jumbo mode.
> >
> > /*
> > * IP payload checksum (enabled with jumbos/packet-split when
> > * Rx checksum is enabled) and generation of RSS hash is
> > * mutually exclusive in the hardware.
> > */
> > if ((netdev->features & NETIF_F_RXCSUM) &&
> > (netdev->features & NETIF_F_RXHASH)) {
> > e_err("Jumbo frames cannot be enabled when both receive checksum offload and receive hashing are enabled. Disable one of the receive offload features before enabling jumbos.\n");
> > return -EINVAL;
> > }
>
> Yes you are right.
>
> e1000e 0000:05:00.1: eth1: Jumbo frames cannot be enabled when both receive checksum offload and receive hashing are enabled. Disable one of the receive offload features before enabling jumbos.
>
> How stupid of me to not see that.
>
> After turning rxhash of, setting of mtu to 9000 is possible again.
>
> $ sudo ethtool -K eth1 rxhash off
>
> $ sudo ip link set eth1 mtu 9000
>
>
> Sorry to have wasted your time.
It's not a waste of time.
I think this behaviour is broken: NETIF_F_RXHASH is turned on by default
and user and distribution scripts that set MTU will now be broken until
they know that they need to work around this hardware limitation. And
why should they ever need to know that?
I think the proper thing to do is to automatically turn off
NETIF_F_RXHASH when the MTU is too high for it to work. The netdev
still keeps track of whether it is 'wanted'.
Ben.
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply
* RE: [PATCH] xen/netback: calculate correctly the SKB slots.
From: Simon Graham @ 2012-05-22 19:01 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk, 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: <20120522180901.GC22488@phenom.dumpdata.com>
> >
> > > > 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?
We ran into this same problem and the fix we've been running with for a while now (been meaning to submit it!) is:
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index c2669b8..7925bd3 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -312,8 +312,7 @@ unsigned int xen_netbk_count_skb_slots(struct xenvif *vif, struct sk_buff *skb)
unsigned int count;
int i, copy_off;
- count = DIV_ROUND_UP(
- offset_in_page(skb->data)+skb_headlen(skb), PAGE_SIZE);
+ count = DIV_ROUND_UP(skb_headlen(skb), PAGE_SIZE);
copy_off = skb_headlen(skb) % PAGE_SIZE;
The rationale for this is that if the header spanned a page boundary, you would calculate that it needs 2 slots for the header BUT netback_gop_skb copies the header into the start of the page so only needs one slot (and only decrements the count of inuse entries by 1).
We found this running with a VIF bridged to a USB 3G Modem where skb->data started near the end of a page so the header would always span the page boundary.
It was very easy to get the VIF to stop processing frames with the old code and we have not seen any problems since applying this patch.
Simon
^ permalink raw reply related
* Re: [PATCH] xen: do not disable netfront in dom0
From: David Miller @ 2012-05-22 19:13 UTC (permalink / raw)
To: marmarek
Cc: jeremy, konrad.wilk, netdev, linux-kernel, virtualization,
xen-devel
In-Reply-To: <20120522130558.D828E6C7@duch.mimuw.edu.pl>
From: Marek Marczykowski <marmarek@invisiblethingslab.com>
Date: Sun, 20 May 2012 13:45:10 +0200
> Netfront driver can be also useful in dom0, eg when all NICs are assigned to
> some domU (aka driver domain). Then using netback in domU and netfront in dom0
> is the only way to get network access in dom0.
>
> Signed-off-by: Marek Marczykowski <marmarek@invisiblethingslab.com>
Someone please review this and I can merge it in via the 'net' tree if
it looks OK to XEN folks.
^ permalink raw reply
* Re: [PATCH] ipv4: fix the rcu race between free_fib_info and ip_route_output_slow
From: David Miller @ 2012-05-22 19:15 UTC (permalink / raw)
To: kunx.jiang; +Cc: netdev, linux-kernel, yanmin_zhang
In-Reply-To: <4FBB6105.2060808@intel.com>
From: "kun.jiang" <kunx.jiang@intel.com>
Date: Tue, 22 May 2012 17:48:53 +0800
> From: Yanmin Zhang <yanmin_zhang@linux.intel.com>
>
> We hit a kernel OOPS.
...
> In function free_fib_info, we don't reset nexthop_nh->nh_dev to NULL before releasing
> nh_dev. kfree_rcu(fi, rcu) would release the whole area.
>
> Signed-off-by: Yanmin Zhang <yanmin_zhang@linux.intel.com>
> Signed-off-by: Kun Jiang <kunx.jiang@intel.com>
This isn't a fix. You're keeping around a pointer to a completely
released object, which is therefore illegal to dereference.
That's why we must set it to NULL, to catch such illegal accesses.
^ 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