Update ralink2860 to Korli's version from ticket #8325.
This commit is contained in:
@@ -13,14 +13,20 @@ SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ]
|
||||
|
||||
UseHeaders [ FDirName $(SUBDIR) ] : true ;
|
||||
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) dev rt2860 ] ;
|
||||
UseHeaders [ FDirName $(SUBDIR) dev rt2860 ] : true ;
|
||||
|
||||
KernelAddon ralink2860 :
|
||||
glue.c
|
||||
rt2860.c
|
||||
rt2860_io.c
|
||||
rt2860_read_eeprom.c
|
||||
rt2860_led.c
|
||||
rt2860_rf.c
|
||||
rt2860_amrr.c
|
||||
rt2860_io.c
|
||||
rt2860_led.c
|
||||
rt2860_nexus.c
|
||||
rt2860_pci.c
|
||||
rt2860_read_eeprom.c
|
||||
rt2860_rf.c
|
||||
|
||||
:
|
||||
libfreebsd_wlan.a
|
||||
libfreebsd_network.a
|
||||
|
||||
+119
-128
@@ -16,28 +16,22 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "rt2860_softc.h"
|
||||
#include "rt2860_reg.h"
|
||||
#include "rt2860_eeprom.h"
|
||||
#include "rt2860_ucode.h"
|
||||
#include "rt2860_txwi.h"
|
||||
#include "rt2860_rxwi.h"
|
||||
#include "rt2860_io.h"
|
||||
#include "rt2860_read_eeprom.h"
|
||||
#include "rt2860_led.h"
|
||||
#include "rt2860_rf.h"
|
||||
#include "rt2860_debug.h"
|
||||
#include <dev/rt2860/rt2860_softc.h>
|
||||
#include <dev/rt2860/rt2860_reg.h>
|
||||
#include <dev/rt2860/rt2860_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_ucode.h>
|
||||
#include <dev/rt2860/rt2860_txwi.h>
|
||||
#include <dev/rt2860/rt2860_rxwi.h>
|
||||
#include <dev/rt2860/rt2860_io.h>
|
||||
#include <dev/rt2860/rt2860_read_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_led.h>
|
||||
#include <dev/rt2860/rt2860_rf.h>
|
||||
#include <dev/rt2860/rt2860_debug.h>
|
||||
|
||||
/*
|
||||
* Defines and macros
|
||||
*/
|
||||
|
||||
#define PCI_VENDOR_RALINK 0x1814
|
||||
#define PCI_PRODUCT_RALINK_RT2860_PCI 0x0601
|
||||
#define PCI_PRODUCT_RALINK_RT2860_PCIe 0x0681
|
||||
#define PCI_PRODUCT_RALINK_RT2760_PCI 0x0701
|
||||
#define PCI_PRODUCT_RALINK_RT2790_PCIe 0x0781
|
||||
|
||||
#define RT2860_MAX_AGG_SIZE 3840
|
||||
|
||||
#define RT2860_TX_DATA_SEG0_SIZE \
|
||||
@@ -57,32 +51,23 @@
|
||||
#define RT2860_WCID_MCAST 0xf7
|
||||
|
||||
/*
|
||||
* Data structures and types
|
||||
* Global function prototypes, used in bus depended interfaces
|
||||
*/
|
||||
|
||||
struct rt2860_pci_ident
|
||||
{
|
||||
uint16_t vendor;
|
||||
uint16_t device;
|
||||
const char *name;
|
||||
};
|
||||
int rt2860_attach(device_t dev);
|
||||
|
||||
int rt2860_detach(device_t dev);
|
||||
|
||||
int rt2860_shutdown(device_t dev);
|
||||
|
||||
int rt2860_suspend(device_t dev);
|
||||
|
||||
int rt2860_resume(device_t dev);
|
||||
|
||||
/*
|
||||
* Static function prototypes
|
||||
*/
|
||||
|
||||
static int rt2860_probe(device_t dev);
|
||||
|
||||
static int rt2860_attach(device_t dev);
|
||||
|
||||
static int rt2860_detach(device_t dev);
|
||||
|
||||
static int rt2860_shutdown(device_t dev);
|
||||
|
||||
static int rt2860_suspend(device_t dev);
|
||||
|
||||
static int rt2860_resume(device_t dev);
|
||||
|
||||
static void rt2860_init_channels(struct rt2860_softc *sc);
|
||||
|
||||
static void rt2860_init_channels_ht40(struct rt2860_softc *sc);
|
||||
@@ -253,9 +238,11 @@ static int rt2860_tx_mgmt(struct rt2860_softc *sc,
|
||||
static int rt2860_tx_data(struct rt2860_softc *sc,
|
||||
struct mbuf *m, struct ieee80211_node *ni, int qid);
|
||||
|
||||
/*
|
||||
static int rt2860_tx_raw(struct rt2860_softc *sc,
|
||||
struct mbuf *m, struct ieee80211_node *ni,
|
||||
const struct ieee80211_bpf_params *params);
|
||||
*/
|
||||
|
||||
static void rt2860_intr(void *arg);
|
||||
|
||||
@@ -341,15 +328,6 @@ static void rt2860_sysctl_attach(struct rt2860_softc *sc);
|
||||
* Static variables
|
||||
*/
|
||||
|
||||
static const struct rt2860_pci_ident rt2860_pci_ids[] =
|
||||
{
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2860_PCI, "Ralink RT2860 PCI" },
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2860_PCIe, "Ralink RT2860 PCIe" },
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2760_PCI, "Ralink RT2760 PCI" },
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2790_PCIe, "Ralink RT2790 PCIe" },
|
||||
{ 0, 0, NULL }
|
||||
};
|
||||
|
||||
static const struct
|
||||
{
|
||||
uint32_t reg;
|
||||
@@ -423,35 +401,16 @@ SYSCTL_INT(_hw_rt2860, OID_AUTO, tx_stbc, CTLFLAG_RW, &rt2860_tx_stbc, 0, "RT286
|
||||
TUNABLE_INT("hw.rt2860.tx_stbc", &rt2860_tx_stbc);
|
||||
|
||||
#ifdef RT2860_DEBUG
|
||||
//static int rt2860_debug = 0xffffffff;
|
||||
static int rt2860_debug = 0;
|
||||
SYSCTL_INT(_hw_rt2860, OID_AUTO, debug, CTLFLAG_RW, &rt2860_debug, 0, "RT2860 debug level");
|
||||
TUNABLE_INT("hw.rt2860.debug", &rt2860_debug);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* rt2860_probe
|
||||
*/
|
||||
static int rt2860_probe(device_t dev)
|
||||
{
|
||||
const struct rt2860_pci_ident *ident;
|
||||
|
||||
for (ident = rt2860_pci_ids; ident->name != NULL; ident++)
|
||||
{
|
||||
if (pci_get_vendor(dev) == ident->vendor &&
|
||||
pci_get_device(dev) == ident->device)
|
||||
{
|
||||
device_set_desc(dev, ident->name);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return ENXIO;
|
||||
}
|
||||
|
||||
/*
|
||||
* rt2860_attach
|
||||
*/
|
||||
static int rt2860_attach(device_t dev)
|
||||
int rt2860_attach(device_t dev)
|
||||
{
|
||||
struct rt2860_softc *sc;
|
||||
struct ifnet *ifp;
|
||||
@@ -460,23 +419,11 @@ static int rt2860_attach(device_t dev)
|
||||
|
||||
sc = device_get_softc(dev);
|
||||
|
||||
if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0)
|
||||
{
|
||||
printf("%s: chip is in D%d power mode, setting to D0\n",
|
||||
device_get_nameunit(dev), pci_get_powerstate(dev));
|
||||
pci_set_powerstate(dev, PCI_POWERSTATE_D0);
|
||||
}
|
||||
|
||||
/* enable bus-mastering */
|
||||
|
||||
pci_enable_busmaster(dev);
|
||||
|
||||
sc->dev = dev;
|
||||
|
||||
mtx_init(&sc->lock, device_get_nameunit(dev),
|
||||
MTX_NETWORK_LOCK, MTX_DEF | MTX_RECURSE);
|
||||
|
||||
sc->mem_rid = PCIR_BAR(0);
|
||||
sc->mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
|
||||
&sc->mem_rid, RF_ACTIVE);
|
||||
if (sc->mem == NULL)
|
||||
@@ -487,9 +434,10 @@ static int rt2860_attach(device_t dev)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
||||
sc->bst = rman_get_bustag(sc->mem);
|
||||
sc->bsh = rman_get_bushandle(sc->mem);
|
||||
|
||||
|
||||
sc->irq_rid = 0;
|
||||
sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ,
|
||||
&sc->irq_rid, RF_ACTIVE | RF_SHAREABLE);
|
||||
@@ -766,7 +714,7 @@ fail:
|
||||
/*
|
||||
* rt2860_detach
|
||||
*/
|
||||
static int rt2860_detach(device_t dev)
|
||||
int rt2860_detach(device_t dev)
|
||||
{
|
||||
struct rt2860_softc *sc;
|
||||
struct ifnet *ifp;
|
||||
@@ -824,7 +772,7 @@ static int rt2860_detach(device_t dev)
|
||||
/*
|
||||
* rt2860_shutdown
|
||||
*/
|
||||
static int rt2860_shutdown(device_t dev)
|
||||
int rt2860_shutdown(device_t dev)
|
||||
{
|
||||
struct rt2860_softc *sc;
|
||||
|
||||
@@ -844,7 +792,7 @@ static int rt2860_shutdown(device_t dev)
|
||||
/*
|
||||
* rt2860_suspend
|
||||
*/
|
||||
static int rt2860_suspend(device_t dev)
|
||||
int rt2860_suspend(device_t dev)
|
||||
{
|
||||
struct rt2860_softc *sc;
|
||||
|
||||
@@ -864,7 +812,7 @@ static int rt2860_suspend(device_t dev)
|
||||
/*
|
||||
* rt2860_resume
|
||||
*/
|
||||
static int rt2860_resume(device_t dev)
|
||||
int rt2860_resume(device_t dev)
|
||||
{
|
||||
struct rt2860_softc *sc;
|
||||
struct ifnet *ifp;
|
||||
@@ -931,7 +879,8 @@ static void rt2860_init_channels(struct rt2860_softc *sc)
|
||||
/* set supported channels for 5GHz band */
|
||||
|
||||
if (sc->rf_rev == RT2860_EEPROM_RF_2850 ||
|
||||
sc->rf_rev == RT2860_EEPROM_RF_2750)
|
||||
sc->rf_rev == RT2860_EEPROM_RF_2750 ||
|
||||
sc->rf_rev == RT2860_EEPROM_RF_3052)
|
||||
{
|
||||
for (i = 36; i <= 64; i += 4)
|
||||
{
|
||||
@@ -1045,7 +994,8 @@ static void rt2860_init_channels_ht40(struct rt2860_softc *sc)
|
||||
/* set supported channels for 5GHz band */
|
||||
|
||||
if (sc->rf_rev == RT2860_EEPROM_RF_2850 ||
|
||||
sc->rf_rev == RT2860_EEPROM_RF_2750)
|
||||
sc->rf_rev == RT2860_EEPROM_RF_2750 ||
|
||||
sc->rf_rev == RT2860_EEPROM_RF_3052)
|
||||
{
|
||||
for (i = 36; i <= 64; i += 4)
|
||||
{
|
||||
@@ -1193,8 +1143,10 @@ static void rt2860_init_locked(void *priv)
|
||||
|
||||
RT2860_SOFTC_ASSERT_LOCKED(sc);
|
||||
|
||||
if (!(sc->flags & RT2860_SOFTC_FLAGS_UCODE_LOADED))
|
||||
if (sc->mac_rev != 0x28720200)
|
||||
{
|
||||
if (!(sc->flags & RT2860_SOFTC_FLAGS_UCODE_LOADED))
|
||||
{
|
||||
RT2860_DPRINTF(sc, RT2860_DEBUG_ANY,
|
||||
"%s: loading 8051 microcode\n",
|
||||
device_get_nameunit(sc->dev));
|
||||
@@ -1212,6 +1164,28 @@ static void rt2860_init_locked(void *priv)
|
||||
device_get_nameunit(sc->dev));
|
||||
|
||||
sc->flags |= RT2860_SOFTC_FLAGS_UCODE_LOADED;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sc->flags |= RT2860_SOFTC_FLAGS_UCODE_LOADED;
|
||||
|
||||
/* Blink every TX */
|
||||
#define LED_CFG_LED_POLARITY (1<<30)
|
||||
#define LED_CFG_Y_LED_MODE_ONTX (1<<28)
|
||||
#define LED_CFG_G_LED_MODE_ONTX (1<<26)
|
||||
#define LED_CFG_R_LED_MODE_ONTX (1<<24)
|
||||
#define LED_CFG_SLOW_BLK_TIME (0x03<<16) /* sec */
|
||||
#define LED_CFG_LED_OFF_TIME (0x1e<<8) /* msec */
|
||||
#define LED_CFG_LED_ON_TIME (0x46) /* msec */
|
||||
rt2860_io_mac_write(sc, RT2860_REG_LED_CFG,
|
||||
LED_CFG_LED_POLARITY |
|
||||
LED_CFG_Y_LED_MODE_ONTX |
|
||||
LED_CFG_G_LED_MODE_ONTX |
|
||||
LED_CFG_R_LED_MODE_ONTX |
|
||||
LED_CFG_SLOW_BLK_TIME |
|
||||
LED_CFG_LED_OFF_TIME |
|
||||
LED_CFG_LED_ON_TIME);
|
||||
}
|
||||
|
||||
rt2860_io_mac_write(sc, RT2860_REG_PWR_PIN_CFG, 0x2);
|
||||
@@ -1434,8 +1408,13 @@ static void rt2860_init_locked(void *priv)
|
||||
|
||||
rt2860_io_mac_write(sc, RT2860_REG_SCHDMA_DELAY_INT_CFG, 0);
|
||||
|
||||
/* send LEDs operating mode to microcontroller */
|
||||
/* select Main antenna for 1T1R devices */
|
||||
if (sc->rf_rev == RT2860_EEPROM_RF_2020 ||
|
||||
sc->rf_rev == RT2860_EEPROM_RF_3020 ||
|
||||
sc->rf_rev == RT2860_EEPROM_RF_3320)
|
||||
rt3090_set_rx_antenna(sc, 0);
|
||||
|
||||
/* send LEDs operating mode to microcontroller */
|
||||
rt2860_io_mcu_cmd(sc, RT2860_IO_MCU_CMD_LED1,
|
||||
RT2860_REG_H2M_TOKEN_NO_INTR, sc->led_off[0]);
|
||||
rt2860_io_mcu_cmd(sc, RT2860_IO_MCU_CMD_LED2,
|
||||
@@ -1459,18 +1438,26 @@ static void rt2860_init_locked(void *priv)
|
||||
sc->bbp_eeprom[i].val);
|
||||
}
|
||||
|
||||
tmp = rt2860_io_mac_read(sc, RT2860_REG_SCHDMA_GPIO_CTRL_CFG);
|
||||
if (tmp & (1 << 2))
|
||||
{
|
||||
rt2860_io_mcu_cmd(sc, RT2860_IO_MCU_CMD_SLEEP,
|
||||
RT2860_REG_H2M_TOKEN_RADIOOFF, 0x02ff);
|
||||
rt2860_io_mcu_cmd_check(sc, RT2860_REG_H2M_TOKEN_RADIOOFF);
|
||||
if ((sc->mac_rev & 0xffff0000) >= 0x30710000)
|
||||
rt3090_rf_init(sc);
|
||||
|
||||
rt2860_io_mcu_cmd(sc, RT2860_IO_MCU_CMD_WAKEUP,
|
||||
RT2860_REG_H2M_TOKEN_WAKEUP, 0);
|
||||
rt2860_io_mcu_cmd_check(sc, RT2860_REG_H2M_TOKEN_WAKEUP);
|
||||
if (sc->mac_rev != 0x28720200) {
|
||||
/* 0x28720200 don`t have RT2860_REG_SCHDMA_GPIO_CTRL_CFG */
|
||||
tmp = rt2860_io_mac_read(sc, RT2860_REG_SCHDMA_GPIO_CTRL_CFG);
|
||||
if (tmp & (1 << 2)) {
|
||||
rt2860_io_mcu_cmd(sc, RT2860_IO_MCU_CMD_SLEEP,
|
||||
RT2860_REG_H2M_TOKEN_RADIOOFF, 0x02ff);
|
||||
rt2860_io_mcu_cmd_check(sc, RT2860_REG_H2M_TOKEN_RADIOOFF);
|
||||
|
||||
rt2860_io_mcu_cmd(sc, RT2860_IO_MCU_CMD_WAKEUP,
|
||||
RT2860_REG_H2M_TOKEN_WAKEUP, 0);
|
||||
rt2860_io_mcu_cmd_check(sc, RT2860_REG_H2M_TOKEN_WAKEUP);
|
||||
}
|
||||
}
|
||||
|
||||
if ((sc->mac_rev & 0xffff0000) >= 0x30710000)
|
||||
rt3090_rf_wakeup(sc);
|
||||
|
||||
/* disable non-existing Rx chains */
|
||||
|
||||
tmp = rt2860_io_bbp_read(sc, 3);
|
||||
@@ -1495,10 +1482,26 @@ static void rt2860_init_locked(void *priv)
|
||||
|
||||
rt2860_io_bbp_write(sc, 1, tmp);
|
||||
|
||||
/* set current channel */
|
||||
if ((sc->mac_rev & 0xffff0000) >= 0x30710000)
|
||||
rt3090_rf_setup(sc);
|
||||
|
||||
if (sc->rf_rev == RT2860_EEPROM_RF_3022)
|
||||
{
|
||||
/* calibrate RF */
|
||||
tmp = rt2860_io_rf_read(sc, 30);
|
||||
tmp |= 0x80;
|
||||
rt2860_io_rf_write(sc, 30, tmp);
|
||||
DELAY(1000);
|
||||
tmp &= 0x7F;
|
||||
rt2860_io_rf_write(sc, 30, tmp);
|
||||
|
||||
/* Initialize RF register to default value */
|
||||
rt2860_io_rf_load_defaults(sc);
|
||||
}
|
||||
|
||||
/* set current channel */
|
||||
rt2860_rf_set_chan(sc, ic->ic_curchan);
|
||||
|
||||
|
||||
rt2860_io_mac_write(sc, RT2860_REG_SCHDMA_WMM_TXOP0_CFG, 0);
|
||||
rt2860_io_mac_write(sc, RT2860_REG_SCHDMA_WMM_TXOP1_CFG,
|
||||
(48 << 16) | 96);
|
||||
@@ -2269,6 +2272,10 @@ static int rt2860_vap_key_set(struct ieee80211vap *vap,
|
||||
/* install pairwise key */
|
||||
|
||||
ni = ieee80211_find_vap_node(&ic->ic_sta, vap, mac);
|
||||
if (!ni) {
|
||||
printf("ieee80211_find_vap_node return 0\n");
|
||||
return 0;
|
||||
}
|
||||
rni = (struct rt2860_softc_node *) ni;
|
||||
|
||||
vapid = 0;
|
||||
@@ -4307,6 +4314,9 @@ static int rt2860_tx_mgmt(struct rt2860_softc *sc,
|
||||
wh = mtod(m, struct ieee80211_frame *);
|
||||
|
||||
rate = tp->mgmtrate & IEEE80211_RATE_VAL;
|
||||
/* XXX */
|
||||
if (!rate)
|
||||
return EFBIG;
|
||||
|
||||
/* fill Tx wireless info */
|
||||
|
||||
@@ -4458,7 +4468,7 @@ static int rt2860_tx_mgmt(struct rt2860_softc *sc,
|
||||
m_adj(m, hdrspace);
|
||||
|
||||
error = bus_dmamap_load_mbuf_sg(ring->data_dma_tag, data->dma_map, m,
|
||||
dma_seg, &ndmasegs, 0);
|
||||
dma_seg, &ndmasegs, BUS_DMA_NOWAIT);
|
||||
if (error != 0)
|
||||
{
|
||||
/* too many fragments, linearize */
|
||||
@@ -4474,7 +4484,7 @@ static int rt2860_tx_mgmt(struct rt2860_softc *sc,
|
||||
sc->tx_defrag_packets++;
|
||||
|
||||
error = bus_dmamap_load_mbuf_sg(ring->data_dma_tag, data->dma_map, m,
|
||||
dma_seg, &ndmasegs, 0);
|
||||
dma_seg, &ndmasegs, BUS_DMA_NOWAIT);
|
||||
if (error != 0)
|
||||
{
|
||||
printf("%s: could not load mbuf DMA map: ndmasegs=%d, len=%d, error=%d\n",
|
||||
@@ -4657,6 +4667,9 @@ static int rt2860_tx_data(struct rt2860_softc *sc,
|
||||
rate = ni->ni_txrate;
|
||||
|
||||
rate &= IEEE80211_RATE_VAL;
|
||||
/* XXX */
|
||||
if (!rate)
|
||||
return EFBIG;
|
||||
|
||||
/* fill Tx wireless info */
|
||||
|
||||
@@ -4864,7 +4877,7 @@ static int rt2860_tx_data(struct rt2860_softc *sc,
|
||||
m_adj(m, hdrspace);
|
||||
|
||||
error = bus_dmamap_load_mbuf_sg(ring->data_dma_tag, data->dma_map, m,
|
||||
dma_seg, &ndmasegs, 0);
|
||||
dma_seg, &ndmasegs, BUS_DMA_NOWAIT);
|
||||
if (error != 0)
|
||||
{
|
||||
/* too many fragments, linearize */
|
||||
@@ -4880,7 +4893,7 @@ static int rt2860_tx_data(struct rt2860_softc *sc,
|
||||
sc->tx_defrag_packets++;
|
||||
|
||||
error = bus_dmamap_load_mbuf_sg(ring->data_dma_tag, data->dma_map, m,
|
||||
dma_seg, &ndmasegs, 0);
|
||||
dma_seg, &ndmasegs, BUS_DMA_NOWAIT);
|
||||
if (error != 0)
|
||||
{
|
||||
printf("%s: could not load mbuf DMA map: ndmasegs=%d, len=%d, error=%d\n",
|
||||
@@ -4995,7 +5008,6 @@ static int rt2860_tx_data(struct rt2860_softc *sc,
|
||||
|
||||
/*
|
||||
* rt2860_tx_raw
|
||||
*/
|
||||
static int rt2860_tx_raw(struct rt2860_softc *sc,
|
||||
struct mbuf *m, struct ieee80211_node *ni,
|
||||
const struct ieee80211_bpf_params *params)
|
||||
@@ -5006,6 +5018,7 @@ static int rt2860_tx_raw(struct rt2860_softc *sc,
|
||||
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
* rt2860_intr
|
||||
@@ -5017,7 +5030,6 @@ static void rt2860_intr(void *arg)
|
||||
uint32_t status;
|
||||
|
||||
sc = arg;
|
||||
|
||||
#if !defined(__HAIKU__)
|
||||
ifp = sc->ifp;
|
||||
|
||||
@@ -5038,6 +5050,7 @@ static void rt2860_intr(void *arg)
|
||||
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
|
||||
#else
|
||||
status = sc->interrupt_status;
|
||||
#endif
|
||||
@@ -5652,9 +5665,10 @@ static int rt2860_rx_eof(struct rt2860_softc *sc, int limit)
|
||||
|
||||
bus_dmamap_sync(ring->desc_dma_tag, ring->desc_dma_map,
|
||||
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
|
||||
|
||||
#ifdef XXX_TESTED_AND_WORKED
|
||||
if (!(desc->sdl0 & htole16(RT2860_RXDESC_SDL0_DDONE)))
|
||||
break;
|
||||
#endif
|
||||
|
||||
nframes++;
|
||||
|
||||
@@ -7161,27 +7175,4 @@ static void rt2860_sysctl_attach(struct rt2860_softc *sc)
|
||||
"Rx cipher invalid key errors");
|
||||
}
|
||||
|
||||
static device_method_t rt2860_dev_methods[] =
|
||||
{
|
||||
DEVMETHOD(device_probe, rt2860_probe),
|
||||
DEVMETHOD(device_attach, rt2860_attach),
|
||||
DEVMETHOD(device_detach, rt2860_detach),
|
||||
DEVMETHOD(device_shutdown, rt2860_shutdown),
|
||||
DEVMETHOD(device_suspend, rt2860_suspend),
|
||||
DEVMETHOD(device_resume, rt2860_resume),
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static driver_t rt2860_driver =
|
||||
{
|
||||
"rt2860",
|
||||
rt2860_dev_methods,
|
||||
sizeof(struct rt2860_softc)
|
||||
};
|
||||
|
||||
static devclass_t rt2860_dev_class;
|
||||
|
||||
DRIVER_MODULE(rt2860, pci, rt2860_driver, rt2860_dev_class, 0, 0);
|
||||
|
||||
MODULE_DEPEND(rt2860, pci, 1, 1, 1);
|
||||
MODULE_DEPEND(rt2860, wlan, 1, 1, 1);
|
||||
+1
-1
@@ -27,7 +27,7 @@
|
||||
|
||||
#include <net80211/ieee80211_var.h>
|
||||
|
||||
#include "rt2860_amrr.h"
|
||||
#include <dev/rt2860/rt2860_amrr.h>
|
||||
|
||||
/*
|
||||
* Defines and macros
|
||||
+15
-2
@@ -33,7 +33,9 @@
|
||||
#define RT2860_EEPROM_LED3_OFF 0x0040
|
||||
#define RT2860_EEPROM_LNA_GAIN 0x0044
|
||||
#define RT2860_EEPROM_RSSI_OFF_2GHZ_BASE 0x0046
|
||||
#define RT2860_EEPROM_RSSI_OFF_5GHZ_BASE 0x0046
|
||||
#define RT2860_EEPROM_RSSI2_OFF_2GHZ_BASE 0x0048
|
||||
#define RT2860_EEPROM_RSSI_OFF_5GHZ_BASE 0x004a
|
||||
#define RT2860_EEPROM_RSSI2_OFF_5GHZ_BASE 0x004c
|
||||
#define RT2860_EEPROM_TXPOW_RATE_DELTA 0x0050
|
||||
#define RT2860_EEPROM_TXPOW1_2GHZ_BASE 0x0052
|
||||
#define RT2860_EEPROM_TXPOW2_2GHZ_BASE 0x0060
|
||||
@@ -42,12 +44,23 @@
|
||||
#define RT2860_EEPROM_TXPOW2_5GHZ_BASE 0x00a6
|
||||
#define RT2860_EEPROM_TSSI_5GHZ_BASE 0x00d4
|
||||
#define RT2860_EEPROM_TXPOW_RATE_BASE 0x00de
|
||||
#define RT2860_EEPROM_BBP_BASE 0x00f0
|
||||
#define RT2860_EEPROM_BBP_BASE 0x00f0
|
||||
#define RT3071_EEPROM_RF_BASE 0x0082
|
||||
|
||||
#define RT2860_EEPROM_RF_2820 1 /* 2.4GHz 2T3R */
|
||||
#define RT2860_EEPROM_RF_2850 2 /* 2.4/5GHz 2T3R */
|
||||
#define RT2860_EEPROM_RF_2720 3 /* 2.4GHz 1T2R */
|
||||
#define RT2860_EEPROM_RF_2750 4 /* 2.4G/5GHz 1T2R */
|
||||
#define RT2860_EEPROM_RF_3020 5 /* 2.4G 1T1R */
|
||||
#define RT2860_EEPROM_RF_2020 6 /* 2.4G B/G */
|
||||
#define RT2860_EEPROM_RF_3021 7 /* 2.4G 1T2R */
|
||||
#define RT2860_EEPROM_RF_3022 8 /* 2.4G 2T2R */
|
||||
#define RT2860_EEPROM_RF_3052 9 /* 2.4G/5G 2T2R */
|
||||
#define RT2860_EEPROM_RF_2853 10 /* 2.4G.5G 3T3R */
|
||||
#define RT2860_EEPROM_RF_3320 11 /* 2.4G 1T1R with PA (RT3350/RT3370/RT3390) */
|
||||
#define RT2860_EEPROM_RF_3322 12 /* 2.4G 2T2R with PA (RT3352/RT3371/RT3372/RT3391/RT3392) */
|
||||
#define RT2860_EEPROM_RF_3053 13 /* 2.4G/5G 3T3R (RT3883/RT3563/RT3573/RT3593/RT3662) */
|
||||
#define RT2860_EEPROM_RF_3853 13 /* 2.4G/5G 3T3R (RT3883/RT3563/RT3573/RT3593/RT3662) */
|
||||
|
||||
/*
|
||||
* RT2860_EEPROM_NIC_CONFIG flags
|
||||
+301
-17
@@ -16,8 +16,8 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "rt2860_io.h"
|
||||
#include "rt2860_reg.h"
|
||||
#include <dev/rt2860/rt2860_io.h>
|
||||
#include <dev/rt2860/rt2860_reg.h>
|
||||
|
||||
/*
|
||||
* Defines and macros
|
||||
@@ -63,6 +63,80 @@ static uint16_t rt2860_io_eeprom_shiftin_bits(struct rt2860_softc *sc);
|
||||
|
||||
static uint8_t rt2860_io_byte_rev(uint8_t byte);
|
||||
|
||||
/* #ifdef RT305X_SOC */
|
||||
static const uint16_t rt3052_eeprom[] =
|
||||
{
|
||||
0x3052, 0x0101, 0x0c00, 0x3043, 0x8852, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0x0c00, 0x3043, 0x7752, 0x0c00,
|
||||
0x3043, 0x6652, 0x0822, 0x0024, 0xffff, 0x012f, 0x7755, 0xaaa8,
|
||||
0x888c, 0xffff, 0x000c, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff,
|
||||
0xffff, 0x0d0d, 0x0d0d, 0x0c0c, 0x0c0c, 0x0c0c, 0x0c0c, 0x0c0c,
|
||||
0x1010, 0x1111, 0x1211, 0x1212, 0x1313, 0x1413, 0x1414, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6666,
|
||||
0xaacc, 0x6688, 0xaacc, 0x6688, 0xaacc, 0x6688, 0xaacc, 0x6688,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
};
|
||||
|
||||
uint8_t rt3052_rf_default[] = {
|
||||
0x50,
|
||||
0x01,
|
||||
0xF7,
|
||||
0x75,
|
||||
0x40,
|
||||
0x03,
|
||||
0x42,
|
||||
0x50,
|
||||
0x39,
|
||||
0x0F,
|
||||
0x60,
|
||||
0x21,
|
||||
0x75,
|
||||
0x75,
|
||||
0x90,
|
||||
0x58,
|
||||
0xB3,
|
||||
0x92,
|
||||
0x2C,
|
||||
0x02,
|
||||
0xBA,
|
||||
0xDB,
|
||||
0x00,
|
||||
0x31,
|
||||
0x08,
|
||||
0x01,
|
||||
0x25, /* Core Power: 0x25=1.25V */
|
||||
0x23, /* RF: 1.35V */
|
||||
0x13, /* ADC: must consist with R27 */
|
||||
0x83,
|
||||
0x00,
|
||||
0x00,
|
||||
};
|
||||
/* #endif */
|
||||
|
||||
|
||||
/*
|
||||
* Static variables
|
||||
*/
|
||||
@@ -108,6 +182,7 @@ static const uint16_t rt2860_io_ccitt16[] =
|
||||
*/
|
||||
uint32_t rt2860_io_mac_read(struct rt2860_softc *sc, uint16_t reg)
|
||||
{
|
||||
bus_space_read_4(sc->bst, sc->bsh, RT2860_REG_MAC_CSR0);
|
||||
return bus_space_read_4(sc->bst, sc->bsh, reg);
|
||||
}
|
||||
|
||||
@@ -117,6 +192,7 @@ uint32_t rt2860_io_mac_read(struct rt2860_softc *sc, uint16_t reg)
|
||||
void rt2860_io_mac_read_multi(struct rt2860_softc *sc,
|
||||
uint16_t reg, void *buf, size_t len)
|
||||
{
|
||||
bus_space_read_4(sc->bst, sc->bsh, RT2860_REG_MAC_CSR0);
|
||||
bus_space_read_region_1(sc->bst, sc->bsh, reg, buf, len);
|
||||
}
|
||||
|
||||
@@ -126,6 +202,7 @@ void rt2860_io_mac_read_multi(struct rt2860_softc *sc,
|
||||
void rt2860_io_mac_write(struct rt2860_softc *sc,
|
||||
uint16_t reg, uint32_t val)
|
||||
{
|
||||
bus_space_read_4(sc->bst, sc->bsh, RT2860_REG_MAC_CSR0);
|
||||
bus_space_write_4(sc->bst, sc->bsh, reg, val);
|
||||
}
|
||||
|
||||
@@ -135,7 +212,15 @@ void rt2860_io_mac_write(struct rt2860_softc *sc,
|
||||
void rt2860_io_mac_write_multi(struct rt2860_softc *sc,
|
||||
uint16_t reg, const void *buf, size_t len)
|
||||
{
|
||||
bus_space_write_region_1(sc->bst, sc->bsh, reg, buf, len);
|
||||
int i;
|
||||
const uint8_t *p;
|
||||
|
||||
bus_space_read_4(sc->bst, sc->bsh, RT2860_REG_MAC_CSR0);
|
||||
|
||||
p = buf;
|
||||
for (i = 0; i < len; i ++)
|
||||
bus_space_write_1(sc->bst, sc->bsh, reg + i, *(p+i));
|
||||
// bus_space_write_region_1(sc->bst, sc->bsh, reg, buf, len);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -150,6 +235,46 @@ void rt2860_io_mac_set_region_4(struct rt2860_softc *sc,
|
||||
rt2860_io_mac_write(sc, reg + i, val);
|
||||
}
|
||||
|
||||
/* Read 16-bit from eFUSE ROM (>=RT3071 only.) */
|
||||
static uint16_t
|
||||
rt3090_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]:
|
||||
* DATA0: F E D C
|
||||
* DATA1: B A 9 8
|
||||
* DATA2: 7 6 5 4
|
||||
* DATA3: 3 2 1 0
|
||||
*/
|
||||
tmp = rt2860_io_mac_read(sc, RT3070_EFUSE_CTRL);
|
||||
tmp &= ~(RT3070_EFSROM_MODE_MASK | RT3070_EFSROM_AIN_MASK);
|
||||
tmp |= (addr & ~0xf) << RT3070_EFSROM_AIN_SHIFT | RT3070_EFSROM_KICK;
|
||||
rt2860_io_mac_write(sc, RT3070_EFUSE_CTRL, tmp);
|
||||
for (ntries = 0; ntries < 500; ntries++) {
|
||||
tmp = rt2860_io_mac_read(sc, RT3070_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 = RT3070_EFUSE_DATA3 - (addr & 0xc);
|
||||
tmp = rt2860_io_mac_read(sc, reg);
|
||||
|
||||
return (addr & 2) ? tmp >> 16 : tmp & 0xffff;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* rt2860_io_eeprom_read
|
||||
*/
|
||||
@@ -160,6 +285,14 @@ uint16_t rt2860_io_eeprom_read(struct rt2860_softc *sc, uint16_t addr)
|
||||
|
||||
addr = (addr >> 1);
|
||||
|
||||
if (sc->mac_rev == 0x28720200) {
|
||||
return (rt3052_eeprom[addr]);
|
||||
} else if ((sc->mac_rev & 0xffff0000) >= 0x30710000) {
|
||||
tmp = rt2860_io_mac_read(sc, RT3070_EFUSE_CTRL);
|
||||
if (tmp & RT3070_SEL_EFUSE)
|
||||
return (rt3090_efuse_read_2(sc, addr));
|
||||
}
|
||||
|
||||
tmp = rt2860_io_mac_read(sc, RT2860_REG_EEPROM_CSR);
|
||||
|
||||
tmp &= ~(RT2860_REG_EEDI | RT2860_REG_EEDO | RT2860_REG_EESK);
|
||||
@@ -224,6 +357,43 @@ uint8_t rt2860_io_bbp_read(struct rt2860_softc *sc, uint8_t reg)
|
||||
int ntries;
|
||||
uint32_t tmp;
|
||||
|
||||
if (sc->mac_rev == 0x28720200)
|
||||
{
|
||||
for (ntries = 0; ntries < 100; ntries ++) {
|
||||
if ( !(rt2860_io_mac_read(sc, RT2860_REG_BBP_CSR_CFG) &
|
||||
RT2860_REG_BBP_CSR_BUSY) )
|
||||
break;
|
||||
DELAY(1);
|
||||
}
|
||||
if (ntries == 100) {
|
||||
printf("%s:%s: BBP busy after 100 probes\n",
|
||||
device_get_nameunit(sc->dev), __func__);
|
||||
return (0);
|
||||
}
|
||||
rt2860_io_mac_write(sc, RT2860_REG_BBP_CSR_CFG,
|
||||
RT2860_REG_BBP_CSR_READ |
|
||||
RT2860_REG_BBP_CSR_KICK | RT2860_REG_BBP_RW_MODE_PARALLEL |
|
||||
(reg & RT2860_REG_BBP_REG_MASK) << RT2860_REG_BBP_REG_SHIFT);
|
||||
for (ntries = 0; ntries < 100; ntries ++) {
|
||||
if ( !(rt2860_io_mac_read(sc, RT2860_REG_BBP_CSR_CFG) &
|
||||
RT2860_REG_BBP_CSR_BUSY) )
|
||||
break;
|
||||
DELAY(1);
|
||||
}
|
||||
if (ntries == 100) {
|
||||
printf("%s:%s: BBP busy after 100 probes\n",
|
||||
device_get_nameunit(sc->dev), __func__);
|
||||
return (0);
|
||||
}
|
||||
else {
|
||||
return
|
||||
((rt2860_io_mac_read(sc, RT2860_REG_BBP_CSR_CFG) >>
|
||||
RT2860_REG_BBP_VAL_SHIFT) &
|
||||
RT2860_REG_BBP_VAL_MASK);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
for (ntries = 0; ntries < 100; ntries++)
|
||||
{
|
||||
if (!(rt2860_io_mac_read(sc, RT2860_REG_H2M_MAILBOX_BBP_AGENT) &
|
||||
@@ -276,6 +446,27 @@ void rt2860_io_bbp_write(struct rt2860_softc *sc, uint8_t reg, uint8_t val)
|
||||
int ntries;
|
||||
uint32_t tmp;
|
||||
|
||||
if (sc->mac_rev == 0x28720200)
|
||||
{
|
||||
for (ntries = 0; ntries < 100; ntries ++) {
|
||||
if ( !(rt2860_io_mac_read(sc, RT2860_REG_BBP_CSR_CFG) &
|
||||
RT2860_REG_BBP_CSR_BUSY) )
|
||||
break;
|
||||
DELAY(1);
|
||||
}
|
||||
if (ntries == 100) {
|
||||
printf("%s:%s: BBP busy after 100 probes\n",
|
||||
device_get_nameunit(sc->dev), __func__);
|
||||
return;
|
||||
}
|
||||
rt2860_io_mac_write(sc, RT2860_REG_BBP_CSR_CFG,
|
||||
RT2860_REG_BBP_CSR_KICK | RT2860_REG_BBP_RW_MODE_PARALLEL |
|
||||
(reg & RT2860_REG_BBP_REG_MASK) << RT2860_REG_BBP_REG_SHIFT |
|
||||
(val & RT2860_REG_BBP_VAL_MASK) << RT2860_REG_BBP_VAL_SHIFT );
|
||||
rt2860_io_bbp_read(sc, reg);
|
||||
return;
|
||||
}
|
||||
|
||||
for (ntries = 0; ntries < 100; ntries++)
|
||||
{
|
||||
if (!(rt2860_io_mac_read(sc, RT2860_REG_H2M_MAILBOX_BBP_AGENT) &
|
||||
@@ -311,6 +502,27 @@ void rt2860_io_bbp_write(struct rt2860_softc *sc, uint8_t reg, uint8_t val)
|
||||
void rt2860_io_rf_write(struct rt2860_softc *sc, uint8_t reg, uint32_t val)
|
||||
{
|
||||
int ntries;
|
||||
if (sc->mac_rev == 0x28720200)
|
||||
{
|
||||
for (ntries = 0; ntries < 100; ntries ++) {
|
||||
if ( !(rt2860_io_mac_read(sc, RT2872_REG_RF_CSR_CFG) &
|
||||
RT2872_REG_RF_CSR_BUSY) )
|
||||
break;
|
||||
DELAY(1);
|
||||
}
|
||||
if (ntries == 100) {
|
||||
printf("%s:%s: RF busy after 100 probes\n",
|
||||
device_get_nameunit(sc->dev), __func__);
|
||||
return;
|
||||
}
|
||||
rt2860_io_mac_write(sc, RT2872_REG_RF_CSR_CFG,
|
||||
RT2872_REG_RF_CSR_KICK | RT2872_REG_RF_CSR_WRITE |
|
||||
(reg & RT2872_REG_RF_ID_MASK) << RT2872_REG_RF_ID_SHIFT |
|
||||
(val & RT2872_REG_RF_VAL_MASK) << RT2872_REG_RF_VAL_SHIFT );
|
||||
rt2860_io_rf_read(sc, reg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
for (ntries = 0; ntries < 100; ntries++)
|
||||
if (!(rt2860_io_mac_read(sc, RT2860_REG_RF_CSR_CFG0) &
|
||||
@@ -327,6 +539,58 @@ void rt2860_io_rf_write(struct rt2860_softc *sc, uint8_t reg, uint32_t val)
|
||||
rt2860_io_mac_write(sc, RT2860_REG_RF_CSR_CFG0, val);
|
||||
}
|
||||
|
||||
/*
|
||||
* rt2860_io_rf_read
|
||||
*/
|
||||
int32_t rt2860_io_rf_read(struct rt2860_softc *sc, uint8_t reg)
|
||||
{
|
||||
int ntries;
|
||||
if (sc->mac_rev == 0x28720200)
|
||||
{
|
||||
for (ntries = 0; ntries < 100; ntries ++) {
|
||||
if ( !(rt2860_io_mac_read(sc, RT2872_REG_RF_CSR_CFG) &
|
||||
RT2872_REG_RF_CSR_BUSY) )
|
||||
break;
|
||||
DELAY(1);
|
||||
}
|
||||
if (ntries == 100) {
|
||||
printf("%s:%s: RF busy after 100 probes\n",
|
||||
device_get_nameunit(sc->dev), __func__);
|
||||
return (-1);
|
||||
}
|
||||
rt2860_io_mac_write(sc, RT2872_REG_RF_CSR_CFG,
|
||||
RT2872_REG_RF_CSR_KICK |
|
||||
(reg & RT2872_REG_RF_ID_MASK) << RT2872_REG_RF_ID_SHIFT );
|
||||
|
||||
for (ntries = 0; ntries < 100; ntries ++) {
|
||||
if ( !(rt2860_io_mac_read(sc, RT2872_REG_RF_CSR_CFG) &
|
||||
RT2872_REG_RF_CSR_BUSY) )
|
||||
break;
|
||||
DELAY(1);
|
||||
}
|
||||
if (ntries == 100) {
|
||||
printf("%s:%s: RF busy after 100 probes\n",
|
||||
device_get_nameunit(sc->dev), __func__);
|
||||
}
|
||||
|
||||
return (rt2860_io_mac_read(sc, RT2872_REG_RF_CSR_CFG) & RT2872_REG_RF_VAL_MASK);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* rt2860_io_rf_load_defaults
|
||||
*/
|
||||
void rt2860_io_rf_load_defaults(struct rt2860_softc *sc)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (sc->mac_rev == 0x28720200) {
|
||||
for (i = 0; i < 32; i ++)
|
||||
rt2860_io_rf_write(sc, i, rt3052_rf_default[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* rt2860_io_mcu_cmd
|
||||
*/
|
||||
@@ -336,6 +600,9 @@ void rt2860_io_mcu_cmd(struct rt2860_softc *sc, uint8_t cmd,
|
||||
uint32_t tmp;
|
||||
int ntries;
|
||||
|
||||
if (sc->mac_rev == 0x28720200)
|
||||
return;
|
||||
|
||||
for (ntries = 0; ntries < 100; ntries++)
|
||||
{
|
||||
if (!(rt2860_io_mac_read(sc, RT2860_REG_H2M_MAILBOX) &
|
||||
@@ -437,30 +704,47 @@ int rt2860_io_mcu_load_ucode(struct rt2860_softc *sc,
|
||||
|
||||
rt2860_io_mac_write(sc, RT2860_REG_PBF_SYS_CTRL, RT2860_REG_HST_PM_SEL);
|
||||
|
||||
rt2860_io_mac_write_multi(sc, RT2860_REG_MCU_UCODE_BASE, ucode, len);
|
||||
for(i = 0; i < len; i += 4)
|
||||
{
|
||||
rt2860_io_mac_write(sc, RT2860_REG_MCU_UCODE_BASE + i,
|
||||
(ucode[i+3] << 24) | (ucode[i+2] << 16) |
|
||||
(ucode[i+1] << 8) | ucode[i]);
|
||||
}
|
||||
|
||||
if (sc->mac_rev != 0x28720200)
|
||||
rt2860_io_mac_write_multi(sc, RT2860_REG_MCU_UCODE_BASE,
|
||||
ucode, len);
|
||||
|
||||
rt2860_io_mac_write(sc, RT2860_REG_PBF_SYS_CTRL, 0);
|
||||
rt2860_io_mac_write(sc, RT2860_REG_PBF_SYS_CTRL, RT2860_REG_MCU_RESET);
|
||||
|
||||
if (sc->mac_rev != 0x28720200)
|
||||
rt2860_io_mac_write(sc, RT2860_REG_PBF_SYS_CTRL,
|
||||
RT2860_REG_MCU_RESET);
|
||||
|
||||
DELAY(10000);
|
||||
|
||||
/* initialize BBP R/W access agent */
|
||||
|
||||
rt2860_io_mac_write(sc, RT2860_REG_H2M_MAILBOX_BBP_AGENT, 0);
|
||||
rt2860_io_mac_write(sc, RT2860_REG_H2M_MAILBOX, 0);
|
||||
|
||||
for (ntries = 0; ntries < 1000; ntries++)
|
||||
{
|
||||
if (rt2860_io_mac_read(sc, RT2860_REG_PBF_SYS_CTRL) &
|
||||
RT2860_REG_MCU_READY)
|
||||
break;
|
||||
if (sc->mac_rev != 0x28720200) {
|
||||
|
||||
DELAY(1000);
|
||||
}
|
||||
for (ntries = 0; ntries < 1000; ntries++)
|
||||
{
|
||||
if (rt2860_io_mac_read(sc, RT2860_REG_PBF_SYS_CTRL) &
|
||||
RT2860_REG_MCU_READY)
|
||||
break;
|
||||
|
||||
if (ntries == 1000)
|
||||
{
|
||||
printf("%s: timeout waiting for MCU to initialize\n",
|
||||
device_get_nameunit(sc->dev));
|
||||
return ETIMEDOUT;
|
||||
DELAY(1000);
|
||||
}
|
||||
|
||||
if (ntries == 1000)
|
||||
{
|
||||
printf("%s: timeout waiting for MCU to initialize\n",
|
||||
device_get_nameunit(sc->dev));
|
||||
return ETIMEDOUT;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
+14
-10
@@ -19,20 +19,21 @@
|
||||
#ifndef _RT2860_IO_H_
|
||||
#define _RT2860_IO_H_
|
||||
|
||||
#include "rt2860_softc.h"
|
||||
#include <dev/rt2860/rt2860_softc.h>
|
||||
|
||||
#define RT2860_IO_MCU_CMD_SLEEP 0x30
|
||||
#define RT2860_IO_MCU_CMD_WAKEUP 0x31
|
||||
#define RT2860_IO_MCU_CMD_RADIOOFF 0x35
|
||||
#define RT2860_IO_MCU_CMD_LEDS 0x50
|
||||
#define RT2860_IO_MCU_CMD_SLEEP 0x30
|
||||
#define RT2860_IO_MCU_CMD_WAKEUP 0x31
|
||||
#define RT2860_IO_MCU_CMD_RADIOOFF 0x35
|
||||
#define RT2860_IO_MCU_CMD_LEDS 0x50
|
||||
#define RT2860_IO_MCU_CMD_LED_BRIGHTNESS 0x51
|
||||
#define RT2860_IO_MCU_CMD_LED1 0x52
|
||||
#define RT2860_IO_MCU_CMD_LED2 0x53
|
||||
#define RT2860_IO_MCU_CMD_LED3 0x54
|
||||
#define RT2860_IO_MCU_CMD_BOOT 0x72
|
||||
#define RT2860_IO_MCU_CMD_BBP 0x80
|
||||
#define RT2860_IO_MCU_CMD_LED1 0x52
|
||||
#define RT2860_IO_MCU_CMD_LED2 0x53
|
||||
#define RT2860_IO_MCU_CMD_LED3 0x54
|
||||
#define RT2860_IO_MCU_CMD_BOOT 0x72
|
||||
#define RT2860_IO_MCU_CMD_BBP 0x80
|
||||
#define RT2860_IO_MCU_CMD_POWERSAVE_LEVEL 0x83
|
||||
|
||||
void rt2860_io_rf_load_defaults(struct rt2860_softc *sc);
|
||||
uint32_t rt2860_io_mac_read(struct rt2860_softc *sc, uint16_t reg);
|
||||
|
||||
void rt2860_io_mac_read_multi(struct rt2860_softc *sc,
|
||||
@@ -58,6 +59,8 @@ void rt2860_io_bbp_write(struct rt2860_softc *sc, uint8_t reg, uint8_t val);
|
||||
|
||||
void rt2860_io_rf_write(struct rt2860_softc *sc, uint8_t reg, uint32_t val);
|
||||
|
||||
int32_t rt2860_io_rf_read(struct rt2860_softc *sc, uint8_t reg);
|
||||
|
||||
void rt2860_io_mcu_cmd(struct rt2860_softc *sc, uint8_t cmd,
|
||||
uint8_t token, uint16_t arg);
|
||||
|
||||
@@ -66,4 +69,5 @@ int rt2860_io_mcu_cmd_check(struct rt2860_softc *sc, uint8_t cid);
|
||||
int rt2860_io_mcu_load_ucode(struct rt2860_softc *sc,
|
||||
const uint8_t *ucode, size_t len);
|
||||
|
||||
|
||||
#endif /* #ifndef _RT2860_IO_H_ */
|
||||
+4
-4
@@ -16,10 +16,10 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "rt2860_led.h"
|
||||
#include "rt2860_reg.h"
|
||||
#include "rt2860_eeprom.h"
|
||||
#include "rt2860_io.h"
|
||||
#include <dev/rt2860/rt2860_led.h>
|
||||
#include <dev/rt2860/rt2860_reg.h>
|
||||
#include <dev/rt2860/rt2860_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_io.h>
|
||||
|
||||
/*
|
||||
* rt2860_led_brightness
|
||||
+2
-2
@@ -19,7 +19,7 @@
|
||||
#ifndef _RT2860_LED_H_
|
||||
#define _RT2860_LED_H_
|
||||
|
||||
#include "rt2860_softc.h"
|
||||
#include <dev/rt2860/rt2860_softc.h>
|
||||
|
||||
#define RT2860_LED_CMD_RADIO_OFF 0
|
||||
#define RT2860_LED_CMD_RADIO_ON (1 << 5)
|
||||
@@ -30,4 +30,4 @@ void rt2860_led_brightness(struct rt2860_softc *sc, uint8_t brightness);
|
||||
|
||||
void rt2860_led_cmd(struct rt2860_softc *sc, uint8_t cmd);
|
||||
|
||||
#endif /* #ifndef _RT2870_LED_H_ */
|
||||
#endif /* #ifndef _RT2860_LED_H_ */
|
||||
@@ -0,0 +1,93 @@
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2009-2010 Alexander Egorenkov <[email protected]>
|
||||
* Copyright (c) 2009 Damien Bergamini <[email protected]>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <dev/rt2860/rt2860_softc.h>
|
||||
#include <dev/rt2860/rt2860_reg.h>
|
||||
#include <dev/rt2860/rt2860_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_ucode.h>
|
||||
#include <dev/rt2860/rt2860_txwi.h>
|
||||
#include <dev/rt2860/rt2860_rxwi.h>
|
||||
#include <dev/rt2860/rt2860_io.h>
|
||||
#include <dev/rt2860/rt2860_read_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_led.h>
|
||||
#include <dev/rt2860/rt2860_rf.h>
|
||||
#include <dev/rt2860/rt2860_debug.h>
|
||||
|
||||
/*
|
||||
* Static function prototypes
|
||||
*/
|
||||
|
||||
static int rt2860_nexus_probe(device_t dev);
|
||||
|
||||
static int rt2860_nexus_attach(device_t dev);
|
||||
|
||||
int rt2860_attach(device_t dev);
|
||||
|
||||
int rt2860_detach(device_t dev);
|
||||
|
||||
int rt2860_shutdown(device_t dev);
|
||||
|
||||
int rt2860_suspend(device_t dev);
|
||||
|
||||
int rt2860_resume(device_t dev);
|
||||
|
||||
/*
|
||||
* rt2860_nexus_probe
|
||||
*/
|
||||
static int rt2860_nexus_probe(device_t dev)
|
||||
{
|
||||
device_set_desc(dev, "Ralink RT2860 802.11n MAC/BPP");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* rt2860_nexus_attach
|
||||
*/
|
||||
static int rt2860_nexus_attach(device_t dev)
|
||||
{
|
||||
struct rt2860_softc *sc;
|
||||
|
||||
sc = device_get_softc(dev);
|
||||
sc->mem_rid = 0;
|
||||
|
||||
return (rt2860_attach(dev));
|
||||
}
|
||||
|
||||
static device_method_t rt2860_nexus_dev_methods[] =
|
||||
{
|
||||
DEVMETHOD(device_probe, rt2860_nexus_probe),
|
||||
DEVMETHOD(device_attach, rt2860_nexus_attach),
|
||||
DEVMETHOD(device_detach, rt2860_detach),
|
||||
DEVMETHOD(device_shutdown, rt2860_shutdown),
|
||||
DEVMETHOD(device_suspend, rt2860_suspend),
|
||||
DEVMETHOD(device_resume, rt2860_resume),
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static driver_t rt2860_nexus_driver =
|
||||
{
|
||||
"rt2860",
|
||||
rt2860_nexus_dev_methods,
|
||||
sizeof(struct rt2860_softc)
|
||||
};
|
||||
|
||||
static devclass_t rt2860_nexus_dev_class;
|
||||
|
||||
DRIVER_MODULE(rt2860, nexus, rt2860_nexus_driver, rt2860_nexus_dev_class, 0, 0);
|
||||
MODULE_DEPEND(rt2860, wlan, 1, 1, 1);
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2009-2010 Alexander Egorenkov <[email protected]>
|
||||
* Copyright (c) 2009 Damien Bergamini <[email protected]>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <dev/rt2860/rt2860_softc.h>
|
||||
#include <dev/rt2860/rt2860_reg.h>
|
||||
#include <dev/rt2860/rt2860_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_ucode.h>
|
||||
#include <dev/rt2860/rt2860_txwi.h>
|
||||
#include <dev/rt2860/rt2860_rxwi.h>
|
||||
#include <dev/rt2860/rt2860_io.h>
|
||||
#include <dev/rt2860/rt2860_read_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_led.h>
|
||||
#include <dev/rt2860/rt2860_rf.h>
|
||||
#include <dev/rt2860/rt2860_debug.h>
|
||||
|
||||
#include <dev/pci/pcireg.h>
|
||||
#include <dev/pci/pcivar.h>
|
||||
|
||||
/*
|
||||
* Defines and macros
|
||||
*/
|
||||
|
||||
#define PCI_VENDOR_RALINK 0x1814
|
||||
#define PCI_PRODUCT_RALINK_RT2860_PCI 0x0601
|
||||
#define PCI_PRODUCT_RALINK_RT2860_PCIe 0x0681
|
||||
#define PCI_PRODUCT_RALINK_RT2760_PCI 0x0701
|
||||
#define PCI_PRODUCT_RALINK_RT2790_PCIe 0x0781
|
||||
#define PCI_PRODUCT_RALINK_RT3090_PCIe 0x3090
|
||||
|
||||
/*
|
||||
* Data structures and types
|
||||
*/
|
||||
|
||||
struct rt2860_pci_ident
|
||||
{
|
||||
uint16_t vendor;
|
||||
uint16_t device;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
/*
|
||||
* Static function prototypes
|
||||
*/
|
||||
|
||||
static int rt2860_pci_probe(device_t dev);
|
||||
|
||||
static int rt2860_pci_attach(device_t dev);
|
||||
|
||||
/*
|
||||
* Bus independed methods
|
||||
*/
|
||||
|
||||
int rt2860_attach(device_t dev);
|
||||
|
||||
int rt2860_detach(device_t dev);
|
||||
|
||||
int rt2860_shutdown(device_t dev);
|
||||
|
||||
int rt2860_suspend(device_t dev);
|
||||
|
||||
int rt2860_resume(device_t dev);
|
||||
|
||||
|
||||
/*
|
||||
* Static variables
|
||||
*/
|
||||
|
||||
static const struct rt2860_pci_ident rt2860_pci_ids[] =
|
||||
{
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2860_PCI, "Ralink RT2860 PCI" },
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2860_PCIe, "Ralink RT2860 PCIe" },
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2760_PCI, "Ralink RT2760 PCI" },
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2790_PCIe, "Ralink RT2790 PCIe" },
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT2790_PCIe, "Ralink RT2790 PCIe" },
|
||||
{ PCI_VENDOR_RALINK, PCI_PRODUCT_RALINK_RT3090_PCIe, "Ralink RT3090 PCIe" },
|
||||
{ 0, 0, NULL }
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* rt2860_pci_probe
|
||||
*/
|
||||
static int rt2860_pci_probe(device_t dev)
|
||||
{
|
||||
const struct rt2860_pci_ident *ident;
|
||||
|
||||
for (ident = rt2860_pci_ids; ident->name != NULL; ident++)
|
||||
{
|
||||
if (pci_get_vendor(dev) == ident->vendor &&
|
||||
pci_get_device(dev) == ident->device)
|
||||
{
|
||||
device_set_desc(dev, ident->name);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return ENXIO;
|
||||
}
|
||||
|
||||
/*
|
||||
* rt2860_pci_attach
|
||||
*/
|
||||
static int rt2860_pci_attach(device_t dev)
|
||||
{
|
||||
struct rt2860_softc *sc;
|
||||
|
||||
sc = device_get_softc(dev);
|
||||
|
||||
if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0)
|
||||
{
|
||||
printf("%s: chip is in D%d power mode, setting to D0\n",
|
||||
device_get_nameunit(dev), pci_get_powerstate(dev));
|
||||
pci_set_powerstate(dev, PCI_POWERSTATE_D0);
|
||||
}
|
||||
|
||||
/* enable bus-mastering */
|
||||
pci_enable_busmaster(dev);
|
||||
sc->mem_rid = PCIR_BAR(0);
|
||||
|
||||
return (rt2860_attach(dev));
|
||||
}
|
||||
|
||||
static device_method_t rt2860_pci_dev_methods[] =
|
||||
{
|
||||
/* PCI only */
|
||||
DEVMETHOD(device_probe, rt2860_pci_probe),
|
||||
DEVMETHOD(device_attach, rt2860_pci_attach),
|
||||
|
||||
/* Any bus */
|
||||
DEVMETHOD(device_detach, rt2860_detach),
|
||||
DEVMETHOD(device_shutdown, rt2860_shutdown),
|
||||
DEVMETHOD(device_suspend, rt2860_suspend),
|
||||
DEVMETHOD(device_resume, rt2860_resume),
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static driver_t rt2860_pci_driver =
|
||||
{
|
||||
"rt2860",
|
||||
rt2860_pci_dev_methods,
|
||||
sizeof(struct rt2860_softc)
|
||||
};
|
||||
|
||||
static devclass_t rt2860_pci_dev_class;
|
||||
|
||||
DRIVER_MODULE(rt2860, pci, rt2860_pci_driver, rt2860_pci_dev_class, 0, 0);
|
||||
MODULE_DEPEND(rt2860, pci, 1, 1, 1);
|
||||
MODULE_DEPEND(rt2860, wlan, 1, 1, 1);
|
||||
|
||||
+44
-18
@@ -16,11 +16,11 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "rt2860_read_eeprom.h"
|
||||
#include "rt2860_reg.h"
|
||||
#include "rt2860_eeprom.h"
|
||||
#include "rt2860_io.h"
|
||||
#include "rt2860_debug.h"
|
||||
#include <dev/rt2860/rt2860_read_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_reg.h>
|
||||
#include <dev/rt2860/rt2860_eeprom.h>
|
||||
#include <dev/rt2860/rt2860_io.h>
|
||||
#include <dev/rt2860/rt2860_debug.h>
|
||||
|
||||
/*
|
||||
* rt2860_read_eeprom
|
||||
@@ -102,6 +102,8 @@ void rt2860_read_eeprom(struct rt2860_softc *sc)
|
||||
device_get_nameunit(sc->dev), sc->rf_rev, sc->ntxpath, sc->nrxpath);
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_NIC_CONFIG);
|
||||
if ((val & 0xff00) != 0xff00)
|
||||
sc->patch_dac = (val >> 15) & 1;
|
||||
|
||||
sc->hw_radio_cntl = ((val & RT2860_EEPROM_HW_RADIO_CNTL) ? 1 : 0);
|
||||
sc->tx_agc_cntl = ((val & RT2860_EEPROM_TX_AGC_CNTL) ? 1 : 0);
|
||||
@@ -172,8 +174,12 @@ void rt2860_read_eeprom(struct rt2860_softc *sc)
|
||||
/* read RSSI offsets and LNA gains */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_LNA_GAIN);
|
||||
if ((sc->mac_rev & 0xffff0000) >= 0x30710000)
|
||||
sc->lna_gain[0] = RT3090_DEF_LNA;
|
||||
else /* channel group 0 */
|
||||
sc->lna_gain[0] = val & 0xff;
|
||||
|
||||
sc->lna_gain[0] = (val & 0xff);
|
||||
// sc->lna_gain[0] = (val & 0xff);
|
||||
sc->lna_gain[1] = (val >> 8) & 0xff;
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_RSSI_OFF_2GHZ_BASE);
|
||||
@@ -181,17 +187,27 @@ void rt2860_read_eeprom(struct rt2860_softc *sc)
|
||||
sc->rssi_off_2ghz[0] = (val & 0xff);
|
||||
sc->rssi_off_2ghz[1] = (val >> 8) & 0xff;
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_RSSI_OFF_2GHZ_BASE + sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_RSSI_OFF_2GHZ_BASE + 2);
|
||||
|
||||
sc->rssi_off_2ghz[2] = (val & 0xff);
|
||||
//sc->rssi_off_2ghz[2] = (val & 0xff);
|
||||
sc->lna_gain[2] = (val >> 8) & 0xff;
|
||||
if ((sc->mac_rev & 0xffff0000) >= 0x30710000) {
|
||||
/*
|
||||
* On RT3090 chips (limited to 2 Rx chains), this ROM
|
||||
* field contains the Tx mixer gain for the 2GHz band.
|
||||
*/
|
||||
if ((val & 0xff) != 0xff)
|
||||
sc->txmixgain_2ghz = val & 0x7;
|
||||
//DPRINTF(("tx mixer gain=%u (2GHz)\n", sc->txmixgain_2ghz));
|
||||
} else
|
||||
sc->rssi_off_2ghz[2] = val & 0xff; /* Ant C */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_RSSI_OFF_5GHZ_BASE);
|
||||
|
||||
sc->rssi_off_5ghz[0] = (val & 0xff);
|
||||
sc->rssi_off_5ghz[1] = (val >> 8) & 0xff;
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_RSSI_OFF_5GHZ_BASE + sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_RSSI_OFF_5GHZ_BASE + 2);
|
||||
|
||||
sc->rssi_off_5ghz[2] = (val & 0xff);
|
||||
sc->lna_gain[3] = (val >> 8) & 0xff;
|
||||
@@ -378,22 +394,22 @@ void rt2860_read_eeprom(struct rt2860_softc *sc)
|
||||
sc->tssi_2ghz[0] = (val & 0xff); /* [-4] */
|
||||
sc->tssi_2ghz[1] = (val >> 8); /* [-3] */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_2GHZ_BASE + sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_2GHZ_BASE + 2);
|
||||
|
||||
sc->tssi_2ghz[2] = (val & 0xff); /* [-2] */
|
||||
sc->tssi_2ghz[3] = (val >> 8); /* [-1] */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_2GHZ_BASE + 2 * sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_2GHZ_BASE + 2 * 2);
|
||||
|
||||
sc->tssi_2ghz[4] = (val & 0xff); /* [0] */
|
||||
sc->tssi_2ghz[5] = (val >> 8); /* [+1] */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_2GHZ_BASE + 3 * sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_2GHZ_BASE + 3 * 2);
|
||||
|
||||
sc->tssi_2ghz[6] = (val & 0xff); /* [+2] */
|
||||
sc->tssi_2ghz[7] = (val >> 8); /* [+3] */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_2GHZ_BASE + 4 * sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_2GHZ_BASE + 4 * 2);
|
||||
|
||||
sc->tssi_2ghz[8] = (val & 0xff); /* [+4] */
|
||||
sc->tssi_step_2ghz = (val >> 8);
|
||||
@@ -415,22 +431,22 @@ void rt2860_read_eeprom(struct rt2860_softc *sc)
|
||||
sc->tssi_5ghz[0] = (val & 0xff); /* [-4] */
|
||||
sc->tssi_5ghz[1] = (val >> 8); /* [-3] */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_5GHZ_BASE + sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_5GHZ_BASE + 2);
|
||||
|
||||
sc->tssi_5ghz[2] = (val & 0xff); /* [-2] */
|
||||
sc->tssi_5ghz[3] = (val >> 8); /* [-1] */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_5GHZ_BASE + 2 * sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_5GHZ_BASE + 2 * 2);
|
||||
|
||||
sc->tssi_5ghz[4] = (val & 0xff); /* [0] */
|
||||
sc->tssi_5ghz[5] = (val >> 8); /* [+1] */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_5GHZ_BASE + 3 * sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_5GHZ_BASE + 3 * 2);
|
||||
|
||||
sc->tssi_5ghz[6] = (val & 0xff); /* [+2] */
|
||||
sc->tssi_5ghz[7] = (val >> 8); /* [+3] */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_5GHZ_BASE + 4 * sizeof(uint16_t));
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_TSSI_5GHZ_BASE + 4 * 2);
|
||||
|
||||
sc->tssi_5ghz[8] = (val & 0xff); /* [+4] */
|
||||
sc->tssi_step_5ghz = (val >> 8);
|
||||
@@ -450,8 +466,18 @@ void rt2860_read_eeprom(struct rt2860_softc *sc)
|
||||
/* read default BBP settings */
|
||||
|
||||
rt2860_io_eeprom_read_multi(sc, RT2860_EEPROM_BBP_BASE,
|
||||
sc->bbp_eeprom, RT2860_SOFTC_BBP_EEPROM_COUNT * sizeof(uint16_t));
|
||||
sc->bbp_eeprom, RT2860_SOFTC_BBP_EEPROM_COUNT * 2);
|
||||
|
||||
if ((sc->mac_rev & 0xffff0000) >= 0x30710000) {
|
||||
/* read vendor RF settings */
|
||||
for (i = 0; i < 10; i++) {
|
||||
val = rt2860_io_eeprom_read(sc, RT3071_EEPROM_RF_BASE + i);
|
||||
sc->rf[i].val = val & 0xff;
|
||||
sc->rf[i].reg = val >> 8;
|
||||
// DPRINTF(("RF%d=0x%02x\n", sc->rf[i].reg,
|
||||
// sc->rf[i].val));
|
||||
}
|
||||
}
|
||||
/* read powersave level */
|
||||
|
||||
val = rt2860_io_eeprom_read(sc, RT2860_EEPROM_POWERSAVE_LEVEL);
|
||||
+1
-1
@@ -19,7 +19,7 @@
|
||||
#ifndef _RT2860_READ_EEPROM_H_
|
||||
#define _RT2860_READ_EEPROM_H_
|
||||
|
||||
#include "rt2860_softc.h"
|
||||
#include <dev/rt2860/rt2860_softc.h>
|
||||
|
||||
void rt2860_read_eeprom(struct rt2860_softc *sc);
|
||||
|
||||
+163
-13
@@ -19,7 +19,11 @@
|
||||
#ifndef _RT2860_REG_H_
|
||||
#define _RT2860_REG_H_
|
||||
|
||||
#define RT2860_REG_EEPROM_CSR 0x0004
|
||||
#define RT2860_REG_PCI_CFG 0x0000
|
||||
#define RT2860_REG_EEPROM_CSR 0x0004
|
||||
#define RT2860_REG_PCI_MCU_CSR 0x0008
|
||||
#define RT2860_REG_PCI_SYS_CSR 0x000c
|
||||
#define RT2860_REG_PCIE_JTAG 0x0010
|
||||
|
||||
#define RT2860_REG_SCHDMA_INT_STATUS 0x0200
|
||||
#define RT2860_REG_SCHDMA_INT_MASK 0x0204
|
||||
@@ -40,42 +44,73 @@
|
||||
#define RT2860_REG_SCHDMA_TX_MAX_CNT(qid) (0x0234 + (qid) * 16)
|
||||
#define RT2860_REG_SCHDMA_TX_CTX_IDX(qid) (0x0238 + (qid) * 16)
|
||||
#define RT2860_REG_SCHDMA_TX_DTX_IDX(qid) (0x023c + (qid) * 16)
|
||||
#define RT2860_REG_SCHDMA_US_CYC_CNT 0x02a4
|
||||
|
||||
#define RT2860_REG_PBF_SYS_CTRL 0x0400
|
||||
#define RT2860_REG_PBF_CFG 0x0408
|
||||
#define RT2860_REG_PBF_HOST_CMD 0x0404
|
||||
#define RT2860_REG_PBF_CFG 0x0408
|
||||
#define RT2860_REG_PBF_MAX_PCNT 0x040c
|
||||
#define RT2860_REG_PBF_BUF_CTRL 0x0410
|
||||
#define RT2860_REG_PBF_MCU_INT_STA 0x0414
|
||||
#define RT2860_REG_PBF_MCU_INT_ENA 0x0418
|
||||
#define RT2860_REG_PBF_TX0Q_IO 0x041c
|
||||
#define RT2860_REG_PBF_TX1Q_IO 0x0420
|
||||
#define RT2860_REG_PBF_TX2Q_IO 0x0424
|
||||
#define RT2860_REG_PBF_RX0Q_IO 0x0428
|
||||
#define RT2860_REG_PBF_BCN_OFFSET0 0x042c
|
||||
#define RT2860_REG_PBF_BCN_OFFSET1 0x0430
|
||||
#define RT2860_REG_PBF_TXRXQ_STA 0x0434
|
||||
#define RT2860_REG_PBF_TXRXQ_PCNT 0x0438
|
||||
#define RT2860_REG_PBF_DBG 0x043c
|
||||
#define RT2860_REG_PBF_CAP_CTRL 0x0440
|
||||
|
||||
#define RT2860_REG_MAC_CSR0 0x1000
|
||||
#define RT2860_REG_SYS_CTRL 0x1004
|
||||
#define RT2860_REG_ADDR_DW0 0x1008
|
||||
#define RT2860_REG_ADDR_DW1 0x100c
|
||||
#define RT2872_REG_RF_CSR_CFG 0x500
|
||||
#define RT2872_REG_RF_SETTING 0x504
|
||||
#define RT2872_REG_RF_TEST_CONTROL 0x508
|
||||
|
||||
#define RT2860_REG_MAC_CSR0 0x1000
|
||||
#define RT2860_REG_SYS_CTRL 0x1004
|
||||
#define RT2860_REG_ADDR_DW0 0x1008
|
||||
#define RT2860_REG_ADDR_DW1 0x100c
|
||||
#define RT2860_REG_BSSID_DW0 0x1010
|
||||
#define RT2860_REG_BSSID_DW1 0x1014
|
||||
#define RT2860_REG_MAX_LEN_CFG 0x1018
|
||||
#define RT2860_REG_BBP_CSR_CFG 0x101c
|
||||
#define RT2860_REG_RF_CSR_CFG0 0x1020
|
||||
#define RT2860_REG_LED_CFG 0x102c
|
||||
#define RT2860_REG_LED_CFG 0x102c
|
||||
#define RT2860_REG_AMPDU_MAX_LEN_20M1S 0x1030
|
||||
#define RT2860_REG_AMPDU_MAX_LEN_20M2S 0x1034
|
||||
#define RT2860_REG_AMPDU_MAX_LEN_40M1S 0x1038
|
||||
#define RT2860_REG_AMPDU_MAX_LEN_40M2S 0x103c
|
||||
#define RT2860_REG_AMPDU_BA_WINSIZE 0x1040
|
||||
|
||||
#define RT2860_REG_XIFS_TIME_CFG 0x1100
|
||||
#define RT2860_REG_XIFS_TIME_CFG 0x1100
|
||||
#define RT2860_REG_BKOFF_SLOT_CFG 0x1104
|
||||
#define RT2860_REG_NAV_TIME_CFG 0x1108
|
||||
#define RT2860_REG_CH_TIME_CFG 0x110c
|
||||
#define RT2860_REG_PBF_LIFE_TIMER 0x1110
|
||||
#define RT2860_REG_BCN_TIME_CFG 0x1114
|
||||
#define RT2860_REG_TBTT_SYNC_CFG 0x1118
|
||||
#define RT2860_REG_TSF_TIMER_DW0 0x111c
|
||||
#define RT2860_REG_TSF_TIMER_DW1 0x1120
|
||||
#define RT2860_REG_TBTT_TIMER 0x1124
|
||||
#define RT2860_REG_INT_TIMER 0x1128
|
||||
#define RT2860_REG_INT_TIMER_EN 0x112c
|
||||
#define RT2860_REG_CH_IDLE_STA 0x1130
|
||||
|
||||
#define RT2860_REG_STATUS_CFG 0x1200
|
||||
#define RT2860_REG_PWR_PIN_CFG 0x1204
|
||||
#define RT2860_REG_AUTO_WAKEUP_CFG 0x1208
|
||||
|
||||
#define RT2860_REG_TX_EDCA_AC_CFG(aci) (0x1300 + (aci) * 4)
|
||||
#define RT2860_REG_TX_EDCA_AC_CFG(aci) (0x1300 + (aci) * 4)
|
||||
#define RT2860_REG_TX_EDCA_TID_AC_MAP 0x1310
|
||||
#define RT2860_REG_TX_PWR_CFG(ridx) (0x1314 + (ridx) * 4)
|
||||
#define RT2860_REG_TX_PIN_CFG 0x1328
|
||||
#define RT2860_REG_TX_BAND_CFG 0x132c
|
||||
#define RT2860_REG_TX_SW_CFG0 0x1330
|
||||
#define RT2860_REG_TX_SW_CFG1 0x1334
|
||||
#define RT2860_REG_TX_SW_CFG2 0x1338
|
||||
#define RT2860_REG_TX_TXOP_THRES_CFG 0x133c
|
||||
#define RT2860_REG_TX_TXOP_CTRL_CFG 0x1340
|
||||
#define RT2860_REG_TX_RTS_CFG 0x1344
|
||||
#define RT2860_REG_TX_TIMEOUT_CFG 0x1348
|
||||
@@ -91,14 +126,27 @@
|
||||
#define RT2860_REG_TX_MM40_PROT_CFG 0x1370
|
||||
#define RT2860_REG_TX_GF20_PROT_CFG 0x1374
|
||||
#define RT2860_REG_TX_GF40_PROT_CFG 0x1378
|
||||
#define RT2860_REG_TX_EXP_CTS_TIME 0x137c
|
||||
#define RT2860_REG_TX_EXP_ACK_TIME 0x1380
|
||||
|
||||
#define RT2860_REG_RX_FILTER_CFG 0x1400
|
||||
#define RT2860_REG_AUTO_RSP_CFG 0x1404
|
||||
#define RT2860_REG_LEGACY_BASIC_RATE 0x1408
|
||||
#define RT2860_REG_LEGACY_BASIC_RATE 0x1408
|
||||
#define RT2860_REG_HT_BASIC_RATE 0x140c
|
||||
#define RT2860_REG_HT_CTRL_CFG 0x1410
|
||||
#define RT2860_REG_SIFS_COST_CFG 0x1414
|
||||
#define RT2860_REG_RX_PARSER_CFG 0x1418
|
||||
|
||||
#define RT2860_REG_HCCAPSMP_TXOP_HLDR_ET 0x1608
|
||||
#define RT2860_REG_TX_SEC_CNT0 0x1500
|
||||
#define RT2860_REG_RX_SEC_CNT0 0x1504
|
||||
#define RT2860_REG_CCMP_FC_MUTE 0x1508
|
||||
|
||||
#define RT2860_REG_HCCAPSMP_TXOP_HLDR_ADDR0 0x1600
|
||||
#define RT2860_REG_HCCAPSMP_TXOP_HLDR_ADDR1 0x1604
|
||||
#define RT2860_REG_HCCAPSMP_TXOP_HLDR_ET 0x1608
|
||||
#define RT2860_REG_HCCAPSMP_QOS_CFPOLL_RA_DW0 0x160c
|
||||
#define RT2860_REG_HCCAPSMP_QOS_CFPOLL_A1_DW1 0x1610
|
||||
#define RT2860_REG_HCCAPSMP_QOS_CFPOLL_QC 0x1614
|
||||
|
||||
#define RT2860_REG_RX_STA_CNT0 0x1700
|
||||
#define RT2860_REG_RX_STA_CNT1 0x1704
|
||||
@@ -116,7 +164,7 @@
|
||||
#define RT2860_REG_TX_AGG_CNT5 0x1734
|
||||
#define RT2860_REG_TX_AGG_CNT6 0x1738
|
||||
#define RT2860_REG_TX_AGG_CNT7 0x173c
|
||||
#define RT2860_REG_TXRX_MPDU_DEN_CNT 0x1740
|
||||
#define RT2860_REG_TXRX_MPDU_DEN_CNT 0x1740
|
||||
|
||||
#define RT2860_REG_WCID(wcid) (0x1800 + (wcid) * 8)
|
||||
#define RT2860_REG_PKEY(wcid) (0x4000 + (wcid) * 32)
|
||||
@@ -135,6 +183,95 @@
|
||||
|
||||
#define RT2860_REG_BEACON_BASE(vap) (0x7800 + (vap) * 512)
|
||||
|
||||
/* RT3070 registers */
|
||||
#define RT3070_RF_CSR_CFG 0x0500
|
||||
#define RT3070_EFUSE_CTRL 0x0580
|
||||
#define RT3070_EFUSE_DATA0 0x0590
|
||||
#define RT3070_EFUSE_DATA1 0x0594
|
||||
#define RT3070_EFUSE_DATA2 0x0598
|
||||
#define RT3070_EFUSE_DATA3 0x059c
|
||||
#define RT3090_OSC_CTRL 0x05a4
|
||||
#define RT3070_LDO_CFG0 0x05d4
|
||||
#define RT3070_GPIO_SWITCH 0x05dc
|
||||
|
||||
#define RT3090_AUX_CTRL 0x010c
|
||||
#define RT3070_OPT_14 0x0114
|
||||
|
||||
/* possible flags for register RF_CSR_CFG */
|
||||
#define RT3070_RF_KICK (1 << 17)
|
||||
#define RT3070_RF_WRITE (1 << 16)
|
||||
|
||||
/* possible flags for register EFUSE_CTRL */
|
||||
#define RT3070_SEL_EFUSE (1 << 31)
|
||||
#define RT3070_EFSROM_KICK (1 << 30)
|
||||
#define RT3070_EFSROM_AIN_MASK 0x03ff0000
|
||||
#define RT3070_EFSROM_AIN_SHIFT 16
|
||||
#define RT3070_EFSROM_MODE_MASK 0x000000c0
|
||||
#define RT3070_EFUSE_AOUT_MASK 0x0000003f
|
||||
|
||||
/* possible flags for RT3020 RF register 1 */
|
||||
#define RT3070_RF_BLOCK (1 << 0)
|
||||
#define RT3070_RX0_PD (1 << 2)
|
||||
#define RT3070_TX0_PD (1 << 3)
|
||||
#define RT3070_RX1_PD (1 << 4)
|
||||
#define RT3070_TX1_PD (1 << 5)
|
||||
#define RT3070_RX2_PD (1 << 6)
|
||||
#define RT3070_TX2_PD (1 << 7)
|
||||
|
||||
/* possible flags for RT3020 RF register 1 */
|
||||
#define RT3070_RF_BLOCK (1 << 0)
|
||||
#define RT3070_RX0_PD (1 << 2)
|
||||
#define RT3070_TX0_PD (1 << 3)
|
||||
#define RT3070_RX1_PD (1 << 4)
|
||||
#define RT3070_TX1_PD (1 << 5)
|
||||
#define RT3070_RX2_PD (1 << 6)
|
||||
#define RT3070_TX2_PD (1 << 7)
|
||||
|
||||
/* possible flags for RT3020 RF register 7 */
|
||||
#define RT3070_TUNE (1 << 0)
|
||||
|
||||
/* possible flags for RT3020 RF register 15 */
|
||||
#define RT3070_TX_LO2 (1 << 3)
|
||||
|
||||
/* possible flags for RT3020 RF register 17 */
|
||||
#define RT3070_TX_LO1 (1 << 3)
|
||||
|
||||
/* possible flags for RT3020 RF register 20 */
|
||||
#define RT3070_RX_LO1 (1 << 3)
|
||||
|
||||
/* possible flags for RT3020 RF register 21 */
|
||||
#define RT3070_RX_LO2 (1 << 3)
|
||||
#define RT3070_RX_CTB (1 << 7)
|
||||
|
||||
/* possible flags for RT3020 RF register 22 */
|
||||
#define RT3070_BB_LOOPBACK (1 << 0)
|
||||
|
||||
/* possible flags for RT3053 RF register 1 */
|
||||
#define RT3593_VCO (1 << 0)
|
||||
|
||||
/* possible flags for RT3053 RF register 2 */
|
||||
#define RT3593_RESCAL (1 << 7)
|
||||
|
||||
/* possible flags for RT3053 RF register 3 */
|
||||
#define RT3593_VCOCAL (1 << 7)
|
||||
|
||||
/* possible flags for RT3053 RF register 6 */
|
||||
#define RT3593_VCO_IC (1 << 6)
|
||||
|
||||
/* possible flags for RT3053 RF register 20 */
|
||||
#define RT3593_LDO_PLL_VC_MASK 0x0e
|
||||
#define RT3593_LDO_RF_VC_MASK 0xe0
|
||||
|
||||
/* possible flags for RT3053 RF register 22 */
|
||||
#define RT3593_CP_IC_MASK 0xe0
|
||||
#define RT3593_CP_IC_SHIFT 5
|
||||
|
||||
/* possible flags for RT3053 RF register 46 */
|
||||
#define RT3593_RX_CTB (1 << 5)
|
||||
|
||||
#define RT3090_DEF_LNA 10
|
||||
|
||||
|
||||
#define RT2860_REG_RF_R1 0
|
||||
#define RT2860_REG_RF_R2 1
|
||||
#define RT2860_REG_RF_R3 2
|
||||
@@ -239,11 +376,24 @@
|
||||
#define RT2860_REG_BBP_HRST (1 << 1)
|
||||
#define RT2860_REG_MAC_SRST (1 << 0)
|
||||
|
||||
/*
|
||||
* RT2872_REG_RF_CSR_CFG flags
|
||||
*/
|
||||
#define RT2872_REG_RF_CSR_BUSY (1 << 17)
|
||||
#define RT2872_REG_RF_CSR_KICK (1 << 17)
|
||||
#define RT2872_REG_RF_CSR_WRITE (1 << 16)
|
||||
#define RT2872_REG_RF_ID_SHIFT 8
|
||||
#define RT2872_REG_RF_ID_MASK 0x1f
|
||||
#define RT2872_REG_RF_VAL_SHIFT 0
|
||||
#define RT2872_REG_RF_VAL_MASK 0xff
|
||||
|
||||
/*
|
||||
* RT2860_REG_BBP_CSR_CFG flags
|
||||
*/
|
||||
#define RT2860_REG_BBP_RW_MODE_PARALLEL (1 << 19)
|
||||
#define RT2860_REG_BBP_RW_MODE_PARALLEL (1 << 19)
|
||||
#define RT2860_REG_BBP_PAR_DUR (1 << 19)
|
||||
#define RT2860_REG_BBP_CSR_BUSY (1 << 17)
|
||||
#define RT2860_REG_BBP_CSR_KICK (1 << 17)
|
||||
#define RT2860_REG_BBP_CSR_READ (1 << 16)
|
||||
#define RT2860_REG_BBP_REG_SHIFT 8
|
||||
#define RT2860_REG_BBP_REG_MASK 0xff
|
||||
File diff suppressed because it is too large
Load Diff
+18
-1
@@ -19,7 +19,7 @@
|
||||
#ifndef _RT2860_RF_H_
|
||||
#define _RT2860_RF_H_
|
||||
|
||||
#include "rt2860_softc.h"
|
||||
#include <dev/rt2860/rt2860_softc.h>
|
||||
|
||||
const char *rt2860_rf_name(int rf_rev);
|
||||
|
||||
@@ -29,4 +29,21 @@ void rt2860_rf_select_chan_group(struct rt2860_softc *sc,
|
||||
void rt2860_rf_set_chan(struct rt2860_softc *sc,
|
||||
struct ieee80211_channel *c);
|
||||
|
||||
uint8_t rt3090_rf_read(struct rt2860_softc *sc, uint8_t reg);
|
||||
|
||||
void rt3090_rf_write(struct rt2860_softc *sc, uint8_t reg, uint8_t val);
|
||||
|
||||
void rt3090_set_chan(struct rt2860_softc *sc, u_int chan);
|
||||
|
||||
int rt3090_rf_init(struct rt2860_softc *sc);
|
||||
|
||||
void rt3090_set_rx_antenna(struct rt2860_softc *, int);
|
||||
|
||||
void rt3090_rf_wakeup(struct rt2860_softc *sc);
|
||||
|
||||
int rt3090_filter_calib(struct rt2860_softc *sc, uint8_t init, uint8_t target,
|
||||
uint8_t *val);
|
||||
|
||||
void rt3090_rf_setup(struct rt2860_softc *sc);
|
||||
|
||||
#endif /* #ifndef _RT2860_RF_H_ */
|
||||
+47
-38
@@ -49,64 +49,67 @@
|
||||
#include <net80211/ieee80211_radiotap.h>
|
||||
#include <net80211/ieee80211_regdomain.h>
|
||||
|
||||
#include <dev/pci/pcireg.h>
|
||||
#include <dev/pci/pcivar.h>
|
||||
//#include "opt_rt2860.h"
|
||||
|
||||
#include "rt2860_rxdesc.h"
|
||||
#include "rt2860_txdesc.h"
|
||||
#include "rt2860_txwi.h"
|
||||
#include "rt2860_amrr.h"
|
||||
#include <dev/rt2860/rt2860_rxdesc.h>
|
||||
#include <dev/rt2860/rt2860_txdesc.h>
|
||||
#include <dev/rt2860/rt2860_txwi.h>
|
||||
#include <dev/rt2860/rt2860_amrr.h>
|
||||
|
||||
#define RT2860_SOFTC_LOCK(sc) mtx_lock(&(sc)->lock)
|
||||
#define RT2860_SOFTC_UNLOCK(sc) mtx_unlock(&(sc)->lock)
|
||||
#define RT2860_SOFTC_ASSERT_LOCKED(sc) mtx_assert(&(sc)->lock, MA_OWNED)
|
||||
#define RT2860_SOFTC_LOCK(sc) mtx_lock(&(sc)->lock)
|
||||
#define RT2860_SOFTC_UNLOCK(sc) \
|
||||
mtx_unlock(&(sc)->lock)
|
||||
#define RT2860_SOFTC_ASSERT_LOCKED(sc) \
|
||||
mtx_assert(&(sc)->lock, MA_OWNED)
|
||||
|
||||
#define RT2860_SOFTC_TX_RING_LOCK(ring) mtx_lock(&(ring)->lock)
|
||||
#define RT2860_SOFTC_TX_RING_UNLOCK(ring) mtx_unlock(&(ring)->lock)
|
||||
#define RT2860_SOFTC_TX_RING_ASSERT_LOCKED(ring) mtx_assert(&(ring)->lock, MA_OWNED)
|
||||
#define RT2860_SOFTC_TX_RING_LOCK(ring) mtx_lock(&(ring)->lock)
|
||||
#define RT2860_SOFTC_TX_RING_UNLOCK(ring) \
|
||||
mtx_unlock(&(ring)->lock)
|
||||
#define RT2860_SOFTC_TX_RING_ASSERT_LOCKED(ring) \
|
||||
mtx_assert(&(ring)->lock, MA_OWNED)
|
||||
|
||||
#define RT2860_SOFTC_FLAGS_UCODE_LOADED (1 << 0)
|
||||
#define RT2860_SOFTC_FLAGS_UCODE_LOADED (1 << 0)
|
||||
|
||||
#define RT2860_SOFTC_LED_OFF_COUNT 3
|
||||
#define RT2860_SOFTC_LED_OFF_COUNT 3
|
||||
|
||||
#define RT2860_SOFTC_RSSI_OFF_COUNT 3
|
||||
#define RT2860_SOFTC_RSSI_OFF_COUNT 3
|
||||
|
||||
#define RT2860_SOFTC_LNA_GAIN_COUNT 4
|
||||
#define RT2860_SOFTC_LNA_GAIN_COUNT 4
|
||||
|
||||
#define RT2860_SOFTC_TXPOW_COUNT 50
|
||||
#define RT2860_SOFTC_TXPOW_COUNT 50
|
||||
|
||||
#define RT2860_SOFTC_TXPOW_RATE_COUNT 5
|
||||
#define RT2860_SOFTC_TXPOW_RATE_COUNT 5
|
||||
|
||||
#define RT2860_SOFTC_TSSI_COUNT 9
|
||||
#define RT2860_SOFTC_TSSI_COUNT 9
|
||||
|
||||
#define RT2860_SOFTC_BBP_EEPROM_COUNT 8
|
||||
#define RT2860_SOFTC_BBP_EEPROM_COUNT 8
|
||||
|
||||
#define RT2860_SOFTC_RSSI_COUNT 3
|
||||
#define RT2860_SOFTC_RSSI_COUNT 3
|
||||
|
||||
#define RT2860_SOFTC_STAID_COUNT 64
|
||||
#define RT2860_SOFTC_STAID_COUNT 64
|
||||
|
||||
#define RT2860_SOFTC_TX_RING_COUNT 6
|
||||
#define RT2860_SOFTC_TX_RING_COUNT 6
|
||||
|
||||
#define RT2860_SOFTC_RX_RING_DATA_COUNT 128
|
||||
#define RT2860_SOFTC_RX_RING_DATA_COUNT 128
|
||||
|
||||
#define RT2860_SOFTC_MAX_SCATTER 10
|
||||
#define RT2860_SOFTC_MAX_SCATTER 10
|
||||
|
||||
#define RT2860_SOFTC_TX_RING_DATA_COUNT 256
|
||||
#define RT2860_SOFTC_TX_RING_DESC_COUNT \
|
||||
#define RT2860_SOFTC_TX_RING_DATA_COUNT 256
|
||||
#define RT2860_SOFTC_TX_RING_DESC_COUNT \
|
||||
(RT2860_SOFTC_TX_RING_DATA_COUNT * RT2860_SOFTC_MAX_SCATTER)
|
||||
|
||||
#define RT2860_SOFTC_RX_RADIOTAP_PRESENT \
|
||||
((1 << IEEE80211_RADIOTAP_FLAGS) | \
|
||||
(1 << IEEE80211_RADIOTAP_RATE) | \
|
||||
(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \
|
||||
(1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) | \
|
||||
(1 << IEEE80211_RADIOTAP_ANTENNA) | \
|
||||
(1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) | \
|
||||
#define RT2860_SOFTC_RX_RADIOTAP_PRESENT \
|
||||
((1 << IEEE80211_RADIOTAP_FLAGS) | \
|
||||
(1 << IEEE80211_RADIOTAP_RATE) | \
|
||||
(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \
|
||||
(1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) | \
|
||||
(1 << IEEE80211_RADIOTAP_ANTENNA) | \
|
||||
(1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) | \
|
||||
(1 << IEEE80211_RADIOTAP_XCHANNEL))
|
||||
|
||||
#define RT2860_SOFTC_TX_RADIOTAP_PRESENT \
|
||||
((1 << IEEE80211_RADIOTAP_FLAGS) | \
|
||||
(1 << IEEE80211_RADIOTAP_RATE) | \
|
||||
#define RT2860_SOFTC_TX_RADIOTAP_PRESENT \
|
||||
((1 << IEEE80211_RADIOTAP_FLAGS) | \
|
||||
(1 << IEEE80211_RADIOTAP_RATE) | \
|
||||
(1 << IEEE80211_RADIOTAP_XCHANNEL))
|
||||
|
||||
struct rt2860_softc_rx_data
|
||||
@@ -309,7 +312,7 @@ struct rt2860_softc
|
||||
{
|
||||
uint8_t val;
|
||||
uint8_t reg;
|
||||
} __packed bbp_eeprom[RT2860_SOFTC_BBP_EEPROM_COUNT];
|
||||
} __packed bbp_eeprom[RT2860_SOFTC_BBP_EEPROM_COUNT], rf[10];
|
||||
|
||||
uint16_t powersave_level;
|
||||
|
||||
@@ -404,6 +407,12 @@ struct rt2860_softc
|
||||
|
||||
int tx_stbc;
|
||||
|
||||
uint8_t rf24_20mhz;
|
||||
uint8_t rf24_40mhz;
|
||||
uint8_t patch_dac;
|
||||
uint8_t txmixgain_2ghz;
|
||||
uint8_t txmixgain_5ghz;
|
||||
|
||||
#ifdef RT2860_DEBUG
|
||||
int debug;
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -16,9 +16,9 @@
|
||||
|
||||
#include <net80211/ieee80211_var.h>
|
||||
|
||||
#include "rt2860_io.h"
|
||||
#include "rt2860_reg.h"
|
||||
#include "rt2860_softc.h"
|
||||
#include "dev/rt2860/rt2860_io.h"
|
||||
#include "dev/rt2860/rt2860_reg.h"
|
||||
#include "dev/rt2860/rt2860_softc.h"
|
||||
|
||||
|
||||
HAIKU_FBSD_WLAN_DRIVER_GLUE(ralink2860, rt2860, pci)
|
||||
|
||||
@@ -1,391 +0,0 @@
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2009-2010 Alexander Egorenkov <[email protected]>
|
||||
* Copyright (c) 2009 Damien Bergamini <[email protected]>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "rt2860_rf.h"
|
||||
#include "rt2860_reg.h"
|
||||
#include "rt2860_eeprom.h"
|
||||
#include "rt2860_io.h"
|
||||
#include "rt2860_debug.h"
|
||||
|
||||
/*
|
||||
* Static variables
|
||||
*/
|
||||
|
||||
static const struct rt2860_rf_prog
|
||||
{
|
||||
uint8_t chan;
|
||||
uint32_t r1, r2, r3, r4;
|
||||
} rt2860_rf_2850[] =
|
||||
{
|
||||
{ 1, 0x98402ecc, 0x984c0786, 0x9816b455, 0x9800510b },
|
||||
{ 2, 0x98402ecc, 0x984c0786, 0x98168a55, 0x9800519f },
|
||||
{ 3, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800518b },
|
||||
{ 4, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800519f },
|
||||
{ 5, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800518b },
|
||||
{ 6, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800519f },
|
||||
{ 7, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800518b },
|
||||
{ 8, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800519f },
|
||||
{ 9, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800518b },
|
||||
{ 10, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800519f },
|
||||
{ 11, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800518b },
|
||||
{ 12, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800519f },
|
||||
{ 13, 0x98402ecc, 0x984c079e, 0x98168a55, 0x9800518b },
|
||||
{ 14, 0x98402ecc, 0x984c07a2, 0x98168a55, 0x98005193 },
|
||||
{ 36, 0x98402ecc, 0x984c099a, 0x98158a55, 0x980ed1a3 },
|
||||
{ 38, 0x98402ecc, 0x984c099e, 0x98158a55, 0x980ed193 },
|
||||
{ 40, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed183 },
|
||||
{ 44, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed1a3 },
|
||||
{ 46, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed18b },
|
||||
{ 48, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed19b },
|
||||
{ 52, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed193 },
|
||||
{ 54, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed1a3 },
|
||||
{ 56, 0x98402ec8, 0x984c068e, 0x98158a55, 0x980ed18b },
|
||||
{ 60, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed183 },
|
||||
{ 62, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed193 },
|
||||
{ 64, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed1a3 },
|
||||
{ 100, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed783 },
|
||||
{ 102, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed793 },
|
||||
{ 104, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed1a3 },
|
||||
{ 108, 0x98402ecc, 0x985c0a32, 0x98578a55, 0x980ed193 },
|
||||
{ 110, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed183 },
|
||||
{ 112, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed19b },
|
||||
{ 116, 0x98402ecc, 0x984c0a3a, 0x98178a55, 0x980ed1a3 },
|
||||
{ 118, 0x98402ecc, 0x984c0a3e, 0x98178a55, 0x980ed193 },
|
||||
{ 120, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed183 },
|
||||
{ 124, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed193 },
|
||||
{ 126, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed15b },
|
||||
{ 128, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed1a3 },
|
||||
{ 132, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed18b },
|
||||
{ 134, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed193 },
|
||||
{ 136, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed19b },
|
||||
{ 140, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed183 },
|
||||
{ 149, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed1a7 },
|
||||
{ 151, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed187 },
|
||||
{ 153, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed18f },
|
||||
{ 157, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed19f },
|
||||
{ 159, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed1a7 },
|
||||
{ 161, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed187 },
|
||||
{ 165, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed197 },
|
||||
{ 184, 0x95002ccc, 0x9500491e, 0x9509be55, 0x950c0a0b },
|
||||
{ 188, 0x95002ccc, 0x95004922, 0x9509be55, 0x950c0a13 },
|
||||
{ 192, 0x95002ccc, 0x95004926, 0x9509be55, 0x950c0a1b },
|
||||
{ 196, 0x95002ccc, 0x9500492a, 0x9509be55, 0x950c0a23 },
|
||||
{ 208, 0x95002ccc, 0x9500493a, 0x9509be55, 0x950c0a13 },
|
||||
{ 212, 0x95002ccc, 0x9500493e, 0x9509be55, 0x950c0a1b },
|
||||
{ 216, 0x95002ccc, 0x95004982, 0x9509be55, 0x950c0a23 },
|
||||
};
|
||||
|
||||
/*
|
||||
* rt2860_rf_name
|
||||
*/
|
||||
const char *rt2860_rf_name(int rf_rev)
|
||||
{
|
||||
switch (rf_rev)
|
||||
{
|
||||
case RT2860_EEPROM_RF_2820:
|
||||
return "RT2820";
|
||||
|
||||
case RT2860_EEPROM_RF_2850:
|
||||
return "RT2850";
|
||||
|
||||
case RT2860_EEPROM_RF_2720:
|
||||
return "RT2720";
|
||||
|
||||
case RT2860_EEPROM_RF_2750:
|
||||
return "RT2750";
|
||||
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* rt2860_rf_select_chan_group
|
||||
*/
|
||||
void rt2860_rf_select_chan_group(struct rt2860_softc *sc,
|
||||
struct ieee80211_channel *c)
|
||||
{
|
||||
struct ifnet *ifp;
|
||||
struct ieee80211com *ic;
|
||||
int chan, group;
|
||||
uint32_t tmp;
|
||||
|
||||
ifp = sc->ifp;
|
||||
ic = ifp->if_l2com;
|
||||
|
||||
chan = ieee80211_chan2ieee(ic, c);
|
||||
if (chan == 0 || chan == IEEE80211_CHAN_ANY)
|
||||
return;
|
||||
|
||||
if (chan <= 14)
|
||||
group = 0;
|
||||
else if (chan <= 64)
|
||||
group = 1;
|
||||
else if (chan <= 128)
|
||||
group = 2;
|
||||
else
|
||||
group = 3;
|
||||
|
||||
rt2860_io_bbp_write(sc, 62, 0x37 - sc->lna_gain[group]);
|
||||
rt2860_io_bbp_write(sc, 63, 0x37 - sc->lna_gain[group]);
|
||||
rt2860_io_bbp_write(sc, 64, 0x37 - sc->lna_gain[group]);
|
||||
rt2860_io_bbp_write(sc, 86, 0x00);
|
||||
|
||||
if (group == 0)
|
||||
{
|
||||
if (sc->ext_lna_2ghz)
|
||||
{
|
||||
rt2860_io_bbp_write(sc, 82, 0x62);
|
||||
rt2860_io_bbp_write(sc, 75, 0x46);
|
||||
}
|
||||
else
|
||||
{
|
||||
rt2860_io_bbp_write(sc, 82, 0x84);
|
||||
rt2860_io_bbp_write(sc, 75, 0x50);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rt2860_io_bbp_write(sc, 82, 0xf2);
|
||||
|
||||
if (sc->ext_lna_5ghz)
|
||||
rt2860_io_bbp_write(sc, 75, 0x46);
|
||||
else
|
||||
rt2860_io_bbp_write(sc, 75, 0x50);
|
||||
}
|
||||
|
||||
if (group == 0)
|
||||
{
|
||||
tmp = 0x2e + sc->lna_gain[group];
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((ic->ic_flags & IEEE80211_F_SCAN) || !IEEE80211_IS_CHAN_HT40(c))
|
||||
tmp = 0x32 + sc->lna_gain[group] * 5 / 3;
|
||||
else
|
||||
tmp = 0x3a + sc->lna_gain[group] * 5 / 3;
|
||||
}
|
||||
|
||||
rt2860_io_bbp_write(sc, 66, tmp);
|
||||
|
||||
tmp = RT2860_REG_RFTR_ENABLE |
|
||||
RT2860_REG_TRSW_ENABLE |
|
||||
RT2860_REG_LNA_PE_G1_ENABLE |
|
||||
RT2860_REG_LNA_PE_A1_ENABLE |
|
||||
RT2860_REG_LNA_PE_G0_ENABLE |
|
||||
RT2860_REG_LNA_PE_A0_ENABLE;
|
||||
|
||||
if (group == 0)
|
||||
tmp |= RT2860_REG_PA_PE_G1_ENABLE |
|
||||
RT2860_REG_PA_PE_G0_ENABLE;
|
||||
else
|
||||
tmp |= RT2860_REG_PA_PE_A1_ENABLE |
|
||||
RT2860_REG_PA_PE_A0_ENABLE;
|
||||
|
||||
if (sc->ntxpath == 1)
|
||||
tmp &= ~(RT2860_REG_PA_PE_G1_ENABLE | RT2860_REG_PA_PE_A1_ENABLE);
|
||||
|
||||
if (sc->nrxpath == 1)
|
||||
tmp &= ~(RT2860_REG_LNA_PE_G1_ENABLE | RT2860_REG_LNA_PE_A1_ENABLE);
|
||||
|
||||
rt2860_io_mac_write(sc, RT2860_REG_TX_PIN_CFG, tmp);
|
||||
|
||||
tmp = rt2860_io_mac_read(sc, RT2860_REG_TX_BAND_CFG);
|
||||
|
||||
tmp &= ~(RT2860_REG_TX_BAND_BG | RT2860_REG_TX_BAND_A | RT2860_REG_TX_BAND_HT40_ABOVE);
|
||||
|
||||
if (group == 0)
|
||||
tmp |= RT2860_REG_TX_BAND_BG;
|
||||
else
|
||||
tmp |= RT2860_REG_TX_BAND_A;
|
||||
|
||||
/* set central channel position */
|
||||
|
||||
if (IEEE80211_IS_CHAN_HT40U(c))
|
||||
tmp |= RT2860_REG_TX_BAND_HT40_BELOW;
|
||||
else if (IEEE80211_IS_CHAN_HT40D(c))
|
||||
tmp |= RT2860_REG_TX_BAND_HT40_ABOVE;
|
||||
else
|
||||
tmp |= RT2860_REG_TX_BAND_HT40_BELOW;
|
||||
|
||||
rt2860_io_mac_write(sc, RT2860_REG_TX_BAND_CFG, tmp);
|
||||
|
||||
/* set bandwidth (20MHz or 40MHz) */
|
||||
|
||||
tmp = rt2860_io_bbp_read(sc, 4);
|
||||
|
||||
tmp &= ~0x18;
|
||||
|
||||
if (IEEE80211_IS_CHAN_HT40(c))
|
||||
tmp |= 0x10;
|
||||
|
||||
rt2860_io_bbp_write(sc, 4, tmp);
|
||||
|
||||
/* set central channel position */
|
||||
|
||||
tmp = rt2860_io_bbp_read(sc, 3);
|
||||
|
||||
tmp &= ~0x20;
|
||||
|
||||
if (IEEE80211_IS_CHAN_HT40D(c))
|
||||
tmp |= 0x20;
|
||||
|
||||
rt2860_io_bbp_write(sc, 3, tmp);
|
||||
|
||||
if (sc->mac_rev == 0x28600100)
|
||||
{
|
||||
if (!IEEE80211_IS_CHAN_HT40(c))
|
||||
{
|
||||
rt2860_io_bbp_write(sc, 69, 0x16);
|
||||
rt2860_io_bbp_write(sc, 70, 0x08);
|
||||
rt2860_io_bbp_write(sc, 73, 0x12);
|
||||
}
|
||||
else
|
||||
{
|
||||
rt2860_io_bbp_write(sc, 69, 0x1a);
|
||||
rt2860_io_bbp_write(sc, 70, 0x0a);
|
||||
rt2860_io_bbp_write(sc, 73, 0x16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* rt2860_rf_set_chan
|
||||
*/
|
||||
void rt2860_rf_set_chan(struct rt2860_softc *sc,
|
||||
struct ieee80211_channel *c)
|
||||
{
|
||||
struct ifnet *ifp;
|
||||
struct ieee80211com *ic;
|
||||
const struct rt2860_rf_prog *prog;
|
||||
uint32_t r1, r2, r3, r4;
|
||||
int8_t txpow1, txpow2;
|
||||
int i, chan;
|
||||
|
||||
ifp = sc->ifp;
|
||||
ic = ifp->if_l2com;
|
||||
prog = rt2860_rf_2850;
|
||||
|
||||
/* get central channel position */
|
||||
|
||||
chan = ieee80211_chan2ieee(ic, c);
|
||||
|
||||
if (IEEE80211_IS_CHAN_HT40U(c))
|
||||
chan += 2;
|
||||
else if (IEEE80211_IS_CHAN_HT40D(c))
|
||||
chan -= 2;
|
||||
|
||||
RT2860_DPRINTF(sc, RT2860_DEBUG_CHAN,
|
||||
"%s: RF set channel: channel=%u, HT%s%s\n",
|
||||
device_get_nameunit(sc->dev),
|
||||
ieee80211_chan2ieee(ic, c),
|
||||
!IEEE80211_IS_CHAN_HT(c) ? " disabled" :
|
||||
IEEE80211_IS_CHAN_HT20(c) ? "20":
|
||||
IEEE80211_IS_CHAN_HT40U(c) ? "40U" : "40D",
|
||||
(ic->ic_flags & IEEE80211_F_SCAN) ? ", scanning" : "");
|
||||
|
||||
if (chan == 0 || chan == IEEE80211_CHAN_ANY)
|
||||
return;
|
||||
|
||||
for (i = 0; prog[i].chan != chan; i++);
|
||||
|
||||
r1 = prog[i].r1;
|
||||
r2 = prog[i].r2;
|
||||
r3 = prog[i].r3;
|
||||
r4 = prog[i].r4;
|
||||
|
||||
txpow1 = sc->txpow1[i];
|
||||
txpow2 = sc->txpow2[i];
|
||||
|
||||
if (sc->ntxpath == 1)
|
||||
r2 |= (1 << 14);
|
||||
|
||||
if (sc->nrxpath == 2)
|
||||
r2 |= (1 << 6);
|
||||
else if (sc->nrxpath == 1)
|
||||
r2 |= (1 << 17) | (1 << 6);
|
||||
|
||||
if (IEEE80211_IS_CHAN_2GHZ(c))
|
||||
{
|
||||
r3 = (r3 & 0xffffc1ff) | (txpow1 << 9);
|
||||
r4 = (r4 & ~0x001f87c0) | (sc->rf_freq_off << 15) | (txpow2 << 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
r3 = r3 & 0xffffc1ff;
|
||||
r4 = (r4 & ~0x001f87c0) | (sc->rf_freq_off << 15);
|
||||
|
||||
if (txpow1 >= RT2860_EEPROM_TXPOW_5GHZ_MIN && txpow1 < 0)
|
||||
{
|
||||
txpow1 = (-RT2860_EEPROM_TXPOW_5GHZ_MIN + txpow1);
|
||||
if (txpow1 > RT2860_EEPROM_TXPOW_5GHZ_MAX)
|
||||
txpow1 = RT2860_EEPROM_TXPOW_5GHZ_MAX;
|
||||
|
||||
r3 |= (txpow1 << 10);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (txpow1 > RT2860_EEPROM_TXPOW_5GHZ_MAX)
|
||||
txpow1 = RT2860_EEPROM_TXPOW_5GHZ_MAX;
|
||||
|
||||
r3 |= (txpow1 << 10) | (1 << 9);
|
||||
}
|
||||
|
||||
if (txpow2 >= RT2860_EEPROM_TXPOW_5GHZ_MIN && txpow2 < 0)
|
||||
{
|
||||
txpow2 = (-RT2860_EEPROM_TXPOW_5GHZ_MIN + txpow2);
|
||||
if (txpow2 > RT2860_EEPROM_TXPOW_5GHZ_MAX)
|
||||
txpow2 = RT2860_EEPROM_TXPOW_5GHZ_MAX;
|
||||
|
||||
r4 |= (txpow2 << 7);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (txpow2 > RT2860_EEPROM_TXPOW_5GHZ_MAX)
|
||||
txpow2 = RT2860_EEPROM_TXPOW_5GHZ_MAX;
|
||||
|
||||
r4 |= (txpow2 << 7) | (1 << 6);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(ic->ic_flags & IEEE80211_F_SCAN) && IEEE80211_IS_CHAN_HT40(c))
|
||||
r4 |= (1 << 21);
|
||||
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R1, r1);
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R2, r2);
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R3, r3 & ~(1 << 2));
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R4, r4);
|
||||
|
||||
DELAY(200);
|
||||
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R1, r1);
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R2, r2);
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R3, r3 | (1 << 2));
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R4, r4);
|
||||
|
||||
DELAY(200);
|
||||
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R1, r1);
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R2, r2);
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R3, r3 & ~(1 << 2));
|
||||
rt2860_io_rf_write(sc, RT2860_REG_RF_R4, r4);
|
||||
|
||||
rt2860_rf_select_chan_group(sc, c);
|
||||
|
||||
DELAY(1000);
|
||||
}
|
||||
@@ -1,566 +0,0 @@
|
||||
|
||||
/*
|
||||
Copyright (c) 2007, Ralink Technology Corporation
|
||||
All rights reserved.
|
||||
|
||||
Redistribution. Redistribution and use in binary form, without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions must reproduce the above copyright notice and the
|
||||
following disclaimer in the documentation and/or other materials
|
||||
provided with the distribution.
|
||||
* Neither the name of Ralink Technology Corporation nor the names of its
|
||||
suppliers may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
* No reverse engineering, decompilation, or disassembly of this software
|
||||
is permitted.
|
||||
|
||||
Limited patent license. Ralink Technology Corporation grants a world-wide,
|
||||
royalty-free, non-exclusive license under patents it now or hereafter
|
||||
owns or controls to make, have made, use, import, offer to sell and
|
||||
sell ("Utilize") this software, but solely to the extent that any
|
||||
such patent is necessary to Utilize the software alone, or in
|
||||
combination with an operating system licensed under an approved Open
|
||||
Source license as listed by the Open Source Initiative at
|
||||
http://opensource.org/licenses. The patent license shall not apply to
|
||||
any other combinations which include this software. No hardware per
|
||||
se is licensed hereunder.
|
||||
|
||||
DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RT2860_UCODE_H_
|
||||
#define _RT2860_UCODE_H_
|
||||
|
||||
/*
|
||||
* RT2860 microcode v26
|
||||
*/
|
||||
static const uint8_t rt2860_ucode[] =
|
||||
{
|
||||
0x02, 0x03, 0x5b, 0x02, 0x02, 0xa6, 0x22, 0x22, 0xff, 0xff, 0xff, 0x02, 0x01, 0x2c, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x02, 0x00, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0xdd, 0xc0, 0xe0,
|
||||
0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x18, 0xc2, 0xaf, 0x30, 0x45, 0x03,
|
||||
0x12, 0x10, 0x09, 0x90, 0x04, 0x16, 0xe0, 0x30, 0xe3, 0x03, 0x74, 0x08, 0xf0, 0x90, 0x04, 0x14,
|
||||
0xe0, 0x20, 0xe7, 0x03, 0x02, 0x00, 0xcb, 0x74, 0x80, 0xf0, 0x90, 0x70, 0x12, 0xe0, 0xf5, 0x36,
|
||||
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, 0x36, 0x40, 0xd2, 0x01, 0x80, 0x3e, 0xe5, 0x55, 0x64, 0x03, 0x60, 0x04, 0xe5, 0x55,
|
||||
0x70, 0x04, 0x7d, 0x02, 0x80, 0x09, 0x85, 0x36, 0x41, 0xd2, 0x02, 0x80, 0x29, 0xad, 0x55, 0xaf,
|
||||
0x36, 0x12, 0x02, 0x82, 0x80, 0x20, 0x90, 0x70, 0x10, 0xe0, 0xf5, 0x47, 0x90, 0x70, 0x11, 0xe0,
|
||||
0xf5, 0x44, 0x12, 0x10, 0x25, 0x80, 0x06, 0x90, 0x70, 0x10, 0xe0, 0xf5, 0x45, 0xe4, 0xfd, 0xaf,
|
||||
0x36, 0x12, 0x02, 0x82, 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, 0x10, 0x12, 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, 0x10,
|
||||
0x0c, 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, 0x10, 0x0f, 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,
|
||||
0x37, 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, 0x02, 0xc8, 0x30, 0x45, 0x03, 0x12, 0x10, 0x03, 0x30, 0x01,
|
||||
0x06, 0x20, 0x09, 0x03, 0x12, 0x10, 0x1c, 0x30, 0x02, 0x06, 0x20, 0x0a, 0x03, 0x12, 0x10, 0x1f,
|
||||
0x30, 0x03, 0x06, 0x20, 0x0b, 0x03, 0x12, 0x10, 0x1f, 0x30, 0x04, 0x06, 0x20, 0x0c, 0x03, 0x12,
|
||||
0x10, 0x22, 0x20, 0x13, 0x09, 0x20, 0x11, 0x06, 0xe5, 0x2b, 0x45, 0x2c, 0x60, 0x03, 0xd3, 0x80,
|
||||
0x01, 0xc3, 0x92, 0xa9, 0x12, 0x03, 0x1c, 0x80, 0xbf, 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, 0xc2, 0x1a,
|
||||
0xc2, 0x18, 0xc2, 0x1b, 0x22, 0xc8, 0xef, 0xc8, 0xe6, 0xfa, 0x08, 0xe6, 0x4a, 0x60, 0x0c, 0xc8,
|
||||
0xef, 0xc8, 0x08, 0xe6, 0x16, 0x18, 0x70, 0x01, 0x16, 0xc3, 0x22, 0xed, 0x24, 0xff, 0xfd, 0xec,
|
||||
0x34, 0xff, 0xc8, 0xef, 0xc8, 0xf6, 0x08, 0xc6, 0xed, 0xc6, 0xd3, 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, 0x03, 0x67, 0xe0, 0xb4, 0xff, 0x12, 0x12,
|
||||
0x03, 0x67, 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, 0x10, 0x06, 0xd2, 0xaf, 0xd0, 0xd0, 0xd0,
|
||||
0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0xc2, 0xaf, 0x12, 0x00, 0x06, 0x12, 0x02, 0x09,
|
||||
0x12, 0x02, 0xe1, 0xe4, 0xf5, 0x22, 0xf5, 0x47, 0x90, 0x04, 0x00, 0x74, 0x80, 0xf0, 0xd2, 0xaf,
|
||||
0x22, 0x75, 0x89, 0x02, 0xe4, 0xf5, 0x8c, 0xf5, 0x8a, 0xf5, 0x88, 0xf5, 0xb8, 0xf5, 0xe8, 0x75,
|
||||
0x90, 0x18, 0xd2, 0x8c, 0x75, 0xa8, 0x05, 0x22, 0xef, 0x60, 0x03, 0x1f, 0x80, 0xfa, 0x22, 0xff,
|
||||
0xc0, 0x26, 0x74, 0x03, 0xc0, 0xe0, 0xc0, 0x82, 0xc0, 0x83, 0x75, 0x26, 0x0a, 0x22, 0xc0, 0x26,
|
||||
0x74, 0x03, 0xc0, 0xe0, 0xc0, 0x82, 0xc0, 0x83, 0x75, 0x26, 0x18, 0x22, 0x30, 0x45, 0x03, 0x12,
|
||||
0x10, 0x15, 0xe5, 0x20, 0x70, 0x03, 0x20, 0x10, 0x03, 0x30, 0x11, 0x03, 0x43, 0x87, 0x01, 0x22,
|
||||
0xce, 0xef, 0xce, 0xee, 0x60, 0x08, 0x7f, 0xff, 0x12, 0x02, 0xf8, 0x1e, 0x80, 0xf5, 0x22, 0xc8,
|
||||
0xef, 0xc8, 0xe6, 0x60, 0x03, 0x16, 0xc3, 0x22, 0xed, 0x14, 0xf6, 0xd3, 0x22, 0xc8, 0xef, 0xc8,
|
||||
0xe6, 0x60, 0x06, 0x16, 0xe6, 0x24, 0xff, 0xb3, 0x22, 0xc3, 0x22, 0x78, 0x7f, 0xe4, 0xf6, 0xd8,
|
||||
0xfd, 0x75, 0x81, 0x5f, 0x02, 0x01, 0xc5, 0x74, 0x14, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x70, 0xf5,
|
||||
0x83, 0x22, 0xef, 0x90, 0x03, 0x7b, 0x93, 0x90, 0x03, 0x00, 0x73, 0x0a, 0x18, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x02, 0x10, 0x28, 0x02, 0x10, 0x3b, 0x02, 0x10, 0x3c, 0x02, 0x13, 0xbc, 0x02,
|
||||
0x13, 0xbd, 0x02, 0x14, 0x72, 0x02, 0x14, 0x73, 0xc3, 0x22, 0xff, 0xff, 0x02, 0x19, 0x4a, 0x02,
|
||||
0x1a, 0xf4, 0x02, 0x15, 0x6c, 0x02, 0x14, 0xa7, 0x30, 0x05, 0x06, 0x20, 0x0d, 0x03, 0x12, 0x01,
|
||||
0x7a, 0x30, 0x06, 0x06, 0x20, 0x0e, 0x03, 0x12, 0x1c, 0x2e, 0x22, 0x22, 0x90, 0x04, 0x14, 0xe0,
|
||||
0x20, 0xe7, 0x03, 0x02, 0x13, 0xbb, 0x90, 0x70, 0x12, 0xe0, 0xf5, 0x56, 0x90, 0x04, 0x04, 0xe0,
|
||||
0x12, 0x02, 0x5c, 0x10, 0xfb, 0x30, 0x10, 0xd2, 0x31, 0x10, 0x93, 0x33, 0x10, 0xa1, 0x34, 0x10,
|
||||
0xb4, 0x35, 0x10, 0xab, 0x36, 0x11, 0x09, 0x50, 0x11, 0x4e, 0x51, 0x11, 0x57, 0x52, 0x11, 0x57,
|
||||
0x53, 0x11, 0x57, 0x54, 0x11, 0x93, 0x55, 0x11, 0xf0, 0x56, 0x12, 0x43, 0x70, 0x12, 0x69, 0x71,
|
||||
0x12, 0x92, 0x72, 0x13, 0x3e, 0x73, 0x13, 0x61, 0x80, 0x13, 0x88, 0x83, 0x13, 0xa0, 0x84, 0x00,
|
||||
0x00, 0x13, 0xbb, 0xd2, 0x18, 0xd2, 0x61, 0x75, 0x35, 0x2a, 0x75, 0x32, 0x0b, 0x75, 0x33, 0xb8,
|
||||
0x22, 0xc2, 0x18, 0x90, 0x01, 0x14, 0xe0, 0x54, 0xfd, 0xf0, 0x22, 0x90, 0x70, 0x11, 0xe0, 0xf5,
|
||||
0x3c, 0x02, 0x13, 0xb5, 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, 0x02, 0x82, 0x02,
|
||||
0x13, 0xb5, 0x20, 0x02, 0x03, 0x30, 0x03, 0x0a, 0x7d, 0x02, 0xaf, 0x56, 0x12, 0x02, 0x82, 0x02,
|
||||
0x13, 0xb5, 0xe5, 0x34, 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, 0xf4,
|
||||
0x70, 0x03, 0x02, 0x13, 0xbb, 0xe0, 0xf5, 0x30, 0x22, 0xe5, 0x34, 0xd3, 0x94, 0x01, 0x40, 0x07,
|
||||
0xe5, 0x55, 0x60, 0x03, 0x02, 0x13, 0xbb, 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, 0x34, 0xd3, 0x94, 0x01, 0x40, 0x07, 0xe5, 0x55,
|
||||
0x60, 0x03, 0x02, 0x13, 0x49, 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, 0x02, 0x82,
|
||||
0x02, 0x13, 0xb5, 0xe5, 0x34, 0xd3, 0x94, 0x01, 0x40, 0x07, 0xe5, 0x55, 0x60, 0x03, 0x02, 0x13,
|
||||
0x49, 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, 0x02, 0x82, 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, 0x02, 0x82, 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, 0x34, 0xd3, 0x94, 0x01, 0x40, 0x07, 0xe5, 0x55, 0x60, 0x03, 0x02, 0x13,
|
||||
0x49, 0x90, 0x70, 0x10, 0xe0, 0xfe, 0x90, 0x70, 0x11, 0xe0, 0xfd, 0xed, 0xf8, 0xe6, 0xf5, 0x57,
|
||||
0xfd, 0xaf, 0x56, 0x12, 0x02, 0x82, 0x02, 0x13, 0xb5, 0xe5, 0x34, 0xd3, 0x94, 0x01, 0x40, 0x07,
|
||||
0xe5, 0x55, 0x60, 0x03, 0x02, 0x13, 0x49, 0x90, 0x70, 0x10, 0xe0, 0xfe, 0x90, 0x70, 0x11, 0xe0,
|
||||
0xfd, 0xed, 0xf5, 0x82, 0x8e, 0x83, 0xe0, 0xf5, 0x57, 0xfd, 0xaf, 0x56, 0x12, 0x02, 0x82, 0x02,
|
||||
0x13, 0xb5, 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, 0xc2, 0x1a, 0xc2, 0x18, 0xc2,
|
||||
0x1b, 0xf5, 0x34, 0x90, 0x05, 0xa4, 0x74, 0x11, 0xf0, 0xa3, 0x74, 0xff, 0xf0, 0xa3, 0x74, 0x03,
|
||||
0xf0, 0xe4, 0xf5, 0x30, 0xc2, 0x19, 0x90, 0x01, 0x0d, 0xe0, 0x44, 0x40, 0xf0, 0x75, 0x3c, 0xff,
|
||||
0xad, 0x57, 0xaf, 0x56, 0x12, 0x02, 0x82, 0xe4, 0x90, 0x70, 0x32, 0xf0, 0x80, 0x77, 0xe5, 0x34,
|
||||
0xd3, 0x94, 0x01, 0x40, 0x0b, 0xe5, 0x55, 0x60, 0x07, 0x7d, 0x03, 0xaf, 0x56, 0x02, 0x02, 0x82,
|
||||
0x90, 0x70, 0x10, 0xe0, 0x24, 0xff, 0x92, 0x93, 0xe4, 0xfd, 0xaf, 0x56, 0x12, 0x02, 0x82, 0x80,
|
||||
0x54, 0xe5, 0x34, 0xd3, 0x94, 0x01, 0x40, 0x0d, 0xe5, 0x55, 0x60, 0x09, 0x7d, 0x03, 0xaf, 0x56,
|
||||
0x12, 0x02, 0x82, 0x80, 0x40, 0x90, 0x70, 0x10, 0xe0, 0x24, 0xff, 0x92, 0x4a, 0xd2, 0x05, 0xad,
|
||||
0x57, 0xaf, 0x56, 0x12, 0x02, 0x82, 0x80, 0x2d, 0xe4, 0xf5, 0x34, 0xf5, 0x30, 0x90, 0x70, 0x10,
|
||||
0xe0, 0xf4, 0x60, 0x03, 0xe0, 0xf5, 0x34, 0xad, 0x57, 0xaf, 0x56, 0x12, 0x02, 0x82, 0x80, 0x15,
|
||||
0xd2, 0x19, 0x05, 0x2f, 0xe5, 0x2f, 0xb4, 0x1a, 0x03, 0xe4, 0xf5, 0x2f, 0xd2, 0x04, 0xad, 0x57,
|
||||
0xaf, 0x56, 0x12, 0x02, 0x82, 0x90, 0x04, 0x14, 0x74, 0x80, 0xf0, 0x22, 0x22, 0xe5, 0x34, 0xc3,
|
||||
0x94, 0x03, 0x40, 0x17, 0xe5, 0x55, 0xb4, 0x02, 0x12, 0xe5, 0x30, 0x60, 0x0e, 0x30, 0x60, 0x0b,
|
||||
0x74, 0xfd, 0x25, 0x46, 0xf5, 0x46, 0xd2, 0x04, 0xe4, 0xf5, 0x53, 0xe5, 0x53, 0x60, 0x03, 0x02,
|
||||
0x14, 0x71, 0x30, 0x60, 0x21, 0xb2, 0x4d, 0x30, 0x4d, 0x1c, 0xe5, 0x34, 0xc3, 0x94, 0x03, 0x40,
|
||||
0x11, 0xe5, 0x55, 0xb4, 0x02, 0x0c, 0xe5, 0x30, 0x60, 0x08, 0x74, 0x03, 0x25, 0x46, 0xf5, 0x46,
|
||||
0x80, 0x02, 0x05, 0x46, 0xc2, 0x04, 0xe5, 0x4f, 0x45, 0x4e, 0x60, 0x08, 0xe5, 0x4f, 0x15, 0x4f,
|
||||
0x70, 0x02, 0x15, 0x4e, 0x30, 0x1a, 0x49, 0x7f, 0x32, 0x7d, 0xb8, 0x7c, 0x0b, 0x12, 0x02, 0x35,
|
||||
0x50, 0x06, 0x90, 0x04, 0x10, 0x74, 0x40, 0xf0, 0x7f, 0x35, 0x7d, 0x32, 0x12, 0x03, 0x3f, 0x50,
|
||||
0x09, 0x90, 0x10, 0x04, 0xe0, 0x54, 0xf7, 0xf0, 0xd2, 0x06, 0xe5, 0x35, 0xd3, 0x94, 0x2d, 0x40,
|
||||
0x30, 0x30, 0x1b, 0x2d, 0xc2, 0x1b, 0xa2, 0x18, 0x92, 0x1a, 0x20, 0x1a, 0x24, 0x90, 0x04, 0x09,
|
||||
0xe0, 0x54, 0xdd, 0xf0, 0x90, 0x10, 0x04, 0xe0, 0x44, 0x08, 0xf0, 0xc2, 0x61, 0xd2, 0x03, 0x22,
|
||||
0xe4, 0xf5, 0x35, 0xa2, 0x18, 0x92, 0x1a, 0x30, 0x1a, 0x07, 0x90, 0x04, 0x09, 0xe0, 0x44, 0x22,
|
||||
0xf0, 0x22, 0x22, 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, 0xc2, 0x4b, 0xc2, 0x4c, 0xe5, 0x44, 0x12, 0x02, 0x5c,
|
||||
0x14, 0xc9, 0x00, 0x15, 0x57, 0x04, 0x15, 0x53, 0x08, 0x15, 0x33, 0x10, 0x14, 0xdd, 0x20, 0x14,
|
||||
0xfd, 0x60, 0x15, 0x0e, 0xa0, 0x00, 0x00, 0x15, 0x59, 0x85, 0x48, 0x43, 0x85, 0x4a, 0x42, 0x85,
|
||||
0x4c, 0x5e, 0xe5, 0x47, 0x64, 0x06, 0x60, 0x03, 0x02, 0x15, 0x59, 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, 0xd2, 0x15, 0xe5, 0x47,
|
||||
0x24, 0xf5, 0x60, 0x0b, 0x24, 0xcb, 0x60, 0x07, 0x24, 0x40, 0x70, 0x06, 0xc2, 0x15, 0x22, 0x12,
|
||||
0x19, 0x15, 0x12, 0x15, 0x8e, 0xc2, 0x15, 0xc2, 0xaf, 0xc2, 0x04, 0xd2, 0xaf, 0x22, 0xc2, 0xaf,
|
||||
0x90, 0x04, 0x14, 0xe0, 0x54, 0x0e, 0x60, 0x04, 0xd2, 0x1c, 0x80, 0x08, 0xe5, 0x4e, 0x45, 0x4f,
|
||||
0x24, 0xff, 0x92, 0x1c, 0xd2, 0xaf, 0x90, 0x04, 0x14, 0xe0, 0xa2, 0xe4, 0x92, 0x1d, 0x74, 0x1e,
|
||||
0xf0, 0xe5, 0x5f, 0x54, 0x0f, 0xf5, 0x2d, 0xe5, 0x2a, 0x70, 0x13, 0x30, 0x1c, 0x05, 0xe5, 0x5f,
|
||||
0x20, 0xe5, 0x0b, 0x30, 0x1d, 0x29, 0xe5, 0x5f, 0x54, 0x30, 0x64, 0x30, 0x70, 0x21, 0xe5, 0x2a,
|
||||
0x70, 0x15, 0xe5, 0x34, 0xc3, 0x94, 0x03, 0x40, 0x09, 0xe5, 0x30, 0x60, 0x05, 0x75, 0x2a, 0x05,
|
||||
0x80, 0x07, 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, 0x45, 0x30, 0x68,
|
||||
0x06, 0xe5, 0x46, 0xa2, 0xe2, 0x80, 0x3c, 0x30, 0x19, 0x1c, 0xe5, 0x5e, 0x20, 0xe0, 0x04, 0x7f,
|
||||
0x01, 0x80, 0x02, 0x7f, 0x00, 0xe5, 0x2f, 0xb4, 0x19, 0x04, 0x7e, 0x01, 0x80, 0x02, 0x7e, 0x00,
|
||||
0xee, 0x6f, 0x24, 0xff, 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, 0x45, 0x30, 0x6a,
|
||||
0x06, 0xe5, 0x46, 0xa2, 0xe2, 0x80, 0x3c, 0x30, 0x19, 0x1c, 0xe5, 0x5e, 0x20, 0xe1, 0x04, 0x7f,
|
||||
0x01, 0x80, 0x02, 0x7f, 0x00, 0xe5, 0x2f, 0xb4, 0x19, 0x04, 0x7e, 0x01, 0x80, 0x02, 0x7e, 0x00,
|
||||
0xee, 0x6f, 0x24, 0xff, 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, 0x53, 0xe5, 0x46, 0x20, 0xe4, 0x03, 0x30, 0xe5, 0x03,
|
||||
0xd3, 0x80, 0x01, 0xc3, 0x80, 0x45, 0x30, 0x6c, 0x06, 0xe5, 0x46, 0xa2, 0xe2, 0x80, 0x3c, 0x30,
|
||||
0x19, 0x1c, 0xe5, 0x5e, 0x20, 0xe2, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xe5, 0x2f, 0xb4,
|
||||
0x19, 0x04, 0x7e, 0x01, 0x80, 0x02, 0x7e, 0x00, 0xee, 0x6f, 0x24, 0xff, 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, 0x14,
|
||||
0xa2, 0x71, 0x92, 0x77, 0xa2, 0x70, 0x92, 0x76, 0xe5, 0x2e, 0x13, 0x13, 0x54, 0x3f, 0xf5, 0x2e,
|
||||
0xc2, 0x77, 0xd2, 0x76, 0x90, 0x10, 0x2f, 0xe5, 0x2e, 0xf0, 0xe5, 0x47, 0x64, 0x06, 0x70, 0x39,
|
||||
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,
|
||||
0x19, 0x0f, 0xe5, 0x27, 0xf4, 0xff, 0x02, 0x19, 0x0f, 0xe5, 0x47, 0x64, 0x07, 0x60, 0x0f, 0xe5,
|
||||
0x47, 0x64, 0x08, 0x60, 0x09, 0xe5, 0x47, 0x64, 0x09, 0x60, 0x03, 0x02, 0x18, 0x8e, 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, 0x19, 0x0f, 0xe5, 0x47,
|
||||
0x64, 0x0c, 0x60, 0x06, 0xe5, 0x47, 0x64, 0x0b, 0x70, 0x7a, 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, 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,
|
||||
0x8f, 0x50, 0xd2, 0x59, 0x22, 0x8f, 0x54, 0xd2, 0x58, 0x22, 0xe4, 0xf5, 0x37, 0xc2, 0xaf, 0xe5,
|
||||
0x51, 0x14, 0x60, 0x4a, 0x14, 0x60, 0x6b, 0x24, 0x02, 0x60, 0x03, 0x02, 0x1a, 0xd5, 0xd2, 0x59,
|
||||
0x75, 0x55, 0x01, 0x20, 0x1a, 0x1c, 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, 0x19, 0x40, 0x90, 0x10, 0x04, 0xe0, 0x54, 0xf3, 0xf0, 0x75, 0x51,
|
||||
0x01, 0x02, 0x1a, 0xd5, 0xe5, 0x50, 0x70, 0x06, 0x75, 0x37, 0x03, 0x02, 0x1a, 0xd5, 0x90, 0x12,
|
||||
0x00, 0xe0, 0x54, 0x03, 0x70, 0x15, 0x7f, 0x20, 0x12, 0x19, 0x40, 0x20, 0x1a, 0x07, 0x90, 0x02,
|
||||
0x08, 0xe0, 0x54, 0xfb, 0xf0, 0x75, 0x51, 0x02, 0x02, 0x1a, 0xd5, 0xe5, 0x50, 0x70, 0x03, 0x02,
|
||||
0x1a, 0xd0, 0x20, 0x1a, 0x15, 0x90, 0x02, 0x08, 0xe0, 0x30, 0xe3, 0x03, 0x02, 0x1a, 0xcc, 0x90,
|
||||
0x04, 0x37, 0xe0, 0x64, 0x22, 0x60, 0x03, 0x02, 0x1a, 0xcc, 0x90, 0x12, 0x04, 0x74, 0x0a, 0xf0,
|
||||
0xe5, 0x58, 0x30, 0xe3, 0x15, 0xe4, 0x90, 0x05, 0x00, 0xf0, 0xa3, 0x74, 0x08, 0xf0, 0xa3, 0x74,
|
||||
0x01, 0xf0, 0x74, 0x03, 0xf0, 0x7f, 0x01, 0x12, 0x03, 0x30, 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, 0x34, 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, 0x20, 0x1a, 0x07, 0x90, 0x04, 0x01, 0xe0, 0x44, 0x10, 0xf0, 0xe5,
|
||||
0x34, 0xd3, 0x94, 0x01, 0x40, 0x09, 0xe5, 0x30, 0x70, 0x05, 0x75, 0x8c, 0x40, 0x80, 0x03, 0x75,
|
||||
0x8c, 0x80, 0x90, 0x04, 0x01, 0xe0, 0x54, 0xfd, 0xf0, 0x20, 0x1a, 0x07, 0x90, 0x12, 0x04, 0xe0,
|
||||
0x44, 0x04, 0xf0, 0xe5, 0x58, 0x30, 0xe0, 0x06, 0x90, 0x01, 0x0d, 0xe0, 0xf5, 0x31, 0xe5, 0x34,
|
||||
0xd3, 0x94, 0x01, 0x40, 0x2c, 0x90, 0x01, 0x0d, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x58, 0x20, 0xe3,
|
||||
0x0c, 0xe5, 0x34, 0xb4, 0x03, 0x07, 0x90, 0x12, 0x04, 0xe0, 0x54, 0xfd, 0xf0, 0x20, 0x02, 0x11,
|
||||
0x20, 0x03, 0x0e, 0x90, 0x01, 0x0d, 0xe0, 0x54, 0xfb, 0xf0, 0x90, 0x01, 0x0c, 0xe0, 0x54, 0xfd,
|
||||
0xf0, 0x75, 0x37, 0x01, 0x75, 0x55, 0x02, 0xe4, 0xf5, 0x51, 0x80, 0x09, 0xe5, 0x50, 0x70, 0x05,
|
||||
0x75, 0x37, 0x03, 0xf5, 0x51, 0xe5, 0x37, 0x60, 0x18, 0xc2, 0x01, 0xe4, 0xf5, 0x51, 0xc2, 0x59,
|
||||
0x20, 0x1a, 0x0e, 0xad, 0x37, 0xaf, 0x40, 0x12, 0x1b, 0xfa, 0xe5, 0x37, 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, 0x1b, 0xfa, 0xe5, 0x52, 0x14, 0x60, 0x56, 0x14, 0x60, 0x33, 0x24,
|
||||
0x02, 0x60, 0x03, 0x02, 0x1b, 0xf7, 0xe5, 0x34, 0xd3, 0x94, 0x01, 0x40, 0x1f, 0x90, 0x01, 0x0c,
|
||||
0xe0, 0x44, 0x02, 0xf0, 0xa3, 0xe0, 0x44, 0x04, 0xf0, 0x90, 0x12, 0x04, 0xe0, 0x44, 0x02, 0xf0,
|
||||
0x7f, 0x32, 0x12, 0x03, 0x30, 0x90, 0x01, 0x0d, 0xe0, 0x54, 0xfe, 0xf0, 0x75, 0x52, 0x02, 0x75,
|
||||
0x55, 0x03, 0xe5, 0x58, 0x30, 0xe0, 0x06, 0x90, 0x01, 0x0d, 0xe5, 0x31, 0xf0, 0x90, 0x12, 0x04,
|
||||
0xe0, 0x54, 0xfb, 0xf0, 0x7f, 0x20, 0x12, 0x19, 0x45, 0x75, 0x52, 0x01, 0x75, 0x55, 0x03, 0x02,
|
||||
0x1b, 0xf7, 0xe5, 0x54, 0x60, 0x03, 0x02, 0x1b, 0xf7, 0x90, 0x04, 0x01, 0xe0, 0x44, 0x0e, 0xf0,
|
||||
0x20, 0x1a, 0x04, 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, 0x16, 0x90, 0x05, 0x00, 0x74, 0xe2, 0xf0,
|
||||
0xa3, 0x74, 0x08, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0x74, 0x03, 0xf0, 0x7f, 0x01, 0x12, 0x03, 0x30,
|
||||
0x20, 0x1a, 0x07, 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,
|
||||
0x1b, 0xfa, 0x30, 0x03, 0x02, 0xc2, 0x03, 0xd2, 0xaf, 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, 0x22, 0x22, 0x30, 0x1a,
|
||||
0x77, 0x90, 0x04, 0x37, 0xe0, 0x20, 0xe5, 0x6c, 0x90, 0x04, 0x28, 0xe0, 0xf5, 0x38, 0xa3, 0xe0,
|
||||
0xf5, 0x37, 0xf5, 0x39, 0xe4, 0xf5, 0x25, 0xe5, 0x39, 0x75, 0xf0, 0x80, 0xa4, 0x24, 0x00, 0xff,
|
||||
0xe5, 0xf0, 0x34, 0x80, 0xfe, 0xe5, 0x37, 0x65, 0x39, 0x70, 0x05, 0xfc, 0x7d, 0x28, 0x80, 0x04,
|
||||
0x7c, 0x00, 0x7d, 0x00, 0xef, 0x2d, 0xff, 0xee, 0x3c, 0xfe, 0x12, 0x1c, 0xa9, 0x50, 0x07, 0x90,
|
||||
0x01, 0x14, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x39, 0x65, 0x38, 0x60, 0x10, 0xe4, 0x25, 0x39, 0xff,
|
||||
0xe4, 0x34, 0x80, 0x8f, 0x82, 0xf5, 0x83, 0xe0, 0xf5, 0x39, 0x80, 0xbb, 0x90, 0x04, 0x10, 0x74,
|
||||
0x01, 0xf0, 0x90, 0x04, 0x28, 0xe5, 0x38, 0xf0, 0xa3, 0xe5, 0x37, 0xf0, 0x90, 0x04, 0x11, 0x74,
|
||||
0x01, 0xf0, 0x80, 0x8d, 0xc2, 0x06, 0xd2, 0x1b, 0x22, 0xe5, 0x25, 0xc3, 0x94, 0x06, 0x50, 0x19,
|
||||
0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xb4, 0xff, 0x07, 0x05, 0x25, 0xe4, 0xf5, 0x24, 0x80, 0x2e, 0xe4,
|
||||
0xf5, 0x25, 0x8f, 0x82, 0x8e, 0x83, 0xf0, 0x80, 0x24, 0xe5, 0x24, 0x75, 0xf0, 0x06, 0x84, 0x74,
|
||||
0x08, 0x25, 0xf0, 0xf5, 0x82, 0xe4, 0x34, 0x10, 0xf5, 0x83, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83,
|
||||
0xe0, 0x6d, 0x70, 0x06, 0x05, 0x25, 0x05, 0x24, 0x80, 0x03, 0xe4, 0xf5, 0x25, 0x0f, 0xbf, 0x00,
|
||||
0x01, 0x0e, 0xef, 0x54, 0x7f, 0x60, 0x07, 0xe5, 0x25, 0xc3, 0x94, 0x2a, 0x40, 0xab, 0xe5, 0x25,
|
||||
0xb4, 0x2a, 0x03, 0xd3, 0x80, 0x01, 0xc3, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x53, 0x88,
|
||||
};
|
||||
|
||||
#endif /* #ifndef _RT2860_UCODE_H_ */
|
||||
Reference in New Issue
Block a user