urtwn: add ROM structure for RTL8188EU
- Add the structure with already known fields offsets (some of them were taken from this driver, some (channel_plan, rf_* fields) - from TP-LINK official driver) - Fix a typo / dehardcode a constant in RTL8192C ROM structure. Tested with RTL8188EU, STA mode Reviewed by: kevlo Approved by: adrian (mentor) Differential Revision: https://reviews.freebsd.org/D4274
This commit is contained in:
parent
c9a5e0d116
commit
f6c1bea004
@ -1707,27 +1707,22 @@ urtwn_read_rom(struct urtwn_softc *sc)
|
||||
static int
|
||||
urtwn_r88e_read_rom(struct urtwn_softc *sc)
|
||||
{
|
||||
uint8_t *rom = sc->rom.r88e_rom;
|
||||
uint16_t addr;
|
||||
int error, i;
|
||||
struct r88e_rom *rom = &sc->rom.r88e_rom;
|
||||
int error;
|
||||
|
||||
error = urtwn_efuse_read(sc, rom, sizeof(sc->rom.r88e_rom));
|
||||
error = urtwn_efuse_read(sc, (uint8_t *)rom, sizeof(sc->rom.r88e_rom));
|
||||
if (error != 0)
|
||||
return (error);
|
||||
|
||||
addr = 0x10;
|
||||
for (i = 0; i < 6; i++)
|
||||
sc->cck_tx_pwr[i] = rom[addr++];
|
||||
for (i = 0; i < 5; i++)
|
||||
sc->ht40_tx_pwr[i] = rom[addr++];
|
||||
sc->bw20_tx_pwr_diff = (rom[addr] & 0xf0) >> 4;
|
||||
sc->bw20_tx_pwr_diff = (rom->tx_pwr_diff >> 4);
|
||||
if (sc->bw20_tx_pwr_diff & 0x08)
|
||||
sc->bw20_tx_pwr_diff |= 0xf0;
|
||||
sc->ofdm_tx_pwr_diff = (rom[addr] & 0xf);
|
||||
sc->ofdm_tx_pwr_diff = (rom->tx_pwr_diff & 0xf);
|
||||
if (sc->ofdm_tx_pwr_diff & 0x08)
|
||||
sc->ofdm_tx_pwr_diff |= 0xf0;
|
||||
sc->regulatory = MS(rom[0xc1], R92C_ROM_RF1_REGULATORY);
|
||||
IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, &rom[0xd7]);
|
||||
sc->regulatory = MS(rom->rf_board_opt, R92C_ROM_RF1_REGULATORY);
|
||||
DPRINTF("regulatory type=%d\n", sc->regulatory);
|
||||
IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, rom->macaddr);
|
||||
|
||||
sc->sc_rf_write = urtwn_r88e_rf_write;
|
||||
sc->sc_power_on = urtwn_r88e_power_on;
|
||||
@ -3620,7 +3615,7 @@ urtwn_bb_init(struct urtwn_softc *sc)
|
||||
urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(0), 0x69553420);
|
||||
urtwn_ms_delay(sc);
|
||||
|
||||
crystalcap = sc->rom.r88e_rom[0xb9];
|
||||
crystalcap = sc->rom.r88e_rom.crystalcap;
|
||||
if (crystalcap == 0xff)
|
||||
crystalcap = 0x20;
|
||||
crystalcap &= 0x3f;
|
||||
@ -4002,6 +3997,7 @@ urtwn_r88e_get_txpower(struct urtwn_softc *sc, int chain,
|
||||
uint16_t power[URTWN_RIDX_COUNT])
|
||||
{
|
||||
struct ieee80211com *ic = &sc->sc_ic;
|
||||
struct r88e_rom *rom = &sc->rom.r88e_rom;
|
||||
uint16_t cckpow, ofdmpow, bw20pow, htpow;
|
||||
const struct urtwn_r88e_txpwr *base;
|
||||
int ridx, chan, group;
|
||||
@ -4040,14 +4036,14 @@ urtwn_r88e_get_txpower(struct urtwn_softc *sc, int chain,
|
||||
}
|
||||
|
||||
/* Compute per-CCK rate Tx power. */
|
||||
cckpow = sc->cck_tx_pwr[group];
|
||||
cckpow = rom->cck_tx_pwr[group];
|
||||
for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++) {
|
||||
power[ridx] += cckpow;
|
||||
if (power[ridx] > R92C_MAX_TX_PWR)
|
||||
power[ridx] = R92C_MAX_TX_PWR;
|
||||
}
|
||||
|
||||
htpow = sc->ht40_tx_pwr[group];
|
||||
htpow = rom->ht40_tx_pwr[group];
|
||||
|
||||
/* Compute per-OFDM rate Tx power. */
|
||||
ofdmpow = htpow + sc->ofdm_tx_pwr_diff;
|
||||
|
@ -953,7 +953,7 @@ struct r92c_rom {
|
||||
uint16_t reserved3;
|
||||
uint8_t usb_phy;
|
||||
uint8_t reserved4[3];
|
||||
uint8_t macaddr[6];
|
||||
uint8_t macaddr[IEEE80211_ADDR_LEN];
|
||||
uint8_t string[61]; /* "Realtek" */
|
||||
uint8_t subcustomer_id;
|
||||
uint8_t cck_tx_pwr[R92C_MAX_CHAINS][3];
|
||||
@ -982,7 +982,37 @@ struct r92c_rom {
|
||||
uint8_t rf_opt4;
|
||||
uint8_t channel_plan;
|
||||
uint8_t version;
|
||||
uint8_t curstomer_id;
|
||||
uint8_t customer_id;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* RTL8188EU ROM image.
|
||||
*/
|
||||
struct r88e_rom {
|
||||
uint8_t reserved1[16];
|
||||
uint8_t cck_tx_pwr[6];
|
||||
uint8_t ht40_tx_pwr[5];
|
||||
uint8_t tx_pwr_diff;
|
||||
uint8_t reserved2[156];
|
||||
uint8_t channel_plan;
|
||||
uint8_t crystalcap;
|
||||
uint8_t reserved3[7];
|
||||
uint8_t rf_board_opt;
|
||||
uint8_t rf_feature_opt;
|
||||
uint8_t rf_bt_opt;
|
||||
uint8_t version;
|
||||
uint8_t customer_id;
|
||||
uint8_t reserved4[3];
|
||||
uint8_t rf_ant_opt;
|
||||
uint8_t reserved5[6];
|
||||
uint16_t vid;
|
||||
uint16_t pid;
|
||||
uint8_t usb_opt;
|
||||
uint8_t reserved6[2];
|
||||
uint8_t macaddr[IEEE80211_ADDR_LEN];
|
||||
uint8_t reserved7[2];
|
||||
uint8_t string[33]; /* "realtek 802.11n NIC" */
|
||||
uint8_t reserved8[256];
|
||||
} __packed;
|
||||
|
||||
#define URTWN_EFUSE_MAX_LEN 512
|
||||
|
@ -141,7 +141,7 @@ enum {
|
||||
|
||||
union urtwn_rom {
|
||||
struct r92c_rom r92c_rom;
|
||||
uint8_t r88e_rom[URTWN_EFUSE_MAX_LEN];
|
||||
struct r88e_rom r88e_rom;
|
||||
};
|
||||
|
||||
struct urtwn_softc {
|
||||
@ -176,6 +176,8 @@ struct urtwn_softc {
|
||||
uint8_t board_type;
|
||||
uint8_t regulatory;
|
||||
uint8_t pa_setting;
|
||||
int8_t ofdm_tx_pwr_diff;
|
||||
int8_t bw20_tx_pwr_diff;
|
||||
int avg_pwdb;
|
||||
int thcal_state;
|
||||
int thcal_lctemp;
|
||||
@ -199,10 +201,6 @@ struct urtwn_softc {
|
||||
void *fw_virtaddr;
|
||||
|
||||
union urtwn_rom rom;
|
||||
uint8_t cck_tx_pwr[6];
|
||||
uint8_t ht40_tx_pwr[5];
|
||||
int8_t bw20_tx_pwr_diff;
|
||||
int8_t ofdm_tx_pwr_diff;
|
||||
uint16_t last_rom_addr;
|
||||
|
||||
struct callout sc_watchdog_ch;
|
||||
|
Loading…
Reference in New Issue
Block a user