> Date: Mon, 17 Sep 2018 21:34:06 -0400
> From: James Hastings <[email protected]>
> 
> 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.

The diff got mangled somehow.  Can you try sending it again using a
mail client that doesn't use format=flowed?

> 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