diff options
author | Kevin Lo <kevlo@cvs.openbsd.org> | 2020-07-22 00:48:03 +0000 |
---|---|---|
committer | Kevin Lo <kevlo@cvs.openbsd.org> | 2020-07-22 00:48:03 +0000 |
commit | 5036712a22ac6323829de012961ab742297e796b (patch) | |
tree | 4162b4fd6fd045afafff9fb3e4ff5a42ddd67636 | |
parent | 9dddbd04794e26bbab3c5a497fe6af433bcdecd7 (diff) |
Add support for newer RTL8125 chipset (RTL8125B).
Tested for on a TP-LINK TL-NG421.
ok jmatthew@
-rw-r--r-- | share/man/man4/pci.4 | 6 | ||||
-rw-r--r-- | share/man/man4/rge.4 | 13 | ||||
-rw-r--r-- | sys/dev/pci/if_rge.c | 947 | ||||
-rw-r--r-- | sys/dev/pci/if_rgereg.h | 3408 |
4 files changed, 3923 insertions, 451 deletions
diff --git a/share/man/man4/pci.4 b/share/man/man4/pci.4 index 2e893cf759f..e6c83031ab3 100644 --- a/share/man/man4/pci.4 +++ b/share/man/man4/pci.4 @@ -1,4 +1,4 @@ -.\" $OpenBSD: pci.4,v 1.381 2020/04/19 09:27:44 kettenis Exp $ +.\" $OpenBSD: pci.4,v 1.382 2020/07/22 00:48:02 kevlo Exp $ .\" $NetBSD: pci.4,v 1.29 2000/04/01 00:32:23 tsarna Exp $ .\" .\" Copyright (c) 2000 Theo de Raadt. All rights reserved. @@ -31,7 +31,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: April 19 2020 $ +.Dd $Mdocdate: July 22 2020 $ .Dt PCI 4 .Os .Sh NAME @@ -251,7 +251,7 @@ AMD PCnet-PCI 10/100 Ethernet device .It Xr re 4 Realtek 8139C+/8169/816xS/811xS/8168/810xE 10/100/Gigabit Ethernet device .It Xr rge 4 -Realtek 8125 PCI Express 2.5Gb Ethernet device +Realtek 8125/8125B PCI Express 2.5Gb Ethernet device .It Xr rl 4 Realtek 8129/8139 10/100 Ethernet device .It Xr se 4 diff --git a/share/man/man4/rge.4 b/share/man/man4/rge.4 index 165bc335a4d..147b76173eb 100644 --- a/share/man/man4/rge.4 +++ b/share/man/man4/rge.4 @@ -1,6 +1,6 @@ -.\" $OpenBSD: rge.4,v 1.2 2019/11/18 22:09:59 jmc Exp $ +.\" $OpenBSD: rge.4,v 1.3 2020/07/22 00:48:02 kevlo Exp $ .\" -.\" Copyright (c) 2019 Kevin Lo <kevlo@openbsd.org> +.\" Copyright (c) 2019, 2020 Kevin Lo <kevlo@openbsd.org> .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -14,23 +14,24 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: November 18 2019 $ +.Dd $Mdocdate: July 22 2020 $ .Dt RGE 4 .Os .Sh NAME .Nm rge -.Nd Realtek 8125 PCI Express 2.5Gb Ethernet device +.Nd Realtek 8125/8125B PCI Express 2.5Gb Ethernet device .Sh SYNOPSIS .Cd "rge* at pci?" .Sh DESCRIPTION The .Nm driver provides support for PCI Express 2.5Gb Ethernet adapters based -on the Realtek RTL8125 Ethernet controller, including the following: +on the Realtek RTL8125 and RTL8125B Ethernet controllers, +including the following: .Pp .Bl -bullet -offset indent -compact .It -Realtek RTL8125 2.5GbE Adapter (2500baseT) +Realtek 8125/8125B 2.5GbE Adapter (2500baseT) .It Rivet Networks Killer E3000 Adapter (2500baseT) .El diff --git a/sys/dev/pci/if_rge.c b/sys/dev/pci/if_rge.c index 2bb0cd3f968..957dbd9fbb5 100644 --- a/sys/dev/pci/if_rge.c +++ b/sys/dev/pci/if_rge.c @@ -1,7 +1,7 @@ -/* $OpenBSD: if_rge.c,v 1.4 2020/07/10 13:26:38 patrick Exp $ */ +/* $OpenBSD: if_rge.c,v 1.5 2020/07/22 00:48:02 kevlo Exp $ */ /* - * Copyright (c) 2019 Kevin Lo <kevlo@openbsd.org> + * Copyright (c) 2019, 2020 Kevin Lo <kevlo@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -50,6 +50,13 @@ #include <dev/pci/if_rgereg.h> +#ifdef RGE_DEBUG +#define DPRINTF(x) do { if (rge_debug > 0) printf x; } while (0) +int rge_debug = 0; +#else +#define DPRINTF(x) +#endif + int rge_match(struct device *, void *, void *); void rge_attach(struct device *, struct device *, void *); int rge_intr(void *); @@ -62,16 +69,22 @@ void rge_stop(struct ifnet *); int rge_ifmedia_upd(struct ifnet *); void rge_ifmedia_sts(struct ifnet *, struct ifmediareq *); int rge_allocmem(struct rge_softc *); -int rge_newbuf(struct rge_softc *, int); +int rge_newbuf(struct rge_softc *); void rge_discard_rxbuf(struct rge_softc *, int); -int rge_rx_list_init(struct rge_softc *); +void rge_rx_list_init(struct rge_softc *); void rge_tx_list_init(struct rge_softc *); +void rge_fill_rx_ring(struct rge_softc *); int rge_rxeof(struct rge_softc *); int rge_txeof(struct rge_softc *); void rge_reset(struct rge_softc *); void rge_iff(struct rge_softc *); void rge_set_phy_power(struct rge_softc *, int); void rge_phy_config(struct rge_softc *); +void rge_phy_config_mac_cfg2(struct rge_softc *); +void rge_phy_config_mac_cfg3(struct rge_softc *); +void rge_phy_config_mac_cfg4(struct rge_softc *); +void rge_phy_config_mac_cfg5(struct rge_softc *); +void rge_phy_config_mcu(struct rge_softc *, uint16_t); void rge_set_macaddr(struct rge_softc *, const uint8_t *); void rge_get_macaddr(struct rge_softc *, uint8_t *); void rge_hw_init(struct rge_softc *); @@ -79,6 +92,7 @@ void rge_disable_phy_ocp_pwrsave(struct rge_softc *); void rge_patch_phy_mcu(struct rge_softc *, int); void rge_add_media_types(struct rge_softc *); void rge_config_imtype(struct rge_softc *, int); +void rge_disable_hw_im(struct rge_softc *); void rge_disable_sim_im(struct rge_softc *); void rge_setup_sim_im(struct rge_softc *); void rge_setup_intr(struct rge_softc *, int); @@ -88,6 +102,7 @@ uint32_t rge_read_csi(struct rge_softc *, uint32_t); void rge_write_mac_ocp(struct rge_softc *, uint16_t, uint16_t); uint16_t rge_read_mac_ocp(struct rge_softc *, uint16_t); void rge_write_ephy(struct rge_softc *, uint16_t, uint16_t); +uint16_t rge_read_ephy(struct rge_softc *, uint16_t); void rge_write_phy(struct rge_softc *, uint16_t, uint16_t, uint16_t); void rge_write_phy_ocp(struct rge_softc *, uint16_t, uint16_t); uint16_t rge_read_phy_ocp(struct rge_softc *, uint16_t); @@ -99,16 +114,14 @@ void rge_link_state(struct rge_softc *); static const struct { uint16_t reg; uint16_t val; -} rtl8125_def_bps[] = { - RTL8125_DEF_BPS -}, rtl8125_mac_cfg2_ephy[] = { - RTL8125_MAC_CFG2_EPHY -}, rtl8125_mac_cfg2_mcu[] = { +} rtl8125_mac_cfg2_mcu[] = { RTL8125_MAC_CFG2_MCU -}, rtl8125_mac_cfg3_ephy[] = { - RTL8125_MAC_CFG3_EPHY }, rtl8125_mac_cfg3_mcu[] = { RTL8125_MAC_CFG3_MCU +}, rtl8125_mac_cfg4_mcu[] = { + RTL8125_MAC_CFG4_MCU +}, rtl8125_mac_cfg5_mcu[] = { + RTL8125_MAC_CFG5_MCU }; struct cfattach rge_ca = { @@ -199,6 +212,12 @@ rge_attach(struct device *parent, struct device *self, void *aux) case 0x60900000: sc->rge_type = MAC_CFG3; break; + case 0x64000000: + sc->rge_type = MAC_CFG4; + break; + case 0x64100000: + sc->rge_type = MAC_CFG5; + break; default: printf(": unknown version 0x%08x\n", hwrev); return; @@ -242,7 +261,7 @@ rge_attach(struct device *parent, struct device *self, void *aux) ifp->if_ioctl = rge_ioctl; ifp->if_qstart = rge_start; ifp->if_watchdog = rge_watchdog; - ifq_set_maxlen(&ifp->if_snd, RGE_TX_LIST_CNT); + ifq_set_maxlen(&ifp->if_snd, RGE_TX_LIST_CNT - 1); ifp->if_hardmtu = RGE_JUMBO_MTU; ifp->if_capabilities = IFCAP_VLAN_MTU | IFCAP_CSUM_IPv4 | @@ -281,11 +300,12 @@ rge_intr(void *arg) /* Disable interrupts. */ RGE_WRITE_4(sc, RGE_IMR, 0); - status = RGE_READ_4(sc, RGE_ISR); if (!(sc->rge_flags & RGE_FLAG_MSI)) { - if ((status & RGE_INTRS) == 0 || status == 0xffffffff) + if ((RGE_READ_4(sc, RGE_ISR) & sc->rge_intrs) == 0) return (0); } + + status = RGE_READ_4(sc, RGE_ISR); if (status) RGE_WRITE_4(sc, RGE_ISR, status); @@ -293,7 +313,7 @@ rge_intr(void *arg) claimed = 1; rx = tx = 0; - if (status & RGE_INTRS) { + if (status & sc->rge_intrs) { if (status & (sc->rge_rx_ack | RGE_ISR_RX_ERR | RGE_ISR_RX_FIFO_OFLOW)) { rx |= rge_rxeof(sc); @@ -474,6 +494,10 @@ rge_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) } ifp->if_mtu = ifr->ifr_mtu; break; + case SIOCGIFRXR: + error = if_rxr_ioctl((struct if_rxrinfo *)ifr->ifr_data, + NULL, RGE_JUMBO_FRAMELEN, &sc->rge_ldata.rge_rx_ring); + break; default: error = ether_ioctl(ifp, &sc->sc_arpcom, cmd, data); } @@ -566,7 +590,6 @@ rge_init(struct ifnet *ifp) { struct rge_softc *sc = ifp->if_softc; uint32_t val; - uint16_t max_frame_size; int i; rge_stop(ifp); @@ -576,27 +599,20 @@ rge_init(struct ifnet *ifp) /* Set Maximum frame size but don't let MTU be lass than ETHER_MTU. */ if (ifp->if_mtu < ETHERMTU) - max_frame_size = ETHERMTU; + sc->rge_rxbufsz = ETHERMTU; else - max_frame_size = ifp->if_mtu; + sc->rge_rxbufsz = ifp->if_mtu; - max_frame_size += ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + + sc->rge_rxbufsz += ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + ETHER_CRC_LEN + 1; - if (max_frame_size > RGE_JUMBO_FRAMELEN) - max_frame_size -= 1; + if (sc->rge_rxbufsz > RGE_JUMBO_FRAMELEN) + sc->rge_rxbufsz -= 1; - RGE_WRITE_2(sc, RGE_RXMAXSIZE, max_frame_size); + RGE_WRITE_2(sc, RGE_RXMAXSIZE, sc->rge_rxbufsz); - /* Initialize RX descriptors list. */ - if (rge_rx_list_init(sc) == ENOBUFS) { - printf("%s: init failed: no memory for RX buffers\n", - sc->sc_dev.dv_xname); - rge_stop(ifp); - return (ENOBUFS); - } - - /* Initialize TX descriptors. */ + /* Initialize RX and TX descriptors lists. */ + rge_rx_list_init(sc); rge_tx_list_init(sc); /* Load the addresses of the RX and TX lists into the chip. */ @@ -618,7 +634,7 @@ rge_init(struct ifnet *ifp) /* Clear interrupt moderation timer. */ for (i = 0; i < 64; i++) - RGE_WRITE_4(sc, RGE_IM(i), 0); + RGE_WRITE_4(sc, RGE_INTMITI(i), 0); /* Set the initial RX and TX configurations. */ RGE_WRITE_4(sc, RGE_RXCFG, RGE_RXCFG_CONFIG); @@ -647,16 +663,22 @@ rge_init(struct ifnet *ifp) RGE_MAC_SETBIT(sc, 0xeb58, 0x0001); val = rge_read_mac_ocp(sc, 0xe614) & ~0x0700; - rge_write_mac_ocp(sc, 0xe614, val | 0x0400); + if (sc->rge_type == MAC_CFG2 || sc->rge_type == MAC_CFG3) + rge_write_mac_ocp(sc, 0xe614, val | 0x0400); + else + rge_write_mac_ocp(sc, 0xe614, val | 0x0200); RGE_MAC_CLRBIT(sc, 0xe63e, 0x0c00); - val = rge_read_mac_ocp(sc, 0xe63e) & ~0x0030; - rge_write_mac_ocp(sc, 0xe63e, val | 0x0020); + if (sc->rge_type == MAC_CFG2 || sc->rge_type == MAC_CFG3) { + val = rge_read_mac_ocp(sc, 0xe63e) & ~0x0030; + rge_write_mac_ocp(sc, 0xe63e, val | 0x0020); + } else + RGE_MAC_CLRBIT(sc, 0xe63e, 0x0030); RGE_MAC_SETBIT(sc, 0xc0b4, 0x000c); - val = rge_read_mac_ocp(sc, 0xeb6a) & ~0x007f; + val = rge_read_mac_ocp(sc, 0xeb6a) & ~0x00ff; rge_write_mac_ocp(sc, 0xeb6a, val | 0x0033); val = rge_read_mac_ocp(sc, 0xeb50) & ~0x03e0; @@ -667,8 +689,13 @@ rge_init(struct ifnet *ifp) RGE_WRITE_1(sc, RGE_TDFNR, 0x10); + RGE_SETBIT_1(sc, RGE_DLLPR, RGE_DLLPR_TX_10M_PS_EN); + RGE_MAC_CLRBIT(sc, 0xe040, 0x1000); + val = rge_read_mac_ocp(sc, 0xea1c) & ~0x0003; + rge_write_mac_ocp(sc, 0xea1c, val | 0x0001); + val = rge_read_mac_ocp(sc, 0xe0c0) & ~0x4f0f; rge_write_mac_ocp(sc, 0xe0c0, val | 0x4403); @@ -681,7 +708,16 @@ rge_init(struct ifnet *ifp) val = rge_read_mac_ocp(sc, 0xd430) & ~0x0fff; rge_write_mac_ocp(sc, 0xd430, val | 0x047f); - RGE_MAC_SETBIT(sc, 0xe84c, 0x00c0); + val = rge_read_mac_ocp(sc, 0xe84c) & ~0x0040; + if (sc->rge_type == MAC_CFG2 || sc->rge_type == MAC_CFG3) + rge_write_mac_ocp(sc, 0xe84c, 0x00c0); + else + rge_write_mac_ocp(sc, 0xe84c, 0x0080); + + RGE_SETBIT_1(sc, RGE_DLLPR, RGE_DLLPR_PFM_EN); + + if (sc->rge_type == MAC_CFG2 || sc->rge_type == MAC_CFG3) + RGE_SETBIT_1(sc, RGE_MCUCMD, 0x01); /* Disable EEE plus. */ RGE_MAC_CLRBIT(sc, 0xe080, 0x0002); @@ -755,7 +791,12 @@ rge_stop(struct ifnet *ifp) RGE_RXCFG_ERRPKT); RGE_WRITE_4(sc, RGE_IMR, 0); - RGE_WRITE_4(sc, RGE_ISR, 0xffffffff); + + /* Clear timer interrupts. */ + RGE_WRITE_4(sc, RGE_TIMERINT0, 0); + RGE_WRITE_4(sc, RGE_TIMERINT1, 0); + RGE_WRITE_4(sc, RGE_TIMERINT2, 0); + RGE_WRITE_4(sc, RGE_TIMERINT3, 0); rge_reset(sc); @@ -996,24 +1037,29 @@ rge_allocmem(struct rge_softc *sc) * Initialize the RX descriptor and attach an mbuf cluster. */ int -rge_newbuf(struct rge_softc *sc, int idx) +rge_newbuf(struct rge_softc *sc) { struct mbuf *m; struct rge_rx_desc *r; struct rge_rxq *rxq; bus_dmamap_t rxmap; + int idx; - m = MCLGETI(NULL, M_DONTWAIT, NULL, RGE_JUMBO_FRAMELEN); + m = MCLGETI(NULL, M_DONTWAIT, NULL, sc->rge_rxbufsz); if (m == NULL) return (ENOBUFS); - m->m_len = m->m_pkthdr.len = RGE_JUMBO_FRAMELEN; + m->m_data += (m->m_ext.ext_size - sc->rge_rxbufsz); + m->m_len = m->m_pkthdr.len = sc->rge_rxbufsz; + idx = sc->rge_ldata.rge_rxq_prodidx; rxq = &sc->rge_ldata.rge_rxq[idx]; rxmap = rxq->rxq_dmamap; - if (bus_dmamap_load_mbuf(sc->sc_dmat, rxmap, m, BUS_DMA_NOWAIT)) - goto out; + if (bus_dmamap_load_mbuf(sc->sc_dmat, rxmap, m, BUS_DMA_NOWAIT)) { + m_freem(m); + return (ENOBUFS); + } bus_dmamap_sync(sc->sc_dmat, rxmap, 0, rxmap->dm_mapsize, BUS_DMASYNC_PREREAD); @@ -1024,7 +1070,8 @@ rge_newbuf(struct rge_softc *sc, int idx) if (RGE_OWN(r)) { printf("%s: tried to map busy RX descriptor\n", sc->sc_dev.dv_xname); - goto out; + m_freem(m); + return (ENOBUFS); } rxq->rxq_mbuf = m; @@ -1043,11 +1090,9 @@ rge_newbuf(struct rge_softc *sc, int idx) idx * sizeof(struct rge_rx_desc), sizeof(struct rge_rx_desc), BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + sc->rge_ldata.rge_rxq_prodidx = RGE_NEXT_RX_DESC(idx); + return (0); -out: - if (m != NULL) - m_freem(m); - return (ENOMEM); } void @@ -1068,23 +1113,29 @@ rge_discard_rxbuf(struct rge_softc *sc, int idx) BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); } -int +void rge_rx_list_init(struct rge_softc *sc) { - int i; - memset(sc->rge_ldata.rge_rx_list, 0, RGE_RX_LIST_SZ); - for (i = 0; i < RGE_RX_LIST_CNT; i++) { - sc->rge_ldata.rge_rxq[i].rxq_mbuf = NULL; - if (rge_newbuf(sc, i) == ENOBUFS) - return (ENOBUFS); - } - - sc->rge_ldata.rge_rxq_prodidx = 0; + sc->rge_ldata.rge_rxq_prodidx = sc->rge_ldata.rge_rxq_considx = 0; sc->rge_head = sc->rge_tail = NULL; - return (0); + if_rxr_init(&sc->rge_ldata.rge_rx_ring, 2, RGE_RX_LIST_CNT - 1); + rge_fill_rx_ring(sc); +} + +void +rge_fill_rx_ring(struct rge_softc *sc) +{ + struct if_rxring *rxr = &sc->rge_ldata.rge_rx_ring; + int slots; + + for (slots = if_rxr_get(rxr, RGE_RX_LIST_CNT); slots > 0; slots--) { + if (rge_newbuf(sc) == ENOBUFS) + break; + } + if_rxr_put(rxr, slots); } void @@ -1110,12 +1161,14 @@ rge_rxeof(struct rge_softc *sc) struct mbuf_list ml = MBUF_LIST_INITIALIZER(); struct mbuf *m; struct ifnet *ifp = &sc->sc_arpcom.ac_if; + struct if_rxring *rxr = &sc->rge_ldata.rge_rx_ring; struct rge_rx_desc *cur_rx; struct rge_rxq *rxq; uint32_t rxstat, extsts; int i, total_len, rx = 0; - for (i = sc->rge_ldata.rge_rxq_prodidx; ; i = RGE_NEXT_RX_DESC(i)) { + for (i = sc->rge_ldata.rge_rxq_considx; if_rxr_inuse(rxr) > 0; + i = RGE_NEXT_RX_DESC(i)) { /* Invalidate the descriptor memory. */ bus_dmamap_sync(sc->sc_dmat, sc->rge_ldata.rge_rx_list_map, i * sizeof(struct rge_rx_desc), sizeof(struct rge_rx_desc), @@ -1132,6 +1185,8 @@ rge_rxeof(struct rge_softc *sc) total_len = RGE_RXBYTES(cur_rx); rxq = &sc->rge_ldata.rge_rxq[i]; m = rxq->rxq_mbuf; + rxq->rxq_mbuf = NULL; + if_rxr_put(rxr, 1); rx = 1; /* Invalidate the RX mbuf and unload its map. */ @@ -1159,20 +1214,6 @@ rge_rxeof(struct rge_softc *sc) continue; } - /* - * If allocating a replacement mbuf fails, - * reload the current one. - */ - - if (rge_newbuf(sc, i) == ENOBUFS) { - if (sc->rge_head != NULL) { - m_freem(sc->rge_head); - sc->rge_head = sc->rge_tail = NULL; - } - rge_discard_rxbuf(sc, i); - continue; - } - if (sc->rge_head != NULL) { m->m_len = total_len; /* @@ -1222,7 +1263,8 @@ rge_rxeof(struct rge_softc *sc) ml_enqueue(&ml, m); } - sc->rge_ldata.rge_rxq_prodidx = i; + sc->rge_ldata.rge_rxq_considx = i; + rge_fill_rx_ring(sc); if_input(ifp, &ml); @@ -1301,13 +1343,22 @@ rge_reset(struct rge_softc *sc) RGE_SETBIT_1(sc, RGE_PPSW, 0x08); DELAY(2000); - for (i = 0; i < 10; i++) { - DELAY(100); + for (i = 0; i < 3000; i++) { + DELAY(50); if ((RGE_READ_1(sc, RGE_MCUCMD) & (RGE_MCUCMD_RXFIFO_EMPTY | RGE_MCUCMD_TXFIFO_EMPTY)) == (RGE_MCUCMD_RXFIFO_EMPTY | RGE_MCUCMD_TXFIFO_EMPTY)) break; } + if (sc->rge_type == MAC_CFG4 || sc->rge_type == MAC_CFG5) { + for (i = 0; i < 3000; i++) { + DELAY(50); + if ((RGE_READ_2(sc, RGE_IM) & 0x0103) == 0x0103) + break; + } + } + + DELAY(2000); /* Soft reset. */ RGE_WRITE_1(sc, RGE_CMD, RGE_CMD_RESET); @@ -1387,14 +1438,135 @@ rge_set_phy_power(struct rge_softc *sc, int on) break; DELAY(1000); } - } else + } else { rge_write_phy(sc, 0, MII_BMCR, BMCR_AUTOEN | BMCR_PDOWN); + RGE_CLRBIT_1(sc, RGE_PMCH, 0x80); + RGE_CLRBIT_1(sc, RGE_PPSW, 0x40); + } } void rge_phy_config(struct rge_softc *sc) { - uint16_t mcode_ver, val; + /* Read microcode version. */ + rge_write_phy_ocp(sc, 0xa436, 0x801e); + sc->rge_mcodever = rge_read_phy_ocp(sc, 0xa438); + + switch (sc->rge_type) { + case MAC_CFG2: + rge_phy_config_mac_cfg2(sc); + break; + case MAC_CFG3: + rge_phy_config_mac_cfg3(sc); + break; + case MAC_CFG4: + rge_phy_config_mac_cfg4(sc); + break; + case MAC_CFG5: + rge_phy_config_mac_cfg5(sc); + break; + default: + break; /* Can't happen. */ + } + + /* Disable EEE. */ + RGE_MAC_CLRBIT(sc, 0xe040, 0x0003); + if (sc->rge_type == MAC_CFG2 || sc->rge_type == MAC_CFG3) { + RGE_MAC_CLRBIT(sc, 0xeb62, 0x0006); + RGE_PHY_CLRBIT(sc, 0xa432, 0x0010); + } + RGE_PHY_CLRBIT(sc, 0xa5d0, 0x0006); + RGE_PHY_CLRBIT(sc, 0xa6d4, 0x0001); + RGE_PHY_CLRBIT(sc, 0xa6d8, 0x0010); + RGE_PHY_CLRBIT(sc, 0xa428, 0x0080); + RGE_PHY_CLRBIT(sc, 0xa4a2, 0x0200); + + rge_patch_phy_mcu(sc, 1); + RGE_MAC_CLRBIT(sc, 0xe052, 0x0001); + RGE_PHY_CLRBIT(sc, 0xa442, 0x3000); + RGE_PHY_CLRBIT(sc, 0xa430, 0x8000); + rge_patch_phy_mcu(sc, 0); +} + +void +rge_phy_config_mac_cfg2(struct rge_softc *sc) +{ + uint16_t val; + int i; + + for (i = 0; i < nitems(rtl8125_mac_cfg2_ephy); i++) + rge_write_ephy(sc, rtl8125_mac_cfg2_ephy[i].reg, + rtl8125_mac_cfg2_ephy[i].val); + + rge_phy_config_mcu(sc, RGE_MAC_CFG2_MCODE_VER); + + val = rge_read_phy_ocp(sc, 0xad40) & ~0x03ff; + rge_write_phy_ocp(sc, 0xad40, val | 0x0084); + RGE_PHY_SETBIT(sc, 0xad4e, 0x0010); + val = rge_read_phy_ocp(sc, 0xad16) & ~0x03ff; + rge_write_phy_ocp(sc, 0xad16, val | 0x0006); + val = rge_read_phy_ocp(sc, 0xad32) & ~0x03ff; + rge_write_phy_ocp(sc, 0xad32, val | 0x0006); + RGE_PHY_CLRBIT(sc, 0xac08, 0x1100); + val = rge_read_phy_ocp(sc, 0xac8a) & ~0xf000; + rge_write_phy_ocp(sc, 0xac8a, val | 0x7000); + RGE_PHY_SETBIT(sc, 0xad18, 0x0400); + RGE_PHY_SETBIT(sc, 0xad1a, 0x03ff); + RGE_PHY_SETBIT(sc, 0xad1c, 0x03ff); + + rge_write_phy_ocp(sc, 0xa436, 0x80ea); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0xc400); + rge_write_phy_ocp(sc, 0xa436, 0x80eb); + val = rge_read_phy_ocp(sc, 0xa438) & ~0x0700; + rge_write_phy_ocp(sc, 0xa438, val | 0x0300); + rge_write_phy_ocp(sc, 0xa436, 0x80f8); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x1c00); + rge_write_phy_ocp(sc, 0xa436, 0x80f1); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x3000); + rge_write_phy_ocp(sc, 0xa436, 0x80fe); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0xa500); + rge_write_phy_ocp(sc, 0xa436, 0x8102); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x5000); + rge_write_phy_ocp(sc, 0xa436, 0x8105); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x3300); + rge_write_phy_ocp(sc, 0xa436, 0x8100); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x7000); + rge_write_phy_ocp(sc, 0xa436, 0x8104); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0xf000); + rge_write_phy_ocp(sc, 0xa436, 0x8106); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x6500); + rge_write_phy_ocp(sc, 0xa436, 0x80dc); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0xed00); + rge_write_phy_ocp(sc, 0xa436, 0x80df); + RGE_PHY_SETBIT(sc, 0xa438, 0x0100); + rge_write_phy_ocp(sc, 0xa436, 0x80e1); + RGE_PHY_CLRBIT(sc, 0xa438, 0x0100); + val = rge_read_phy_ocp(sc, 0xbf06) & ~0x003f; + rge_write_phy_ocp(sc, 0xbf06, val | 0x0038); + rge_write_phy_ocp(sc, 0xa436, 0x819f); + rge_write_phy_ocp(sc, 0xa438, 0xd0b6); + rge_write_phy_ocp(sc, 0xbc34, 0x5555); + val = rge_read_phy_ocp(sc, 0xbf0a) & ~0x0e00; + rge_write_phy_ocp(sc, 0xbf0a, val | 0x0a00); + RGE_PHY_CLRBIT(sc, 0xa5c0, 0x0400); + RGE_PHY_SETBIT(sc, 0xa442, 0x0800); +} + +void +rge_phy_config_mac_cfg3(struct rge_softc *sc) +{ + struct ifnet *ifp = &sc->sc_arpcom.ac_if; + uint16_t val; int i; static const uint16_t mac_cfg3_a438_value[] = { 0x0043, 0x00a7, 0x00d6, 0x00ec, 0x00f6, 0x00fb, 0x00fd, 0x00ff, @@ -1408,135 +1580,380 @@ rge_phy_config(struct rge_softc *sc) 0xc022, 0x175a, 0xc024, 0x19c0, 0xc026, 0x1c26, 0xc089, 0x6050, 0xc08a, 0x5f6e, 0xc08c, 0x6e6e, 0xc08e, 0x6e6e, 0xc090, 0x6e12 }; - /* Read microcode version. */ - rge_write_phy_ocp(sc, 0xa436, 0x801e); - mcode_ver = rge_read_phy_ocp(sc, 0xa438); + for (i = 0; i < nitems(rtl8125_mac_cfg3_ephy); i++) + rge_write_ephy(sc, rtl8125_mac_cfg3_ephy[i].reg, + rtl8125_mac_cfg3_ephy[i].val); + + val = rge_read_ephy(sc, 0x002a) & ~0x7000; + rge_write_ephy(sc, 0x002a, val | 0x3000); + RGE_EPHY_CLRBIT(sc, 0x0019, 0x0040); + RGE_EPHY_SETBIT(sc, 0x001b, 0x0e00); + RGE_EPHY_CLRBIT(sc, 0x001b, 0x7000); + rge_write_ephy(sc, 0x0002, 0x6042); + rge_write_ephy(sc, 0x0006, 0x0014); + val = rge_read_ephy(sc, 0x006a) & ~0x7000; + rge_write_ephy(sc, 0x006a, val | 0x3000); + RGE_EPHY_CLRBIT(sc, 0x0059, 0x0040); + RGE_EPHY_SETBIT(sc, 0x005b, 0x0e00); + RGE_EPHY_CLRBIT(sc, 0x005b, 0x7000); + rge_write_ephy(sc, 0x0042, 0x6042); + rge_write_ephy(sc, 0x0046, 0x0014); + + rge_phy_config_mcu(sc, RGE_MAC_CFG3_MCODE_VER); + + RGE_PHY_SETBIT(sc, 0xad4e, 0x0010); + val = rge_read_phy_ocp(sc, 0xad16) & ~0x03ff; + rge_write_phy_ocp(sc, 0xad16, val | 0x03ff); + val = rge_read_phy_ocp(sc, 0xad32) & ~0x003f; + rge_write_phy_ocp(sc, 0xad32, val | 0x0006); + RGE_PHY_CLRBIT(sc, 0xac08, 0x1000); + RGE_PHY_CLRBIT(sc, 0xac08, 0x0100); + val = rge_read_phy_ocp(sc, 0xacc0) & ~0x0003; + rge_write_phy_ocp(sc, 0xacc0, val | 0x0002); + val = rge_read_phy_ocp(sc, 0xad40) & ~0x00e0; + rge_write_phy_ocp(sc, 0xad40, val | 0x0040); + val = rge_read_phy_ocp(sc, 0xad40) & ~0x0007; + rge_write_phy_ocp(sc, 0xad40, val | 0x0004); + RGE_PHY_CLRBIT(sc, 0xac14, 0x0080); + RGE_PHY_CLRBIT(sc, 0xac80, 0x0300); + val = rge_read_phy_ocp(sc, 0xac5e) & ~0x0007; + rge_write_phy_ocp(sc, 0xac5e, val | 0x0002); + rge_write_phy_ocp(sc, 0xad4c, 0x00a8); + rge_write_phy_ocp(sc, 0xac5c, 0x01ff); + val = rge_read_phy_ocp(sc, 0xac8a) & ~0x00f0; + rge_write_phy_ocp(sc, 0xac8a, val | 0x0030); + rge_write_phy_ocp(sc, 0xb87c, 0x8157); + val = rge_read_phy_ocp(sc, 0xb87e) & ~0xff00; + rge_write_phy_ocp(sc, 0xb87e, val | 0x0500); + rge_write_phy_ocp(sc, 0xb87c, 0x8159); + val = rge_read_phy_ocp(sc, 0xb87e) & ~0xff00; + rge_write_phy_ocp(sc, 0xb87e, val | 0x0700); + RGE_WRITE_2(sc, RGE_EEE_TXIDLE_TIMER, ifp->if_mtu + ETHER_HDR_LEN + 32); + rge_write_phy_ocp(sc, 0xb87c, 0x80a2); + rge_write_phy_ocp(sc, 0xb87e, 0x0153); + rge_write_phy_ocp(sc, 0xb87c, 0x809c); + rge_write_phy_ocp(sc, 0xb87e, 0x0153); + + rge_write_phy_ocp(sc, 0xa436, 0x81b3); + for (i = 0; i < nitems(mac_cfg3_a438_value); i++) + rge_write_phy_ocp(sc, 0xa438, mac_cfg3_a438_value[i]); + for (i = 0; i < 26; i++) + rge_write_phy_ocp(sc, 0xa438, 0); + rge_write_phy_ocp(sc, 0xa436, 0x8257); + rge_write_phy_ocp(sc, 0xa438, 0x020f); + rge_write_phy_ocp(sc, 0xa436, 0x80ea); + rge_write_phy_ocp(sc, 0xa438, 0x7843); - if (sc->rge_type == MAC_CFG2) { - for (i = 0; i < nitems(rtl8125_mac_cfg2_ephy); i++) { - rge_write_ephy(sc, rtl8125_mac_cfg2_ephy[i].reg, - rtl8125_mac_cfg2_ephy[i].val); - } + rge_patch_phy_mcu(sc, 1); + RGE_PHY_CLRBIT(sc, 0xb896, 0x0001); + RGE_PHY_CLRBIT(sc, 0xb892, 0xff00); + for (i = 0; i < nitems(mac_cfg3_b88e_value); i += 2) { + rge_write_phy_ocp(sc, 0xb88e, mac_cfg3_b88e_value[i]); + rge_write_phy_ocp(sc, 0xb890, mac_cfg3_b88e_value[i + 1]); + } + RGE_PHY_SETBIT(sc, 0xb896, 0x0001); + rge_patch_phy_mcu(sc, 0); - if (mcode_ver != RGE_MAC_CFG2_MCODE_VER) { - /* Disable PHY config. */ - RGE_CLRBIT_1(sc, 0xf2, 0x20); - DELAY(1000); + RGE_PHY_SETBIT(sc, 0xd068, 0x2000); + rge_write_phy_ocp(sc, 0xa436, 0x81a2); + RGE_PHY_SETBIT(sc, 0xa438, 0x0100); + val = rge_read_phy_ocp(sc, 0xb54c) & ~0xff00; + rge_write_phy_ocp(sc, 0xb54c, val | 0xdb00); + RGE_PHY_CLRBIT(sc, 0xa454, 0x0001); + RGE_PHY_SETBIT(sc, 0xa5d4, 0x0020); + RGE_PHY_CLRBIT(sc, 0xad4e, 0x0010); + RGE_PHY_CLRBIT(sc, 0xa86a, 0x0001); + RGE_PHY_SETBIT(sc, 0xa442, 0x0800); +} - rge_patch_phy_mcu(sc, 1); +void +rge_phy_config_mac_cfg4(struct rge_softc *sc) +{ + struct ifnet *ifp = &sc->sc_arpcom.ac_if; + uint16_t val; + int i; + static const uint16_t mac_cfg4_b87c_value[] = + { 0x8013, 0x0700, 0x8fb9, 0x2801, 0x8fba, 0x0100, 0x8fbc, 0x1900, + 0x8fbe, 0xe100, 0x8fc0, 0x0800, 0x8fc2, 0xe500, 0x8fc4, 0x0f00, + 0x8fc6, 0xf100, 0x8fc8, 0x0400, 0x8fca, 0xf300, 0x8fcc, 0xfd00, + 0x8fce, 0xff00, 0x8fd0, 0xfb00, 0x8fd2, 0x0100, 0x8fd4, 0xf400, + 0x8fd6, 0xff00, 0x8fd8, 0xf600, 0x813d, 0x390e, 0x814f, 0x790e, + 0x80b0, 0x0f31 }; + + for (i = 0; i < nitems(rtl8125_mac_cfg4_ephy); i++) + rge_write_ephy(sc, rtl8125_mac_cfg4_ephy[i].reg, + rtl8125_mac_cfg4_ephy[i].val); + + rge_write_phy_ocp(sc, 0xbf86, 0x9000); + RGE_PHY_SETBIT(sc, 0xc402, 0x0400); + RGE_PHY_CLRBIT(sc, 0xc402, 0x0400); + rge_write_phy_ocp(sc, 0xbd86, 0x1010); + rge_write_phy_ocp(sc, 0xbd88, 0x1010); + val = rge_read_phy_ocp(sc, 0xbd4e) & ~0x0c00; + rge_write_phy_ocp(sc, 0xbd4e, val | 0x0800); + val = rge_read_phy_ocp(sc, 0xbf46) & ~0x0f00; + rge_write_phy_ocp(sc, 0xbf46, val | 0x0700); + + rge_phy_config_mcu(sc, RGE_MAC_CFG4_MCODE_VER); + + RGE_PHY_SETBIT(sc, 0xa442, 0x0800); + RGE_PHY_SETBIT(sc, 0xbc08, 0x000c); + rge_write_phy_ocp(sc, 0xa436, 0x8fff); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x0400); + for (i = 0; i < 6; i++) { + rge_write_phy_ocp(sc, 0xb87c, 0x8560 + i * 2); + if (i < 3) + rge_write_phy_ocp(sc, 0xb87e, 0x19cc); + else + rge_write_phy_ocp(sc, 0xb87e, 0x147d); + } + rge_write_phy_ocp(sc, 0xb87c, 0x8ffe); + rge_write_phy_ocp(sc, 0xb87e, 0x0907); + val = rge_read_phy_ocp(sc, 0xacda) & ~0xff00; + rge_write_phy_ocp(sc, 0xacda, val | 0xff00); + val = rge_read_phy_ocp(sc, 0xacde) & ~0xf000; + rge_write_phy_ocp(sc, 0xacde, val | 0xf000); + rge_write_phy_ocp(sc, 0xb87c, 0x80d6); + rge_write_phy_ocp(sc, 0xb87e, 0x2801); + rge_write_phy_ocp(sc, 0xb87c, 0x80F2); + rge_write_phy_ocp(sc, 0xb87e, 0x2801); + rge_write_phy_ocp(sc, 0xb87c, 0x80f4); + rge_write_phy_ocp(sc, 0xb87e, 0x6077); + rge_write_phy_ocp(sc, 0xb506, 0x01e7); + rge_write_phy_ocp(sc, 0xac8c, 0x0ffc); + rge_write_phy_ocp(sc, 0xac46, 0xb7b4); + rge_write_phy_ocp(sc, 0xac50, 0x0fbc); + rge_write_phy_ocp(sc, 0xac3c, 0x9240); + rge_write_phy_ocp(sc, 0xac4E, 0x0db4); + rge_write_phy_ocp(sc, 0xacc6, 0x0707); + rge_write_phy_ocp(sc, 0xacc8, 0xa0d3); + rge_write_phy_ocp(sc, 0xad08, 0x0007); + for (i = 0; i < nitems(mac_cfg4_b87c_value); i += 2) { + rge_write_phy_ocp(sc, 0xb87c, mac_cfg4_b87c_value[i]); + rge_write_phy_ocp(sc, 0xb87e, mac_cfg4_b87c_value[i + 1]); + } + RGE_PHY_SETBIT(sc, 0xbf4c, 0x0002); + RGE_PHY_SETBIT(sc, 0xbcca, 0x0300); + rge_write_phy_ocp(sc, 0xb87c, 0x8141); + rge_write_phy_ocp(sc, 0xb87e, 0x320e); + rge_write_phy_ocp(sc, 0xb87c, 0x8153); + rge_write_phy_ocp(sc, 0xb87e, 0x720e); + RGE_PHY_CLRBIT(sc, 0xa432, 0x0040); + rge_write_phy_ocp(sc, 0xb87c, 0x8529); + rge_write_phy_ocp(sc, 0xb87e, 0x050e); + RGE_WRITE_2(sc, RGE_EEE_TXIDLE_TIMER, ifp->if_mtu + ETHER_HDR_LEN + 32); + rge_write_phy_ocp(sc, 0xa436, 0x816c); + rge_write_phy_ocp(sc, 0xa438, 0xc4a0); + rge_write_phy_ocp(sc, 0xa436, 0x8170); + rge_write_phy_ocp(sc, 0xa438, 0xc4a0); + rge_write_phy_ocp(sc, 0xa436, 0x8174); + rge_write_phy_ocp(sc, 0xa438, 0x04a0); + rge_write_phy_ocp(sc, 0xa436, 0x8178); + rge_write_phy_ocp(sc, 0xa438, 0x04a0); + rge_write_phy_ocp(sc, 0xa436, 0x817c); + rge_write_phy_ocp(sc, 0xa438, 0x0719); + rge_write_phy_ocp(sc, 0xa436, 0x8ff4); + rge_write_phy_ocp(sc, 0xa438, 0x0400); + rge_write_phy_ocp(sc, 0xa436, 0x8ff1); + rge_write_phy_ocp(sc, 0xa438, 0x0404); + rge_write_phy_ocp(sc, 0xbf4a, 0x001b); + for (i = 0; i < 6; i++) { + rge_write_phy_ocp(sc, 0xb87c, 0x8033 + i * 4); + if (i == 2) + rge_write_phy_ocp(sc, 0xb87e, 0xfc32); + else + rge_write_phy_ocp(sc, 0xb87e, 0x7c13); + } + rge_write_phy_ocp(sc, 0xb87c, 0x8145); + rge_write_phy_ocp(sc, 0xb87e, 0x370e); + rge_write_phy_ocp(sc, 0xb87c, 0x8157); + rge_write_phy_ocp(sc, 0xb87e, 0x770e); + rge_write_phy_ocp(sc, 0xb87c, 0x8169); + rge_write_phy_ocp(sc, 0xb87e, 0x0d0a); + rge_write_phy_ocp(sc, 0xb87c, 0x817b); + rge_write_phy_ocp(sc, 0xb87e, 0x1d0a); + rge_write_phy_ocp(sc, 0xa436, 0x8217); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x5000); + rge_write_phy_ocp(sc, 0xa436, 0x821a); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x5000); + rge_write_phy_ocp(sc, 0xa436, 0x80da); + rge_write_phy_ocp(sc, 0xa438, 0x0403); + rge_write_phy_ocp(sc, 0xa436, 0x80dc); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x1000); + rge_write_phy_ocp(sc, 0xa436, 0x80b3); + rge_write_phy_ocp(sc, 0xa438, 0x0384); + rge_write_phy_ocp(sc, 0xa436, 0x80b7); + rge_write_phy_ocp(sc, 0xa438, 0x2007); + rge_write_phy_ocp(sc, 0xa436, 0x80ba); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x6c00); + rge_write_phy_ocp(sc, 0xa436, 0x80b5); + rge_write_phy_ocp(sc, 0xa438, 0xf009); + rge_write_phy_ocp(sc, 0xa436, 0x80bd); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x9f00); + rge_write_phy_ocp(sc, 0xa436, 0x80c7); + rge_write_phy_ocp(sc, 0xa438, 0xf083); + rge_write_phy_ocp(sc, 0xa436, 0x80dd); + rge_write_phy_ocp(sc, 0xa438, 0x03f0); + rge_write_phy_ocp(sc, 0xa436, 0x80df); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x1000); + rge_write_phy_ocp(sc, 0xa436, 0x80cb); + rge_write_phy_ocp(sc, 0xa438, 0x2007); + rge_write_phy_ocp(sc, 0xa436, 0x80ce); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x6c00); + rge_write_phy_ocp(sc, 0xa436, 0x80c9); + rge_write_phy_ocp(sc, 0xa438, 0x8009); + rge_write_phy_ocp(sc, 0xa436, 0x80d1); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0x8000); + rge_write_phy_ocp(sc, 0xa436, 0x80a3); + rge_write_phy_ocp(sc, 0xa438, 0x200a); + rge_write_phy_ocp(sc, 0xa436, 0x80a5); + rge_write_phy_ocp(sc, 0xa438, 0xf0ad); + rge_write_phy_ocp(sc, 0xa436, 0x809f); + rge_write_phy_ocp(sc, 0xa438, 0x6073); + rge_write_phy_ocp(sc, 0xa436, 0x80a1); + rge_write_phy_ocp(sc, 0xa438, 0x000b); + rge_write_phy_ocp(sc, 0xa436, 0x80a9); + val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; + rge_write_phy_ocp(sc, 0xa438, val | 0xc000); + rge_patch_phy_mcu(sc, 1); + RGE_PHY_CLRBIT(sc, 0xb896, 0x0001); + RGE_PHY_CLRBIT(sc, 0xb892, 0xff00); + rge_write_phy_ocp(sc, 0xb88e, 0xc23e); + rge_write_phy_ocp(sc, 0xb890, 0x0000); + rge_write_phy_ocp(sc, 0xb88e, 0xc240); + rge_write_phy_ocp(sc, 0xb890, 0x0103); + rge_write_phy_ocp(sc, 0xb88e, 0xc242); + rge_write_phy_ocp(sc, 0xb890, 0x0507); + rge_write_phy_ocp(sc, 0xb88e, 0xc244); + rge_write_phy_ocp(sc, 0xb890, 0x090b); + rge_write_phy_ocp(sc, 0xb88e, 0xc246); + rge_write_phy_ocp(sc, 0xb890, 0x0c0e); + rge_write_phy_ocp(sc, 0xb88e, 0xc248); + rge_write_phy_ocp(sc, 0xb890, 0x1012); + rge_write_phy_ocp(sc, 0xb88e, 0xc24a); + rge_write_phy_ocp(sc, 0xb890, 0x1416); + RGE_PHY_SETBIT(sc, 0xb896, 0x0001); + rge_patch_phy_mcu(sc, 0); + RGE_PHY_SETBIT(sc, 0xa86a, 0x0001); + RGE_PHY_SETBIT(sc, 0xa6f0, 0x0001); + rge_write_phy_ocp(sc, 0xbfa0, 0xd70d); + rge_write_phy_ocp(sc, 0xbfa2, 0x4100); + rge_write_phy_ocp(sc, 0xbfa4, 0xe868); + rge_write_phy_ocp(sc, 0xbfa6, 0xdc59); + rge_write_phy_ocp(sc, 0xb54c, 0x3c18); + RGE_PHY_CLRBIT(sc, 0xbfa4, 0x0020); + rge_write_phy_ocp(sc, 0xa436, 0x817d); + RGE_PHY_SETBIT(sc, 0xa438, 0x1000); +} + +void +rge_phy_config_mac_cfg5(struct rge_softc *sc) +{ + struct ifnet *ifp = &sc->sc_arpcom.ac_if; + uint16_t val; + int i; + + for (i = 0; i < nitems(rtl8125_mac_cfg5_ephy); i++) + rge_write_ephy(sc, rtl8125_mac_cfg5_ephy[i].reg, + rtl8125_mac_cfg5_ephy[i].val); + + val = rge_read_ephy(sc, 0x0022) & ~0x0030; + rge_write_ephy(sc, 0x0022, val | 0x0020); + val = rge_read_ephy(sc, 0x0062) & ~0x0030; + rge_write_ephy(sc, 0x0062, val | 0x0020); + + rge_write_phy_ocp(sc, 0xbf86, 0x9000); + RGE_PHY_SETBIT(sc, 0xc402, 0x0400); + RGE_PHY_CLRBIT(sc, 0xc402, 0x0400); + rge_write_phy_ocp(sc, 0xbd86, 0x1010); + rge_write_phy_ocp(sc, 0xbd88, 0x1010); + val = rge_read_phy_ocp(sc, 0xbd4e) & ~0x0c00; + rge_write_phy_ocp(sc, 0xbd4e, val | 0x0800); + val = rge_read_phy_ocp(sc, 0xbf46) & ~0x0f00; + rge_write_phy_ocp(sc, 0xbf46, val | 0x0700); + + rge_phy_config_mcu(sc, RGE_MAC_CFG5_MCODE_VER); + + RGE_PHY_SETBIT(sc, 0xa442, 0x0800); + val = rge_read_phy_ocp(sc, 0xac46) & ~0x00f0; + rge_write_phy_ocp(sc, 0xac46, val | 0x0090); + val = rge_read_phy_ocp(sc, 0xad30) & ~0x0003; + rge_write_phy_ocp(sc, 0xad30, val | 0x0001); + RGE_WRITE_2(sc, RGE_EEE_TXIDLE_TIMER, ifp->if_mtu + ETHER_HDR_LEN + 32); + rge_write_phy_ocp(sc, 0xb87c, 0x80f5); + rge_write_phy_ocp(sc, 0xb87e, 0x760e); + rge_write_phy_ocp(sc, 0xb87c, 0x8107); + rge_write_phy_ocp(sc, 0xb87e, 0x360e); + rge_write_phy_ocp(sc, 0xb87c, 0x8551); + val = rge_read_phy_ocp(sc, 0xb87e) & ~0xff00; + rge_write_phy_ocp(sc, 0xb87e, val | 0x0800); + val = rge_read_phy_ocp(sc, 0xbf00) & ~0xe000; + rge_write_phy_ocp(sc, 0xbf00, val | 0xa000); + val = rge_read_phy_ocp(sc, 0xbf46) & ~0x0f00; + rge_write_phy_ocp(sc, 0xbf46, val | 0x0300); + for (i = 0; i < 10; i++) { + rge_write_phy_ocp(sc, 0xa436, 0x8044 + i * 6); + rge_write_phy_ocp(sc, 0xa438, 0x2417); + } + RGE_PHY_SETBIT(sc, 0xa4ca, 0x0040); +} + +void +rge_phy_config_mcu(struct rge_softc *sc, uint16_t mcode_version) +{ + if (sc->rge_mcodever != mcode_version) { + int i; + + rge_patch_phy_mcu(sc, 1); + if (sc->rge_type == MAC_CFG2 || sc->rge_type == MAC_CFG3) { rge_write_phy_ocp(sc, 0xa436, 0x8024); - rge_write_phy_ocp(sc, 0xa438, 0x8600); + if (sc->rge_type == MAC_CFG2) + rge_write_phy_ocp(sc, 0xa438, 0x8600); + else + rge_write_phy_ocp(sc, 0xa438, 0x8601); rge_write_phy_ocp(sc, 0xa436, 0xb82e); rge_write_phy_ocp(sc, 0xa438, 0x0001); RGE_PHY_SETBIT(sc, 0xb820, 0x0080); + } + + if (sc->rge_type == MAC_CFG2) { for (i = 0; i < nitems(rtl8125_mac_cfg2_mcu); i++) { rge_write_phy_ocp(sc, rtl8125_mac_cfg2_mcu[i].reg, rtl8125_mac_cfg2_mcu[i].val); } - RGE_PHY_CLRBIT(sc, 0xb820, 0x0080); - - rge_write_phy_ocp(sc, 0xa436, 0); - rge_write_phy_ocp(sc, 0xa438, 0); - RGE_PHY_CLRBIT(sc, 0xb82e, 0x0001); - rge_write_phy_ocp(sc, 0xa436, 0x8024); - rge_write_phy_ocp(sc, 0xa438, 0); - - rge_patch_phy_mcu(sc, 0); - - /* Enable PHY config. */ - RGE_SETBIT_1(sc, 0xf2, 0x20); - - /* Write microcode version. */ - rge_write_phy_ocp(sc, 0xa436, 0x801e); - rge_write_phy_ocp(sc, 0xa438, RGE_MAC_CFG2_MCODE_VER); - } - - val = rge_read_phy_ocp(sc, 0xad40) & ~0x03ff; - rge_write_phy_ocp(sc, 0xad40, val | 0x0084); - RGE_PHY_SETBIT(sc, 0xad4e, 0x0010); - val = rge_read_phy_ocp(sc, 0xad16) & ~0x03ff; - rge_write_phy_ocp(sc, 0xad16, val | 0x0006); - val = rge_read_phy_ocp(sc, 0xad32) & ~0x03ff; - rge_write_phy_ocp(sc, 0xad32, val | 0x0006); - RGE_PHY_CLRBIT(sc, 0xac08, 0x1100); - val = rge_read_phy_ocp(sc, 0xac8a) & ~0xf000; - rge_write_phy_ocp(sc, 0xac8a, val | 0x7000); - RGE_PHY_SETBIT(sc, 0xad18, 0x0400); - RGE_PHY_SETBIT(sc, 0xad1a, 0x03ff); - RGE_PHY_SETBIT(sc, 0xad1c, 0x03ff); - - rge_write_phy_ocp(sc, 0xa436, 0x80ea); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0xc400); - rge_write_phy_ocp(sc, 0xa436, 0x80eb); - val = rge_read_phy_ocp(sc, 0xa438) & ~0x0700; - rge_write_phy_ocp(sc, 0xa438, val | 0x0300); - rge_write_phy_ocp(sc, 0xa436, 0x80f8); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0x1c00); - rge_write_phy_ocp(sc, 0xa436, 0x80f1); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0x3000); - rge_write_phy_ocp(sc, 0xa436, 0x80fe); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0xa500); - rge_write_phy_ocp(sc, 0xa436, 0x8102); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0x5000); - rge_write_phy_ocp(sc, 0xa436, 0x8105); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0x3300); - rge_write_phy_ocp(sc, 0xa436, 0x8100); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0x7000); - rge_write_phy_ocp(sc, 0xa436, 0x8104); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0xf000); - rge_write_phy_ocp(sc, 0xa436, 0x8106); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0x6500); - rge_write_phy_ocp(sc, 0xa436, 0x80dc); - val = rge_read_phy_ocp(sc, 0xa438) & ~0xff00; - rge_write_phy_ocp(sc, 0xa438, val | 0xed00); - rge_write_phy_ocp(sc, 0xa436, 0x80df); - RGE_PHY_SETBIT(sc, 0xa438, 0x0100); - rge_write_phy_ocp(sc, 0xa436, 0x80e1); - RGE_PHY_CLRBIT(sc, 0xa438, 0x0100); - val = rge_read_phy_ocp(sc, 0xbf06) & ~0x003f; - rge_write_phy_ocp(sc, 0xbf06, val | 0x0038); - rge_write_phy_ocp(sc, 0xa436, 0x819f); - rge_write_phy_ocp(sc, 0xa438, 0xd0b6); - rge_write_phy_ocp(sc, 0xbc34, 0x5555); - val = rge_read_phy_ocp(sc, 0xbf0a) & ~0x0e00; - rge_write_phy_ocp(sc, 0xbf0a, val | 0x0a00); - RGE_PHY_CLRBIT(sc, 0xa5c0, 0x0400); - RGE_PHY_SETBIT(sc, 0xa442, 0x0800); - } else { - for (i = 0; i < nitems(rtl8125_mac_cfg3_ephy); i++) - rge_write_ephy(sc, rtl8125_mac_cfg3_ephy[i].reg, - rtl8125_mac_cfg3_ephy[i].val); - - if (mcode_ver != RGE_MAC_CFG3_MCODE_VER) { - /* Disable PHY config. */ - RGE_CLRBIT_1(sc, 0xf2, 0x20); - DELAY(1000); - - rge_patch_phy_mcu(sc, 1); - - rge_write_phy_ocp(sc, 0xa436, 0x8024); - rge_write_phy_ocp(sc, 0xa438, 0x8601); - rge_write_phy_ocp(sc, 0xa436, 0xb82e); - rge_write_phy_ocp(sc, 0xa438, 0x0001); - - RGE_PHY_SETBIT(sc, 0xb820, 0x0080); + } else if (sc->rge_type == MAC_CFG3) { for (i = 0; i < nitems(rtl8125_mac_cfg3_mcu); i++) { rge_write_phy_ocp(sc, rtl8125_mac_cfg3_mcu[i].reg, rtl8125_mac_cfg3_mcu[i].val); } + } else if (sc->rge_type == MAC_CFG4) { + for (i = 0; i < nitems(rtl8125_mac_cfg4_mcu); i++) { + rge_write_phy_ocp(sc, + rtl8125_mac_cfg4_mcu[i].reg, + rtl8125_mac_cfg4_mcu[i].val); + } + } else if (sc->rge_type == MAC_CFG5) { + for (i = 0; i < nitems(rtl8125_mac_cfg5_mcu); i++) { + rge_write_phy_ocp(sc, + rtl8125_mac_cfg5_mcu[i].reg, + rtl8125_mac_cfg5_mcu[i].val); + } + } + + if (sc->rge_type == MAC_CFG2 || sc->rge_type == MAC_CFG3) { RGE_PHY_CLRBIT(sc, 0xb820, 0x0080); rge_write_phy_ocp(sc, 0xa436, 0); @@ -1544,91 +1961,14 @@ rge_phy_config(struct rge_softc *sc) RGE_PHY_CLRBIT(sc, 0xb82e, 0x0001); rge_write_phy_ocp(sc, 0xa436, 0x8024); rge_write_phy_ocp(sc, 0xa438, 0); - - rge_patch_phy_mcu(sc, 0); - - /* Enable PHY config. */ - RGE_SETBIT_1(sc, 0xf2, 0x20); - - /* Write microcode version. */ - rge_write_phy_ocp(sc, 0xa436, 0x801e); - rge_write_phy_ocp(sc, 0xa438, RGE_MAC_CFG3_MCODE_VER); } - RGE_PHY_SETBIT(sc, 0xad4e, 0x0010); - val = rge_read_phy_ocp(sc, 0xad16) & ~0x03ff; - rge_write_phy_ocp(sc, 0xad16, val | 0x03ff); - val = rge_read_phy_ocp(sc, 0xad32) & ~0x003f; - rge_write_phy_ocp(sc, 0xad32, val | 0x0006); - RGE_PHY_CLRBIT(sc, 0xac08, 0x1000); - RGE_PHY_CLRBIT(sc, 0xac08, 0x0100); - val = rge_read_phy_ocp(sc, 0xacc0) & ~0x0003; - rge_write_phy_ocp(sc, 0xacc0, val | 0x0002); - val = rge_read_phy_ocp(sc, 0xad40) & ~0x00e0; - rge_write_phy_ocp(sc, 0xad40, val | 0x0040); - val = rge_read_phy_ocp(sc, 0xad40) & ~0x0007; - rge_write_phy_ocp(sc, 0xad40, val | 0x0004); - RGE_PHY_CLRBIT(sc, 0xac14, 0x0080); - RGE_PHY_CLRBIT(sc, 0xac80, 0x0300); - val = rge_read_phy_ocp(sc, 0xac5e) & ~0x0007; - rge_write_phy_ocp(sc, 0xac5e, val | 0x0002); - rge_write_phy_ocp(sc, 0xad4c, 0x00a8); - rge_write_phy_ocp(sc, 0xac5c, 0x01ff); - val = rge_read_phy_ocp(sc, 0xac8a) & ~0x00f0; - rge_write_phy_ocp(sc, 0xac8a, val | 0x0030); - rge_write_phy_ocp(sc, 0xb87c, 0x80a2); - rge_write_phy_ocp(sc, 0xb87e, 0x0153); - rge_write_phy_ocp(sc, 0xb87c, 0x809c); - rge_write_phy_ocp(sc, 0xb87e, 0x0153); - - rge_write_phy_ocp(sc, 0xa436, 0x81b3); - for (i = 0; i < nitems(mac_cfg3_a438_value); i++) - rge_write_phy_ocp(sc, 0xa438, mac_cfg3_a438_value[i]); - for (i = 0; i < 26; i++) - rge_write_phy_ocp(sc, 0xa438, 0); - rge_write_phy_ocp(sc, 0xa436, 0x8257); - rge_write_phy_ocp(sc, 0xa438, 0x020f); - rge_write_phy_ocp(sc, 0xa436, 0x80ea); - rge_write_phy_ocp(sc, 0xa438, 0x7843); - - rge_patch_phy_mcu(sc, 1); - RGE_PHY_CLRBIT(sc, 0xb896, 0x0001); - RGE_PHY_CLRBIT(sc, 0xb892, 0xff00); - for (i = 0; i < nitems(mac_cfg3_b88e_value); i += 2) { - rge_write_phy_ocp(sc, 0xb88e, mac_cfg3_b88e_value[i]); - rge_write_phy_ocp(sc, 0xb890, - mac_cfg3_b88e_value[i + 1]); - } - RGE_PHY_SETBIT(sc, 0xb896, 0x0001); rge_patch_phy_mcu(sc, 0); - RGE_PHY_SETBIT(sc, 0xd068, 0x2000); - rge_write_phy_ocp(sc, 0xa436, 0x81a2); - RGE_PHY_SETBIT(sc, 0xa438, 0x0100); - val = rge_read_phy_ocp(sc, 0xb54c) & ~0xff00; - rge_write_phy_ocp(sc, 0xb54c, val | 0xdb00); - RGE_PHY_CLRBIT(sc, 0xa454, 0x0001); - RGE_PHY_SETBIT(sc, 0xa5d4, 0x0020); - RGE_PHY_CLRBIT(sc, 0xad4e, 0x0010); - RGE_PHY_CLRBIT(sc, 0xa86a, 0x0001); - RGE_PHY_SETBIT(sc, 0xa442, 0x0800); + /* Write microcode version. */ + rge_write_phy_ocp(sc, 0xa436, 0x801e); + rge_write_phy_ocp(sc, 0xa438, mcode_version); } - - /* Disable EEE. */ - RGE_MAC_CLRBIT(sc, 0xe040, 0x0003); - RGE_MAC_CLRBIT(sc, 0xeb62, 0x0006); - RGE_PHY_CLRBIT(sc, 0xa432, 0x0010); - RGE_PHY_CLRBIT(sc, 0xa5d0, 0x0006); - RGE_PHY_CLRBIT(sc, 0xa6d4, 0x0001); - RGE_PHY_CLRBIT(sc, 0xa6d8, 0x0010); - RGE_PHY_CLRBIT(sc, 0xa428, 0x0080); - RGE_PHY_CLRBIT(sc, 0xa4a2, 0x0200); - - rge_patch_phy_mcu(sc, 1); - RGE_MAC_CLRBIT(sc, 0xe052, 0x0001); - RGE_PHY_CLRBIT(sc, 0xa442, 0x3000); - RGE_PHY_CLRBIT(sc, 0xa430, 0x8000); - rge_patch_phy_mcu(sc, 0); } void @@ -1673,9 +2013,15 @@ rge_hw_init(struct rge_softc *sc) rge_write_mac_ocp(sc, 0xfc26, 0); if (sc->rge_type == MAC_CFG3) { - for (i = 0; i < nitems(rtl8125_def_bps); i++) - rge_write_mac_ocp(sc, rtl8125_def_bps[i].reg, - rtl8125_def_bps[i].val); + for (i = 0; i < nitems(rtl8125_mac_bps); i++) { + rge_write_mac_ocp(sc, rtl8125_mac_bps[i].reg, + rtl8125_mac_bps[i].val); + } + } else if (sc->rge_type == MAC_CFG5) { + for (i = 0; i < nitems(rtl8125b_mac_bps); i++) { + rge_write_mac_ocp(sc, rtl8125b_mac_bps[i].reg, + rtl8125b_mac_bps[i].val); + } } /* Disable PHY power saving. */ @@ -1700,7 +2046,6 @@ rge_disable_phy_ocp_pwrsave(struct rge_softc *sc) void rge_patch_phy_mcu(struct rge_softc *sc, int set) { - uint16_t val; int i; if (set) @@ -1709,14 +2054,14 @@ rge_patch_phy_mcu(struct rge_softc *sc, int set) RGE_PHY_CLRBIT(sc, 0xb820, 0x0010); for (i = 0; i < 1000; i++) { - val = rge_read_phy_ocp(sc, 0xb800) & 0x0040; - DELAY(100); - if (val == 0x0040) + if ((rge_read_phy_ocp(sc, 0xb800) & 0x0040) == 0x0040) break; + DELAY(100); + } + if (i == 1000) { + DPRINTF(("timeout waiting to patch phy mcu\n")); + return; } - if (i == 1000) - printf("%s: timeout waiting to patch phy mcu\n", - sc->sc_dev.dv_xname); } void @@ -1753,16 +2098,22 @@ rge_config_imtype(struct rge_softc *sc, int imtype) } void +rge_disable_hw_im(struct rge_softc *sc) +{ + RGE_WRITE_2(sc, RGE_IM, 0); +} + +void rge_disable_sim_im(struct rge_softc *sc) { - RGE_WRITE_4(sc, RGE_TIMERINT, 0); + RGE_WRITE_4(sc, RGE_TIMERINT0, 0); sc->rge_timerintr = 0; } void rge_setup_sim_im(struct rge_softc *sc) { - RGE_WRITE_4(sc, RGE_TIMERINT, 0x2600); + RGE_WRITE_4(sc, RGE_TIMERINT0, 0x2600); RGE_WRITE_4(sc, RGE_TIMERCNT, 1); sc->rge_timerintr = 1; } @@ -1778,8 +2129,10 @@ rge_setup_intr(struct rge_softc *sc, int imtype) switch (imtype) { case RGE_IMTYPE_NONE: rge_disable_sim_im(sc); + rge_disable_hw_im(sc); break; case RGE_IMTYPE_SIM: + rge_disable_hw_im(sc); rge_setup_sim_im(sc); break; default: @@ -1813,7 +2166,7 @@ rge_exit_oob(struct rge_softc *sc) } rge_write_mac_ocp(sc, 0xc0aa, 0x07d0); - rge_write_mac_ocp(sc, 0xc0a6, 0x0150); + rge_write_mac_ocp(sc, 0xc0a6, 0x01b5); rge_write_mac_ocp(sc, 0xc01e, 0x5555); for (i = 0; i < 10; i++) { @@ -1823,12 +2176,16 @@ rge_exit_oob(struct rge_softc *sc) } if (rge_read_mac_ocp(sc, 0xd42c) & 0x0100) { + printf("%s: rge_exit_oob(): rtl8125_is_ups_resume!!\n", + sc->sc_dev.dv_xname); for (i = 0; i < RGE_TIMEOUT; i++) { if ((rge_read_phy_ocp(sc, 0xa420) & 0x0007) == 2) break; DELAY(1000); } RGE_MAC_CLRBIT(sc, 0xd408, 0x0100); + if (sc->rge_type == MAC_CFG4 || sc->rge_type == MAC_CFG5) + RGE_PHY_CLRBIT(sc, 0xa466, 0x0001); RGE_PHY_CLRBIT(sc, 0xa468, 0x000a); } } @@ -1839,7 +2196,7 @@ rge_write_csi(struct rge_softc *sc, uint32_t reg, uint32_t val) int i; RGE_WRITE_4(sc, RGE_CSIDR, val); - RGE_WRITE_4(sc, RGE_CSIAR, (1 << 16) | (reg & RGE_CSIAR_ADDR_MASK) | + RGE_WRITE_4(sc, RGE_CSIAR, (reg & RGE_CSIAR_ADDR_MASK) | (RGE_CSIAR_BYTE_EN << RGE_CSIAR_BYTE_EN_SHIFT) | RGE_CSIAR_BUSY); for (i = 0; i < 10; i++) { @@ -1856,7 +2213,7 @@ rge_read_csi(struct rge_softc *sc, uint32_t reg) { int i; - RGE_WRITE_4(sc, RGE_CSIAR, (1 << 16) | (reg & RGE_CSIAR_ADDR_MASK) | + RGE_WRITE_4(sc, RGE_CSIAR, (reg & RGE_CSIAR_ADDR_MASK) | (RGE_CSIAR_BYTE_EN << RGE_CSIAR_BYTE_EN_SHIFT)); for (i = 0; i < 10; i++) { @@ -1911,6 +2268,27 @@ rge_write_ephy(struct rge_softc *sc, uint16_t reg, uint16_t val) DELAY(20); } +uint16_t +rge_read_ephy(struct rge_softc *sc, uint16_t reg) +{ + uint32_t val; + int i; + + val = (reg & RGE_EPHYAR_ADDR_MASK) << RGE_EPHYAR_ADDR_SHIFT; + RGE_WRITE_4(sc, RGE_EPHYAR, val); + + for (i = 0; i < 10; i++) { + DELAY(100); + val = RGE_READ_4(sc, RGE_EPHYAR); + if (val & RGE_EPHYAR_BUSY) + break; + } + + DELAY(20); + + return (val & RGE_EPHYAR_DATA_MASK); +} + void rge_write_phy(struct rge_softc *sc, uint16_t addr, uint16_t reg, uint16_t val) { @@ -1934,6 +2312,7 @@ rge_write_phy_ocp(struct rge_softc *sc, uint16_t reg, uint16_t val) tmp = (reg >> 1) << RGE_PHYOCP_ADDR_SHIFT; tmp |= RGE_PHYOCP_BUSY | val; + //printf("%s: data32 = %x\n", sc->sc_dev.dv_xname, tmp); RGE_WRITE_4(sc, RGE_PHYOCP, tmp); for (i = 0; i < RGE_TIMEOUT; i++) { diff --git a/sys/dev/pci/if_rgereg.h b/sys/dev/pci/if_rgereg.h index 17287d1fb20..a3ec30f5de0 100644 --- a/sys/dev/pci/if_rgereg.h +++ b/sys/dev/pci/if_rgereg.h @@ -1,7 +1,7 @@ -/* $OpenBSD: if_rgereg.h,v 1.1 2019/11/18 03:03:37 kevlo Exp $ */ +/* $OpenBSD: if_rgereg.h,v 1.2 2020/07/22 00:48:02 kevlo Exp $ */ /* - * Copyright (c) 2019 Kevin Lo <kevlo@openbsd.org> + * Copyright (c) 2019, 2020 Kevin Lo <kevlo@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -40,26 +40,32 @@ #define RGE_CFG4 0x0055 #define RGE_CFG5 0x0056 #define RGE_TDFNR 0x0057 -#define RGE_TIMERINT 0x0058 +#define RGE_TIMERINT0 0x0058 +#define RGE_TIMERINT1 0x005c #define RGE_CSIDR 0x0064 #define RGE_CSIAR 0x0068 #define RGE_PHYSTAT 0x006c #define RGE_PMCH 0x006f #define RGE_EPHYAR 0x0080 +#define RGE_TIMERINT2 0x008c #define RGE_TXSTART 0x0090 #define RGE_MACOCP 0x00b0 #define RGE_PHYOCP 0x00b8 +#define RGE_DLLPR 0x00d0 #define RGE_TWICMD 0x00d2 #define RGE_MCUCMD 0x00d3 #define RGE_RXMAXSIZE 0x00da #define RGE_CPLUSCMD 0x00e0 +#define RGE_IM 0x00e2 #define RGE_RXDESC_ADDR_LO 0x00e4 #define RGE_RXDESC_ADDR_HI 0x00e8 #define RGE_PPSW 0x00f2 -#define RGE_IM(i) (0x0a00 + (i) * 4) +#define RGE_TIMERINT3 0x00f4 +#define RGE_INTMITI(i) (0x0a00 + (i) * 4) #define RGE_PHYBASE 0x0a40 #define RGE_ADDR0 0x19e0 #define RGE_ADDR1 0x19e4 +#define RGE_EEE_TXIDLE_TIMER 0x6048 /* Flags for register RGE_CMD */ #define RGE_CMD_RXBUF_EMPTY 0x01 @@ -82,8 +88,8 @@ #define RGE_INTRS \ (RGE_ISR_RX_OK | RGE_ISR_RX_ERR | RGE_ISR_TX_OK | \ - RGE_ISR_TX_ERR | RGE_ISR_RX_DESC_UNAVAIL | \ - RGE_ISR_RX_FIFO_OFLOW | RGE_ISR_SYSTEM_ERR) + RGE_ISR_TX_ERR | RGE_ISR_RX_DESC_UNAVAIL | RGE_ISR_LINKCHG | \ + RGE_ISR_TX_DESC_UNAVAIL | RGE_ISR_PCS_TIMEOUT | RGE_ISR_SYSTEM_ERR) #define RGE_INTRS_TIMER \ (RGE_ISR_RX_ERR | RGE_ISR_TX_ERR | RGE_ISR_PCS_TIMEOUT | \ @@ -151,6 +157,10 @@ #define RGE_PHYOCP_BUSY 0x80000000 #define RGE_PHYOCP_ADDR_SHIFT 16 +/* Flags for register RGE_DLLPR. */ +#define RGE_DLLPR_PFM_EN 0x40 +#define RGE_DLLPR_TX_10M_PS_EN 0x80 + /* Flags for register RGE_MCUCMD */ #define RGE_MCUCMD_RXFIFO_EMPTY 0x10 #define RGE_MCUCMD_TXFIFO_EMPTY 0x20 @@ -239,11 +249,13 @@ struct rge_list_data { int rge_txq_considx; struct rge_rxq rge_rxq[RGE_RX_LIST_CNT]; int rge_rxq_prodidx; + int rge_rxq_considx; bus_dma_segment_t rge_tx_listseg; int rge_tx_listnseg; bus_dmamap_t rge_tx_list_map; struct rge_tx_desc *rge_tx_list; + struct if_rxring rge_rx_ring; bus_dma_segment_t rge_rx_listseg; int rge_rx_listnseg; bus_dmamap_t rge_rx_list_map; @@ -253,11 +265,15 @@ struct rge_list_data { /* Microcode version */ #define RGE_MAC_CFG2_MCODE_VER 0x0b11 #define RGE_MAC_CFG3_MCODE_VER 0x0b33 +#define RGE_MAC_CFG4_MCODE_VER 0x0b17 +#define RGE_MAC_CFG5_MCODE_VER 0x0b36 enum rge_mac_type { MAC_CFG_UNKNOWN = 1, MAC_CFG2, - MAC_CFG3 + MAC_CFG3, + MAC_CFG4, + MAC_CFG5 }; #define RGE_TIMEOUT 100 @@ -293,14 +309,15 @@ struct rge_softc { struct timeout sc_timeout; /* tick timeout */ + uint16_t rge_mcodever; uint32_t rge_flags; #define RGE_FLAG_MSI 0x00000001 uint32_t rge_intrs; uint32_t rge_tx_ack; uint32_t rge_rx_ack; + int rge_rxbufsz; int rge_timerintr; - #define RGE_IMTYPE_NONE 0 #define RGE_IMTYPE_SIM 1 }; @@ -308,8 +325,6 @@ struct rge_softc { /* * Register space access macros. */ -#define RGE_WRITE_RAW_4(sc, reg, val) \ - bus_space_write_raw_region_4(sc->rge_btag, sc->rge_bhandle, reg, val, 4) #define RGE_WRITE_4(sc, reg, val) \ bus_space_write_4(sc->rge_btag, sc->rge_bhandle, reg, val) #define RGE_WRITE_2(sc, reg, val) \ @@ -338,6 +353,12 @@ struct rge_softc { #define RGE_CLRBIT_1(sc, reg, val) \ RGE_WRITE_1(sc, reg, RGE_READ_1(sc, reg) & ~(val)) +#define RGE_EPHY_SETBIT(sc, reg, val) \ + rge_write_ephy(sc, reg, rge_read_ephy(sc, reg) | (val)) + +#define RGE_EPHY_CLRBIT(sc, reg, val) \ + rge_write_ephy(sc, reg, rge_read_ephy(sc, reg) & ~(val)) + #define RGE_PHY_SETBIT(sc, reg, val) \ rge_write_phy_ocp(sc, reg, rge_read_phy_ocp(sc, reg) | (val)) @@ -350,155 +371,153 @@ struct rge_softc { #define RGE_MAC_CLRBIT(sc, reg, val) \ rge_write_mac_ocp(sc, reg, rge_read_mac_ocp(sc, reg) & ~(val)) -#define RTL8125_DEF_BPS \ - { 0xf800, 0xe008 }, \ - { 0xf802, 0xe01e }, \ - { 0xf804, 0xe02e }, \ - { 0xf806, 0xe054 }, \ - { 0xf808, 0xe057 }, \ - { 0xf80a, 0xe059 }, \ - { 0xf80c, 0xe05b }, \ - { 0xf80e, 0xe05d }, \ - { 0xf810, 0x9996 }, \ - { 0xf812, 0x49d1 }, \ - { 0xf814, 0xf005 }, \ - { 0xf816, 0x49d4 }, \ - { 0xf818, 0xf10a }, \ - { 0xf81a, 0x49d8 }, \ - { 0xf81c, 0xf108 }, \ - { 0xf81e, 0xc00f }, \ - { 0xf820, 0x7100 }, \ - { 0xf822, 0x209c }, \ - { 0xf824, 0x249c }, \ - { 0xf826, 0xc009 }, \ - { 0xf828, 0x9900 }, \ - { 0xf82a, 0xe004 }, \ - { 0xf82c, 0xc006 }, \ - { 0xf82e, 0x1900 }, \ - { 0xf830, 0x9900 }, \ - { 0xf832, 0xc602 }, \ - { 0xf834, 0xbe00 }, \ - { 0xf836, 0x5a48 }, \ - { 0xf838, 0xe0c2 }, \ - { 0xf83a, 0x0004 }, \ - { 0xf83c, 0xe10a }, \ - { 0xf83e, 0xc60f }, \ - { 0xf840, 0x73c4 }, \ - { 0xf842, 0x49b3 }, \ - { 0xf844, 0xf106 }, \ - { 0xf846, 0x73c2 }, \ - { 0xf848, 0xc608 }, \ - { 0xf84a, 0xb406 }, \ - { 0xf84c, 0xc609 }, \ - { 0xf84e, 0xff80 }, \ - { 0xf850, 0xc605 }, \ - { 0xf852, 0xb406 }, \ - { 0xf854, 0xc605 }, \ - { 0xf856, 0xff80 }, \ - { 0xf858, 0x0544 }, \ - { 0xf85a, 0x0568 }, \ - { 0xf85c, 0xe906 }, \ - { 0xf85e, 0xcde8 }, \ - { 0xf860, 0xc724 }, \ - { 0xf862, 0xc624 }, \ - { 0xf864, 0x9ee2 }, \ - { 0xf866, 0x1e01 }, \ - { 0xf868, 0x9ee0 }, \ - { 0xf86a, 0x76e0 }, \ - { 0xf86c, 0x49e0 }, \ - { 0xf86e, 0xf1fe }, \ - { 0xf870, 0x76e6 }, \ - { 0xf872, 0x486d }, \ - { 0xf874, 0x4868 }, \ - { 0xf876, 0x9ee4 }, \ - { 0xf878, 0x1e03 }, \ - { 0xf87a, 0x9ee0 }, \ - { 0xf87c, 0x76e0 }, \ - { 0xf87e, 0x49e0 }, \ - { 0xf880, 0xf1fe }, \ - { 0xf882, 0xc615 }, \ - { 0xf884, 0x9ee2 }, \ - { 0xf886, 0x1e01 }, \ - { 0xf888, 0x9ee0 }, \ - { 0xf88a, 0x76e0 }, \ - { 0xf88c, 0x49e0 }, \ - { 0xf88e, 0xf1fe }, \ - { 0xf890, 0x76e6 }, \ - { 0xf892, 0x486f }, \ - { 0xf894, 0x9ee4 }, \ - { 0xf896, 0x1e03 }, \ - { 0xf898, 0x9ee0 }, \ - { 0xf89a, 0x76e0 }, \ - { 0xf89c, 0x49e0 }, \ - { 0xf89e, 0xf1fe }, \ - { 0xf8a0, 0x7196 }, \ - { 0xf8a2, 0xc702 }, \ - { 0xf8a4, 0xbf00 }, \ - { 0xf8a6, 0x5a44 }, \ - { 0xf8a8, 0xeb0e }, \ - { 0xf8aa, 0x0070 }, \ - { 0xf8ac, 0x00c3 }, \ - { 0xf8ae, 0x1bc0 }, \ - { 0xf8b0, 0xc602 }, \ - { 0xf8b2, 0xbe00 }, \ - { 0xf8b4, 0x0e26 }, \ - { 0xf8b6, 0xc602 }, \ - { 0xf8b8, 0xbe00 }, \ - { 0xf8ba, 0x0eba }, \ - { 0xf8bc, 0xc602 }, \ - { 0xf8be, 0xbe00 }, \ - { 0xf8c0, 0x0000 }, \ - { 0xf8c2, 0xc602 }, \ - { 0xf8c4, 0xbe00 }, \ - { 0xf8c6, 0x0000 }, \ - { 0xf8c8, 0xc602 }, \ - { 0xf8ca, 0xbe00 }, \ - { 0xf8cc, 0x0000 }, \ - { 0xfc26, 0x8000 }, \ - { 0xfc2a, 0x0540 }, \ - { 0xfc2e, 0x0e24 }, \ - { 0xfc30, 0x0eb8 }, \ - { 0xfc48, 0x001a } - -#define RTL8125_MAC_CFG2_EPHY \ - { 0x0001, 0xa812 }, \ - { 0x0009, 0x520c }, \ - { 0x0004, 0xd000 }, \ - { 0x000d, 0xf702 }, \ - { 0x000a, 0x8653 }, \ - { 0x0006, 0x001e }, \ - { 0x0008, 0x3595 }, \ - { 0x0020, 0x9455 }, \ - { 0x0021, 0x99ff }, \ - { 0x0002, 0x6046 }, \ - { 0x0029, 0xfe00 }, \ - { 0x0023, 0xab62 }, \ - { 0x0041, 0xa80c }, \ - { 0x0049, 0x520c }, \ - { 0x0044, 0xd000 }, \ - { 0x004d, 0xf702 }, \ - { 0x004a, 0x8653 }, \ - { 0x0046, 0x001e }, \ - { 0x0048, 0x3595 }, \ - { 0x0060, 0x9455 }, \ - { 0x0061, 0x99ff }, \ - { 0x0042, 0x6046 }, \ - { 0x0069, 0xfe00 }, \ - { 0x0063, 0xab62 } +static const struct { + uint16_t reg; + uint16_t val; +} rtl8125_mac_bps[] = { + { 0xf800, 0xe008 }, { 0xf802, 0xe01e }, { 0xf804, 0xe02e }, + { 0xf806, 0xe054 }, { 0xf808, 0xe057 }, { 0xf80a, 0xe059 }, + { 0xf80c, 0xe0c2 }, { 0xf80e, 0xe0cb }, { 0xf810, 0x9996 }, + { 0xf812, 0x49d1 }, { 0xf814, 0xf005 }, { 0xf816, 0x49d4 }, + { 0xf818, 0xf10a }, { 0xf81a, 0x49d8 }, { 0xf81c, 0xf108 }, + { 0xf81e, 0xc00f }, { 0xf820, 0x7100 }, { 0xf822, 0x209c }, + { 0xf824, 0x249c }, { 0xf826, 0xc009 }, { 0xf828, 0x9900 }, + { 0xf82a, 0xe004 }, { 0xf82c, 0xc006 }, { 0xf82e, 0x1900 }, + { 0xf830, 0x9900 }, { 0xf832, 0xc602 }, { 0xf834, 0xbe00 }, + { 0xf836, 0x5a48 }, { 0xf838, 0xe0c2 }, { 0xf83a, 0x0004 }, + { 0xf83c, 0xe10a }, { 0xf83e, 0xc60f }, { 0xf840, 0x73c4 }, + { 0xf842, 0x49b3 }, { 0xf844, 0xf106 }, { 0xf846, 0x73c2 }, + { 0xf848, 0xc608 }, { 0xf84a, 0xb406 }, { 0xf84c, 0xc609 }, + { 0xf84e, 0xff80 }, { 0xf850, 0xc605 }, { 0xf852, 0xb406 }, + { 0xf854, 0xc605 }, { 0xf856, 0xff80 }, { 0xf858, 0x0544 }, + { 0xf85a, 0x0568 }, { 0xf85c, 0xe906 }, { 0xf85e, 0xcde8 }, + { 0xf860, 0xc724 }, { 0xf862, 0xc624 }, { 0xf864, 0x9ee2 }, + { 0xf866, 0x1e01 }, { 0xf868, 0x9ee0 }, { 0xf86a, 0x76e0 }, + { 0xf86c, 0x49e0 }, { 0xf86e, 0xf1fe }, { 0xf870, 0x76e6 }, + { 0xf872, 0x486d }, { 0xf874, 0x4868 }, { 0xf876, 0x9ee4 }, + { 0xf878, 0x1e03 }, { 0xf87a, 0x9ee0 }, { 0xf87c, 0x76e0 }, + { 0xf87e, 0x49e0 }, { 0xf880, 0xf1fe }, { 0xf882, 0xc615 }, + { 0xf884, 0x9ee2 }, { 0xf886, 0x1e01 }, { 0xf888, 0x9ee0 }, + { 0xf88a, 0x76e0 }, { 0xf88c, 0x49e0 }, { 0xf88e, 0xf1fe }, + { 0xf890, 0x76e6 }, { 0xf892, 0x486f }, { 0xf894, 0x9ee4 }, + { 0xf896, 0x1e03 }, { 0xf898, 0x9ee0 }, { 0xf89a, 0x76e0 }, + { 0xf89c, 0x49e0 }, { 0xf89e, 0xf1fe }, { 0xf8a0, 0x7196 }, + { 0xf8a2, 0xc702 }, { 0xf8a4, 0xbf00 }, { 0xf8a6, 0x5a44 }, + { 0xf8a8, 0xeb0e }, { 0xf8aa, 0x0070 }, { 0xf8ac, 0x00c3 }, + { 0xf8ae, 0x1bc0 }, { 0xf8b0, 0xc602 }, { 0xf8b2, 0xbe00 }, + { 0xf8b4, 0x0e26 }, { 0xf8b6, 0xc602 }, { 0xf8b8, 0xbe00 }, + { 0xf8ba, 0x0eba }, { 0xf8bc, 0x1501 }, { 0xf8be, 0xf02a }, + { 0xf8c0, 0x1500 }, { 0xf8c2, 0xf15d }, { 0xf8c4, 0xc661 }, + { 0xf8c6, 0x75c8 }, { 0xf8c8, 0x49d5 }, { 0xf8ca, 0xf00a }, + { 0xf8cc, 0x49d6 }, { 0xf8ce, 0xf008 }, { 0xf8d0, 0x49d7 }, + { 0xf8d2, 0xf006 }, { 0xf8d4, 0x49d8 }, { 0xf8d6, 0xf004 }, + { 0xf8d8, 0x75d2 }, { 0xf8da, 0x49d9 }, { 0xf8dc, 0xf150 }, + { 0xf8de, 0xc553 }, { 0xf8e0, 0x77a0 }, { 0xf8e2, 0x75c8 }, + { 0xf8e4, 0x4855 }, { 0xf8e6, 0x4856 }, { 0xf8e8, 0x4857 }, + { 0xf8ea, 0x4858 }, { 0xf8ec, 0x48da }, { 0xf8ee, 0x48db }, + { 0xf8f0, 0x49fe }, { 0xf8f2, 0xf002 }, { 0xf8f4, 0x485a }, + { 0xf8f6, 0x49ff }, { 0xf8f8, 0xf002 }, { 0xf8fa, 0x485b }, + { 0xf8fc, 0x9dc8 }, { 0xf8fe, 0x75d2 }, { 0xf900, 0x4859 }, + { 0xf902, 0x9dd2 }, { 0xf904, 0xc643 }, { 0xf906, 0x75c0 }, + { 0xf908, 0x49d4 }, { 0xf90a, 0xf033 }, { 0xf90c, 0x49d0 }, + { 0xf90e, 0xf137 }, { 0xf910, 0xe030 }, { 0xf912, 0xc63a }, + { 0xf914, 0x75c8 }, { 0xf916, 0x49d5 }, { 0xf918, 0xf00e }, + { 0xf91a, 0x49d6 }, { 0xf91c, 0xf00c }, { 0xf91e, 0x49d7 }, + { 0xf920, 0xf00a }, { 0xf922, 0x49d8 }, { 0xf924, 0xf008 }, + { 0xf926, 0x75d2 }, { 0xf928, 0x49d9 }, { 0xf92a, 0xf005 }, + { 0xf92c, 0xc62e }, { 0xf92e, 0x75c0 }, { 0xf930, 0x49d7 }, + { 0xf932, 0xf125 }, { 0xf934, 0xc528 }, { 0xf936, 0x77a0 }, + { 0xf938, 0xc627 }, { 0xf93a, 0x75c8 }, { 0xf93c, 0x4855 }, + { 0xf93e, 0x4856 }, { 0xf940, 0x4857 }, { 0xf942, 0x4858 }, + { 0xf944, 0x48da }, { 0xf946, 0x48db }, { 0xf948, 0x49fe }, + { 0xf94a, 0xf002 }, { 0xf94c, 0x485a }, { 0xf94e, 0x49ff }, + { 0xf950, 0xf002 }, { 0xf952, 0x485b }, { 0xf954, 0x9dc8 }, + { 0xf956, 0x75d2 }, { 0xf958, 0x4859 }, { 0xf95a, 0x9dd2 }, + { 0xf95c, 0xc616 }, { 0xf95e, 0x75c0 }, { 0xf960, 0x4857 }, + { 0xf962, 0x9dc0 }, { 0xf964, 0xc613 }, { 0xf966, 0x75c0 }, + { 0xf968, 0x49da }, { 0xf96a, 0xf003 }, { 0xf96c, 0x49d0 }, + { 0xf96e, 0xf107 }, { 0xf970, 0xc60b }, { 0xf972, 0xc50e }, + { 0xf974, 0x48d9 }, { 0xf976, 0x9dc0 }, { 0xf978, 0x4859 }, + { 0xf97a, 0x9dc0 }, { 0xf97c, 0xc608 }, { 0xf97e, 0xc702 }, + { 0xf980, 0xbf00 }, { 0xf982, 0x3ae0 }, { 0xf984, 0xe860 }, + { 0xf986, 0xb400 }, { 0xf988, 0xb5d4 }, { 0xf98a, 0xe908 }, + { 0xf98c, 0xe86c }, { 0xf98e, 0x1200 }, { 0xf990, 0xc409 }, + { 0xf992, 0x6780 }, { 0xf994, 0x48f1 }, { 0xf996, 0x8f80 }, + { 0xf998, 0xc404 }, { 0xf99a, 0xc602 }, { 0xf99c, 0xbe00 }, + { 0xf99e, 0x10aa }, { 0xf9a0, 0xc010 }, { 0xf9a2, 0xea7c }, + { 0xf9a4, 0xc602 }, { 0xf9a6, 0xbe00 }, { 0xf9a8, 0x0000 }, + { 0xfc26, 0x8000 }, { 0xfc2a, 0x0540 }, { 0xfc2e, 0x0e24 }, + { 0xfc30, 0x0eb8 }, { 0xfc32, 0x3a5c }, { 0xfc34, 0x10a8 }, + { 0xfc48, 0x007a } +}, rtl8125b_mac_bps[] = { + { 0xf800, 0xe008 }, { 0xf802, 0xe013 }, { 0xf804, 0xe01e }, + { 0xf806, 0xe02f }, { 0xf808, 0xe035 }, { 0xf80a, 0xe04f }, + { 0xf80c, 0xe053 }, { 0xf80e, 0xe055 }, { 0xf810, 0x740a }, + { 0xf812, 0x4846 }, { 0xf814, 0x4847 }, { 0xf816, 0x9c0a }, + { 0xf818, 0xc607 }, { 0xf81a, 0x74c0 }, { 0xf81c, 0x48c6 }, + { 0xf81e, 0x9cc0 }, { 0xf820, 0xc602 }, { 0xf822, 0xbe00 }, + { 0xf824, 0x13f0 }, { 0xf826, 0xe054 }, { 0xf828, 0x72ca }, + { 0xf82a, 0x4826 }, { 0xf82c, 0x4827 }, { 0xf82e, 0x9aca }, + { 0xf830, 0xc607 }, { 0xf832, 0x72c0 }, { 0xf834, 0x48a6 }, + { 0xf836, 0x9ac0 }, { 0xf838, 0xc602 }, { 0xf83a, 0xbe00 }, + { 0xf83c, 0x081c }, { 0xf83e, 0xe054 }, { 0xf840, 0xc60f }, + { 0xf842, 0x74c4 }, { 0xf844, 0x49cc }, { 0xf846, 0xf109 }, + { 0xf848, 0xc60c }, { 0xf84a, 0x74ca }, { 0xf84c, 0x48c7 }, + { 0xf84e, 0x9cca }, { 0xf850, 0xc609 }, { 0xf852, 0x74c0 }, + { 0xf854, 0x4846 }, { 0xf856, 0x9cc0 }, { 0xf858, 0xc602 }, + { 0xf85a, 0xbe00 }, { 0xf85c, 0x2494 }, { 0xf85e, 0xe092 }, + { 0xf860, 0xe0c0 }, { 0xf862, 0xe054 }, { 0xf864, 0x7420 }, + { 0xf866, 0x48c0 }, { 0xf868, 0x9c20 }, { 0xf86a, 0x7444 }, + { 0xf86c, 0xc602 }, { 0xf86e, 0xbe00 }, { 0xf870, 0x12dc }, + { 0xf872, 0x733a }, { 0xf874, 0x21b5 }, { 0xf876, 0x25bc }, + { 0xf878, 0x1304 }, { 0xf87a, 0xf111 }, { 0xf87c, 0x1b12 }, + { 0xf87e, 0x1d2a }, { 0xf880, 0x3168 }, { 0xf882, 0x3ada }, + { 0xf884, 0x31ab }, { 0xf886, 0x1a00 }, { 0xf888, 0x9ac0 }, + { 0xf88a, 0x1300 }, { 0xf88c, 0xf1fb }, { 0xf88e, 0x7620 }, + { 0xf890, 0x236e }, { 0xf892, 0x276f }, { 0xf894, 0x1a3c }, + { 0xf896, 0x22a1 }, { 0xf898, 0x41b5 }, { 0xf89a, 0x9ee2 }, + { 0xf89c, 0x76e4 }, { 0xf89e, 0x486f }, { 0xf8a0, 0x9ee4 }, + { 0xf8a2, 0xc602 }, { 0xf8a4, 0xbe00 }, { 0xf8a6, 0x4a26 }, + { 0xf8a8, 0x733a }, { 0xf8aa, 0x49bb }, { 0xf8ac, 0xc602 }, + { 0xf8ae, 0xbe00 }, { 0xf8b0, 0x47a2 }, { 0xf8b2, 0xc602 }, + { 0xf8b4, 0xbe00 }, { 0xf8b6, 0x0000 }, { 0xf8b8, 0xc602 }, + { 0xf8ba, 0xbe00 }, { 0xf8bc, 0x0000 }, { 0xfc26, 0x8000 }, + { 0xfc28, 0x13e6 }, { 0xfc2a, 0x0812 }, { 0xfc2c, 0x248c }, + { 0xfc2e, 0x12da }, { 0xfc30, 0x4a20 }, { 0xfc32, 0x47a0 }, + { 0xfc48, 0x003f } +}; -#define RTL8125_MAC_CFG3_EPHY \ - { 0x0004, 0xd000 }, \ - { 0x000a, 0x8653 }, \ - { 0x0023, 0xab66 }, \ - { 0x0020, 0x9455 }, \ - { 0x0021, 0x99ff }, \ - { 0x0029, 0xfe04 }, \ - { 0x0044, 0xd000 }, \ - { 0x004a, 0x8653 }, \ - { 0x0063, 0xab66 }, \ - { 0x0060, 0x9455 }, \ - { 0x0061, 0x99ff }, \ - { 0x0069, 0xfe04 } +static const struct { + uint16_t reg; + uint16_t val; +} rtl8125_mac_cfg2_ephy[] = { + { 0x0001, 0xa812 }, { 0x0009, 0x520c }, { 0x0004, 0xd000 }, + { 0x000d, 0xf702 }, { 0x000a, 0x8653 }, { 0x0006, 0x001e }, + { 0x0008, 0x3595 }, { 0x0020, 0x9455 }, { 0x0021, 0x99ff }, + { 0x0002, 0x6046 }, { 0x0029, 0xfe00 }, { 0x0023, 0xab62 }, + { 0x0041, 0xa80c }, { 0x0049, 0x520c }, { 0x0044, 0xd000 }, + { 0x004d, 0xf702 }, { 0x004a, 0x8653 }, { 0x0046, 0x001e }, + { 0x0048, 0x3595 }, { 0x0060, 0x9455 }, { 0x0061, 0x99ff }, + { 0x0042, 0x6046 }, { 0x0069, 0xfe00 }, { 0x0063, 0xab62 } +}, rtl8125_mac_cfg3_ephy[] = { + { 0x0004, 0xd000 }, { 0x000a, 0x8653 }, { 0x0023, 0xab66 }, + { 0x0020, 0x9455 }, { 0x0021, 0x99ff }, { 0x0029, 0xfe04 }, + { 0x0044, 0xd000 }, { 0x004a, 0x8653 }, { 0x0063, 0xab66 }, + { 0x0060, 0x9455 }, { 0x0061, 0x99ff }, { 0x0069, 0xfe04 } +}, rtl8125_mac_cfg4_ephy[] = { + { 0x0006, 0x001f }, { 0x000a, 0xb66b }, { 0x0001, 0xa852 }, + { 0x0024, 0x0008 }, { 0x002f, 0x6052 }, { 0x000d, 0xf716 }, + { 0x0020, 0xd477 }, { 0x0021, 0x4477 }, { 0x0022, 0x0013 }, + { 0x0023, 0xbb66 }, { 0x000b, 0xa909 }, { 0x0029, 0xff04 }, + { 0x001b, 0x1ea0 }, { 0x0046, 0x001f }, { 0x004a, 0xb66b }, + { 0x0041, 0xa84a }, { 0x0064, 0x000c }, { 0x006f, 0x604a }, + { 0x004d, 0xf716 }, { 0x0060, 0xd477 }, { 0x0061, 0x4477 }, + { 0x0062, 0x0013 }, { 0x0063, 0xbb66 }, { 0x004b, 0xa909 }, + { 0x0069, 0xff04 }, { 0x005b, 0x1ea0 } +}, rtl8125_mac_cfg5_ephy[] = { + { 0x000b, 0xa908 }, { 0x001e, 0x20eb }, { 0x004b, 0xa908 }, + { 0x005e, 0x20eb } +}; #define RTL8125_MAC_CFG2_MCU \ { 0xa436, 0xa016 }, \ @@ -1861,3 +1880,3076 @@ struct rge_softc { { 0xa438, 0xffff }, \ { 0xa436, 0xb878 }, \ { 0xa438, 0x0001 } + +#define RTL8125_MAC_CFG4_MCU \ + { 0xa436, 0x8024 }, \ + { 0xa438, 0x3700 }, \ + { 0xa436, 0xb82e }, \ + { 0xa438, 0x0001 }, \ + { 0xb820, 0x0090 }, \ + { 0xa436, 0xa016 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xa012 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xa014 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8010 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8025 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x803a }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8044 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8083 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x808d }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x808d }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x808d }, \ + { 0xa438, 0xd712 }, \ + { 0xa438, 0x4077 }, \ + { 0xa438, 0xd71e }, \ + { 0xa438, 0x4159 }, \ + { 0xa438, 0xd71e }, \ + { 0xa438, 0x6099 }, \ + { 0xa438, 0x7f44 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1a14 }, \ + { 0xa438, 0x9040 }, \ + { 0xa438, 0x9201 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1b1a }, \ + { 0xa438, 0xd71e }, \ + { 0xa438, 0x2425 }, \ + { 0xa438, 0x1a14 }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x3ce5 }, \ + { 0xa438, 0x1afb }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1b00 }, \ + { 0xa438, 0xd712 }, \ + { 0xa438, 0x4077 }, \ + { 0xa438, 0xd71e }, \ + { 0xa438, 0x4159 }, \ + { 0xa438, 0xd71e }, \ + { 0xa438, 0x60b9 }, \ + { 0xa438, 0x2421 }, \ + { 0xa438, 0x1c17 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1a14 }, \ + { 0xa438, 0x9040 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1c2c }, \ + { 0xa438, 0xd71e }, \ + { 0xa438, 0x2425 }, \ + { 0xa438, 0x1a14 }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x3ce5 }, \ + { 0xa438, 0x1c0f }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1c13 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0xd501 }, \ + { 0xa438, 0x6072 }, \ + { 0xa438, 0x8401 }, \ + { 0xa438, 0xf002 }, \ + { 0xa438, 0xa401 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x146e }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0b77 }, \ + { 0xa438, 0xd703 }, \ + { 0xa438, 0x665d }, \ + { 0xa438, 0x653e }, \ + { 0xa438, 0x641f }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x62c4 }, \ + { 0xa438, 0x6185 }, \ + { 0xa438, 0x6066 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x165a }, \ + { 0xa438, 0xc101 }, \ + { 0xa438, 0xcb00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x1945 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x7fa6 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x807d }, \ + { 0xa438, 0xc102 }, \ + { 0xa438, 0xcb00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x1945 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x2569 }, \ + { 0xa438, 0x8058 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x807d }, \ + { 0xa438, 0xc104 }, \ + { 0xa438, 0xcb00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x1945 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x7fa4 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x807d }, \ + { 0xa438, 0xc120 }, \ + { 0xa438, 0xcb00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x1945 }, \ + { 0xa438, 0xd703 }, \ + { 0xa438, 0x7fbf }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x807d }, \ + { 0xa438, 0xc140 }, \ + { 0xa438, 0xcb00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x1945 }, \ + { 0xa438, 0xd703 }, \ + { 0xa438, 0x7fbe }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x807d }, \ + { 0xa438, 0xc180 }, \ + { 0xa438, 0xcb00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x1945 }, \ + { 0xa438, 0xd703 }, \ + { 0xa438, 0x7fbd }, \ + { 0xa438, 0xc100 }, \ + { 0xa438, 0xcb00 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x6018 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x165a }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x14f6 }, \ + { 0xa438, 0xd014 }, \ + { 0xa438, 0xd1e3 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x1356 }, \ + { 0xa438, 0xd705 }, \ + { 0xa438, 0x5fbe }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1559 }, \ + { 0xa436, 0xa026 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa024 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa022 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa020 }, \ + { 0xa438, 0x1557 }, \ + { 0xa436, 0xa006 }, \ + { 0xa438, 0x1677 }, \ + { 0xa436, 0xa004 }, \ + { 0xa438, 0x0b75 }, \ + { 0xa436, 0xa002 }, \ + { 0xa438, 0x1c17 }, \ + { 0xa436, 0xa000 }, \ + { 0xa438, 0x1b04 }, \ + { 0xa436, 0xa008 }, \ + { 0xa438, 0x1f00 }, \ + { 0xa436, 0xa016 }, \ + { 0xa438, 0x0020 }, \ + { 0xa436, 0xa012 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xa014 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8010 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x817f }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x82ab }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x83f8 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8444 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8454 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8459 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8465 }, \ + { 0xa438, 0xcb11 }, \ + { 0xa438, 0xa50c }, \ + { 0xa438, 0x8310 }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x4076 }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x0903 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d00 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a4d }, \ + { 0xa438, 0xcb12 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5f84 }, \ + { 0xa438, 0xd102 }, \ + { 0xa438, 0xd040 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x60f3 }, \ + { 0xa438, 0xd413 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xd410 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xcb13 }, \ + { 0xa438, 0xa108 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8108 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xa910 }, \ + { 0xa438, 0xa780 }, \ + { 0xa438, 0xd14a }, \ + { 0xa438, 0xd048 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x6255 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5f74 }, \ + { 0xa438, 0x6326 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x5f07 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0xa004 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8004 }, \ + { 0xa438, 0xa001 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8001 }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x0902 }, \ + { 0xa438, 0xffe2 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fab }, \ + { 0xa438, 0xba08 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8b }, \ + { 0xa438, 0x9a08 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x6535 }, \ + { 0xa438, 0xd40d }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xcb14 }, \ + { 0xa438, 0xa004 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8004 }, \ + { 0xa438, 0xa001 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8001 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xa780 }, \ + { 0xa438, 0xd14a }, \ + { 0xa438, 0xd048 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0x6206 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x5f47 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0xa004 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8004 }, \ + { 0xa438, 0xa001 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8001 }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x0902 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8064 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0xd40e }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x6073 }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x4216 }, \ + { 0xa438, 0xa004 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8004 }, \ + { 0xa438, 0xa001 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8001 }, \ + { 0xa438, 0xd120 }, \ + { 0xa438, 0xd040 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0x8504 }, \ + { 0xa438, 0xcb21 }, \ + { 0xa438, 0xa301 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5f9f }, \ + { 0xa438, 0x8301 }, \ + { 0xa438, 0xd704 }, \ + { 0xa438, 0x40e0 }, \ + { 0xa438, 0xd196 }, \ + { 0xa438, 0xd04d }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xcb22 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a6d }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x1502 }, \ + { 0xa438, 0xa640 }, \ + { 0xa438, 0x9503 }, \ + { 0xa438, 0x8910 }, \ + { 0xa438, 0x8720 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d01 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d01 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0f14 }, \ + { 0xa438, 0xcb23 }, \ + { 0xa438, 0x8fc0 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a25 }, \ + { 0xa438, 0xaf40 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a25 }, \ + { 0xa438, 0x0cc0 }, \ + { 0xa438, 0x0f80 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a25 }, \ + { 0xa438, 0xafc0 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a25 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x5dee }, \ + { 0xa438, 0xcb24 }, \ + { 0xa438, 0x8f1f }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x7f6e }, \ + { 0xa438, 0xa111 }, \ + { 0xa438, 0xa215 }, \ + { 0xa438, 0xa401 }, \ + { 0xa438, 0x8404 }, \ + { 0xa438, 0xa720 }, \ + { 0xa438, 0xcb25 }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x1502 }, \ + { 0xa438, 0x8640 }, \ + { 0xa438, 0x9503 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0b43 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0b86 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0xcb26 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5f82 }, \ + { 0xa438, 0x8111 }, \ + { 0xa438, 0x8205 }, \ + { 0xa438, 0x8404 }, \ + { 0xa438, 0xcb27 }, \ + { 0xa438, 0xd404 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0xa710 }, \ + { 0xa438, 0xa104 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8104 }, \ + { 0xa438, 0xa001 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8001 }, \ + { 0xa438, 0xa120 }, \ + { 0xa438, 0xaa0f }, \ + { 0xa438, 0x8110 }, \ + { 0xa438, 0xa284 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xd193 }, \ + { 0xa438, 0xd046 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xcb28 }, \ + { 0xa438, 0xa110 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa8 }, \ + { 0xa438, 0x8110 }, \ + { 0xa438, 0x8284 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0x8710 }, \ + { 0xa438, 0xb804 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f82 }, \ + { 0xa438, 0x9804 }, \ + { 0xa438, 0xcb29 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5f85 }, \ + { 0xa438, 0xa710 }, \ + { 0xa438, 0xb820 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f65 }, \ + { 0xa438, 0x9820 }, \ + { 0xa438, 0xcb2a }, \ + { 0xa438, 0xa190 }, \ + { 0xa438, 0xa284 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xd13d }, \ + { 0xa438, 0xd04a }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x3444 }, \ + { 0xa438, 0x8149 }, \ + { 0xa438, 0xa220 }, \ + { 0xa438, 0xd1a0 }, \ + { 0xa438, 0xd040 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x3444 }, \ + { 0xa438, 0x8151 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x5f51 }, \ + { 0xa438, 0xcb2f }, \ + { 0xa438, 0xa302 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x5f63 }, \ + { 0xa438, 0xd411 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0x8302 }, \ + { 0xa438, 0xd409 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fa3 }, \ + { 0xa438, 0x8190 }, \ + { 0xa438, 0x82a4 }, \ + { 0xa438, 0x8404 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0xb808 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7fa3 }, \ + { 0xa438, 0x9808 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0433 }, \ + { 0xa438, 0xcb15 }, \ + { 0xa438, 0xa508 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d01 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d01 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a4d }, \ + { 0xa438, 0xa301 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5f9f }, \ + { 0xa438, 0x8301 }, \ + { 0xa438, 0xd704 }, \ + { 0xa438, 0x40e0 }, \ + { 0xa438, 0xd115 }, \ + { 0xa438, 0xd04f }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xd413 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xcb16 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a6d }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x1502 }, \ + { 0xa438, 0xa640 }, \ + { 0xa438, 0x9503 }, \ + { 0xa438, 0x8720 }, \ + { 0xa438, 0xd17a }, \ + { 0xa438, 0xd04c }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0f14 }, \ + { 0xa438, 0xcb17 }, \ + { 0xa438, 0x8fc0 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a25 }, \ + { 0xa438, 0xaf40 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a25 }, \ + { 0xa438, 0x0cc0 }, \ + { 0xa438, 0x0f80 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a25 }, \ + { 0xa438, 0xafc0 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a25 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x61ce }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5db4 }, \ + { 0xa438, 0xcb18 }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x1502 }, \ + { 0xa438, 0x8640 }, \ + { 0xa438, 0x9503 }, \ + { 0xa438, 0xa720 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0b43 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xffd6 }, \ + { 0xa438, 0x8f1f }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x7f8e }, \ + { 0xa438, 0xa131 }, \ + { 0xa438, 0xaa0f }, \ + { 0xa438, 0xa2d5 }, \ + { 0xa438, 0xa407 }, \ + { 0xa438, 0xa720 }, \ + { 0xa438, 0x8310 }, \ + { 0xa438, 0xa308 }, \ + { 0xa438, 0x8308 }, \ + { 0xa438, 0xcb19 }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x1502 }, \ + { 0xa438, 0x8640 }, \ + { 0xa438, 0x9503 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0b43 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0b86 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0xcb1a }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5f82 }, \ + { 0xa438, 0x8111 }, \ + { 0xa438, 0x82c5 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0x8402 }, \ + { 0xa438, 0xb804 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f82 }, \ + { 0xa438, 0x9804 }, \ + { 0xa438, 0xcb1b }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5f85 }, \ + { 0xa438, 0xa710 }, \ + { 0xa438, 0xb820 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f65 }, \ + { 0xa438, 0x9820 }, \ + { 0xa438, 0xcb1c }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0xa110 }, \ + { 0xa438, 0xa284 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0x8402 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa8 }, \ + { 0xa438, 0xcb1d }, \ + { 0xa438, 0xa180 }, \ + { 0xa438, 0xa402 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa8 }, \ + { 0xa438, 0xa220 }, \ + { 0xa438, 0xd1f5 }, \ + { 0xa438, 0xd049 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x3444 }, \ + { 0xa438, 0x8221 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x5f51 }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fa3 }, \ + { 0xa438, 0xa504 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d00 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0x8190 }, \ + { 0xa438, 0x82a4 }, \ + { 0xa438, 0x8402 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xb808 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7fa3 }, \ + { 0xa438, 0x9808 }, \ + { 0xa438, 0xcb2b }, \ + { 0xa438, 0xcb2c }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5f84 }, \ + { 0xa438, 0xd14a }, \ + { 0xa438, 0xd048 }, \ + { 0xa438, 0xa780 }, \ + { 0xa438, 0xcb2d }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5f94 }, \ + { 0xa438, 0x6208 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x5f27 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0xa004 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8004 }, \ + { 0xa438, 0xa001 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8001 }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x0902 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xffe9 }, \ + { 0xa438, 0xcb2e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0xa190 }, \ + { 0xa438, 0xa284 }, \ + { 0xa438, 0xa406 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa8 }, \ + { 0xa438, 0xa220 }, \ + { 0xa438, 0xd1a0 }, \ + { 0xa438, 0xd040 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x3444 }, \ + { 0xa438, 0x827d }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x5f51 }, \ + { 0xa438, 0xcb2f }, \ + { 0xa438, 0xa302 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x5f63 }, \ + { 0xa438, 0xd411 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0x8302 }, \ + { 0xa438, 0xd409 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fa3 }, \ + { 0xa438, 0x8190 }, \ + { 0xa438, 0x82a4 }, \ + { 0xa438, 0x8406 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0xb808 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7fa3 }, \ + { 0xa438, 0x9808 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0433 }, \ + { 0xa438, 0xcb30 }, \ + { 0xa438, 0x8380 }, \ + { 0xa438, 0xcb31 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5f86 }, \ + { 0xa438, 0x9308 }, \ + { 0xa438, 0xb204 }, \ + { 0xa438, 0xb301 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x5fa2 }, \ + { 0xa438, 0xb302 }, \ + { 0xa438, 0x9204 }, \ + { 0xa438, 0xcb32 }, \ + { 0xa438, 0xd408 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xd141 }, \ + { 0xa438, 0xd043 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xd704 }, \ + { 0xa438, 0x4ccc }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x4c81 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x609e }, \ + { 0xa438, 0xd1e5 }, \ + { 0xa438, 0xd04d }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0xd1e5 }, \ + { 0xa438, 0xd04d }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d01 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d01 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0x8710 }, \ + { 0xa438, 0xa108 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8108 }, \ + { 0xa438, 0xa203 }, \ + { 0xa438, 0x8120 }, \ + { 0xa438, 0x8a0f }, \ + { 0xa438, 0xa111 }, \ + { 0xa438, 0x8204 }, \ + { 0xa438, 0xa140 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8140 }, \ + { 0xa438, 0xd17a }, \ + { 0xa438, 0xd04b }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xa204 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa7 }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0xd404 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0xa710 }, \ + { 0xa438, 0x8101 }, \ + { 0xa438, 0x8201 }, \ + { 0xa438, 0xa104 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8104 }, \ + { 0xa438, 0xa120 }, \ + { 0xa438, 0xaa0f }, \ + { 0xa438, 0x8110 }, \ + { 0xa438, 0xa284 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xd193 }, \ + { 0xa438, 0xd047 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xa110 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa8 }, \ + { 0xa438, 0xa180 }, \ + { 0xa438, 0xd13d }, \ + { 0xa438, 0xd04a }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xf024 }, \ + { 0xa438, 0xa710 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0x8190 }, \ + { 0xa438, 0x8204 }, \ + { 0xa438, 0xa280 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa7 }, \ + { 0xa438, 0x8710 }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0x8190 }, \ + { 0xa438, 0x8284 }, \ + { 0xa438, 0x8406 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x4121 }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x60f3 }, \ + { 0xa438, 0xd1e5 }, \ + { 0xa438, 0xd04d }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0x8710 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0x8190 }, \ + { 0xa438, 0x8204 }, \ + { 0xa438, 0xa280 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xb920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5fac }, \ + { 0xa438, 0x9920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f8c }, \ + { 0xa438, 0xcb33 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x5f85 }, \ + { 0xa438, 0xa710 }, \ + { 0xa438, 0xb820 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd71f }, \ + { 0xa438, 0x7f65 }, \ + { 0xa438, 0x9820 }, \ + { 0xa438, 0xcb34 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xa190 }, \ + { 0xa438, 0xa284 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa9 }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x6853 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d00 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d00 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0x8190 }, \ + { 0xa438, 0x8284 }, \ + { 0xa438, 0xcb35 }, \ + { 0xa438, 0xd407 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0x8110 }, \ + { 0xa438, 0x8204 }, \ + { 0xa438, 0xa280 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xd704 }, \ + { 0xa438, 0x4215 }, \ + { 0xa438, 0xa304 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb8 }, \ + { 0xa438, 0xd1c3 }, \ + { 0xa438, 0xd043 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0x8304 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x4109 }, \ + { 0xa438, 0xf01e }, \ + { 0xa438, 0xcb36 }, \ + { 0xa438, 0xd412 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6309 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x42c7 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0x8180 }, \ + { 0xa438, 0x8280 }, \ + { 0xa438, 0x8404 }, \ + { 0xa438, 0xa004 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8004 }, \ + { 0xa438, 0xa001 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a42 }, \ + { 0xa438, 0x8001 }, \ + { 0xa438, 0x0c03 }, \ + { 0xa438, 0x0902 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xd14a }, \ + { 0xa438, 0xd048 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6083 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a7d }, \ + { 0xa438, 0xcc55 }, \ + { 0xa438, 0xcb37 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xa190 }, \ + { 0xa438, 0xa2a4 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6041 }, \ + { 0xa438, 0xa402 }, \ + { 0xa438, 0xd13d }, \ + { 0xa438, 0xd04a }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fa9 }, \ + { 0xa438, 0xd702 }, \ + { 0xa438, 0x5f71 }, \ + { 0xa438, 0xcb38 }, \ + { 0xa438, 0x8224 }, \ + { 0xa438, 0xa288 }, \ + { 0xa438, 0x8180 }, \ + { 0xa438, 0xa110 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0x800a }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6041 }, \ + { 0xa438, 0x8402 }, \ + { 0xa438, 0xd415 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a37 }, \ + { 0xa438, 0xd13d }, \ + { 0xa438, 0xd04a }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0xcb39 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xa190 }, \ + { 0xa438, 0xa2a0 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6041 }, \ + { 0xa438, 0xa402 }, \ + { 0xa438, 0xd17a }, \ + { 0xa438, 0xd047 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5fb4 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0560 }, \ + { 0xa438, 0xa111 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0xd3f5 }, \ + { 0xa438, 0xd219 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c31 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x5fa5 }, \ + { 0xa438, 0xa215 }, \ + { 0xa438, 0xd30e }, \ + { 0xa438, 0xd21a }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c31 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x63e9 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x5f65 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x7f36 }, \ + { 0xa438, 0xa004 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c35 }, \ + { 0xa438, 0x8004 }, \ + { 0xa438, 0xa001 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c35 }, \ + { 0xa438, 0x8001 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x4098 }, \ + { 0xa438, 0xd102 }, \ + { 0xa438, 0x9401 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0xd103 }, \ + { 0xa438, 0xb401 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c27 }, \ + { 0xa438, 0xa108 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c35 }, \ + { 0xa438, 0x8108 }, \ + { 0xa438, 0x8110 }, \ + { 0xa438, 0x8294 }, \ + { 0xa438, 0xa202 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0bdb }, \ + { 0xa438, 0xd39c }, \ + { 0xa438, 0xd210 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c31 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x5fa5 }, \ + { 0xa438, 0xd39c }, \ + { 0xa438, 0xd210 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c31 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x5fa5 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c31 }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x29b5 }, \ + { 0xa438, 0x840e }, \ + { 0xa438, 0xd708 }, \ + { 0xa438, 0x5f4a }, \ + { 0xa438, 0x0c1f }, \ + { 0xa438, 0x1014 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0c31 }, \ + { 0xa438, 0xd709 }, \ + { 0xa438, 0x7fa4 }, \ + { 0xa438, 0x901f }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0c23 }, \ + { 0xa438, 0xcb43 }, \ + { 0xa438, 0xa508 }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x3699 }, \ + { 0xa438, 0x844a }, \ + { 0xa438, 0xa504 }, \ + { 0xa438, 0xa190 }, \ + { 0xa438, 0xa2a0 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x2109 }, \ + { 0xa438, 0x05ea }, \ + { 0xa438, 0xa402 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x05ea }, \ + { 0xa438, 0xcb90 }, \ + { 0xa438, 0x0cf0 }, \ + { 0xa438, 0x0ca0 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x06db }, \ + { 0xa438, 0xd1ff }, \ + { 0xa438, 0xd052 }, \ + { 0xa438, 0xa508 }, \ + { 0xa438, 0x8718 }, \ + { 0xa438, 0xa00a }, \ + { 0xa438, 0xa190 }, \ + { 0xa438, 0xa2a0 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0x0cf0 }, \ + { 0xa438, 0x0c50 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x09ef }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a5e }, \ + { 0xa438, 0xd704 }, \ + { 0xa438, 0x2e70 }, \ + { 0xa438, 0x06da }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5f55 }, \ + { 0xa438, 0xa90c }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0645 }, \ + { 0xa436, 0xa10e }, \ + { 0xa438, 0x0644 }, \ + { 0xa436, 0xa10c }, \ + { 0xa438, 0x09e9 }, \ + { 0xa436, 0xa10a }, \ + { 0xa438, 0x06da }, \ + { 0xa436, 0xa108 }, \ + { 0xa438, 0x05e1 }, \ + { 0xa436, 0xa106 }, \ + { 0xa438, 0x0be4 }, \ + { 0xa436, 0xa104 }, \ + { 0xa438, 0x0435 }, \ + { 0xa436, 0xa102 }, \ + { 0xa438, 0x0141 }, \ + { 0xa436, 0xa100 }, \ + { 0xa438, 0x026d }, \ + { 0xa436, 0xa110 }, \ + { 0xa438, 0x00ff }, \ + { 0xa436, 0xb87c }, \ + { 0xa438, 0x85fe }, \ + { 0xa436, 0xb87e }, \ + { 0xa438, 0xaf86 }, \ + { 0xa438, 0x16af }, \ + { 0xa438, 0x8699 }, \ + { 0xa438, 0xaf86 }, \ + { 0xa438, 0xe5af }, \ + { 0xa438, 0x86f9 }, \ + { 0xa438, 0xaf87 }, \ + { 0xa438, 0x7aaf }, \ + { 0xa438, 0x883a }, \ + { 0xa438, 0xaf88 }, \ + { 0xa438, 0x58af }, \ + { 0xa438, 0x8b6c }, \ + { 0xa438, 0xd48b }, \ + { 0xa438, 0x7c02 }, \ + { 0xa438, 0x8644 }, \ + { 0xa438, 0x2c00 }, \ + { 0xa438, 0x503c }, \ + { 0xa438, 0xffd6 }, \ + { 0xa438, 0xac27 }, \ + { 0xa438, 0x18e1 }, \ + { 0xa438, 0x82fe }, \ + { 0xa438, 0xad28 }, \ + { 0xa438, 0x0cd4 }, \ + { 0xa438, 0x8b84 }, \ + { 0xa438, 0x0286 }, \ + { 0xa438, 0x442c }, \ + { 0xa438, 0x003c }, \ + { 0xa438, 0xac27 }, \ + { 0xa438, 0x06ee }, \ + { 0xa438, 0x8299 }, \ + { 0xa438, 0x01ae }, \ + { 0xa438, 0x04ee }, \ + { 0xa438, 0x8299 }, \ + { 0xa438, 0x00af }, \ + { 0xa438, 0x23dc }, \ + { 0xa438, 0xf9fa }, \ + { 0xa438, 0xcefa }, \ + { 0xa438, 0xfbef }, \ + { 0xa438, 0x79fb }, \ + { 0xa438, 0xc4bf }, \ + { 0xa438, 0x8b76 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x6dac }, \ + { 0xa438, 0x2804 }, \ + { 0xa438, 0xd203 }, \ + { 0xa438, 0xae02 }, \ + { 0xa438, 0xd201 }, \ + { 0xa438, 0xbdd8 }, \ + { 0xa438, 0x19d9 }, \ + { 0xa438, 0xef94 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x6d78 }, \ + { 0xa438, 0x03ef }, \ + { 0xa438, 0x648a }, \ + { 0xa438, 0x0002 }, \ + { 0xa438, 0xbdd8 }, \ + { 0xa438, 0x19d9 }, \ + { 0xa438, 0xef94 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x6d78 }, \ + { 0xa438, 0x03ef }, \ + { 0xa438, 0x7402 }, \ + { 0xa438, 0x72cd }, \ + { 0xa438, 0xac50 }, \ + { 0xa438, 0x02ef }, \ + { 0xa438, 0x643a }, \ + { 0xa438, 0x019f }, \ + { 0xa438, 0xe4ef }, \ + { 0xa438, 0x4678 }, \ + { 0xa438, 0x03ac }, \ + { 0xa438, 0x2002 }, \ + { 0xa438, 0xae02 }, \ + { 0xa438, 0xd0ff }, \ + { 0xa438, 0xffef }, \ + { 0xa438, 0x97ff }, \ + { 0xa438, 0xfec6 }, \ + { 0xa438, 0xfefd }, \ + { 0xa438, 0x041f }, \ + { 0xa438, 0x771f }, \ + { 0xa438, 0x221c }, \ + { 0xa438, 0x450d }, \ + { 0xa438, 0x481f }, \ + { 0xa438, 0x00ac }, \ + { 0xa438, 0x7f04 }, \ + { 0xa438, 0x1a94 }, \ + { 0xa438, 0xae08 }, \ + { 0xa438, 0x1a94 }, \ + { 0xa438, 0xac7f }, \ + { 0xa438, 0x03d7 }, \ + { 0xa438, 0x0100 }, \ + { 0xa438, 0xef46 }, \ + { 0xa438, 0x0d48 }, \ + { 0xa438, 0x1f00 }, \ + { 0xa438, 0x1c45 }, \ + { 0xa438, 0xef69 }, \ + { 0xa438, 0xef57 }, \ + { 0xa438, 0xef74 }, \ + { 0xa438, 0x0272 }, \ + { 0xa438, 0xe8a7 }, \ + { 0xa438, 0xffff }, \ + { 0xa438, 0x0d1a }, \ + { 0xa438, 0x941b }, \ + { 0xa438, 0x979e }, \ + { 0xa438, 0x072d }, \ + { 0xa438, 0x0100 }, \ + { 0xa438, 0x1a64 }, \ + { 0xa438, 0xef76 }, \ + { 0xa438, 0xef97 }, \ + { 0xa438, 0x0d98 }, \ + { 0xa438, 0xd400 }, \ + { 0xa438, 0xff1d }, \ + { 0xa438, 0x941a }, \ + { 0xa438, 0x89cf }, \ + { 0xa438, 0x1a75 }, \ + { 0xa438, 0xaf74 }, \ + { 0xa438, 0xf9bf }, \ + { 0xa438, 0x8b79 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x6da1 }, \ + { 0xa438, 0x0005 }, \ + { 0xa438, 0xe180 }, \ + { 0xa438, 0xa0ae }, \ + { 0xa438, 0x03e1 }, \ + { 0xa438, 0x80a1 }, \ + { 0xa438, 0xaf26 }, \ + { 0xa438, 0x9aac }, \ + { 0xa438, 0x284d }, \ + { 0xa438, 0xe08f }, \ + { 0xa438, 0xffef }, \ + { 0xa438, 0x10c0 }, \ + { 0xa438, 0xe08f }, \ + { 0xa438, 0xfe10 }, \ + { 0xa438, 0x1b08 }, \ + { 0xa438, 0xa000 }, \ + { 0xa438, 0x04c8 }, \ + { 0xa438, 0xaf40 }, \ + { 0xa438, 0x67c8 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x8c02 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xc4bf }, \ + { 0xa438, 0x8b8f }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x6def }, \ + { 0xa438, 0x74e0 }, \ + { 0xa438, 0x830c }, \ + { 0xa438, 0xad20 }, \ + { 0xa438, 0x0302 }, \ + { 0xa438, 0x74ac }, \ + { 0xa438, 0xccef }, \ + { 0xa438, 0x971b }, \ + { 0xa438, 0x76ad }, \ + { 0xa438, 0x5f02 }, \ + { 0xa438, 0xae13 }, \ + { 0xa438, 0xef69 }, \ + { 0xa438, 0xef30 }, \ + { 0xa438, 0x1b32 }, \ + { 0xa438, 0xc4ef }, \ + { 0xa438, 0x46e4 }, \ + { 0xa438, 0x8ffb }, \ + { 0xa438, 0xe58f }, \ + { 0xa438, 0xfce7 }, \ + { 0xa438, 0x8ffd }, \ + { 0xa438, 0xcc10 }, \ + { 0xa438, 0x11ae }, \ + { 0xa438, 0xb8d1 }, \ + { 0xa438, 0x00a1 }, \ + { 0xa438, 0x1f03 }, \ + { 0xa438, 0xaf40 }, \ + { 0xa438, 0x4fbf }, \ + { 0xa438, 0x8b8c }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ec4 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x8f02 }, \ + { 0xa438, 0x6c6d }, \ + { 0xa438, 0xef74 }, \ + { 0xa438, 0xe083 }, \ + { 0xa438, 0x0cad }, \ + { 0xa438, 0x2003 }, \ + { 0xa438, 0x0274 }, \ + { 0xa438, 0xaccc }, \ + { 0xa438, 0xef97 }, \ + { 0xa438, 0x1b76 }, \ + { 0xa438, 0xad5f }, \ + { 0xa438, 0x02ae }, \ + { 0xa438, 0x04ef }, \ + { 0xa438, 0x69ef }, \ + { 0xa438, 0x3111 }, \ + { 0xa438, 0xaed1 }, \ + { 0xa438, 0x0287 }, \ + { 0xa438, 0x80af }, \ + { 0xa438, 0x2293 }, \ + { 0xa438, 0xf8f9 }, \ + { 0xa438, 0xfafb }, \ + { 0xa438, 0xef59 }, \ + { 0xa438, 0xe080 }, \ + { 0xa438, 0x13ad }, \ + { 0xa438, 0x252f }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x2802 }, \ + { 0xa438, 0x6c6d }, \ + { 0xa438, 0xef64 }, \ + { 0xa438, 0x1f44 }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xb91b }, \ + { 0xa438, 0x64ad }, \ + { 0xa438, 0x4f1d }, \ + { 0xa438, 0xd688 }, \ + { 0xa438, 0x2bd7 }, \ + { 0xa438, 0x882e }, \ + { 0xa438, 0x0274 }, \ + { 0xa438, 0x73ad }, \ + { 0xa438, 0x5008 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x3102 }, \ + { 0xa438, 0x737c }, \ + { 0xa438, 0xae03 }, \ + { 0xa438, 0x0287 }, \ + { 0xa438, 0xd0bf }, \ + { 0xa438, 0x882b }, \ + { 0xa438, 0x0273 }, \ + { 0xa438, 0x73e0 }, \ + { 0xa438, 0x824c }, \ + { 0xa438, 0xf621 }, \ + { 0xa438, 0xe482 }, \ + { 0xa438, 0x4cbf }, \ + { 0xa438, 0x8834 }, \ + { 0xa438, 0x0273 }, \ + { 0xa438, 0x7cef }, \ + { 0xa438, 0x95ff }, \ + { 0xa438, 0xfefd }, \ + { 0xa438, 0xfc04 }, \ + { 0xa438, 0xf8f9 }, \ + { 0xa438, 0xfafb }, \ + { 0xa438, 0xef79 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x1f02 }, \ + { 0xa438, 0x737c }, \ + { 0xa438, 0x1f22 }, \ + { 0xa438, 0xac32 }, \ + { 0xa438, 0x31ef }, \ + { 0xa438, 0x12bf }, \ + { 0xa438, 0x8822 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ed6 }, \ + { 0xa438, 0x8fba }, \ + { 0xa438, 0x1f33 }, \ + { 0xa438, 0xac3c }, \ + { 0xa438, 0x1eef }, \ + { 0xa438, 0x13bf }, \ + { 0xa438, 0x8837 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4eef }, \ + { 0xa438, 0x96d8 }, \ + { 0xa438, 0x19d9 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x2502 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x2502 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0x1616 }, \ + { 0xa438, 0x13ae }, \ + { 0xa438, 0xdf12 }, \ + { 0xa438, 0xaecc }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x1f02 }, \ + { 0xa438, 0x7373 }, \ + { 0xa438, 0xef97 }, \ + { 0xa438, 0xfffe }, \ + { 0xa438, 0xfdfc }, \ + { 0xa438, 0x0466 }, \ + { 0xa438, 0xac88 }, \ + { 0xa438, 0x54ac }, \ + { 0xa438, 0x88f0 }, \ + { 0xa438, 0xac8a }, \ + { 0xa438, 0x92ac }, \ + { 0xa438, 0xbadd }, \ + { 0xa438, 0xac6c }, \ + { 0xa438, 0xeeac }, \ + { 0xa438, 0x6cff }, \ + { 0xa438, 0xad02 }, \ + { 0xa438, 0x99ac }, \ + { 0xa438, 0x0030 }, \ + { 0xa438, 0xac88 }, \ + { 0xa438, 0xd4c3 }, \ + { 0xa438, 0x5000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x00b4 }, \ + { 0xa438, 0xecee }, \ + { 0xa438, 0x8298 }, \ + { 0xa438, 0x00af }, \ + { 0xa438, 0x1412 }, \ + { 0xa438, 0xf8bf }, \ + { 0xa438, 0x8b5d }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x6d58 }, \ + { 0xa438, 0x03e1 }, \ + { 0xa438, 0x8fb8 }, \ + { 0xa438, 0x2901 }, \ + { 0xa438, 0xe58f }, \ + { 0xa438, 0xb8a0 }, \ + { 0xa438, 0x0049 }, \ + { 0xa438, 0xef47 }, \ + { 0xa438, 0xe483 }, \ + { 0xa438, 0x02e5 }, \ + { 0xa438, 0x8303 }, \ + { 0xa438, 0xbfc2 }, \ + { 0xa438, 0x5f1a }, \ + { 0xa438, 0x95f7 }, \ + { 0xa438, 0x05ee }, \ + { 0xa438, 0xffd2 }, \ + { 0xa438, 0x00d8 }, \ + { 0xa438, 0xf605 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0xef60 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3002 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c6d }, \ + { 0xa438, 0xf728 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xf628 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0x0c64 }, \ + { 0xa438, 0xef46 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x6002 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0x0289 }, \ + { 0xa438, 0x9902 }, \ + { 0xa438, 0x3920 }, \ + { 0xa438, 0xaf89 }, \ + { 0xa438, 0x96a0 }, \ + { 0xa438, 0x0149 }, \ + { 0xa438, 0xef47 }, \ + { 0xa438, 0xe483 }, \ + { 0xa438, 0x04e5 }, \ + { 0xa438, 0x8305 }, \ + { 0xa438, 0xbfc2 }, \ + { 0xa438, 0x5f1a }, \ + { 0xa438, 0x95f7 }, \ + { 0xa438, 0x05ee }, \ + { 0xa438, 0xffd2 }, \ + { 0xa438, 0x00d8 }, \ + { 0xa438, 0xf605 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0xef60 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3002 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c6d }, \ + { 0xa438, 0xf729 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xf629 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0x0c64 }, \ + { 0xa438, 0xef46 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x6302 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0x0289 }, \ + { 0xa438, 0x9902 }, \ + { 0xa438, 0x3920 }, \ + { 0xa438, 0xaf89 }, \ + { 0xa438, 0x96a0 }, \ + { 0xa438, 0x0249 }, \ + { 0xa438, 0xef47 }, \ + { 0xa438, 0xe483 }, \ + { 0xa438, 0x06e5 }, \ + { 0xa438, 0x8307 }, \ + { 0xa438, 0xbfc2 }, \ + { 0xa438, 0x5f1a }, \ + { 0xa438, 0x95f7 }, \ + { 0xa438, 0x05ee }, \ + { 0xa438, 0xffd2 }, \ + { 0xa438, 0x00d8 }, \ + { 0xa438, 0xf605 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0xef60 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3002 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c6d }, \ + { 0xa438, 0xf72a }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xf62a }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x3302 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0x0c64 }, \ + { 0xa438, 0xef46 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x6602 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0x0289 }, \ + { 0xa438, 0x9902 }, \ + { 0xa438, 0x3920 }, \ + { 0xa438, 0xaf89 }, \ + { 0xa438, 0x96ef }, \ + { 0xa438, 0x47e4 }, \ + { 0xa438, 0x8308 }, \ + { 0xa438, 0xe583 }, \ + { 0xa438, 0x09bf }, \ + { 0xa438, 0xc25f }, \ + { 0xa438, 0x1a95 }, \ + { 0xa438, 0xf705 }, \ + { 0xa438, 0xeeff }, \ + { 0xa438, 0xd200 }, \ + { 0xa438, 0xd8f6 }, \ + { 0xa438, 0x051f }, \ + { 0xa438, 0x11ef }, \ + { 0xa438, 0x60bf }, \ + { 0xa438, 0x8b30 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ebf }, \ + { 0xa438, 0x8b33 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x6df7 }, \ + { 0xa438, 0x2bbf }, \ + { 0xa438, 0x8b33 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ef6 }, \ + { 0xa438, 0x2bbf }, \ + { 0xa438, 0x8b33 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4e0c }, \ + { 0xa438, 0x64ef }, \ + { 0xa438, 0x46bf }, \ + { 0xa438, 0x8b69 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4e02 }, \ + { 0xa438, 0x8999 }, \ + { 0xa438, 0x0239 }, \ + { 0xa438, 0x20af }, \ + { 0xa438, 0x8996 }, \ + { 0xa438, 0xaf39 }, \ + { 0xa438, 0x1ef8 }, \ + { 0xa438, 0xf9fa }, \ + { 0xa438, 0xe08f }, \ + { 0xa438, 0xb838 }, \ + { 0xa438, 0x02ad }, \ + { 0xa438, 0x2702 }, \ + { 0xa438, 0xae03 }, \ + { 0xa438, 0xaf8b }, \ + { 0xa438, 0x201f }, \ + { 0xa438, 0x66ef }, \ + { 0xa438, 0x65bf }, \ + { 0xa438, 0xc21f }, \ + { 0xa438, 0x1a96 }, \ + { 0xa438, 0xf705 }, \ + { 0xa438, 0xeeff }, \ + { 0xa438, 0xd200 }, \ + { 0xa438, 0xdaf6 }, \ + { 0xa438, 0x05bf }, \ + { 0xa438, 0xc22f }, \ + { 0xa438, 0x1a96 }, \ + { 0xa438, 0xf705 }, \ + { 0xa438, 0xeeff }, \ + { 0xa438, 0xd200 }, \ + { 0xa438, 0xdbf6 }, \ + { 0xa438, 0x05ef }, \ + { 0xa438, 0x021f }, \ + { 0xa438, 0x110d }, \ + { 0xa438, 0x42bf }, \ + { 0xa438, 0x8b3c }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4eef }, \ + { 0xa438, 0x021b }, \ + { 0xa438, 0x031f }, \ + { 0xa438, 0x110d }, \ + { 0xa438, 0x42bf }, \ + { 0xa438, 0x8b36 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4eef }, \ + { 0xa438, 0x021a }, \ + { 0xa438, 0x031f }, \ + { 0xa438, 0x110d }, \ + { 0xa438, 0x42bf }, \ + { 0xa438, 0x8b39 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ebf }, \ + { 0xa438, 0xc23f }, \ + { 0xa438, 0x1a96 }, \ + { 0xa438, 0xf705 }, \ + { 0xa438, 0xeeff }, \ + { 0xa438, 0xd200 }, \ + { 0xa438, 0xdaf6 }, \ + { 0xa438, 0x05bf }, \ + { 0xa438, 0xc24f }, \ + { 0xa438, 0x1a96 }, \ + { 0xa438, 0xf705 }, \ + { 0xa438, 0xeeff }, \ + { 0xa438, 0xd200 }, \ + { 0xa438, 0xdbf6 }, \ + { 0xa438, 0x05ef }, \ + { 0xa438, 0x021f }, \ + { 0xa438, 0x110d }, \ + { 0xa438, 0x42bf }, \ + { 0xa438, 0x8b45 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4eef }, \ + { 0xa438, 0x021b }, \ + { 0xa438, 0x031f }, \ + { 0xa438, 0x110d }, \ + { 0xa438, 0x42bf }, \ + { 0xa438, 0x8b3f }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4eef }, \ + { 0xa438, 0x021a }, \ + { 0xa438, 0x031f }, \ + { 0xa438, 0x110d }, \ + { 0xa438, 0x42bf }, \ + { 0xa438, 0x8b42 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4eef }, \ + { 0xa438, 0x56d0 }, \ + { 0xa438, 0x201f }, \ + { 0xa438, 0x11bf }, \ + { 0xa438, 0x8b4e }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ebf }, \ + { 0xa438, 0x8b48 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ebf }, \ + { 0xa438, 0x8b4b }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ee1 }, \ + { 0xa438, 0x8578 }, \ + { 0xa438, 0xef03 }, \ + { 0xa438, 0x480a }, \ + { 0xa438, 0x2805 }, \ + { 0xa438, 0xef20 }, \ + { 0xa438, 0x1b01 }, \ + { 0xa438, 0xad27 }, \ + { 0xa438, 0x3f1f }, \ + { 0xa438, 0x44e0 }, \ + { 0xa438, 0x8560 }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x61bf }, \ + { 0xa438, 0x8b51 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ee0 }, \ + { 0xa438, 0x8566 }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8b54 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ee0 }, \ + { 0xa438, 0x856c }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x6dbf }, \ + { 0xa438, 0x8b57 }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ee0 }, \ + { 0xa438, 0x8572 }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x73bf }, \ + { 0xa438, 0x8b5a }, \ + { 0xa438, 0x026c }, \ + { 0xa438, 0x4ee1 }, \ + { 0xa438, 0x8fb8 }, \ + { 0xa438, 0x5900 }, \ + { 0xa438, 0xf728 }, \ + { 0xa438, 0xe58f }, \ + { 0xa438, 0xb8af }, \ + { 0xa438, 0x8b2c }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x791b }, \ + { 0xa438, 0x21ad }, \ + { 0xa438, 0x373e }, \ + { 0xa438, 0x1f44 }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x62e1 }, \ + { 0xa438, 0x8563 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x5102 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x68e1 }, \ + { 0xa438, 0x8569 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x5402 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x6ee1 }, \ + { 0xa438, 0x856f }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x5702 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x74e1 }, \ + { 0xa438, 0x8575 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x5a02 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xb859 }, \ + { 0xa438, 0x00f7 }, \ + { 0xa438, 0x28e5 }, \ + { 0xa438, 0x8fb8 }, \ + { 0xa438, 0xae4a }, \ + { 0xa438, 0x1f44 }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x64e1 }, \ + { 0xa438, 0x8565 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x5102 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x6ae1 }, \ + { 0xa438, 0x856b }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x5402 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x70e1 }, \ + { 0xa438, 0x8571 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x5702 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x76e1 }, \ + { 0xa438, 0x8577 }, \ + { 0xa438, 0xbf8b }, \ + { 0xa438, 0x5a02 }, \ + { 0xa438, 0x6c4e }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xb859 }, \ + { 0xa438, 0x00f7 }, \ + { 0xa438, 0x28e5 }, \ + { 0xa438, 0x8fb8 }, \ + { 0xa438, 0xae0c }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xb839 }, \ + { 0xa438, 0x04ac }, \ + { 0xa438, 0x2f04 }, \ + { 0xa438, 0xee8f }, \ + { 0xa438, 0xb800 }, \ + { 0xa438, 0xfefd }, \ + { 0xa438, 0xfc04 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0x8efc }, \ + { 0xa438, 0xac8c }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xfaf0 }, \ + { 0xa438, 0xacf8 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xf6f0 }, \ + { 0xa438, 0xad00 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xfef0 }, \ + { 0xa438, 0xacfc }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xf4f0 }, \ + { 0xa438, 0xacf2 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xf0f0 }, \ + { 0xa438, 0xacb0 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xaef0 }, \ + { 0xa438, 0xacac }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xaaf0 }, \ + { 0xa438, 0xacee }, \ + { 0xa438, 0xf0b0 }, \ + { 0xa438, 0x24f0 }, \ + { 0xa438, 0xb0a4 }, \ + { 0xa438, 0xf0b1 }, \ + { 0xa438, 0x24f0 }, \ + { 0xa438, 0xb1a4 }, \ + { 0xa438, 0xee8f }, \ + { 0xa438, 0xb800 }, \ + { 0xa438, 0xd400 }, \ + { 0xa438, 0x00af }, \ + { 0xa438, 0x3976 }, \ + { 0xa438, 0x66ac }, \ + { 0xa438, 0xeabb }, \ + { 0xa438, 0xa430 }, \ + { 0xa438, 0x6e50 }, \ + { 0xa438, 0x6e53 }, \ + { 0xa438, 0x6e56 }, \ + { 0xa438, 0x6e59 }, \ + { 0xa438, 0x6e5c }, \ + { 0xa438, 0x6e5f }, \ + { 0xa438, 0x6e62 }, \ + { 0xa438, 0x6e65 }, \ + { 0xa438, 0xd9ac }, \ + { 0xa438, 0x70f0 }, \ + { 0xa438, 0xac6a }, \ + { 0xa436, 0xb85e }, \ + { 0xa438, 0x23b7 }, \ + { 0xa436, 0xb860 }, \ + { 0xa438, 0x74db }, \ + { 0xa436, 0xb862 }, \ + { 0xa438, 0x268c }, \ + { 0xa436, 0xb864 }, \ + { 0xa438, 0x3fe5 }, \ + { 0xa436, 0xb886 }, \ + { 0xa438, 0x2250 }, \ + { 0xa436, 0xb888 }, \ + { 0xa438, 0x140e }, \ + { 0xa436, 0xb88a }, \ + { 0xa438, 0x3696 }, \ + { 0xa436, 0xb88c }, \ + { 0xa438, 0x3973 }, \ + { 0xa436, 0xb838 }, \ + { 0xa438, 0x00ff }, \ + { 0xb820, 0x0010 }, \ + { 0xa436, 0x8464 }, \ + { 0xa438, 0xaf84 }, \ + { 0xa438, 0x7caf }, \ + { 0xa438, 0x8485 }, \ + { 0xa438, 0xaf85 }, \ + { 0xa438, 0x13af }, \ + { 0xa438, 0x851e }, \ + { 0xa438, 0xaf85 }, \ + { 0xa438, 0xb9af }, \ + { 0xa438, 0x8684 }, \ + { 0xa438, 0xaf87 }, \ + { 0xa438, 0x01af }, \ + { 0xa438, 0x8701 }, \ + { 0xa438, 0xac38 }, \ + { 0xa438, 0x03af }, \ + { 0xa438, 0x38bb }, \ + { 0xa438, 0xaf38 }, \ + { 0xa438, 0xc302 }, \ + { 0xa438, 0x4618 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0x0a02 }, \ + { 0xa438, 0x54b7 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0x1002 }, \ + { 0xa438, 0x54c0 }, \ + { 0xa438, 0xd400 }, \ + { 0xa438, 0x0fbf }, \ + { 0xa438, 0x8507 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48bf }, \ + { 0xa438, 0x8504 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x6759 }, \ + { 0xa438, 0xf0a1 }, \ + { 0xa438, 0x3008 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0x54c0 }, \ + { 0xa438, 0xae06 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0x0d02 }, \ + { 0xa438, 0x54b7 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0x0402 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xa183 }, \ + { 0xa438, 0x02ae }, \ + { 0xa438, 0x15a1 }, \ + { 0xa438, 0x8502 }, \ + { 0xa438, 0xae10 }, \ + { 0xa438, 0x59f0 }, \ + { 0xa438, 0xa180 }, \ + { 0xa438, 0x16bf }, \ + { 0xa438, 0x8501 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67a1 }, \ + { 0xa438, 0x381b }, \ + { 0xa438, 0xae0b }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xffbf }, \ + { 0xa438, 0x84fe }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48ae }, \ + { 0xa438, 0x17bf }, \ + { 0xa438, 0x84fe }, \ + { 0xa438, 0x0254 }, \ + { 0xa438, 0xb7bf }, \ + { 0xa438, 0x84fb }, \ + { 0xa438, 0x0254 }, \ + { 0xa438, 0xb7ae }, \ + { 0xa438, 0x09a1 }, \ + { 0xa438, 0x5006 }, \ + { 0xa438, 0xbf84 }, \ + { 0xa438, 0xfb02 }, \ + { 0xa438, 0x54c0 }, \ + { 0xa438, 0xaf04 }, \ + { 0xa438, 0x4700 }, \ + { 0xa438, 0xad34 }, \ + { 0xa438, 0xfdad }, \ + { 0xa438, 0x0670 }, \ + { 0xa438, 0xae14 }, \ + { 0xa438, 0xf0a6 }, \ + { 0xa438, 0x00b8 }, \ + { 0xa438, 0xbd32 }, \ + { 0xa438, 0x30bd }, \ + { 0xa438, 0x30aa }, \ + { 0xa438, 0xbd2c }, \ + { 0xa438, 0xccbd }, \ + { 0xa438, 0x2ca1 }, \ + { 0xa438, 0x0705 }, \ + { 0xa438, 0xec80 }, \ + { 0xa438, 0xaf40 }, \ + { 0xa438, 0xf7af }, \ + { 0xa438, 0x40f5 }, \ + { 0xa438, 0xd101 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xa402 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xa702 }, \ + { 0xa438, 0x54c0 }, \ + { 0xa438, 0xd10f }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xaa02 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0x024d }, \ + { 0xa438, 0x6abf }, \ + { 0xa438, 0x85ad }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8ff7 }, \ + { 0xa438, 0xddbf }, \ + { 0xa438, 0x85b0 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8ff8 }, \ + { 0xa438, 0xddbf }, \ + { 0xa438, 0x85b3 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8ff9 }, \ + { 0xa438, 0xddbf }, \ + { 0xa438, 0x85b6 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8ffa }, \ + { 0xa438, 0xddd1 }, \ + { 0xa438, 0x00bf }, \ + { 0xa438, 0x85aa }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x4802 }, \ + { 0xa438, 0x4d6a }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xad02 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xbf8f }, \ + { 0xa438, 0xfbdd }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb002 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xbf8f }, \ + { 0xa438, 0xfcdd }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb302 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xbf8f }, \ + { 0xa438, 0xfddd }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb602 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xbf8f }, \ + { 0xa438, 0xfedd }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xa702 }, \ + { 0xa438, 0x54b7 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xa102 }, \ + { 0xa438, 0x54b7 }, \ + { 0xa438, 0xaf3c }, \ + { 0xa438, 0x2066 }, \ + { 0xa438, 0xb800 }, \ + { 0xa438, 0xb8bd }, \ + { 0xa438, 0x30ee }, \ + { 0xa438, 0xbd2c }, \ + { 0xa438, 0xb8bd }, \ + { 0xa438, 0x7040 }, \ + { 0xa438, 0xbd86 }, \ + { 0xa438, 0xc8bd }, \ + { 0xa438, 0x8640 }, \ + { 0xa438, 0xbd88 }, \ + { 0xa438, 0xc8bd }, \ + { 0xa438, 0x8802 }, \ + { 0xa438, 0x1929 }, \ + { 0xa438, 0xa202 }, \ + { 0xa438, 0x02ae }, \ + { 0xa438, 0x03a2 }, \ + { 0xa438, 0x032e }, \ + { 0xa438, 0xd10f }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xaa02 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xf7bf }, \ + { 0xa438, 0x85ad }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48e1 }, \ + { 0xa438, 0x8ff8 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb002 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xf9bf }, \ + { 0xa438, 0x85b3 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48e1 }, \ + { 0xa438, 0x8ffa }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb602 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xae2c }, \ + { 0xa438, 0xd100 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xaa02 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xfbbf }, \ + { 0xa438, 0x85ad }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48e1 }, \ + { 0xa438, 0x8ffc }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb002 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xfdbf }, \ + { 0xa438, 0x85b3 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48e1 }, \ + { 0xa438, 0x8ffe }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb602 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xbf86 }, \ + { 0xa438, 0x7e02 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xa100 }, \ + { 0xa438, 0x02ae }, \ + { 0xa438, 0x25a1 }, \ + { 0xa438, 0x041d }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xf1bf }, \ + { 0xa438, 0x8675 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48e1 }, \ + { 0xa438, 0x8ff2 }, \ + { 0xa438, 0xbf86 }, \ + { 0xa438, 0x7802 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xf3bf }, \ + { 0xa438, 0x867b }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48ae }, \ + { 0xa438, 0x29a1 }, \ + { 0xa438, 0x070b }, \ + { 0xa438, 0xae24 }, \ + { 0xa438, 0xbf86 }, \ + { 0xa438, 0x8102 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xad28 }, \ + { 0xa438, 0x1be1 }, \ + { 0xa438, 0x8ff4 }, \ + { 0xa438, 0xbf86 }, \ + { 0xa438, 0x7502 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xe18f }, \ + { 0xa438, 0xf5bf }, \ + { 0xa438, 0x8678 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x48e1 }, \ + { 0xa438, 0x8ff6 }, \ + { 0xa438, 0xbf86 }, \ + { 0xa438, 0x7b02 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xaf09 }, \ + { 0xa438, 0x8420 }, \ + { 0xa438, 0xbc32 }, \ + { 0xa438, 0x20bc }, \ + { 0xa438, 0x3e76 }, \ + { 0xa438, 0xbc08 }, \ + { 0xa438, 0xfda6 }, \ + { 0xa438, 0x1a00 }, \ + { 0xa438, 0xb64e }, \ + { 0xa438, 0xd101 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xa402 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xa702 }, \ + { 0xa438, 0x54c0 }, \ + { 0xa438, 0xd10f }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xaa02 }, \ + { 0xa438, 0x4f48 }, \ + { 0xa438, 0x024d }, \ + { 0xa438, 0x6abf }, \ + { 0xa438, 0x85ad }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8ff7 }, \ + { 0xa438, 0xddbf }, \ + { 0xa438, 0x85b0 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8ff8 }, \ + { 0xa438, 0xddbf }, \ + { 0xa438, 0x85b3 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8ff9 }, \ + { 0xa438, 0xddbf }, \ + { 0xa438, 0x85b6 }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x67bf }, \ + { 0xa438, 0x8ffa }, \ + { 0xa438, 0xddd1 }, \ + { 0xa438, 0x00bf }, \ + { 0xa438, 0x85aa }, \ + { 0xa438, 0x024f }, \ + { 0xa438, 0x4802 }, \ + { 0xa438, 0x4d6a }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xad02 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xbf8f }, \ + { 0xa438, 0xfbdd }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb002 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xbf8f }, \ + { 0xa438, 0xfcdd }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb302 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xbf8f }, \ + { 0xa438, 0xfddd }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xb602 }, \ + { 0xa438, 0x4f67 }, \ + { 0xa438, 0xbf8f }, \ + { 0xa438, 0xfedd }, \ + { 0xa438, 0xbf85 }, \ + { 0xa438, 0xa702 }, \ + { 0xa438, 0x54b7 }, \ + { 0xa438, 0xaf00 }, \ + { 0xa438, 0x8800 }, \ + { 0xa436, 0xb818 }, \ + { 0xa438, 0x38b8 }, \ + { 0xa436, 0xb81a }, \ + { 0xa438, 0x0444 }, \ + { 0xa436, 0xb81c }, \ + { 0xa438, 0x40ee }, \ + { 0xa436, 0xb81e }, \ + { 0xa438, 0x3c1a }, \ + { 0xa436, 0xb850 }, \ + { 0xa438, 0x0981 }, \ + { 0xa436, 0xb852 }, \ + { 0xa438, 0x0085 }, \ + { 0xa436, 0xb878 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xb884 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xb832 }, \ + { 0xa438, 0x003f }, \ + { 0xa436, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xb82e }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0x8024 }, \ + { 0xa438, 0x0000 }, \ + { 0xb820, 0x0000 }, \ + { 0xa436, 0x801e }, \ + { 0xa438, 0x0021 } + +#define RTL8125_MAC_CFG5_MCU \ + { 0xa436, 0x8024 }, \ + { 0xa438, 0x3701 }, \ + { 0xa436, 0xb82e }, \ + { 0xa438, 0x0001 }, \ + { 0xb820, 0x0090 }, \ + { 0xa436, 0xa016 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xa012 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xa014 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8010 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x801a }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8024 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x802f }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8051 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8057 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8063 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8068 }, \ + { 0xa438, 0xd093 }, \ + { 0xa438, 0xd1c4 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x135c }, \ + { 0xa438, 0xd704 }, \ + { 0xa438, 0x5fbc }, \ + { 0xa438, 0xd504 }, \ + { 0xa438, 0xc9f1 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0fc9 }, \ + { 0xa438, 0xbb50 }, \ + { 0xa438, 0xd505 }, \ + { 0xa438, 0xa202 }, \ + { 0xa438, 0xd504 }, \ + { 0xa438, 0x8c0f }, \ + { 0xa438, 0xd500 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x1519 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1548 }, \ + { 0xa438, 0x2f70 }, \ + { 0xa438, 0x802a }, \ + { 0xa438, 0x2f73 }, \ + { 0xa438, 0x156a }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x155c }, \ + { 0xa438, 0xd505 }, \ + { 0xa438, 0xa202 }, \ + { 0xa438, 0xd500 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x1551 }, \ + { 0xa438, 0xc0c1 }, \ + { 0xa438, 0xc0c0 }, \ + { 0xa438, 0xd05a }, \ + { 0xa438, 0xd1ba }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x2529 }, \ + { 0xa438, 0x022a }, \ + { 0xa438, 0xd0a7 }, \ + { 0xa438, 0xd1b9 }, \ + { 0xa438, 0xa208 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x080e }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x408b }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a65 }, \ + { 0xa438, 0xf003 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0a6b }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0920 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0915 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0909 }, \ + { 0xa438, 0x228f }, \ + { 0xa438, 0x8038 }, \ + { 0xa438, 0x9801 }, \ + { 0xa438, 0xd71e }, \ + { 0xa438, 0x5d61 }, \ + { 0xa438, 0xd701 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x022a }, \ + { 0xa438, 0x2005 }, \ + { 0xa438, 0x091a }, \ + { 0xa438, 0x3bd9 }, \ + { 0xa438, 0x0919 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0916 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x14c5 }, \ + { 0xa438, 0xd703 }, \ + { 0xa438, 0x3181 }, \ + { 0xa438, 0x8061 }, \ + { 0xa438, 0x60ad }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x135c }, \ + { 0xa438, 0xd703 }, \ + { 0xa438, 0x5fba }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0cc7 }, \ + { 0xa438, 0xd096 }, \ + { 0xa438, 0xd1a9 }, \ + { 0xa438, 0xd503 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0c94 }, \ + { 0xa436, 0xa026 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa024 }, \ + { 0xa438, 0x0c93 }, \ + { 0xa436, 0xa022 }, \ + { 0xa438, 0x0cc5 }, \ + { 0xa436, 0xa020 }, \ + { 0xa438, 0x0915 }, \ + { 0xa436, 0xa006 }, \ + { 0xa438, 0x020a }, \ + { 0xa436, 0xa004 }, \ + { 0xa438, 0x155b }, \ + { 0xa436, 0xa002 }, \ + { 0xa438, 0x1542 }, \ + { 0xa436, 0xa000 }, \ + { 0xa438, 0x0fc7 }, \ + { 0xa436, 0xa008 }, \ + { 0xa438, 0x7f00 }, \ + { 0xa436, 0xa016 }, \ + { 0xa438, 0x0010 }, \ + { 0xa436, 0xa012 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xa014 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8010 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x801d }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x802c }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x802c }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x802c }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x802c }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x802c }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x802c }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6090 }, \ + { 0xa438, 0x60d1 }, \ + { 0xa438, 0xc95c }, \ + { 0xa438, 0xf007 }, \ + { 0xa438, 0x60b1 }, \ + { 0xa438, 0xc95a }, \ + { 0xa438, 0xf004 }, \ + { 0xa438, 0xc956 }, \ + { 0xa438, 0xf002 }, \ + { 0xa438, 0xc94e }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x00cd }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6090 }, \ + { 0xa438, 0x60d1 }, \ + { 0xa438, 0xc95c }, \ + { 0xa438, 0xf007 }, \ + { 0xa438, 0x60b1 }, \ + { 0xa438, 0xc95a }, \ + { 0xa438, 0xf004 }, \ + { 0xa438, 0xc956 }, \ + { 0xa438, 0xf002 }, \ + { 0xa438, 0xc94e }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x022a }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0132 }, \ + { 0xa436, 0xa08e }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa08c }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa08a }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa088 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa086 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa084 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa082 }, \ + { 0xa438, 0x012f }, \ + { 0xa436, 0xa080 }, \ + { 0xa438, 0x00cc }, \ + { 0xa436, 0xa090 }, \ + { 0xa438, 0x0103 }, \ + { 0xa436, 0xa016 }, \ + { 0xa438, 0x0020 }, \ + { 0xa436, 0xa012 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xa014 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8010 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x801e }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8026 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x802f }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8036 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8036 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8036 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x8036 }, \ + { 0xa438, 0xd107 }, \ + { 0xa438, 0xd042 }, \ + { 0xa438, 0xa404 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5ff4 }, \ + { 0xa438, 0x8280 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x6065 }, \ + { 0xa438, 0xd125 }, \ + { 0xa438, 0xf002 }, \ + { 0xa438, 0xd12b }, \ + { 0xa438, 0xd040 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x077f }, \ + { 0xa438, 0x0cf0 }, \ + { 0xa438, 0x0c50 }, \ + { 0xa438, 0xd104 }, \ + { 0xa438, 0xd040 }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5ff4 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x0a2e }, \ + { 0xa438, 0xcb9b }, \ + { 0xa438, 0xd110 }, \ + { 0xa438, 0xd040 }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x0b7b }, \ + { 0xa438, 0xd700 }, \ + { 0xa438, 0x5ff4 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x081b }, \ + { 0xa438, 0x1000 }, \ + { 0xa438, 0x09df }, \ + { 0xa438, 0xd704 }, \ + { 0xa438, 0x7fb8 }, \ + { 0xa438, 0xa718 }, \ + { 0xa438, 0x1800 }, \ + { 0xa438, 0x074e }, \ + { 0xa436, 0xa10e }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa10c }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa10a }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa108 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xa106 }, \ + { 0xa438, 0x074d }, \ + { 0xa436, 0xa104 }, \ + { 0xa438, 0x0818 }, \ + { 0xa436, 0xa102 }, \ + { 0xa438, 0x0a2c }, \ + { 0xa436, 0xa100 }, \ + { 0xa438, 0x077e }, \ + { 0xa436, 0xa110 }, \ + { 0xa438, 0x000f }, \ + { 0xa436, 0xb87c }, \ + { 0xa438, 0x8625 }, \ + { 0xa436, 0xb87e }, \ + { 0xa438, 0xaf86 }, \ + { 0xa438, 0x3daf }, \ + { 0xa438, 0x8689 }, \ + { 0xa438, 0xaf88 }, \ + { 0xa438, 0x69af }, \ + { 0xa438, 0x8887 }, \ + { 0xa438, 0xaf88 }, \ + { 0xa438, 0x9caf }, \ + { 0xa438, 0x889c }, \ + { 0xa438, 0xaf88 }, \ + { 0xa438, 0x9caf }, \ + { 0xa438, 0x889c }, \ + { 0xa438, 0xbf86 }, \ + { 0xa438, 0x49d7 }, \ + { 0xa438, 0x0040 }, \ + { 0xa438, 0x0277 }, \ + { 0xa438, 0x7daf }, \ + { 0xa438, 0x2727 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7205 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7208 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x71f3 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x71f6 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7229 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x722c }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7217 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x721a }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x721d }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7211 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7220 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7214 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x722f }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7223 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7232 }, \ + { 0xa438, 0x0000 }, \ + { 0xa438, 0x7226 }, \ + { 0xa438, 0xf8f9 }, \ + { 0xa438, 0xfae0 }, \ + { 0xa438, 0x85b3 }, \ + { 0xa438, 0x3802 }, \ + { 0xa438, 0xad27 }, \ + { 0xa438, 0x02ae }, \ + { 0xa438, 0x03af }, \ + { 0xa438, 0x8830 }, \ + { 0xa438, 0x1f66 }, \ + { 0xa438, 0xef65 }, \ + { 0xa438, 0xbfc2 }, \ + { 0xa438, 0x1f1a }, \ + { 0xa438, 0x96f7 }, \ + { 0xa438, 0x05ee }, \ + { 0xa438, 0xffd2 }, \ + { 0xa438, 0x00da }, \ + { 0xa438, 0xf605 }, \ + { 0xa438, 0xbfc2 }, \ + { 0xa438, 0x2f1a }, \ + { 0xa438, 0x96f7 }, \ + { 0xa438, 0x05ee }, \ + { 0xa438, 0xffd2 }, \ + { 0xa438, 0x00db }, \ + { 0xa438, 0xf605 }, \ + { 0xa438, 0xef02 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0x0d42 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x4202 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xef02 }, \ + { 0xa438, 0x1b03 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0x0d42 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x4502 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xef02 }, \ + { 0xa438, 0x1a03 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0x0d42 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x4802 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xbfc2 }, \ + { 0xa438, 0x3f1a }, \ + { 0xa438, 0x96f7 }, \ + { 0xa438, 0x05ee }, \ + { 0xa438, 0xffd2 }, \ + { 0xa438, 0x00da }, \ + { 0xa438, 0xf605 }, \ + { 0xa438, 0xbfc2 }, \ + { 0xa438, 0x4f1a }, \ + { 0xa438, 0x96f7 }, \ + { 0xa438, 0x05ee }, \ + { 0xa438, 0xffd2 }, \ + { 0xa438, 0x00db }, \ + { 0xa438, 0xf605 }, \ + { 0xa438, 0xef02 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0x0d42 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x4b02 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xef02 }, \ + { 0xa438, 0x1b03 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0x0d42 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x4e02 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xef02 }, \ + { 0xa438, 0x1a03 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0x0d42 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x5102 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xef56 }, \ + { 0xa438, 0xd020 }, \ + { 0xa438, 0x1f11 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x5402 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x5702 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x5a02 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0xa0ef }, \ + { 0xa438, 0x0348 }, \ + { 0xa438, 0x0a28 }, \ + { 0xa438, 0x05ef }, \ + { 0xa438, 0x201b }, \ + { 0xa438, 0x01ad }, \ + { 0xa438, 0x2735 }, \ + { 0xa438, 0x1f44 }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x88e1 }, \ + { 0xa438, 0x8589 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x5d02 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x8ee1 }, \ + { 0xa438, 0x858f }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x6002 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x94e1 }, \ + { 0xa438, 0x8595 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x6302 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xe085 }, \ + { 0xa438, 0x9ae1 }, \ + { 0xa438, 0x859b }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x6602 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xaf88 }, \ + { 0xa438, 0x3cbf }, \ + { 0xa438, 0x883f }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x9cad }, \ + { 0xa438, 0x2835 }, \ + { 0xa438, 0x1f44 }, \ + { 0xa438, 0xe08f }, \ + { 0xa438, 0xf8e1 }, \ + { 0xa438, 0x8ff9 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x5d02 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xe08f }, \ + { 0xa438, 0xfae1 }, \ + { 0xa438, 0x8ffb }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x6002 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xe08f }, \ + { 0xa438, 0xfce1 }, \ + { 0xa438, 0x8ffd }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x6302 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xe08f }, \ + { 0xa438, 0xfee1 }, \ + { 0xa438, 0x8fff }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x6602 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xaf88 }, \ + { 0xa438, 0x3ce1 }, \ + { 0xa438, 0x85a1 }, \ + { 0xa438, 0x1b21 }, \ + { 0xa438, 0xad37 }, \ + { 0xa438, 0x341f }, \ + { 0xa438, 0x44e0 }, \ + { 0xa438, 0x858a }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x8bbf }, \ + { 0xa438, 0x885d }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x7de0 }, \ + { 0xa438, 0x8590 }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x91bf }, \ + { 0xa438, 0x8860 }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x7de0 }, \ + { 0xa438, 0x8596 }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x97bf }, \ + { 0xa438, 0x8863 }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x7de0 }, \ + { 0xa438, 0x859c }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x9dbf }, \ + { 0xa438, 0x8866 }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x7dae }, \ + { 0xa438, 0x401f }, \ + { 0xa438, 0x44e0 }, \ + { 0xa438, 0x858c }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x8dbf }, \ + { 0xa438, 0x885d }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x7de0 }, \ + { 0xa438, 0x8592 }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x93bf }, \ + { 0xa438, 0x8860 }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x7de0 }, \ + { 0xa438, 0x8598 }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x99bf }, \ + { 0xa438, 0x8863 }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x7de0 }, \ + { 0xa438, 0x859e }, \ + { 0xa438, 0xe185 }, \ + { 0xa438, 0x9fbf }, \ + { 0xa438, 0x8866 }, \ + { 0xa438, 0x026e }, \ + { 0xa438, 0x7dae }, \ + { 0xa438, 0x0ce1 }, \ + { 0xa438, 0x85b3 }, \ + { 0xa438, 0x3904 }, \ + { 0xa438, 0xac2f }, \ + { 0xa438, 0x04ee }, \ + { 0xa438, 0x85b3 }, \ + { 0xa438, 0x00af }, \ + { 0xa438, 0x39d9 }, \ + { 0xa438, 0x22ac }, \ + { 0xa438, 0xeaf0 }, \ + { 0xa438, 0xacf6 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xfaf0 }, \ + { 0xa438, 0xacf8 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xfcf0 }, \ + { 0xa438, 0xad00 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xfef0 }, \ + { 0xa438, 0xacf0 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xf4f0 }, \ + { 0xa438, 0xacf2 }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xb0f0 }, \ + { 0xa438, 0xacae }, \ + { 0xa438, 0xf0ac }, \ + { 0xa438, 0xacf0 }, \ + { 0xa438, 0xacaa }, \ + { 0xa438, 0xa100 }, \ + { 0xa438, 0x0ce1 }, \ + { 0xa438, 0x8ff7 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x8402 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xaf26 }, \ + { 0xa438, 0xe9e1 }, \ + { 0xa438, 0x8ff6 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x8402 }, \ + { 0xa438, 0x6e7d }, \ + { 0xa438, 0xaf26 }, \ + { 0xa438, 0xf520 }, \ + { 0xa438, 0xac86 }, \ + { 0xa438, 0xbf88 }, \ + { 0xa438, 0x3f02 }, \ + { 0xa438, 0x6e9c }, \ + { 0xa438, 0xad28 }, \ + { 0xa438, 0x03af }, \ + { 0xa438, 0x3324 }, \ + { 0xa438, 0xad38 }, \ + { 0xa438, 0x03af }, \ + { 0xa438, 0x32e6 }, \ + { 0xa438, 0xaf32 }, \ + { 0xa438, 0xfb00 }, \ + { 0xa436, 0xb87c }, \ + { 0xa438, 0x8ff6 }, \ + { 0xa436, 0xb87e }, \ + { 0xa438, 0x0705 }, \ + { 0xa436, 0xb87c }, \ + { 0xa438, 0x8ff8 }, \ + { 0xa436, 0xb87e }, \ + { 0xa438, 0x19cc }, \ + { 0xa436, 0xb87c }, \ + { 0xa438, 0x8ffa }, \ + { 0xa436, 0xb87e }, \ + { 0xa438, 0x28e3 }, \ + { 0xa436, 0xb87c }, \ + { 0xa438, 0x8ffc }, \ + { 0xa436, 0xb87e }, \ + { 0xa438, 0x1047 }, \ + { 0xa436, 0xb87c }, \ + { 0xa438, 0x8ffe }, \ + { 0xa436, 0xb87e }, \ + { 0xa438, 0x0a45 }, \ + { 0xa436, 0xb85e }, \ + { 0xa438, 0x271e }, \ + { 0xa436, 0xb860 }, \ + { 0xa438, 0x3846 }, \ + { 0xa436, 0xb862 }, \ + { 0xa438, 0x26e6 }, \ + { 0xa436, 0xb864 }, \ + { 0xa438, 0x32e3 }, \ + { 0xa436, 0xb886 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xb888 }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xb88a }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xb88c }, \ + { 0xa438, 0xffff }, \ + { 0xa436, 0xb838 }, \ + { 0xa438, 0x000f }, \ + { 0xb820, 0x0010 }, \ + { 0xa436, 0x0000 }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0xb82e }, \ + { 0xa438, 0x0000 }, \ + { 0xa436, 0x8024 }, \ + { 0xa438, 0x0000 }, \ + { 0xb820, 0x0000 }, \ + { 0xa436, 0x801e }, \ + { 0xa438, 0x0015 } |