> 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 }, > >
