Ported from original vendor driver.
RT3290 is similar to RT5390 but integrates WLAN + Bluetooth on single chip.
Bluetooth not supported.

New 4kb firmware at /etc/firmware/ral-rt3290 for this chip only.
New routines to read efuse rom and control wlan core.
Tested on RT3090 and RT5390.


Index: share/man/man4/ral.4
===================================================================
RCS file: /cvs/src/share/man/man4/ral.4,v
retrieving revision 1.112
diff -u -p -r1.112 ral.4
--- share/man/man4/ral.4        15 Jul 2018 10:44:49 -0000      1.112
+++ share/man/man4/ral.4        18 Sep 2018 00:43:03 -0000
@@ -65,7 +65,10 @@ The RT3090 chipset is the first generati
 from Ralink.
 .Pp
 The RT3900E chipset is a single-chip 802.11n adapter from Ralink.
-The MAC/Baseband Processor can be an RT5390 or RT5392.
+The MAC/Baseband Processor can be an RT3290, RT5390 or RT5392.
+The RT3290 is a combo 802.11n and Bluetooth chip.
+It operates in the 2 Ghz spectrum and supports one transmit path and one
+receiver path (1T1R).
The RT5390 chip operates in the 2GHz spectrum and supports one transmit path
 and one receiver path (1T1R).
The RT5392 chip operates in the 2GHz spectrum and supports up to two transmit
@@ -139,6 +142,7 @@ files to be loaded when an interface is
 .It /etc/firmware/ral-rt2561s
 .It /etc/firmware/ral-rt2661
 .It /etc/firmware/ral-rt2860
+.It /etc/firmware/ral-rt3290
 .El
 .Pp
 The RT2500 chipset does not require a firmware file to operate.
Index: sys/dev/ic/rt2860.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/rt2860.c,v
retrieving revision 1.95
diff -u -p -r1.95 rt2860.c
--- sys/dev/ic/rt2860.c 26 Oct 2017 15:00:28 -0000      1.95
+++ sys/dev/ic/rt2860.c 18 Sep 2018 00:43:06 -0000
@@ -17,7 +17,8 @@
  */

 /*-
- * Ralink Technology RT2860/RT3090/RT3390/RT3562/RT5390/RT5392 chipset driver
+ * Ralink Technology RT2860/RT3090/RT3290/RT3390/RT3562/RT5390/
+ *     RT5392 chipset driver
  * http://www.ralinktech.com/
  */

@@ -97,6 +98,7 @@ void          rt2860_ampdu_rx_stop(struct ieee80
 int            rt2860_newstate(struct ieee80211com *, enum ieee80211_state,
                    int);
 uint16_t       rt3090_efuse_read_2(struct rt2860_softc *, uint16_t);
+uint16_t       rt3290_efuse_read_2(struct rt2860_softc *, uint16_t);
 uint16_t       rt2860_eeprom_read_2(struct rt2860_softc *, uint16_t);
 void           rt2860_intr_coherent(struct rt2860_softc *);
 void           rt2860_drain_stats_fifo(struct rt2860_softc *);
@@ -147,6 +149,8 @@ const char *        rt2860_get_rf(uint16_t);
 int            rt2860_read_eeprom(struct rt2860_softc *);
 int            rt2860_bbp_init(struct rt2860_softc *);
 void           rt5390_bbp_init(struct rt2860_softc *);
+void           rt3290_mac_init(struct rt2860_softc *);
+int            rt3290_wlan_enable(struct rt2860_softc *);
 int            rt2860_txrx_enable(struct rt2860_softc *);
 int            rt2860_init(struct ifnet *);
 void           rt2860_stop(struct ifnet *, int);
@@ -172,6 +176,8 @@ static const struct {
        uint8_t val;
 } rt2860_def_bbp[] = {
        RT2860_DEF_BBP
+},rt3290_def_bbp[] = {
+       RT3290_DEF_BBP
 },rt5390_def_bbp[] = {
        RT5390_DEF_BBP
 };
@@ -194,6 +200,8 @@ static const struct {
        uint8_t val;
 }  rt3090_def_rf[] = {
        RT3070_DEF_RF
+}, rt3290_def_rf[] = {
+       RT3290_DEF_RF
 }, rt3572_def_rf[] = {
        RT3572_DEF_RF
 }, rt5390_def_rf[] = {
@@ -208,14 +216,19 @@ rt2860_attach(void *xsc, int id)
        struct rt2860_softc *sc = xsc;
        struct ieee80211com *ic = &sc->sc_ic;
        int qid, ntries, error;
-       uint32_t tmp;
+       uint32_t tmp, reg;

        sc->amrr.amrr_min_success_threshold =  1;
        sc->amrr.amrr_max_success_threshold = 15;

+       if (id == PCI_PRODUCT_RALINK_RT3290)
+               reg = RT2860_PCI_CFG;
+       else
+               reg = RT2860_ASIC_VER_ID;
+
        /* wait for NIC to initialize */
        for (ntries = 0; ntries < 100; ntries++) {
-               tmp = RAL_READ(sc, RT2860_ASIC_VER_ID);
+               tmp = RAL_READ(sc, reg);
                if (tmp != 0 && tmp != 0xffffffff)
                        break;
                DELAY(10);
@@ -286,7 +299,11 @@ rt2860_attachhook(struct device *self)
        struct ifnet *ifp = &ic->ic_if;
        int i, error;

-       error = loadfirmware("ral-rt2860", &sc->ucode, &sc->ucsize);
+       if (sc->mac_ver == 0x3290) {
+               error = loadfirmware("ral-rt3290", &sc->ucode, &sc->ucsize);
+       } else {
+               error = loadfirmware("ral-rt2860", &sc->ucode, &sc->ucsize);
+       }
        if (error != 0) {
                printf("%s: error %d, could not read firmware file %s\n",
                    sc->sc_dev.dv_xname, error, "ral-rt2860");
@@ -1026,6 +1043,45 @@ rt3090_efuse_read_2(struct rt2860_softc
        return (addr & 2) ? tmp >> 16 : tmp & 0xffff;
 }

+/* Read 16 bits from eFUSE ROM (RT3290 only) */
+uint16_t
+rt3290_efuse_read_2(struct rt2860_softc *sc, uint16_t addr)
+{
+       uint32_t tmp;
+       uint16_t reg;
+       int ntries;
+
+       addr *= 2;
+       /*-
+        * Read one 16-byte block into registers EFUSE_DATA[0-3]:
+        * DATA3: 3 2 1 0
+        * DATA2: 7 6 5 4
+        * DATA1: B A 9 8
+        * DATA0: F E D C
+        */
+       tmp = RAL_READ(sc, RT3290_EFUSE_CTRL);
+       tmp &= ~(RT3070_EFSROM_MODE_MASK | RT3070_EFSROM_AIN_MASK);
+       tmp |= (addr & ~0xf) << RT3070_EFSROM_AIN_SHIFT | RT3070_EFSROM_KICK;
+       RAL_WRITE(sc, RT3290_EFUSE_CTRL, tmp);
+       for (ntries = 0; ntries < 500; ntries++) {
+               tmp = RAL_READ(sc, RT3290_EFUSE_CTRL);
+               if (!(tmp & RT3070_EFSROM_KICK))
+                       break;
+               DELAY(2);
+       }
+       if (ntries == 500)
+               return 0xffff;
+
+       if ((tmp & RT3070_EFUSE_AOUT_MASK) == RT3070_EFUSE_AOUT_MASK)
+               return 0xffff;  /* address not found */
+
+       /* determine to which 32-bit register our 16-bit word belongs */
+       reg = RT3290_EFUSE_DATA3 + (addr & 0xc);
+       tmp = RAL_READ(sc, reg);
+
+       return (addr & 2) ? tmp >> 16 : tmp & 0xffff;
+}
+
 /*
  * Read 16 bits at address 'addr' from the serial EEPROM (either 93C46,
  * 93C66 or 93C86).
@@ -2374,6 +2430,19 @@ rt5390_set_chan(struct rt2860_softc *sc,
                else
                        rf = 0x06;
                rt3090_rf_write(sc, 59, rf);
+       } else if (sc->mac_ver == 0x3290) {
+               if (chan == 6)
+                       rt2860_mcu_bbp_write(sc, 68, 0x0c);
+               else
+                       rt2860_mcu_bbp_write(sc, 68, 0x0b);
+
+               if (chan >= 1 && chan < 6)
+                       rf = 0x0f;
+               else if (chan >= 7 && chan <= 11)
+                       rf = 0x0e;
+               else if (chan >= 12 && chan <= 14)
+                       rf = 0x0d;
+               rt3090_rf_write(sc, 59, rf);
        }

        /* Tx/Rx h20M */
@@ -2525,7 +2594,12 @@ rt5390_rf_init(struct rt2860_softc *sc)
                for (i = 0; i < nitems(rt5392_def_rf); i++) {
                        rt3090_rf_write(sc, rt5392_def_rf[i].reg,
                            rt5392_def_rf[i].val);
-        }
+               }
+       } else if (sc->mac_ver == 0x3290) {
+               for (i = 0; i < nitems(rt3290_def_rf); i++) {
+                       rt3090_rf_write(sc, rt3290_def_rf[i].reg,
+                           rt3290_def_rf[i].val);
+               }
        } else {
                for (i = 0; i < nitems(rt5390_def_rf); i++) {
                        rt3090_rf_write(sc, rt5390_def_rf[i].reg,
@@ -2545,7 +2619,8 @@ rt5390_rf_init(struct rt2860_softc *sc)
        RAL_WRITE(sc, RT2860_TX_SW_CFG1, 0);
        RAL_WRITE(sc, RT2860_TX_SW_CFG2, 0);

-       if (sc->mac_ver == 0x5390)
+       if (sc->mac_ver == 0x3290 ||
+           sc->mac_ver == 0x5390)
                rt3090_set_rx_antenna(sc, 0);

        /* Patch RSSI inaccurate issue. */
@@ -2554,7 +2629,8 @@ rt5390_rf_init(struct rt2860_softc *sc)
        rt2860_mcu_bbp_write(sc, 81, 0x33);

        /* Enable DC filter. */
-       if (sc->mac_rev >= 0x0211)
+       if (sc->mac_rev >= 0x0211 ||
+           sc->mac_ver == 0x3290)
                rt2860_mcu_bbp_write(sc, 103, 0xc0);

        bbp = rt2860_mcu_bbp_read(sc, 138);
@@ -3095,6 +3171,7 @@ rt2860_get_rf(uint16_t rev)
        case RT3070_RF_3052:    return "RT3052";
        case RT3070_RF_3320:    return "RT3320";
        case RT3070_RF_3053:    return "RT3053";
+       case RT3290_RF_3290:    return "RT3290";
        case RT5390_RF_5360:    return "RT5360";
        case RT5390_RF_5390:    return "RT5390";
        case RT5390_RF_5392:    return "RT5392";
@@ -3113,7 +3190,12 @@ rt2860_read_eeprom(struct rt2860_softc *

        /* check whether the ROM is eFUSE ROM or EEPROM */
        sc->sc_srom_read = rt2860_eeprom_read_2;
-       if (sc->mac_ver >= 0x3071) {
+       if (sc->mac_ver == 0x3290) {
+               tmp = RAL_READ(sc, RT3290_EFUSE_CTRL);
+               DPRINTF(("EFUSE_CTRL=0x%08x\n", tmp));
+               if (tmp & RT3070_SEL_EFUSE)
+                       sc->sc_srom_read = rt3290_efuse_read_2;
+       } else if (sc->mac_ver >= 0x3071) {
                tmp = RAL_READ(sc, RT3070_EFUSE_CTRL);
                DPRINTF(("EFUSE_CTRL=0x%08x\n", tmp));
                if (tmp & RT3070_SEL_EFUSE)
@@ -3179,7 +3261,8 @@ rt2860_read_eeprom(struct rt2860_softc *

        /* read RF information */
        val = rt2860_srom_read(sc, RT2860_EEPROM_ANTENNA);
-       if (sc->mac_ver >= 0x5390)
+       DPRINTF(("EEPROM ANT 0x%04x\n", val));
+       if (sc->mac_ver >= 0x5390 || sc->mac_ver == 0x3290)
                sc->rf_rev = rt2860_srom_read(sc, RT2860_EEPROM_CHIPID);
        else
                sc->rf_rev = (val >> 8) & 0xf;
@@ -3423,7 +3506,8 @@ rt2860_bbp_init(struct rt2860_softc *sc)
        }

        /* initialize BBP registers to default values */
-       if (sc->mac_ver >= 0x5390)
+       if (sc->mac_ver >= 0x5390 ||
+           sc->mac_ver == 0x3290)
                rt5390_bbp_init(sc);
        else {
                for (i = 0; i < nitems(rt2860_def_bbp); i++) {
@@ -3463,10 +3547,16 @@ rt5390_bbp_init(struct rt2860_softc *sc)
        /* Avoid data lost and CRC error. */
        bbp = rt2860_mcu_bbp_read(sc, 4);
        rt2860_mcu_bbp_write(sc, 4, bbp | RT5390_MAC_IF_CTRL);
-
-       for (i = 0; i < nitems(rt5390_def_bbp); i++) {
-               rt2860_mcu_bbp_write(sc, rt5390_def_bbp[i].reg,
-                   rt5390_def_bbp[i].val);
+       if (sc->mac_ver == 0x3290) {
+               for (i = 0; i < nitems(rt3290_def_bbp); i++) {
+                       rt2860_mcu_bbp_write(sc, rt3290_def_bbp[i].reg,
+                           rt3290_def_bbp[i].val);
+               }
+       } else {
+               for (i = 0; i < nitems(rt5390_def_bbp); i++) {
+                       rt2860_mcu_bbp_write(sc, rt5390_def_bbp[i].reg,
+                           rt5390_def_bbp[i].val);
+               }
        }

        if (sc->mac_ver == 0x5392) {
@@ -3486,6 +3576,74 @@ rt5390_bbp_init(struct rt2860_softc *sc)
                rt2860_mcu_bbp_write(sc, 154, 0);
 }

+void
+rt3290_mac_init(struct rt2860_softc *sc)
+{
+       uint32_t tmp;
+
+       tmp = RAL_READ(sc, RT3290_WLAN_CTRL);
+       tmp |= RT3290_PCIE_APP0_CLK_REQ;
+       RAL_WRITE(sc, RT3290_WLAN_CTRL, tmp);
+
+       tmp = RAL_READ(sc, RT3290_CMB_CTRL);
+       tmp |= RT3290_LDO0_EN | RT3290_LDO_BGSEL;
+       RAL_WRITE(sc, RT3290_CMB_CTRL, tmp);
+
+       tmp = RAL_READ(sc, RT3290_OSC_CTRL);
+       tmp |= RT3290_ROSC_EN;
+       RAL_WRITE(sc, RT3290_OSC_CTRL, tmp);
+       tmp |= RT3290_OSC_CAL_REQ |
+           (RT3290_OSC_REF_CYCLE & 0x27);
+       RAL_WRITE(sc, RT3290_OSC_CTRL, tmp);
+
+       tmp = RAL_READ(sc, RT3290_COEX_CFG0);
+       tmp |= RT3290_CFG0_DEF;
+       RAL_WRITE(sc, RT3290_COEX_CFG0, tmp);
+
+       tmp = RAL_READ(sc, RT3290_PLL_CTRL);
+       tmp |= RT3290_PLL_CONTROL;
+       RAL_WRITE(sc, RT3290_PLL_CTRL, tmp);
+}
+
+int
+rt3290_wlan_enable(struct rt2860_softc *sc)
+{
+       uint32_t tmp;
+       int ntries;
+
+       /* enable chip and check readiness */
+       tmp = RAL_READ(sc, RT3290_WLAN_CTRL);
+       tmp |= RT3290_WLAN_EN | RT3290_FRC_WL_ANT_SET |
+           RT3290_GPIO_OUT_OE_ALL;
+       tmp &= ~RT3290_WLAN_CLK_EN;
+       RAL_WRITE(sc, RT3290_WLAN_CTRL, tmp);
+
+       for (ntries = 0; ntries < 200; ntries++) {
+               tmp = RAL_READ(sc, RT3290_CMB_CTRL);
+               if ((tmp & RT3290_PLL_LD) &&
+                   (tmp & RT3290_XTAL_RDY))
+                       break;
+               DELAY(20);
+       }
+       if (ntries == 200)
+               return EIO;
+
+       /* enable clock and toggle reset */
+       tmp = RAL_READ(sc, RT3290_WLAN_CTRL);
+       tmp |= RT3290_WLAN_RESET | RT3290_WLAN_CLK_EN;
+       tmp &= ~RT3290_PCIE_APP0_CLK_REQ;
+       RAL_WRITE(sc, RT3290_WLAN_CTRL, tmp);
+       DELAY(20);
+       tmp &= ~RT3290_WLAN_RESET;
+       RAL_WRITE(sc, RT3290_WLAN_CTRL, tmp);
+       DELAY(1000);
+
+       /* clear garbage interrupts */
+       RAL_WRITE(sc, RT2860_INT_STATUS, 0x7fffffff);
+
+       return 0;
+}
+
 int
 rt2860_txrx_enable(struct rt2860_softc *sc)
 {
@@ -3550,7 +3708,26 @@ rt2860_init(struct ifnet *ifp)
                sc->sc_flags |= RT2860_ENABLED;
        }

-       if (sc->rfswitch) {
+       if (sc->mac_ver == 0x3290) {
+               if ((error = rt3290_wlan_enable(sc)) != 0) {
+                       printf("%s: could not enable wlan\n",
+                           sc->sc_dev.dv_xname);
+                       rt2860_stop(ifp, 1);
+                       return error;   
+               }
+       }
+
+       if (sc->mac_ver == 0x3290 && sc->rfswitch){
+               /* hardware has a radio switch on GPIO pin 0 */
+               if (!(RAL_READ(sc, RT3290_WLAN_CTRL) & RT3290_RADIO_EN)) {
+                       printf("%s: radio is disabled by hardware switch\n",
+                           sc->sc_dev.dv_xname);
+#ifdef notyet
+                       rt2860_stop(ifp, 1);
+                       return EPERM;
+#endif
+               }
+       } else if (sc->rfswitch) {
                /* hardware has a radio switch on GPIO pin 2 */
                if (!(RAL_READ(sc, RT2860_GPIO_CTRL) & (1 << 2))) {
                        printf("%s: radio is disabled by hardware switch\n",
@@ -3619,9 +3796,13 @@ rt2860_init(struct ifnet *ifp)
        RAL_BARRIER_WRITE(sc);
        RAL_WRITE(sc, RT2860_MAC_SYS_CTRL, 0);

+       if (sc->mac_ver == 0x3290)
+               rt3290_mac_init(sc);
+
        for (i = 0; i < nitems(rt2860_def_mac); i++)
                RAL_WRITE(sc, rt2860_def_mac[i].reg, rt2860_def_mac[i].val);
-       if (sc->mac_ver >= 0x5390)
+       if (sc->mac_ver == 0x3290 ||
+           sc->mac_ver >= 0x5390)
                RAL_WRITE(sc, RT2860_TX_SW_CFG0, 0x00000404);
        else if (sc->mac_ver >= 0x3071) {
                /* set delay of PA_PE assertion to 1us (unit of 0.25us) */
@@ -3719,6 +3900,7 @@ rt2860_init(struct ifnet *ifp)
        /* select Main antenna for 1T1R devices */
        if (sc->rf_rev == RT3070_RF_2020 ||
            sc->rf_rev == RT3070_RF_3020 ||
+           sc->rf_rev == RT3290_RF_3290 ||
            sc->rf_rev == RT3070_RF_3320 ||
            sc->rf_rev == RT5390_RF_5390)
                rt3090_set_rx_antenna(sc, 0);
@@ -3728,7 +3910,8 @@ rt2860_init(struct ifnet *ifp)
        rt2860_mcu_cmd(sc, RT2860_MCU_CMD_LED2, sc->led[1], 0);
        rt2860_mcu_cmd(sc, RT2860_MCU_CMD_LED3, sc->led[2], 0);

-       if (sc->mac_ver >= 0x5390)
+       if (sc->mac_ver == 0x3290 ||
+           sc->mac_ver >= 0x5390)
                rt5390_rf_init(sc);
        else if (sc->mac_ver >= 0x3071)
                rt3090_rf_init(sc);
@@ -3736,7 +3919,8 @@ rt2860_init(struct ifnet *ifp)
        rt2860_mcu_cmd(sc, RT2860_MCU_CMD_SLEEP, 0x02ff, 1);
        rt2860_mcu_cmd(sc, RT2860_MCU_CMD_WAKEUP, 0, 1);

-       if (sc->mac_ver >= 0x5390)
+       if (sc->mac_ver == 0x3290 ||
+           sc->mac_ver >= 0x5390)
                rt5390_rf_wakeup(sc);
        else if (sc->mac_ver >= 0x3071)
                rt3090_rf_wakeup(sc);
@@ -3982,7 +4166,8 @@ rt2860_switch_chan(struct rt2860_softc *
        if (chan == 0 || chan == IEEE80211_CHAN_ANY)
                return;

-       if (sc->mac_ver >= 0x5390)
+       if (sc->mac_ver == 0x3290 ||
+           sc->mac_ver >= 0x5390)
                rt5390_set_chan(sc, chan);
        else if (sc->mac_ver >= 0x3071)
                rt3090_set_chan(sc, chan);
Index: sys/dev/ic/rt2860reg.h
===================================================================
RCS file: /cvs/src/sys/dev/ic/rt2860reg.h,v
retrieving revision 1.34
diff -u -p -r1.34 rt2860reg.h
--- sys/dev/ic/rt2860reg.h      31 May 2017 03:45:15 -0000      1.34
+++ sys/dev/ic/rt2860reg.h      18 Sep 2018 00:43:06 -0000
@@ -24,6 +24,18 @@
 #define RT2860_PCI_SYSCTRL             0x000c
 #define RT2860_PCIE_JTAG               0x0010

+/* RT3290 registers */
+#define RT3290_CMB_CTRL                        0x0020
+#define RT3290_EFUSE_CTRL              0x0024
+#define RT3290_EFUSE_DATA3             0x0028
+#define RT3290_EFUSE_DATA2             0x002c
+#define RT3290_EFUSE_DATA1             0x0030
+#define RT3290_EFUSE_DATA0             0x0034
+#define RT3290_OSC_CTRL                        0x0038
+#define RT3290_COEX_CFG0               0x0040
+#define RT3290_PLL_CTRL                        0x0050
+#define RT3290_WLAN_CTRL               0x0080
+
 #define RT3090_AUX_CTRL                        0x010c

 #define RT3070_OPT_14                  0x0114
@@ -224,6 +236,41 @@
 #define RT2860_Q       (1 << 3)
 #define RT2860_SHIFT_Q 3

+/* possible flags for register RT3290_CMB_CTRL */
+#define RT3290_XTAL_RDY                (1U << 22)
+#define RT3290_PLL_LD          (1U << 23)
+#define RT3290_LDO_CORE_LEVEL  (0xf << 24)
+#define RT3290_LDO_BGSEL       (3 << 29)
+#define RT3290_LDO3_EN         (1U << 30)
+#define RT3290_LDO0_EN         (1U << 31)
+
+/* possible flags for register RT3290_OSC_CTRL */
+#define RT3290_OSC_REF_CYCLE   0x1fff
+#define RT3290_OSC_CAL_CNT     (0xfff << 16)
+#define RT3290_OSC_CAL_ACK     (1U << 28)
+#define RT3290_OSC_CLK_32K_VLD (1U << 29)
+#define RT3290_OSC_CAL_REQ     (1U << 30)
+#define RT3290_ROSC_EN         (1U << 31)
+
+/* possible flags for register RT3290_COEX_CFG0 */
+#define RT3290_CFG0_DEF                (0x59 << 24)
+
+/* possible flags for register RT3290_PLL_CTRL */
+#define RT3290_PLL_CONTROL             (7 << 16)
+
+/* possible flags for register RT3290_WLAN_CTRL */
+#define RT3290_WLAN_EN                 (1U << 0)
+#define RT3290_WLAN_CLK_EN             (1U << 1)
+#define RT3290_WLAN_RSV1               (1U << 2)
+#define RT3290_WLAN_RESET              (1U << 3)
+#define RT3290_PCIE_APP0_CLK_REQ       (1U << 4)
+#define RT3290_FRC_WL_ANT_SET          (1U << 5)
+#define RT3290_INV_TR_SW0              (1U << 6)
+#define RT3290_RADIO_EN                        (1U << 8)
+#define RT3290_GPIO_IN_ALL             (0xff << 8)
+#define RT3290_GPIO_OUT_ALL            (0xff << 16)
+#define RT3290_GPIO_OUT_OE_ALL         (0xff << 24)
+
 /* possible flags for registers INT_STATUS/INT_MASK */
 #define RT2860_TX_COHERENT     (1 << 17)
 #define RT2860_RX_COHERENT     (1 << 16)
@@ -925,6 +972,7 @@ struct rt2860_rxwi {
 #define RT3070_RF_3320 0x000b  /* 1T1R */
 #define RT3070_RF_3053 0x000d  /* dual-band 3T3R */
 #define RT5592_RF_5592 0x000f  /* dual-band 2T2R */
+#define RT3290_RF_3290 0x3290  /* 1T1R */
 #define RT5390_RF_5360 0x5360  /* 1T1R */
 #define RT5390_RF_5370 0x5370  /* 1T1R */
 #define RT5390_RF_5372 0x5372  /* 2T2R */
@@ -1169,6 +1217,24 @@ static const struct rt2860_rate {
        { 105, 0x05 },  \
        { 106, 0x35 }

+#define RT3290_DEF_BBP \
+       {  31, 0x08 },  \
+       {  68, 0x0b },  \
+       {  73, 0x13 },  \
+       {  75, 0x46 },  \
+       {  76, 0x28 },  \
+       {  77, 0x59 },  \
+       {  82, 0x62 },  \
+       {  83, 0x7a },  \
+       {  84, 0x9a },  \
+       {  86, 0x38 },  \
+       {  91, 0x04 },  \
+       { 103, 0xc0 },  \
+       { 104, 0x92 },  \
+       { 105, 0x3c },  \
+       { 106, 0x03 },  \
+       { 128, 0x12 }
+
 #define RT5390_DEF_BBP \
        {  31, 0x08 },  \
        {  65, 0x2c },  \
@@ -1468,6 +1534,53 @@ static const struct rt2860_rate {
        { 24, 0x16 },   \
        { 25, 0x01 },   \
        { 29, 0x1f }
+
+#define RT3290_DEF_RF  \
+       {  1, 0x0f },   \
+       {  2, 0x80 },   \
+       {  3, 0x08 },   \
+       {  4, 0x00 },   \
+       {  6, 0xa0 },   \
+       {  8, 0xf3 },   \
+       {  9, 0x02 },   \
+       { 10, 0x53 },   \
+       { 11, 0x4a },   \
+       { 12, 0x46 },   \
+       { 13, 0x9f },   \
+       { 18, 0x03 },   \
+       { 22, 0x20 },   \
+       { 25, 0x80 },   \
+       { 27, 0x09 },   \
+       { 29, 0x10 },   \
+       { 30, 0x10 },   \
+       { 31, 0x80 },   \
+       { 32, 0x80 },   \
+       { 33, 0x00 },   \
+       { 34, 0x05 },   \
+       { 35, 0x12 },   \
+       { 36, 0x00 },   \
+       { 38, 0x85 },   \
+       { 39, 0x1b },   \
+       { 40, 0x0b },   \
+       { 41, 0xbb },   \
+       { 42, 0xd5 },   \
+       { 43, 0x7b },   \
+       { 44, 0x0e },   \
+       { 45, 0xa2 },   \
+       { 46, 0x73 },   \
+       { 47, 0x00 },   \
+       { 48, 0x10 },   \
+       { 49, 0x98 },   \
+       { 52, 0x38 },   \
+       { 53, 0x00 },   \
+       { 54, 0x78 },   \
+       { 55, 0x43 },   \
+       { 56, 0x02 },   \
+       { 57, 0x80 },   \
+       { 58, 0x7f },   \
+       { 59, 0x09 },   \
+       { 60, 0x45 },   \
+       { 61, 0xc1 }

 #define RT3572_DEF_RF  \
        {  0, 0x70 },   \
Index: sys/dev/microcode/ral/Makefile
===================================================================
RCS file: /cvs/src/sys/dev/microcode/ral/Makefile,v
retrieving revision 1.11
diff -u -p -r1.11 Makefile
--- sys/dev/microcode/ral/Makefile      10 Aug 2016 14:27:17 -0000      1.11
+++ sys/dev/microcode/ral/Makefile      18 Sep 2018 00:43:06 -0000
@@ -12,7 +12,7 @@ CC=${HOSTCC}
      ${MACHINE_ARCH} == "powerpc" || \
      ${MACHINE} == "sgi" || ${MACHINE} == "sparc64")

-FIRM=  ral-rt2561 ral-rt2561s ral-rt2661 ral-rt2860
+FIRM=  ral-rt2561 ral-rt2561s ral-rt2661 ral-rt2860 ral-rt3290

 PROG=  build

Index: sys/dev/microcode/ral/build.c
===================================================================
RCS file: /cvs/src/sys/dev/microcode/ral/build.c,v
retrieving revision 1.4
diff -u -p -r1.4 build.c
--- sys/dev/microcode/ral/build.c       6 Mar 2008 09:11:57 -0000       1.4
+++ sys/dev/microcode/ral/build.c       18 Sep 2018 00:43:06 -0000
@@ -54,6 +54,7 @@ main(void)
        output("ral-rt2561s", rt2561s, sizeof rt2561s);
        output("ral-rt2661",  rt2661,  sizeof rt2661);
        output("ral-rt2860",  rt2860,  sizeof rt2860);
+       output("ral-rt3290",  rt3290,  sizeof rt3290);

        return 0;
 }
Index: sys/dev/microcode/ral/microcode.h
===================================================================
RCS file: /cvs/src/sys/dev/microcode/ral/microcode.h,v
retrieving revision 1.8
diff -u -p -r1.8 microcode.h
--- sys/dev/microcode/ral/microcode.h   17 Aug 2016 11:47:57 -0000      1.8
+++ sys/dev/microcode/ral/microcode.h   18 Sep 2018 00:43:07 -0000
@@ -19,7 +19,7 @@

 /*
  * This file contains the loadable 8051 microcodes for the Ralink RT2561,
- * RT2561S, RT2661 and RT2860 chipsets.
+ * RT2561S, RT2661, RT2860 and RT3290 chipsets.
  */

 static const uint8_t rt2561[] = {
@@ -3012,4 +3012,379 @@ static const uint8_t rt2860[] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x5b, 0xd2
+};
+static const uint8_t rt3290[] = {
+       0x02, 0x0f, 0x1c, 0x02, 0x0e, 0x0f, 0x8f, 0x50, 0xd2, 0x59, 0x22,
+       0x02, 0x0c, 0x31, 0x8f, 0x54, 0xd2, 0x58, 0x22, 0x02, 0x0b, 0x23,
+       0x02, 0x0e, 0x31, 0xc3, 0x22, 0x02, 0x0b, 0xe2, 0x90, 0x04, 0x14,
+       0xe0, 0x20, 0xe7, 0x03, 0x02, 0x04, 0x91, 0x90, 0x70, 0x12, 0xe0,
+       0xf5, 0x56, 0x90, 0x04, 0x04, 0xe0, 0x12, 0x0d, 0xc5, 0x00, 0xc8,
+       0x30, 0x00, 0x9f, 0x31, 0x00, 0x81, 0x35, 0x00, 0x78, 0x36, 0x00,
+       0xd5, 0x40, 0x00, 0xec, 0x41, 0x01, 0x03, 0x50, 0x01, 0x48, 0x51,
+       0x01, 0x51, 0x52, 0x01, 0x51, 0x53, 0x01, 0x51, 0x54, 0x01, 0x8d,
+       0x55, 0x01, 0xea, 0x56, 0x02, 0x3d, 0x70, 0x02, 0x63, 0x71, 0x02,
+       0x8c, 0x72, 0x03, 0x37, 0x73, 0x03, 0x5b, 0x74, 0x04, 0x05, 0x80,
+       0x04, 0x75, 0x83, 0x04, 0x2c, 0x91, 0x00, 0x00, 0x04, 0x91, 0x90,
+       0x70, 0x11, 0xe0, 0xf5, 0x3c, 0x02, 0x04, 0x8b, 0xe5, 0x55, 0xb4,
+       0x02, 0x0f, 0xe5, 0x58, 0x30, 0xe0, 0x06, 0x90, 0x01, 0x0d, 0x74,
+       0x08, 0xf0, 0x7d, 0x01, 0x80, 0x02, 0x7d, 0x02, 0xaf, 0x56, 0x12,
+       0x0d, 0xeb, 0x02, 0x04, 0x8b, 0x20, 0x02, 0x03, 0x30, 0x03, 0x0a,
+       0x7d, 0x02, 0xaf, 0x56, 0x12, 0x0d, 0xeb, 0x02, 0x04, 0x8b, 0xe5,
+       0x25, 0xd3, 0x94, 0x01, 0x40, 0x0c, 0x90, 0x01, 0x0c, 0xe0, 0x44,
+       0x02, 0xf0, 0xa3, 0xe0, 0x44, 0x04, 0xf0, 0x85, 0x56, 0x41, 0xd2,
+       0x02, 0x22, 0x90, 0x70, 0x11, 0xe0, 0xb4, 0x5a, 0x03, 0xc2, 0x4f,
+       0x22, 0xd2, 0x4f, 0x22, 0xe5, 0x25, 0xd3, 0x94, 0x01, 0x50, 0x03,
+       0x02, 0x04, 0x91, 0x90, 0x01, 0x0c, 0xe0, 0x44, 0x02, 0xf0, 0xa3,
+       0xe0, 0x44, 0x04, 0xf0, 0x22, 0xe5, 0x25, 0xd3, 0x94, 0x01, 0x50,
+       0x03, 0x02, 0x04, 0x91, 0x90, 0x01, 0x0c, 0xe0, 0x54, 0xfd, 0xf0,
+       0xa3, 0xe0, 0x54, 0xfb, 0xf0, 0x22, 0xe5, 0x25, 0xd3, 0x94, 0x01,
+       0x40, 0x07, 0xe5, 0x55, 0x60, 0x03, 0x02, 0x04, 0x91, 0x90, 0x70,
+       0x10, 0xe0, 0x54, 0x7f, 0xff, 0xbf, 0x0a, 0x0d, 0x90, 0x70, 0x11,
+       0xe0, 0xb4, 0x08, 0x06, 0x75, 0x4e, 0x01, 0x75, 0x4f, 0x84, 0x90,
+       0x70, 0x10, 0xe0, 0x54, 0x7f, 0xff, 0xbf, 0x02, 0x12, 0x90, 0x70,
+       0x11, 0xe0, 0x64, 0x08, 0x60, 0x04, 0xe0, 0xb4, 0x20, 0x06, 0x75,
+       0x4e, 0x03, 0x75, 0x4f, 0x20, 0xe4, 0xf5, 0x27, 0x22, 0x90, 0x70,
+       0x11, 0xe0, 0x24, 0xff, 0x92, 0x47, 0x22, 0xe5, 0x25, 0xd3, 0x94,
+       0x01, 0x40, 0x07, 0xe5, 0x55, 0x60, 0x03, 0x02, 0x03, 0x42, 0x90,
+       0x04, 0x04, 0xe0, 0x25, 0xe0, 0x24, 0x5d, 0xf5, 0x57, 0x90, 0x70,
+       0x10, 0xe0, 0xff, 0x74, 0x47, 0x25, 0x57, 0xf8, 0xc6, 0xef, 0xc6,
+       0x90, 0x70, 0x11, 0xe0, 0xff, 0x74, 0x48, 0x25, 0x57, 0xf8, 0xc6,
+       0xef, 0xc6, 0xe4, 0xfd, 0xaf, 0x56, 0x12, 0x0d, 0xeb, 0x02, 0x04,
+       0x8b, 0xe5, 0x25, 0xd3, 0x94, 0x01, 0x40, 0x07, 0xe5, 0x55, 0x60,
+       0x03, 0x02, 0x03, 0x42, 0xe5, 0x47, 0x64, 0x07, 0x60, 0x1d, 0xe5,
+       0x47, 0x64, 0x08, 0x60, 0x17, 0xe5, 0x47, 0x64, 0x09, 0x60, 0x11,
+       0xe5, 0x47, 0x64, 0x0a, 0x60, 0x0b, 0xe5, 0x47, 0x64, 0x0b, 0x60,
+       0x05, 0xe5, 0x47, 0xb4, 0x0c, 0x08, 0x90, 0x70, 0x11, 0xe0, 0x54,
+       0x0f, 0xf5, 0x3a, 0xe5, 0x47, 0xb4, 0x09, 0x08, 0xe5, 0x3a, 0xb4,
+       0x03, 0x03, 0xe4, 0xf5, 0x46, 0xe5, 0x47, 0xb4, 0x0a, 0x08, 0xe5,
+       0x3a, 0xb4, 0x01, 0x03, 0xe4, 0xf5, 0x46, 0xe4, 0xfd, 0xaf, 0x56,
+       0x12, 0x0d, 0xeb, 0xd2, 0x04, 0x22, 0x90, 0x70, 0x11, 0xe0, 0xf4,
+       0xff, 0x90, 0x70, 0x10, 0xe0, 0x5f, 0xff, 0x90, 0x70, 0x11, 0xe0,
+       0x55, 0x27, 0x4f, 0x90, 0x70, 0x18, 0xf0, 0x90, 0x70, 0x11, 0xe0,
+       0x90, 0x70, 0x19, 0xf0, 0xe4, 0xfd, 0xaf, 0x56, 0x12, 0x0d, 0xeb,
+       0x30, 0x15, 0x03, 0xd2, 0x14, 0x22, 0x90, 0x70, 0x18, 0xe0, 0xf5,
+       0x27, 0x90, 0x02, 0x29, 0xe0, 0xff, 0x90, 0x70, 0x19, 0xe0, 0xfe,
+       0xef, 0x5e, 0x90, 0x02, 0x29, 0xf0, 0x30, 0x47, 0x04, 0xaf, 0x27,
+       0x80, 0x04, 0xe5, 0x27, 0xf4, 0xff, 0x90, 0x02, 0x28, 0xef, 0xf0,
+       0x22, 0xe5, 0x25, 0xd3, 0x94, 0x01, 0x40, 0x07, 0xe5, 0x55, 0x60,
+       0x03, 0x02, 0x03, 0x42, 0x90, 0x70, 0x10, 0xe0, 0xfe, 0x90, 0x70,
+       0x11, 0xe0, 0xfd, 0xed, 0xf8, 0xe6, 0xf5, 0x57, 0xfd, 0xaf, 0x56,
+       0x12, 0x0d, 0xeb, 0x02, 0x04, 0x8b, 0xe5, 0x25, 0xd3, 0x94, 0x01,
+       0x40, 0x07, 0xe5, 0x55, 0x60, 0x03, 0x02, 0x03, 0x42, 0x90, 0x70,
+       0x10, 0xe0, 0xfe, 0x90, 0x70, 0x11, 0xe0, 0xfd, 0xed, 0xf5, 0x82,
+       0x8e, 0x83, 0xe0, 0xf5, 0x57, 0xfd, 0xaf, 0x56, 0x12, 0x0d, 0xeb,
+       0x02, 0x04, 0x8b, 0x90, 0x10, 0x00, 0xe0, 0xf5, 0x57, 0xe4, 0xf5,
+       0x58, 0xf5, 0x59, 0x90, 0x10, 0x03, 0xe0, 0xb4, 0x28, 0x05, 0x75,
+       0x58, 0x01, 0x80, 0x3c, 0x90, 0x10, 0x03, 0xe0, 0xb4, 0x30, 0x05,
+       0x75, 0x58, 0x02, 0x80, 0x30, 0x90, 0x10, 0x03, 0xe0, 0xb4, 0x33,
+       0x05, 0x75, 0x58, 0x04, 0x80, 0x24, 0x90, 0x10, 0x03, 0xe0, 0xb4,
+       0x35, 0x0c, 0x90, 0x10, 0x02, 0xe0, 0xb4, 0x72, 0x05, 0x75, 0x58,
+       0x08, 0x80, 0x11, 0x90, 0x10, 0x03, 0xe0, 0xb4, 0x35, 0x0a, 0x90,
+       0x10, 0x02, 0xe0, 0xb4, 0x93, 0x03, 0x75, 0x58, 0x10, 0xe5, 0x58,
+       0x30, 0xe1, 0x19, 0x90, 0x05, 0x08, 0xe0, 0x44, 0x01, 0xf0, 0xfd,
+       0x90, 0x05, 0x05, 0xe0, 0x54, 0xfb, 0xf0, 0x44, 0x04, 0xf0, 0xed,
+       0x54, 0xfe, 0x90, 0x05, 0x08, 0xf0, 0xe4, 0xf5, 0x4e, 0xf5, 0x4f,
+       0x75, 0x3a, 0xff, 0xf5, 0x25, 0x90, 0x05, 0xa4, 0x74, 0x11, 0xf0,
+       0xa3, 0x74, 0xff, 0xf0, 0xa3, 0x74, 0x03, 0xf0, 0xd2, 0x4f, 0x90,
+       0x01, 0x0d, 0xe0, 0x44, 0x40, 0xf0, 0x75, 0x3c, 0xff, 0xad, 0x57,
+       0xaf, 0x56, 0x12, 0x0d, 0xeb, 0x90, 0x70, 0x34, 0x74, 0x31, 0xf0,
+       0xa3, 0x74, 0x26, 0xf0, 0xc2, 0x17, 0x02, 0x04, 0x8b, 0xe5, 0x25,
+       0xd3, 0x94, 0x01, 0x40, 0x0b, 0xe5, 0x55, 0x60, 0x07, 0x7d, 0x03,
+       0xaf, 0x56, 0x02, 0x0d, 0xeb, 0x90, 0x70, 0x10, 0xe0, 0x24, 0xff,
+       0x92, 0x93, 0xe4, 0xfd, 0xaf, 0x56, 0x12, 0x0d, 0xeb, 0x02, 0x04,
+       0x8b, 0x90, 0x10, 0x00, 0xe0, 0x90, 0x10, 0x2c, 0xf0, 0x90, 0x10,
+       0x2f, 0x74, 0x40, 0xf0, 0x90, 0x70, 0x11, 0xe0, 0xf5, 0x57, 0xe0,
+       0x54, 0x80, 0x90, 0x70, 0x32, 0xf0, 0x90, 0x70, 0x10, 0xe0, 0xff,
+       0x90, 0x70, 0x11, 0xe0, 0xd3, 0x9f, 0x40, 0x35, 0x90, 0x70, 0x33,
+       0xe5, 0x57, 0xf0, 0x90, 0x70, 0x10, 0xe0, 0xff, 0x90, 0x70, 0x33,
+       0xe0, 0xc3, 0x9f, 0x40, 0x57, 0xe0, 0xff, 0x90, 0x70, 0x32, 0xe0,
+       0x4f, 0x90, 0x05, 0x00, 0xf0, 0xa3, 0x74, 0x11, 0xf0, 0xa3, 0x74,
+       0x01, 0xf0, 0x74, 0x03, 0xf0, 0xff, 0x12, 0x0e, 0xf8, 0x90, 0x70,
+       0x33, 0xe0, 0x14, 0xf0, 0x80, 0xd1, 0x90, 0x70, 0x33, 0xe5, 0x57,
+       0xf0, 0x90, 0x70, 0x10, 0xe0, 0xff, 0x90, 0x70, 0x33, 0xe0, 0xd3,
+       0x9f, 0x50, 0x22, 0xe0, 0xff, 0x90, 0x70, 0x32, 0xe0, 0x4f, 0x90,
+       0x05, 0x00, 0xf0, 0xa3, 0x74, 0x11, 0xf0, 0xa3, 0x74, 0x01, 0xf0,
+       0x74, 0x03, 0xf0, 0xff, 0x12, 0x0e, 0xf8, 0x90, 0x70, 0x33, 0xe0,
+       0x04, 0xf0, 0x80, 0xd1, 0x90, 0x10, 0x00, 0xe0, 0x90, 0x10, 0x2c,
+       0xf0, 0x90, 0x10, 0x2f, 0x74, 0x7f, 0xf0, 0xe4, 0xfd, 0xaf, 0x56,
+       0x12, 0x0d, 0xeb, 0x02, 0x04, 0x8b, 0xe5, 0x25, 0xd3, 0x94, 0x01,
+       0x40, 0x0d, 0xe5, 0x55, 0x60, 0x09, 0x7d, 0x03, 0xaf, 0x56, 0x12,
+       0x0d, 0xeb, 0x80, 0x72, 0x90, 0x70, 0x10, 0xe0, 0x24, 0xff, 0x92,
+       0x4a, 0xd2, 0x05, 0xad, 0x57, 0xaf, 0x56, 0x12, 0x0d, 0xeb, 0x80,
+       0x5f, 0x90, 0x70, 0x11, 0xe0, 0x24, 0xff, 0x92, 0x17, 0x90, 0x70,
+       0x10, 0xe0, 0xf5, 0x5d, 0xad, 0x57, 0xaf, 0x56, 0x12, 0x0d, 0xeb,
+       0x90, 0x04, 0x14, 0x74, 0x80, 0xf0, 0x30, 0x17, 0x13, 0x90, 0x10,
+       0x00, 0xe0, 0x90, 0x10, 0x2c, 0xf0, 0x90, 0x10, 0x2f, 0xe0, 0x54,
+       0xf0, 0xf5, 0x57, 0x45, 0x5d, 0xf0, 0xe4, 0x90, 0x70, 0x13, 0xf0,
+       0xe5, 0x56, 0xf4, 0x60, 0x2a, 0x90, 0x70, 0x25, 0xe0, 0x44, 0x01,
+       0xf0, 0x90, 0x02, 0x2c, 0x74, 0xff, 0xf0, 0x22, 0xe4, 0xf5, 0x25,
+       0xd2, 0x4f, 0x90, 0x70, 0x10, 0xe0, 0xf4, 0x60, 0x03, 0xe0, 0xf5,
+       0x25, 0xad, 0x57, 0xaf, 0x56, 0x12, 0x0d, 0xeb, 0x90, 0x04, 0x14,
+       0x74, 0x80, 0xf0, 0x22, 0xc2, 0xaf, 0x90, 0x04, 0x14, 0xe0, 0x54,
+       0x0e, 0x60, 0x04, 0xd2, 0x18, 0x80, 0x08, 0xe5, 0x4e, 0x45, 0x4f,
+       0x24, 0xff, 0x92, 0x18, 0xd2, 0xaf, 0x90, 0x04, 0x14, 0xe0, 0xa2,
+       0xe4, 0x92, 0x19, 0x74, 0x1e, 0xf0, 0xe5, 0x5f, 0x54, 0x0f, 0xf5,
+       0x2d, 0xe5, 0x2a, 0x70, 0x13, 0x30, 0x18, 0x05, 0xe5, 0x5f, 0x20,
+       0xe5, 0x0b, 0x30, 0x19, 0x19, 0xe5, 0x5f, 0x54, 0x30, 0xff, 0xbf,
+       0x30, 0x11, 0xe5, 0x2a, 0x70, 0x05, 0x75, 0x2a, 0x0c, 0x80, 0x02,
+       0x15, 0x2a, 0xd2, 0x6c, 0xd2, 0x6d, 0x80, 0x0f, 0xe5, 0x5f, 0x30,
+       0xe6, 0x06, 0xc2, 0x6c, 0xd2, 0x6d, 0x80, 0x04, 0xd2, 0x6c, 0xc2,
+       0x6d, 0xe5, 0x47, 0x64, 0x03, 0x70, 0x21, 0x30, 0x4b, 0x06, 0xc2,
+       0x6c, 0xd2, 0x6d, 0x80, 0x18, 0xe5, 0x2a, 0x70, 0x03, 0x30, 0x4c,
+       0x11, 0xc2, 0x4c, 0xe5, 0x2a, 0x70, 0x05, 0x75, 0x2a, 0x07, 0x80,
+       0x02, 0x15, 0x2a, 0xd2, 0x6c, 0xd2, 0x6d, 0xe5, 0x47, 0xb4, 0x09,
+       0x14, 0xe5, 0x44, 0x20, 0xe3, 0x0b, 0xe5, 0x3a, 0x64, 0x02, 0x60,
+       0x05, 0xe5, 0x3a, 0xb4, 0x03, 0x04, 0xc2, 0x6c, 0xd2, 0x6d, 0xe5,
+       0x47, 0xb4, 0x0a, 0x13, 0xe5, 0x3a, 0xb4, 0x01, 0x06, 0xc2, 0x6c,
+       0xd2, 0x6d, 0x80, 0x08, 0xe5, 0x3a, 0x70, 0x04, 0xd2, 0x6c, 0xc2,
+       0x6d, 0x20, 0x69, 0x07, 0xe5, 0x5e, 0x20, 0xe0, 0x02, 0xb2, 0x68,
+       0x20, 0x6b, 0x07, 0xe5, 0x5e, 0x20, 0xe1, 0x02, 0xb2, 0x6a, 0x20,
+       0x6d, 0x07, 0xe5, 0x5e, 0x20, 0xe2, 0x02, 0xb2, 0x6c, 0x75, 0x2e,
+       0x40, 0x20, 0x69, 0x04, 0xa2, 0x68, 0x80, 0x26, 0x30, 0x68, 0x06,
+       0xe5, 0x46, 0xa2, 0xe2, 0x80, 0x1d, 0xe5, 0x5e, 0x20, 0xe0, 0x04,
+       0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xe5, 0x46, 0x54, 0xf0, 0xfe,
+       0xbe, 0xf0, 0x04, 0x7e, 0x01, 0x80, 0x02, 0x7e, 0x00, 0xee, 0x6f,
+       0x24, 0xff, 0x92, 0x73, 0x92, 0x72, 0x20, 0x6b, 0x04, 0xa2, 0x6a,
+       0x80, 0x26, 0x30, 0x6a, 0x06, 0xe5, 0x46, 0xa2, 0xe2, 0x80, 0x1d,
+       0xe5, 0x5e, 0x20, 0xe1, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00,
+       0xe5, 0x46, 0x54, 0xf0, 0xfe, 0xbe, 0xf0, 0x04, 0x7e, 0x01, 0x80,
+       0x02, 0x7e, 0x00, 0xee, 0x6f, 0x24, 0xff, 0x92, 0x75, 0x92, 0x74,
+       0x20, 0x6d, 0x04, 0xa2, 0x6c, 0x80, 0x26, 0xe5, 0x47, 0x64, 0x0a,
+       0x70, 0x22, 0x30, 0x6c, 0x06, 0xe5, 0x46, 0xa2, 0xe3, 0x80, 0x17,
+       0xe5, 0x3a, 0xb4, 0x01, 0x06, 0xe5, 0x46, 0xa2, 0xe3, 0x80, 0x34,
+       0xe5, 0x46, 0x20, 0xe4, 0x03, 0x30, 0xe5, 0x03, 0xd3, 0x80, 0x01,
+       0xc3, 0x80, 0x26, 0x30, 0x6c, 0x06, 0xe5, 0x46, 0xa2, 0xe2, 0x80,
+       0x1d, 0xe5, 0x5e, 0x20, 0xe2, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f,
+       0x00, 0xe5, 0x46, 0x54, 0xf0, 0xfe, 0xbe, 0xf0, 0x04, 0x7e, 0x01,
+       0x80, 0x02, 0x7e, 0x00, 0xee, 0x6f, 0x24, 0xff, 0x92, 0x71, 0x92,
+       0x70, 0x90, 0x10, 0x00, 0xe0, 0x90, 0x10, 0x2c, 0xf0, 0x90, 0x10,
+       0x03, 0xe0, 0xc3, 0x94, 0x30, 0x40, 0x19, 0xe0, 0x64, 0x32, 0x60,
+       0x14, 0xa2, 0x71, 0x92, 0x77, 0xa2, 0x70, 0x92, 0x76, 0xe5, 0x2e,
+       0x13, 0x13, 0x54, 0x3f, 0xf5, 0x2e, 0xc2, 0x77, 0xd2, 0x76, 0x30,
+       0x17, 0x0d, 0x53, 0x2e, 0xf0, 0xe5, 0x2e, 0x45, 0x5d, 0x90, 0x10,
+       0x2f, 0xf0, 0x80, 0x06, 0x90, 0x10, 0x2f, 0xe5, 0x2e, 0xf0, 0xe5,
+       0x47, 0x64, 0x06, 0x70, 0x47, 0x90, 0x02, 0x28, 0xe0, 0x30, 0x47,
+       0x03, 0xff, 0x80, 0x02, 0xf4, 0xff, 0x8f, 0x27, 0x90, 0x02, 0x29,
+       0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x43, 0xc4, 0x54, 0x0f, 0x14, 0x60,
+       0x0c, 0x24, 0xfe, 0x60, 0x0c, 0x24, 0x03, 0x70, 0x13, 0xc2, 0x38,
+       0x80, 0x0f, 0xd2, 0x38, 0x80, 0x0b, 0xe5, 0x46, 0x30, 0xe2, 0x03,
+       0xd3, 0x80, 0x01, 0xc3, 0x92, 0x38, 0x30, 0x47, 0x05, 0xaf, 0x27,
+       0x02, 0x07, 0xe8, 0xe5, 0x27, 0xf4, 0xff, 0x02, 0x07, 0xe8, 0xe5,
+       0x47, 0x64, 0x07, 0x60, 0x0f, 0xe5, 0x47, 0x64, 0x08, 0x60, 0x09,
+       0xe5, 0x47, 0x64, 0x09, 0x60, 0x03, 0x02, 0x07, 0x56, 0x90, 0x02,
+       0x28, 0xe0, 0x30, 0x47, 0x03, 0xff, 0x80, 0x02, 0xf4, 0xff, 0x8f,
+       0x27, 0x90, 0x02, 0x29, 0xe0, 0x54, 0xfc, 0xf0, 0xe5, 0x3a, 0x14,
+       0x60, 0x22, 0x14, 0x60, 0x25, 0x14, 0x60, 0x2d, 0x24, 0xfc, 0x60,
+       0x49, 0x24, 0xf9, 0x60, 0x14, 0x24, 0x0e, 0x70, 0x50, 0xe5, 0x46,
+       0x13, 0x13, 0x54, 0x3f, 0x75, 0xf0, 0x03, 0x84, 0xe5, 0xf0, 0x24,
+       0xff, 0x80, 0x3a, 0xd2, 0x39, 0xc2, 0x38, 0x80, 0x3e, 0xe5, 0x46,
+       0x30, 0xe2, 0x03, 0xd3, 0x80, 0x1d, 0xc3, 0x80, 0x1a, 0xe5, 0x46,
+       0x30, 0xe2, 0x0d, 0x54, 0x38, 0xc3, 0x94, 0x30, 0x50, 0x06, 0x7e,
+       0x00, 0x7f, 0x01, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x00, 0xee, 0x4f,
+       0x24, 0xff, 0x92, 0x38, 0xc2, 0x39, 0x80, 0x13, 0xe5, 0x46, 0x30,
+       0xe2, 0x03, 0xd3, 0x80, 0x01, 0xc3, 0x92, 0x39, 0xc2, 0x38, 0x80,
+       0x04, 0xc2, 0x38, 0xc2, 0x39, 0x30, 0x47, 0x04, 0xaf, 0x27, 0x80,
+       0x04, 0xe5, 0x27, 0xf4, 0xff, 0x02, 0x07, 0xe8, 0xe5, 0x47, 0x64,
+       0x0c, 0x60, 0x09, 0xe5, 0x47, 0x64, 0x0b, 0x60, 0x03, 0x02, 0x07,
+       0xed, 0x90, 0x02, 0x28, 0xe0, 0x30, 0x47, 0x03, 0xff, 0x80, 0x02,
+       0xf4, 0xff, 0x8f, 0x27, 0x90, 0x02, 0x29, 0xe0, 0x54, 0xfd, 0xf0,
+       0xe5, 0x3a, 0x14, 0x60, 0x20, 0x14, 0x60, 0x21, 0x14, 0x60, 0x2b,
+       0x24, 0xfc, 0x60, 0x45, 0x24, 0xf9, 0x60, 0x12, 0x24, 0x0e, 0x70,
+       0x4a, 0xe5, 0x46, 0x13, 0x13, 0x54, 0x3f, 0x75, 0xf0, 0x03, 0x84,
+       0xe5, 0xf0, 0x80, 0x29, 0xd2, 0x39, 0x80, 0x3a, 0xe5, 0x46, 0x30,
+       0xe2, 0x03, 0xd3, 0x80, 0x01, 0xc3, 0x92, 0x39, 0x80, 0x2d, 0xe5,
+       0x46, 0x30, 0xe2, 0x0d, 0x54, 0x38, 0xc3, 0x94, 0x30, 0x50, 0x06,
+       0x7e, 0x00, 0x7f, 0x01, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x00, 0xee,
+       0x4f, 0x24, 0xff, 0x92, 0x39, 0x80, 0x0f, 0xe5, 0x46, 0x30, 0xe2,
+       0x03, 0xd3, 0x80, 0x01, 0xc3, 0x92, 0x39, 0x80, 0x02, 0xc2, 0x39,
+       0x30, 0x47, 0x04, 0xaf, 0x27, 0x80, 0x04, 0xe5, 0x27, 0xf4, 0xff,
+       0x90, 0x02, 0x28, 0xef, 0xf0, 0x22, 0xe4, 0xf5, 0x30, 0xc2, 0xaf,
+       0xe5, 0x51, 0x14, 0x60, 0x47, 0x14, 0x60, 0x65, 0x24, 0x02, 0x60,
+       0x03, 0x02, 0x09, 0x49, 0xd2, 0x59, 0x75, 0x55, 0x01, 0x90, 0x02,
+       0x08, 0xe0, 0x54, 0xfe, 0xf0, 0xe0, 0x20, 0xe1, 0x23, 0x90, 0x04,
+       0x34, 0xe0, 0xb4, 0x02, 0x1c, 0xa3, 0xe0, 0xb4, 0x02, 0x17, 0xa3,
+       0xe0, 0xb4, 0x02, 0x12, 0x7f, 0x20, 0x12, 0x00, 0x06, 0x90, 0x10,
+       0x04, 0xe0, 0x54, 0xf3, 0xf0, 0x75, 0x51, 0x01, 0x02, 0x09, 0x49,
+       0xe5, 0x50, 0x70, 0x06, 0x75, 0x30, 0x03, 0x02, 0x09, 0x49, 0x90,
+       0x12, 0x00, 0xe0, 0x54, 0x03, 0x70, 0x12, 0x7f, 0x20, 0x12, 0x00,
+       0x06, 0x90, 0x02, 0x08, 0xe0, 0x54, 0xfb, 0xf0, 0x75, 0x51, 0x02,
+       0x02, 0x09, 0x49, 0xe5, 0x50, 0x70, 0x03, 0x02, 0x09, 0x44, 0x90,
+       0x02, 0x08, 0xe0, 0x30, 0xe3, 0x03, 0x02, 0x09, 0x40, 0x90, 0x04,
+       0x37, 0xe0, 0x64, 0x22, 0x60, 0x03, 0x02, 0x09, 0x40, 0x90, 0x12,
+       0x04, 0x74, 0x0a, 0xf0, 0xe5, 0x58, 0x30, 0xe3, 0x1c, 0x90, 0x00,
+       0x02, 0xe0, 0x30, 0xe0, 0x15, 0xe4, 0x90, 0x05, 0x00, 0xf0, 0xa3,
+       0x74, 0x08, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0x74, 0x03, 0xf0, 0x7f,
+       0x01, 0x12, 0x0e, 0xe9, 0x90, 0x13, 0x28, 0xe0, 0x90, 0x70, 0x1a,
+       0xf0, 0x90, 0x13, 0x29, 0xe0, 0x90, 0x70, 0x1b, 0xf0, 0x90, 0x13,
+       0x2b, 0xe0, 0x90, 0x70, 0x22, 0xf0, 0x90, 0x13, 0x28, 0xe0, 0x54,
+       0xf0, 0xf0, 0xa3, 0xe0, 0x54, 0xf0, 0xf0, 0x90, 0x13, 0x2b, 0xe0,
+       0x54, 0xcc, 0xf0, 0xe5, 0x58, 0x30, 0xe3, 0x17, 0xe5, 0x25, 0x70,
+       0x13, 0xe5, 0x3c, 0xf4, 0x90, 0x13, 0x2a, 0x60, 0x05, 0xe0, 0x54,
+       0xf3, 0x80, 0x11, 0xe0, 0x54, 0xfb, 0xf0, 0x80, 0x14, 0xe5, 0x3c,
+       0xf4, 0x90, 0x13, 0x2a, 0x60, 0x08, 0xe0, 0x54, 0xf2, 0x45, 0x3c,
+       0xf0, 0x80, 0x04, 0xe0, 0x54, 0xfa, 0xf0, 0x90, 0x04, 0x01, 0xe0,
+       0x44, 0x10, 0xf0, 0x75, 0x8c, 0x80, 0xe0, 0x54, 0xfd, 0xf0, 0x90,
+       0x12, 0x04, 0xe0, 0x44, 0x04, 0xf0, 0xe5, 0x58, 0x30, 0xe0, 0x06,
+       0x90, 0x01, 0x0d, 0xe0, 0xf5, 0x24, 0xe5, 0x25, 0xd3, 0x94, 0x01,
+       0x40, 0x17, 0x20, 0x02, 0x14, 0x20, 0x03, 0x11, 0x30, 0x4f, 0x0e,
+       0x90, 0x01, 0x0d, 0xe0, 0x54, 0xfb, 0xf0, 0x90, 0x01, 0x0c, 0xe0,
+       0x54, 0xfd, 0xf0, 0x75, 0x30, 0x01, 0x75, 0x55, 0x02, 0xe4, 0xf5,
+       0x51, 0x80, 0x09, 0xe5, 0x50, 0x70, 0x05, 0x75, 0x30, 0x03, 0xf5,
+       0x51, 0xe5, 0x30, 0x60, 0x15, 0xc2, 0x01, 0xe4, 0xf5, 0x51, 0xc2,
+       0x59, 0xad, 0x30, 0xaf, 0x40, 0x12, 0x0d, 0x42, 0xe5, 0x30, 0xb4,
+       0x03, 0x02, 0xd2, 0x03, 0xd2, 0xaf, 0x22, 0xc2, 0xaf, 0x30, 0x01,
+       0x0e, 0xe4, 0xf5, 0x51, 0xc2, 0x59, 0xc2, 0x01, 0x7d, 0x02, 0xaf,
+       0x40, 0x12, 0x0d, 0x42, 0xe5, 0x52, 0x14, 0x60, 0x48, 0x14, 0x60,
+       0x25, 0x24, 0x02, 0x60, 0x03, 0x02, 0x0a, 0x5b, 0xe5, 0x25, 0xd3,
+       0x94, 0x01, 0x40, 0x11, 0x90, 0x01, 0x0c, 0xe0, 0x44, 0x02, 0xf0,
+       0xa3, 0xe0, 0x44, 0x04, 0xf0, 0x7f, 0x0a, 0x12, 0x0e, 0xe9, 0x75,
+       0x52, 0x02, 0x75, 0x55, 0x03, 0xe5, 0x58, 0x30, 0xe0, 0x06, 0x90,
+       0x01, 0x0d, 0xe5, 0x24, 0xf0, 0x90, 0x12, 0x04, 0xe0, 0x54, 0xfb,
+       0xf0, 0x7f, 0x20, 0x12, 0x00, 0x0e, 0x75, 0x52, 0x01, 0x75, 0x55,
+       0x03, 0x02, 0x0a, 0x5b, 0xe5, 0x54, 0x60, 0x03, 0x02, 0x0a, 0x5b,
+       0x90, 0x04, 0x01, 0xe0, 0x44, 0x0e, 0xf0, 0xe0, 0x54, 0xef, 0xf0,
+       0xe4, 0xf5, 0x8c, 0xe5, 0x58, 0x54, 0x18, 0x60, 0x1e, 0x90, 0x70,
+       0x1a, 0xe0, 0x90, 0x13, 0x28, 0xf0, 0x90, 0x70, 0x1b, 0xe0, 0x90,
+       0x13, 0x29, 0xf0, 0xa3, 0x74, 0x05, 0xf0, 0x90, 0x70, 0x22, 0xe0,
+       0x90, 0x13, 0x2b, 0xf0, 0x80, 0x11, 0x90, 0x13, 0x28, 0xe0, 0x44,
+       0x0f, 0xf0, 0xa3, 0xe0, 0x44, 0x0f, 0xf0, 0xa3, 0xe0, 0x44, 0x05,
+       0xf0, 0x90, 0x12, 0x04, 0x74, 0x03, 0xf0, 0xe5, 0x58, 0x30, 0xe3,
+       0x1d, 0x90, 0x00, 0x02, 0xe0, 0x30, 0xe0, 0x16, 0x90, 0x05, 0x00,
+       0x74, 0xe2, 0xf0, 0xa3, 0x74, 0x08, 0xf0, 0xa3, 0x74, 0x01, 0xf0,
+       0x74, 0x03, 0xf0, 0x7f, 0x01, 0x12, 0x0e, 0xe9, 0x90, 0x02, 0x08,
+       0xe0, 0x44, 0x05, 0xf0, 0x90, 0x10, 0x04, 0xe0, 0x44, 0x0c, 0xf0,
+       0xe4, 0xf5, 0x52, 0xf5, 0x55, 0x30, 0x02, 0x09, 0xc2, 0x02, 0x7d,
+       0x01, 0xaf, 0x41, 0x12, 0x0d, 0x42, 0x30, 0x03, 0x02, 0xc2, 0x03,
+       0xd2, 0xaf, 0x22, 0xc2, 0x4b, 0xc2, 0x4c, 0xe5, 0x44, 0x12, 0x0d,
+       0xc5, 0x0a, 0x80, 0x00, 0x0b, 0x0e, 0x04, 0x0b, 0x0a, 0x08, 0x0a,
+       0xea, 0x10, 0x0a, 0x94, 0x20, 0x0a, 0xb4, 0x60, 0x0a, 0xc5, 0xa0,
+       0x00, 0x00, 0x0b, 0x10, 0x85, 0x48, 0x43, 0x85, 0x4a, 0x42, 0x85,
+       0x4c, 0x5e, 0xe5, 0x47, 0x64, 0x06, 0x60, 0x03, 0x02, 0x0b, 0x10,
+       0x80, 0x1b, 0xe5, 0x48, 0xc4, 0x54, 0x0f, 0xf5, 0x43, 0xe5, 0x4a,
+       0xc4, 0x54, 0x0f, 0xf5, 0x42, 0xe5, 0x4c, 0xc4, 0x54, 0x0f, 0xf5,
+       0x5e, 0xe5, 0x47, 0x64, 0x06, 0x70, 0x61, 0x53, 0x43, 0x0f, 0x80,
+       0x5c, 0x85, 0x49, 0x43, 0x85, 0x4b, 0x42, 0x85, 0x4d, 0x5e, 0xe5,
+       0x47, 0x64, 0x06, 0x70, 0x4d, 0x80, 0x1b, 0xe5, 0x49, 0xc4, 0x54,
+       0x0f, 0xf5, 0x43, 0xe5, 0x4b, 0xc4, 0x54, 0x0f, 0xf5, 0x42, 0xe5,
+       0x4d, 0xc4, 0x54, 0x0f, 0xf5, 0x5e, 0xe5, 0x47, 0x64, 0x06, 0x70,
+       0x30, 0xe5, 0x43, 0x54, 0x0f, 0x44, 0x10, 0xf5, 0x43, 0x80, 0x26,
+       0xe5, 0x47, 0x64, 0x04, 0x60, 0x05, 0xe5, 0x47, 0xb4, 0x05, 0x06,
+       0x43, 0x5e, 0x04, 0x75, 0x42, 0x09, 0xe5, 0x47, 0xb4, 0x06, 0x10,
+       0xe5, 0x43, 0x54, 0x0f, 0x44, 0x30, 0xf5, 0x43, 0x80, 0x06, 0xd2,
+       0x4b, 0x80, 0x02, 0xd2, 0x4c, 0xe4, 0xf5, 0x2a, 0xe5, 0x42, 0xc4,
+       0x54, 0xf0, 0xff, 0xe5, 0x43, 0x54, 0x0f, 0x4f, 0xf5, 0x5f, 0xd2,
+       0x60, 0x22, 0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0,
+       0xd0, 0x75, 0xd0, 0x18, 0xc2, 0xaf, 0x30, 0x45, 0x03, 0x12, 0x0f,
+       0x57, 0x90, 0x04, 0x16, 0xe0, 0x30, 0xe3, 0x03, 0x74, 0x08, 0xf0,
+       0x90, 0x04, 0x14, 0xe0, 0x20, 0xe7, 0x03, 0x02, 0x0b, 0xd0, 0x74,
+       0x80, 0xf0, 0x90, 0x70, 0x12, 0xe0, 0xf5, 0x2f, 0x90, 0x04, 0x04,
+       0xe0, 0x24, 0xcf, 0x60, 0x30, 0x14, 0x60, 0x42, 0x24, 0xe2, 0x60,
+       0x47, 0x14, 0x60, 0x55, 0x24, 0x21, 0x70, 0x60, 0xe5, 0x55, 0x24,
+       0xfe, 0x60, 0x07, 0x14, 0x60, 0x08, 0x24, 0x02, 0x70, 0x08, 0x7d,
+       0x01, 0x80, 0x28, 0x7d, 0x02, 0x80, 0x24, 0x90, 0x70, 0x10, 0xe0,
+       0xf5, 0x50, 0x85, 0x2f, 0x40, 0xd2, 0x01, 0x80, 0x3e, 0xe5, 0x55,
+       0x64, 0x03, 0x60, 0x04, 0xe5, 0x55, 0x70, 0x04, 0x7d, 0x02, 0x80,
+       0x09, 0x85, 0x2f, 0x41, 0xd2, 0x02, 0x80, 0x29, 0xad, 0x55, 0xaf,
+       0x2f, 0x12, 0x0d, 0xeb, 0x80, 0x20, 0x90, 0x70, 0x10, 0xe0, 0xf5,
+       0x47, 0x90, 0x70, 0x11, 0xe0, 0xf5, 0x44, 0x12, 0x0f, 0x48, 0x80,
+       0x06, 0x90, 0x70, 0x10, 0xe0, 0xf5, 0x45, 0xe4, 0xfd, 0xaf, 0x2f,
+       0x12, 0x0d, 0xeb, 0xd2, 0x04, 0x90, 0x70, 0x13, 0xe4, 0xf0, 0x90,
+       0x70, 0x13, 0xe4, 0xf0, 0xd2, 0xaf, 0xd0, 0xd0, 0xd0, 0x82, 0xd0,
+       0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0xc0, 0xe0, 0xc0, 0xf0, 0xc0,
+       0x83, 0xc0, 0x82, 0xc0, 0xd0, 0xe8, 0xc0, 0xe0, 0xe9, 0xc0, 0xe0,
+       0xea, 0xc0, 0xe0, 0xeb, 0xc0, 0xe0, 0xec, 0xc0, 0xe0, 0xed, 0xc0,
+       0xe0, 0xee, 0xc0, 0xe0, 0xef, 0xc0, 0xe0, 0xc2, 0xaf, 0x30, 0x45,
+       0x03, 0x12, 0x0f, 0x60, 0xd2, 0xaf, 0xd0, 0xe0, 0xff, 0xd0, 0xe0,
+       0xfe, 0xd0, 0xe0, 0xfd, 0xd0, 0xe0, 0xfc, 0xd0, 0xe0, 0xfb, 0xd0,
+       0xe0, 0xfa, 0xd0, 0xe0, 0xf9, 0xd0, 0xe0, 0xf8, 0xd0, 0xd0, 0xd0,
+       0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0xc0, 0xe0, 0xc0,
+       0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x10, 0xc2,
+       0xaf, 0x30, 0x45, 0x03, 0x12, 0x0f, 0x5a, 0x30, 0x58, 0x0a, 0xe5,
+       0x54, 0x60, 0x04, 0x15, 0x54, 0x80, 0x02, 0xc2, 0x58, 0x30, 0x59,
+       0x0a, 0xe5, 0x50, 0x60, 0x04, 0x15, 0x50, 0x80, 0x02, 0xc2, 0x59,
+       0xd5, 0x53, 0x07, 0x30, 0x60, 0x04, 0x15, 0x46, 0xd2, 0x04, 0x30,
+       0x45, 0x03, 0x12, 0x0f, 0x5d, 0xc2, 0x8d, 0xd2, 0xaf, 0xd0, 0xd0,
+       0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0x90, 0x70,
+       0x2a, 0xe0, 0x30, 0xe1, 0x43, 0xc2, 0xaf, 0x90, 0x70, 0x28, 0xe0,
+       0x90, 0x10, 0x1c, 0xf0, 0x90, 0x70, 0x29, 0xe0, 0x90, 0x10, 0x1d,
+       0xf0, 0x90, 0x70, 0x2a, 0xe0, 0x90, 0x10, 0x1e, 0xf0, 0x90, 0x10,
+       0x1c, 0xe0, 0xf5, 0x30, 0x90, 0x10, 0x1e, 0xe0, 0x20, 0xe1, 0xf3,
+       0x90, 0x10, 0x1c, 0xe0, 0x90, 0x70, 0x28, 0xf0, 0x90, 0x10, 0x1d,
+       0xe0, 0x90, 0x70, 0x29, 0xf0, 0x90, 0x10, 0x1e, 0xe0, 0x90, 0x70,
+       0x2a, 0xf0, 0xc2, 0x05, 0xd2, 0xaf, 0x22, 0x12, 0x0e, 0x8c, 0x30,
+       0x45, 0x03, 0x12, 0x0f, 0x51, 0x30, 0x01, 0x06, 0x20, 0x09, 0x03,
+       0x12, 0x0f, 0x4b, 0x30, 0x02, 0x06, 0x20, 0x0a, 0x03, 0x12, 0x0f,
+       0x4e, 0x30, 0x03, 0x06, 0x20, 0x0b, 0x03, 0x12, 0x0f, 0x4e, 0x30,
+       0x04, 0x06, 0x20, 0x0c, 0x03, 0x12, 0x00, 0x16, 0x20, 0x13, 0x09,
+       0x20, 0x11, 0x06, 0xe5, 0x2b, 0x45, 0x2c, 0x60, 0x03, 0xd3, 0x80,
+       0x01, 0xc3, 0x92, 0xa9, 0x12, 0x0e, 0xd5, 0x80, 0xbf, 0x30, 0x14,
+       0x30, 0x90, 0x70, 0x19, 0xe0, 0x55, 0x27, 0xff, 0x90, 0x70, 0x18,
+       0xe0, 0x4f, 0xf5, 0x27, 0x90, 0x02, 0x29, 0xe0, 0xff, 0x90, 0x70,
+       0x19, 0xe0, 0xfe, 0xef, 0x5e, 0x90, 0x02, 0x29, 0xf0, 0x30, 0x47,
+       0x04, 0xaf, 0x27, 0x80, 0x04, 0xe5, 0x27, 0xf4, 0xff, 0x90, 0x02,
+       0x28, 0xef, 0xf0, 0xc2, 0x14, 0x22, 0xef, 0xf4, 0x60, 0x2d, 0xe4,
+       0xfe, 0x74, 0x14, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x70, 0xf5, 0x83,
+       0xe0, 0xb4, 0xff, 0x19, 0x74, 0x14, 0x2e, 0xf5, 0x82, 0xe4, 0x34,
+       0x70, 0xf5, 0x83, 0xef, 0xf0, 0x74, 0x1c, 0x2e, 0xf5, 0x82, 0xe4,
+       0x34, 0x70, 0xf5, 0x83, 0xed, 0xf0, 0x22, 0x0e, 0xbe, 0x04, 0xd5,
+       0x22, 0xe5, 0x47, 0xb4, 0x0b, 0x10, 0x90, 0x02, 0x29, 0xe0, 0x54,
+       0xeb, 0xf0, 0xe5, 0x27, 0x54, 0xeb, 0x45, 0x45, 0xf5, 0x27, 0x22,
+       0xe4, 0x90, 0x02, 0x29, 0xf0, 0x30, 0x47, 0x04, 0xaf, 0x45, 0x80,
+       0x04, 0xe5, 0x45, 0xf4, 0xff, 0x90, 0x02, 0x28, 0xef, 0xf0, 0x22,
+       0xc2, 0x43, 0xd2, 0x45, 0xe4, 0xf5, 0x20, 0xf5, 0x21, 0xf5, 0x53,
+       0xf5, 0x46, 0xf5, 0x2b, 0xf5, 0x2c, 0xc2, 0x42, 0xf5, 0x51, 0xf5,
+       0x52, 0xf5, 0x55, 0x90, 0x04, 0x18, 0x74, 0x80, 0xf0, 0x90, 0x04,
+       0x1a, 0x74, 0x08, 0xf0, 0x22, 0xd0, 0x83, 0xd0, 0x82, 0xf8, 0xe4,
+       0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0d, 0xa3, 0xa3, 0x93,
+       0xf8, 0x74, 0x01, 0x93, 0xf5, 0x82, 0x88, 0x83, 0xe4, 0x73, 0x74,
+       0x02, 0x93, 0x68, 0x60, 0xef, 0xa3, 0xa3, 0xa3, 0x80, 0xdf, 0xef,
+       0xf4, 0x60, 0x1f, 0xe4, 0xfe, 0x12, 0x0f, 0x28, 0xe0, 0xb4, 0xff,
+       0x12, 0x12, 0x0f, 0x28, 0xef, 0xf0, 0x74, 0x1c, 0x2e, 0xf5, 0x82,
+       0xe4, 0x34, 0x70, 0xf5, 0x83, 0xed, 0xf0, 0x22, 0x0e, 0xbe, 0x04,
+       0xe3, 0x22, 0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0,
+       0xd0, 0x75, 0xd0, 0x08, 0xc2, 0xaf, 0x30, 0x45, 0x03, 0x12, 0x0f,
+       0x54, 0xd2, 0xaf, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0,
+       0xd0, 0xe0, 0x32, 0xd2, 0x15, 0xe5, 0x47, 0x24, 0xf5, 0x60, 0x0b,
+       0x24, 0xcb, 0x60, 0x07, 0x24, 0x40, 0x70, 0x06, 0xc2, 0x15, 0x22,
+       0x12, 0x0d, 0x74, 0x12, 0x04, 0x92, 0xc2, 0x15, 0xc2, 0xaf, 0xc2,
+       0x04, 0xd2, 0xaf, 0x22, 0xe5, 0x53, 0x70, 0x1a, 0x30, 0x60, 0x09,
+       0xb2, 0x4d, 0x30, 0x4d, 0x04, 0x05, 0x46, 0xc2, 0x04, 0xe5, 0x4f,
+       0x45, 0x4e, 0x60, 0x08, 0xe5, 0x4f, 0x15, 0x4f, 0x70, 0x02, 0x15,
+       0x4e, 0x22, 0x90, 0x10, 0x1c, 0xed, 0xf0, 0xa3, 0xef, 0xf0, 0xa3,
+       0x74, 0x0a, 0xf0, 0x90, 0x10, 0x1c, 0xe0, 0xf5, 0x58, 0x90, 0x10,
+       0x1e, 0xe0, 0x20, 0xe1, 0xf3, 0x22, 0xc2, 0xaf, 0x12, 0x0e, 0xff,
+       0x12, 0x0d, 0x9f, 0x12, 0x0e, 0xbe, 0xe4, 0xf5, 0x22, 0xf5, 0x47,
+       0x90, 0x04, 0x00, 0x74, 0x80, 0xf0, 0xd2, 0xaf, 0x22, 0x90, 0x10,
+       0x1d, 0xef, 0xf0, 0xa3, 0x74, 0x0b, 0xf0, 0x90, 0x10, 0x1c, 0xe0,
+       0xf5, 0x58, 0x90, 0x10, 0x1e, 0xe0, 0x20, 0xe1, 0xf3, 0xaf, 0x58,
+       0x22, 0x75, 0x89, 0x02, 0xe4, 0xf5, 0x8c, 0xf5, 0x8a, 0xf5, 0x88,
+       0xf5, 0xb8, 0xf5, 0xe8, 0x75, 0x90, 0x18, 0xd2, 0x8c, 0x75, 0xa8,
+       0x05, 0x22, 0x30, 0x45, 0x03, 0x12, 0x0f, 0x63, 0xe5, 0x20, 0x70,
+       0x03, 0x20, 0x10, 0x03, 0x30, 0x11, 0x03, 0x43, 0x87, 0x01, 0x22,
+       0xce, 0xef, 0xce, 0xee, 0x60, 0x08, 0x7f, 0xff, 0x12, 0x0e, 0xf8,
+       0x1e, 0x80, 0xf5, 0x22, 0xef, 0x60, 0x03, 0x1f, 0x80, 0xfa, 0x22,
+       0x22, 0xc0, 0x26, 0x74, 0x0f, 0xc0, 0xe0, 0xc0, 0x82, 0xc0, 0x83,
+       0x75, 0x26, 0x0a, 0x22, 0xc0, 0x26, 0x74, 0x0f, 0xc0, 0xe0, 0xc0,
+       0x82, 0xc0, 0x83, 0x75, 0x26, 0x18, 0x22, 0x78, 0x7f, 0xe4, 0xf6,
+       0xd8, 0xfd, 0x75, 0x81, 0x5f, 0x02, 0x0c, 0xca, 0x74, 0x14, 0x2e,
+       0xf5, 0x82, 0xe4, 0x34, 0x70, 0xf5, 0x83, 0x22, 0xef, 0x90, 0x0f,
+       0x3c, 0x93, 0x90, 0x0f, 0x00, 0x73, 0x0a, 0x18, 0x30, 0x05, 0x06,
+       0x20, 0x0d, 0x03, 0x12, 0x0c, 0x7f, 0x22, 0x02, 0x0a, 0x5e, 0x02,
+       0x07, 0xee, 0x02, 0x09, 0x65, 0x02, 0x0f, 0x3e, 0x02, 0x0f, 0x67,
+       0x02, 0x00, 0x1e, 0x02, 0x0f, 0x68, 0x02, 0x0e, 0x53, 0x02, 0x0f,
+       0x69, 0x02, 0x0d, 0x0e, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x25, 0x13, 0x66,
 };
Index: sys/dev/pci/if_ral_pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_ral_pci.c,v
retrieving revision 1.26
diff -u -p -r1.26 if_ral_pci.c
--- sys/dev/pci/if_ral_pci.c    31 May 2017 03:45:15 -0000      1.26
+++ sys/dev/pci/if_ral_pci.c    18 Sep 2018 00:43:07 -0000
@@ -133,6 +133,7 @@ const struct pci_matchid ral_pci_devices
        { PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT3090 },
        { PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT3091 },
        { PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT3092 },
+       { PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT3290 },
        { PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT3562 },
        { PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT3592 },
        { PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT3593 },

Reply via email to