netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] netdev/phy: 10G PHY support.
@ 2012-05-22 17:59 David Daney
  2012-05-22 17:59 ` [PATCH 1/5] netdev/phy: Handle IEEE802.3 clause 45 Ethernet PHYs David Daney
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
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	[flat|nested] 12+ messages in thread

* [PATCH 1/5] netdev/phy: Handle IEEE802.3 clause 45 Ethernet PHYs
  2012-05-22 17:59 [PATCH 0/5] netdev/phy: 10G PHY support David Daney
@ 2012-05-22 17:59 ` David Daney
  2012-05-22 17:59 ` [PATCH 2/5] netdev/phy/of: Handle IEEE802.3 clause 45 Ethernet PHYs in of_mdiobus_register() David Daney
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
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 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	[flat|nested] 12+ messages in thread

* [PATCH 2/5] netdev/phy/of: Handle IEEE802.3 clause 45 Ethernet PHYs in of_mdiobus_register()
  2012-05-22 17:59 [PATCH 0/5] netdev/phy: 10G PHY support David Daney
  2012-05-22 17:59 ` [PATCH 1/5] netdev/phy: Handle IEEE802.3 clause 45 Ethernet PHYs David Daney
@ 2012-05-22 17:59 ` David Daney
       [not found] ` <1337709592-23347-1-git-send-email-ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
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>

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	[flat|nested] 12+ messages in thread

* [PATCH 3/5] netdev/phy/of: Add more methods for binding PHY devices to drivers.
       [not found] ` <1337709592-23347-1-git-send-email-ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2012-05-22 17:59   ` David Daney
  0 siblings, 0 replies; 12+ messages in thread
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

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	[flat|nested] 12+ messages in thread

* [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
  2012-05-22 17:59 [PATCH 0/5] netdev/phy: 10G PHY support David Daney
                   ` (2 preceding siblings ...)
       [not found] ` <1337709592-23347-1-git-send-email-ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2012-05-22 17:59 ` David Daney
  2012-05-22 18:17   ` Joe Perches
  2012-05-22 17:59 ` [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY David Daney
  2012-05-22 18:57 ` [PATCH 0/5] netdev/phy: 10G PHY support David Miller
  5 siblings, 1 reply; 12+ messages in thread
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>

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	[flat|nested] 12+ messages in thread

* [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY.
  2012-05-22 17:59 [PATCH 0/5] netdev/phy: 10G PHY support David Daney
                   ` (3 preceding siblings ...)
  2012-05-22 17:59 ` [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs David Daney
@ 2012-05-22 17:59 ` David Daney
  2012-05-22 18:50   ` Ben Hutchings
  2012-05-22 18:57 ` [PATCH 0/5] netdev/phy: 10G PHY support David Miller
  5 siblings, 1 reply; 12+ messages in thread
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>

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	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
  2012-05-22 17:59 ` [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs David Daney
@ 2012-05-22 18:17   ` Joe Perches
  2012-05-22 18:26     ` David Daney
  0 siblings, 1 reply; 12+ messages in thread
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

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	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
  2012-05-22 18:17   ` Joe Perches
@ 2012-05-22 18:26     ` David Daney
  2012-05-22 18:34       ` Joe Perches
  0 siblings, 1 reply; 12+ messages in thread
From: David Daney @ 2012-05-22 18:26 UTC (permalink / raw)
  To: Joe Perches
  Cc: David Daney, devicetree-discuss, Grant Likely, Rob Herring,
	David S. Miller, netdev, linux-kernel, linux-mips,
	Fleming Andy-AFLEMING

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	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs
  2012-05-22 18:26     ` David Daney
@ 2012-05-22 18:34       ` Joe Perches
  0 siblings, 0 replies; 12+ messages in thread
From: Joe Perches @ 2012-05-22 18:34 UTC (permalink / raw)
  To: David Daney
  Cc: David Daney, devicetree-discuss, Grant Likely, Rob Herring,
	David S. Miller, netdev, linux-kernel, linux-mips,
	Fleming Andy-AFLEMING

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	[flat|nested] 12+ messages in thread

* Re: [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY.
  2012-05-22 17:59 ` [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY David Daney
@ 2012-05-22 18:50   ` Ben Hutchings
  2012-05-22 19:25     ` David Daney
  0 siblings, 1 reply; 12+ messages in thread
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

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	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/5] netdev/phy: 10G PHY support.
  2012-05-22 17:59 [PATCH 0/5] netdev/phy: 10G PHY support David Daney
                   ` (4 preceding siblings ...)
  2012-05-22 17:59 ` [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY David Daney
@ 2012-05-22 18:57 ` David Miller
  5 siblings, 0 replies; 12+ messages in thread
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


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	[flat|nested] 12+ messages in thread

* Re: [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY.
  2012-05-22 18:50   ` Ben Hutchings
@ 2012-05-22 19:25     ` David Daney
  0 siblings, 0 replies; 12+ messages in thread
From: David Daney @ 2012-05-22 19:25 UTC (permalink / raw)
  To: Ben Hutchings
  Cc: David Daney, devicetree-discuss, Grant Likely, Rob Herring,
	David S. Miller, netdev, linux-kernel, linux-mips,
	Fleming Andy-AFLEMING

On 05/22/2012 11:50 AM, Ben Hutchings wrote:
> 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?

I wish I knew.  The vendor released the array of random numbers as GPL 
to us. :-(

>
> 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().

I will attempt to do that.

The .c file contains plenty of other pseudo-random numbers, but those 
cannot really be considered 'firmware'

David Daney

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-05-22 19:25 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-22 17:59 [PATCH 0/5] netdev/phy: 10G PHY support David Daney
2012-05-22 17:59 ` [PATCH 1/5] netdev/phy: Handle IEEE802.3 clause 45 Ethernet PHYs David Daney
2012-05-22 17:59 ` [PATCH 2/5] netdev/phy/of: Handle IEEE802.3 clause 45 Ethernet PHYs in of_mdiobus_register() David Daney
     [not found] ` <1337709592-23347-1-git-send-email-ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-05-22 17:59   ` [PATCH 3/5] netdev/phy/of: Add more methods for binding PHY devices to drivers David Daney
2012-05-22 17:59 ` [PATCH 4/5] netdev/phy: Add driver for Broadcom BCM87XX 10G Ethernet PHYs David Daney
2012-05-22 18:17   ` Joe Perches
2012-05-22 18:26     ` David Daney
2012-05-22 18:34       ` Joe Perches
2012-05-22 17:59 ` [PATCH 5/5] netdev/phy: Add driver for Cortina cs4321 quad 10G PHY David Daney
2012-05-22 18:50   ` Ben Hutchings
2012-05-22 19:25     ` David Daney
2012-05-22 18:57 ` [PATCH 0/5] netdev/phy: 10G PHY support David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).