mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
Staging driver updates for 6.11-rc1
This is the "big" staging driver update for 6.11-rc1. Not really all that much happened this release cycle, just lots of tiny cleanups, overall about 3000 lines removed, so the cleanups were worth it. Included in here are: - loads of rtl8723bs driver cleanups - lots of rtl8192e driver cleanups - vc04_services reworks and cleanups as that codebase gets slowly evolved into something that will make it into the "real" part of the kernel hopefully soon. - other tiny staging driver cleanups All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCZppZKQ8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ylReQCg0PCB/yroiLFzLxQOZYE3W0ffP6AAoMBMXb0a 2Bu/hV6ptaemwIW/oTPR =/g6K -----END PGP SIGNATURE----- Merge tag 'staging-6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging Pull staging driver updates from Greg KH: "This is the "big" staging driver update for 6.11-rc1. Not really all that much happened this release cycle, just lots of tiny cleanups, overall about 3000 lines removed, so the cleanups were worth it. Included in here are: - loads of rtl8723bs driver cleanups - lots of rtl8192e driver cleanups - vc04_services reworks and cleanups as that codebase gets slowly evolved into something that will make it into the "real" part of the kernel hopefully soon. - other tiny staging driver cleanups All of these have been in linux-next for a while with no reported issues" * tag 'staging-6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (124 commits) staging: rtl8723bs: Remove constant result function CheckNegative() staging: rtl8723bs: Remove unused macros in rtw_mlme_ext.h staging: rtl8723bs: Remove unused macros in hal_pwr_seq.h staging: rtl8723bs: Remove unused macros in rtw_efuse.h staging: rtl8723bs: Remove unused macros in rtw_mlme.h staging: rtl8723bs: Remove unused macros in HalPwrSeqCmd.h staging: rtl8723bs: Remove unused macros in Hal8723BReg.h staging: rtl8723bs: Remove unused macros in Hal8192CPhyReg.h staging: rtl8723bs: Delete file hal_phy_reg_8723b.h staging: rtl8723bs: Move last macro from hal_phy_reg_8723b.h staging: rtl8723bs: Remove unused macros in hal_phy_reg_8723b.h staging: rtl8723bs: Remove unused macros in hal_com_reg.h staging: rtl8723bs: Remove unused macros in rtw_ht.h staging: rtl8723bs: Remove unused macros in hal_com_h2c.h staging: vc04_services: vchiq_core: Stop kthreads on vchiq module unload staging: vchiq_core: Bubble up wait_event_interruptible() return value staging: nvec: Use x instead of x != NULL to improve readability. staging: rtl8192e: Fix conflicting types error with net_device. staging: rtl8723bs: Remove unused variable pwdev_priv staging: vc04_services: Update testing instructions ...
This commit is contained in:
commit
09ea8089ab
@ -1276,4 +1276,5 @@ void fbtft_remove_common(struct device *dev, struct fb_info *info)
|
||||
}
|
||||
EXPORT_SYMBOL(fbtft_remove_common);
|
||||
|
||||
MODULE_DESCRIPTION("Core FB support for small TFT LCD display modules");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -182,5 +182,6 @@ static void __exit manager_exit(void)
|
||||
module_init(manager_init);
|
||||
module_exit(manager_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Greybus audio operations manager");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Svetlin Ankov <ankov_svetlin@projectara.com>");
|
||||
|
@ -10,12 +10,6 @@
|
||||
|
||||
#define GBAUDIO_INVALID_ID 0xFF
|
||||
|
||||
/* mixer control */
|
||||
struct gb_mixer_control {
|
||||
int min, max;
|
||||
unsigned int reg, rreg, shift, rshift, invert;
|
||||
};
|
||||
|
||||
struct gbaudio_ctl_pvt {
|
||||
unsigned int ctl_id;
|
||||
unsigned int data_cport;
|
||||
|
@ -522,4 +522,5 @@ static struct greybus_driver gb_bootrom_driver = {
|
||||
|
||||
module_greybus_driver(gb_bootrom_driver);
|
||||
|
||||
MODULE_DESCRIPTION("BOOTROM Greybus driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -1374,4 +1374,5 @@ static struct greybus_driver gb_camera_driver = {
|
||||
|
||||
module_greybus_driver(gb_camera_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Greybus Camera protocol driver.");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -354,4 +354,5 @@ static void __exit gbphy_exit(void)
|
||||
}
|
||||
module_exit(gbphy_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Greybus Bridged-Phy Bus driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -631,4 +631,5 @@ static struct gbphy_driver gpio_driver = {
|
||||
};
|
||||
|
||||
module_gbphy_driver(gpio_driver);
|
||||
MODULE_DESCRIPTION("GPIO Greybus driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -516,4 +516,5 @@ static struct greybus_driver gb_hid_driver = {
|
||||
};
|
||||
module_greybus_driver(gb_hid_driver);
|
||||
|
||||
MODULE_DESCRIPTION("HID class driver for the Greybus");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -318,4 +318,5 @@ static struct gbphy_driver i2c_driver = {
|
||||
};
|
||||
|
||||
module_gbphy_driver(i2c_driver);
|
||||
MODULE_DESCRIPTION("I2C bridge driver for the Greybus 'generic' I2C module");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -1339,4 +1339,5 @@ static struct greybus_driver gb_lights_driver = {
|
||||
};
|
||||
module_greybus_driver(gb_lights_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Greybus Lights protocol driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -129,4 +129,5 @@ static struct greybus_driver gb_log_driver = {
|
||||
};
|
||||
module_greybus_driver(gb_log_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Greybus driver for the log protocol");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -1175,4 +1175,5 @@ static void __exit loopback_exit(void)
|
||||
}
|
||||
module_exit(loopback_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Loopback bridge driver for the Greybus loopback module");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -1136,4 +1136,5 @@ static struct greybus_driver gb_power_supply_driver = {
|
||||
};
|
||||
module_greybus_driver(gb_power_supply_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Power Supply driver for a Greybus module");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -327,4 +327,5 @@ static struct gbphy_driver pwm_driver = {
|
||||
};
|
||||
|
||||
module_gbphy_driver(pwm_driver);
|
||||
MODULE_DESCRIPTION("PWM Greybus driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -377,4 +377,5 @@ static void __exit raw_exit(void)
|
||||
}
|
||||
module_exit(raw_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Greybus driver for the Raw protocol");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -880,4 +880,5 @@ static struct gbphy_driver sdio_driver = {
|
||||
};
|
||||
|
||||
module_gbphy_driver(sdio_driver);
|
||||
MODULE_DESCRIPTION("SD/MMC Greybus driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -75,4 +75,5 @@ static struct gbphy_driver spi_driver = {
|
||||
};
|
||||
|
||||
module_gbphy_driver(spi_driver);
|
||||
MODULE_DESCRIPTION("Greybus SPI bridge PHY driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -567,4 +567,5 @@ void gb_spilib_master_exit(struct gb_connection *connection)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gb_spilib_master_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Greybus SPI library");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -1024,4 +1024,5 @@ static void gb_uart_driver_exit(void)
|
||||
}
|
||||
|
||||
module_exit(gb_uart_driver_exit);
|
||||
MODULE_DESCRIPTION("UART driver for the Greybus 'generic' UART module");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -242,4 +242,5 @@ static struct gbphy_driver usb_driver = {
|
||||
};
|
||||
|
||||
module_gbphy_driver(usb_driver);
|
||||
MODULE_DESCRIPTION("USB host driver for the Greybus 'generic' USB module");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -245,4 +245,5 @@ static __exit void gb_vibrator_exit(void)
|
||||
}
|
||||
module_exit(gb_vibrator_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Greybus Vibrator protocol driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -300,7 +300,7 @@ int nvec_write_sync(struct nvec_chip *nvec,
|
||||
{
|
||||
mutex_lock(&nvec->sync_write_mutex);
|
||||
|
||||
if (msg != NULL)
|
||||
if (msg)
|
||||
*msg = NULL;
|
||||
|
||||
nvec->sync_write_pending = (data[1] << 8) + data[0];
|
||||
@ -322,7 +322,7 @@ int nvec_write_sync(struct nvec_chip *nvec,
|
||||
|
||||
dev_dbg(nvec->dev, "nvec_sync_write: pong!\n");
|
||||
|
||||
if (msg != NULL)
|
||||
if (msg)
|
||||
*msg = nvec->last_sync_msg;
|
||||
else
|
||||
nvec_msg_free(nvec, nvec->last_sync_msg);
|
||||
@ -570,6 +570,22 @@ static void nvec_tx_set(struct nvec_chip *nvec)
|
||||
(uint)nvec->tx->size, nvec->tx->data[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* tegra_i2c_writel - safely write to an I2C client controller register
|
||||
* @val: value to be written
|
||||
* @reg: register to write to
|
||||
*
|
||||
* A write to an I2C controller register needs to be read back to make sure
|
||||
* that the value has arrived.
|
||||
*/
|
||||
static void tegra_i2c_writel(u32 val, void *reg)
|
||||
{
|
||||
writel_relaxed(val, reg);
|
||||
|
||||
/* read back register to make sure that register writes completed */
|
||||
readl_relaxed(reg);
|
||||
}
|
||||
|
||||
/**
|
||||
* nvec_interrupt - Interrupt handler
|
||||
* @irq: The IRQ
|
||||
@ -604,7 +620,7 @@ static irqreturn_t nvec_interrupt(int irq, void *dev)
|
||||
if ((status & RNW) == 0) {
|
||||
received = readl(nvec->base + I2C_SL_RCVD);
|
||||
if (status & RCVD)
|
||||
writel(0, nvec->base + I2C_SL_RCVD);
|
||||
tegra_i2c_writel(0, nvec->base + I2C_SL_RCVD);
|
||||
}
|
||||
|
||||
if (status == (I2C_SL_IRQ | RCVD))
|
||||
@ -696,7 +712,7 @@ static irqreturn_t nvec_interrupt(int irq, void *dev)
|
||||
|
||||
/* Send data if requested, but not on end of transmission */
|
||||
if ((status & (RNW | END_TRANS)) == RNW)
|
||||
writel(to_send, nvec->base + I2C_SL_RCVD);
|
||||
tegra_i2c_writel(to_send, nvec->base + I2C_SL_RCVD);
|
||||
|
||||
/* If we have send the first byte */
|
||||
if (status == (I2C_SL_IRQ | RNW | RCVD))
|
||||
@ -713,15 +729,6 @@ static irqreturn_t nvec_interrupt(int irq, void *dev)
|
||||
status & RCVD ? " RCVD" : "",
|
||||
status & RNW ? " RNW" : "");
|
||||
|
||||
/*
|
||||
* TODO: replace the udelay with a read back after each writel above
|
||||
* in order to work around a hardware issue, see i2c-tegra.c
|
||||
*
|
||||
* Unfortunately, this change causes an initialisation issue with the
|
||||
* touchpad, which needs to be fixed first.
|
||||
*/
|
||||
udelay(100);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@ -737,15 +744,15 @@ static void tegra_init_i2c_slave(struct nvec_chip *nvec)
|
||||
|
||||
val = I2C_CNFG_NEW_MASTER_SFM | I2C_CNFG_PACKET_MODE_EN |
|
||||
(0x2 << I2C_CNFG_DEBOUNCE_CNT_SHIFT);
|
||||
writel(val, nvec->base + I2C_CNFG);
|
||||
tegra_i2c_writel(val, nvec->base + I2C_CNFG);
|
||||
|
||||
clk_set_rate(nvec->i2c_clk, 8 * 80000);
|
||||
|
||||
writel(I2C_SL_NEWSL, nvec->base + I2C_SL_CNFG);
|
||||
writel(0x1E, nvec->base + I2C_SL_DELAY_COUNT);
|
||||
tegra_i2c_writel(I2C_SL_NEWSL, nvec->base + I2C_SL_CNFG);
|
||||
tegra_i2c_writel(0x1E, nvec->base + I2C_SL_DELAY_COUNT);
|
||||
|
||||
writel(nvec->i2c_addr >> 1, nvec->base + I2C_SL_ADDR1);
|
||||
writel(0, nvec->base + I2C_SL_ADDR2);
|
||||
tegra_i2c_writel(nvec->i2c_addr >> 1, nvec->base + I2C_SL_ADDR1);
|
||||
tegra_i2c_writel(0, nvec->base + I2C_SL_ADDR2);
|
||||
|
||||
enable_irq(nvec->irq);
|
||||
}
|
||||
@ -754,7 +761,7 @@ static void tegra_init_i2c_slave(struct nvec_chip *nvec)
|
||||
static void nvec_disable_i2c_slave(struct nvec_chip *nvec)
|
||||
{
|
||||
disable_irq(nvec->irq);
|
||||
writel(I2C_SL_NEWSL | I2C_SL_NACK, nvec->base + I2C_SL_CNFG);
|
||||
tegra_i2c_writel(I2C_SL_NEWSL | I2C_SL_NACK, nvec->base + I2C_SL_CNFG);
|
||||
clk_disable_unprepare(nvec->i2c_clk);
|
||||
}
|
||||
#endif
|
||||
|
@ -88,9 +88,7 @@ enum version_8190_loopback {
|
||||
VERSION_8190_BE
|
||||
};
|
||||
|
||||
#define IC_VersionCut_C 0x2
|
||||
#define IC_VersionCut_D 0x3
|
||||
#define IC_VersionCut_E 0x4
|
||||
|
||||
enum rf_optype {
|
||||
RF_OP_By_SW_3wire = 0,
|
||||
@ -138,13 +136,6 @@ struct tx_fwinfo_8190pci {
|
||||
u32 PacketID:13;
|
||||
};
|
||||
|
||||
struct phy_ofdm_rx_status_rxsc_sgien_exintfflag {
|
||||
u8 reserved:4;
|
||||
u8 rxsc:2;
|
||||
u8 sgi_en:1;
|
||||
u8 ex_intf_flag:1;
|
||||
};
|
||||
|
||||
struct phy_sts_ofdm_819xpci {
|
||||
u8 trsw_gain_X[4];
|
||||
u8 pwdb_all;
|
||||
|
@ -859,8 +859,8 @@ static u8 _rtl92e_query_is_short(u8 TxHT, u8 TxRate, struct cb_desc *tcb_desc)
|
||||
{
|
||||
u8 tmp_Short;
|
||||
|
||||
tmp_Short = (TxHT == 1) ? ((tcb_desc->bUseShortGI) ? 1 : 0) :
|
||||
((tcb_desc->bUseShortPreamble) ? 1 : 0);
|
||||
tmp_Short = (TxHT == 1) ? ((tcb_desc->use_short_gi) ? 1 : 0) :
|
||||
((tcb_desc->use_short_preamble) ? 1 : 0);
|
||||
if (TxHT == 1 && TxRate != DESC90_RATEMCS15)
|
||||
tmp_Short = 0;
|
||||
|
||||
@ -892,18 +892,18 @@ void rtl92e_fill_tx_desc(struct net_device *dev, struct tx_desc *pdesc,
|
||||
pTxFwInfo->RxAMD = 0;
|
||||
}
|
||||
|
||||
pTxFwInfo->RtsEnable = (cb_desc->bRTSEnable) ? 1 : 0;
|
||||
pTxFwInfo->CtsEnable = (cb_desc->bCTSEnable) ? 1 : 0;
|
||||
pTxFwInfo->RtsSTBC = (cb_desc->bRTSSTBC) ? 1 : 0;
|
||||
pTxFwInfo->RtsEnable = (cb_desc->rts_enable) ? 1 : 0;
|
||||
pTxFwInfo->CtsEnable = (cb_desc->cts_enable) ? 1 : 0;
|
||||
pTxFwInfo->RtsSTBC = (cb_desc->rtsstbc) ? 1 : 0;
|
||||
pTxFwInfo->RtsHT = (cb_desc->rts_rate & 0x80) ? 1 : 0;
|
||||
pTxFwInfo->RtsRate = _rtl92e_rate_mgn_to_hw(cb_desc->rts_rate);
|
||||
pTxFwInfo->RtsBandwidth = 0;
|
||||
pTxFwInfo->RtsSubcarrier = cb_desc->RTSSC;
|
||||
pTxFwInfo->RtsShort = (pTxFwInfo->RtsHT == 0) ?
|
||||
(cb_desc->rts_use_short_preamble ? 1 : 0) :
|
||||
(cb_desc->bRTSUseShortGI ? 1 : 0);
|
||||
(cb_desc->rts_use_short_gi ? 1 : 0);
|
||||
if (priv->current_chnl_bw == HT_CHANNEL_WIDTH_20_40) {
|
||||
if (cb_desc->bPacketBW) {
|
||||
if (cb_desc->packet_bw) {
|
||||
pTxFwInfo->TxBandwidth = 1;
|
||||
pTxFwInfo->TxSubCarrier = 0;
|
||||
} else {
|
||||
@ -934,7 +934,7 @@ void rtl92e_fill_tx_desc(struct net_device *dev, struct tx_desc *pdesc,
|
||||
|
||||
pdesc->NoEnc = 1;
|
||||
pdesc->SecType = 0x0;
|
||||
if (cb_desc->bHwSec) {
|
||||
if (cb_desc->hw_sec) {
|
||||
static u8 tmp;
|
||||
|
||||
if (!tmp)
|
||||
@ -1640,13 +1640,12 @@ bool rtl92e_get_rx_stats(struct net_device *dev, struct rtllib_rx_stats *stats,
|
||||
if (stats->Length < 24)
|
||||
stats->bHwError |= 1;
|
||||
|
||||
if (stats->bHwError) {
|
||||
if (stats->bHwError)
|
||||
return false;
|
||||
}
|
||||
|
||||
stats->RxDrvInfoSize = pdesc->RxDrvInfoSize;
|
||||
stats->RxBufShift = (pdesc->Shift) & 0x03;
|
||||
stats->Decrypted = !pdesc->SWDec;
|
||||
stats->decrypted = !pdesc->SWDec;
|
||||
|
||||
pDrvInfo = (struct rx_fwinfo *)(skb->data + stats->RxBufShift);
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#define _RTL_CAM_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct net_device;
|
||||
|
||||
void rtl92e_cam_reset(struct net_device *dev);
|
||||
|
@ -951,10 +951,10 @@ static void _rtl92e_watchdog_wq_cb(void *data)
|
||||
return;
|
||||
|
||||
if (priv->rtllib->link_state >= MAC80211_LINKED) {
|
||||
if (priv->rtllib->CntAfterLink < 2)
|
||||
priv->rtllib->CntAfterLink++;
|
||||
if (priv->rtllib->cnt_after_link < 2)
|
||||
priv->rtllib->cnt_after_link++;
|
||||
} else {
|
||||
priv->rtllib->CntAfterLink = 0;
|
||||
priv->rtllib->cnt_after_link = 0;
|
||||
}
|
||||
|
||||
rtl92e_dm_watchdog(dev);
|
||||
|
@ -377,7 +377,7 @@ static void _rtl92e_dm_init_bandwidth_autoswitch(struct net_device *dev)
|
||||
|
||||
priv->rtllib->bandwidth_auto_switch.threshold_20Mhzto40Mhz = BW_AUTO_SWITCH_LOW_HIGH;
|
||||
priv->rtllib->bandwidth_auto_switch.threshold_40Mhzto20Mhz = BW_AUTO_SWITCH_HIGH_LOW;
|
||||
priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = false;
|
||||
priv->rtllib->bandwidth_auto_switch.forced_tx_20MHz = false;
|
||||
priv->rtllib->bandwidth_auto_switch.bautoswitch_enable = false;
|
||||
}
|
||||
|
||||
@ -388,14 +388,14 @@ static void _rtl92e_dm_bandwidth_autoswitch(struct net_device *dev)
|
||||
if (priv->current_chnl_bw == HT_CHANNEL_WIDTH_20 ||
|
||||
!priv->rtllib->bandwidth_auto_switch.bautoswitch_enable)
|
||||
return;
|
||||
if (!priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz) {
|
||||
if (!priv->rtllib->bandwidth_auto_switch.forced_tx_20MHz) {
|
||||
if (priv->undecorated_smoothed_pwdb <=
|
||||
priv->rtllib->bandwidth_auto_switch.threshold_40Mhzto20Mhz)
|
||||
priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = true;
|
||||
priv->rtllib->bandwidth_auto_switch.forced_tx_20MHz = true;
|
||||
} else {
|
||||
if (priv->undecorated_smoothed_pwdb >=
|
||||
priv->rtllib->bandwidth_auto_switch.threshold_20Mhzto40Mhz)
|
||||
priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = false;
|
||||
priv->rtllib->bandwidth_auto_switch.forced_tx_20MHz = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1335,51 +1335,52 @@ static void _rtl92e_dm_rx_path_sel_byrssi(struct net_device *dev)
|
||||
for (i = 0; i < RF90_PATH_MAX; i++) {
|
||||
dm_rx_path_sel_table.rf_rssi[i] = priv->stats.rx_rssi_percentage[i];
|
||||
|
||||
if (priv->brfpath_rxenable[i]) {
|
||||
rf_num++;
|
||||
cur_rf_rssi = dm_rx_path_sel_table.rf_rssi[i];
|
||||
if (!priv->brfpath_rxenable[i])
|
||||
continue;
|
||||
|
||||
if (rf_num == 1) {
|
||||
max_rssi_index = min_rssi_index = sec_rssi_index = i;
|
||||
tmp_max_rssi = tmp_min_rssi = tmp_sec_rssi = cur_rf_rssi;
|
||||
} else if (rf_num == 2) {
|
||||
if (cur_rf_rssi >= tmp_max_rssi) {
|
||||
tmp_max_rssi = cur_rf_rssi;
|
||||
max_rssi_index = i;
|
||||
} else {
|
||||
tmp_sec_rssi = tmp_min_rssi = cur_rf_rssi;
|
||||
sec_rssi_index = min_rssi_index = i;
|
||||
}
|
||||
rf_num++;
|
||||
cur_rf_rssi = dm_rx_path_sel_table.rf_rssi[i];
|
||||
|
||||
if (rf_num == 1) {
|
||||
max_rssi_index = min_rssi_index = sec_rssi_index = i;
|
||||
tmp_max_rssi = tmp_min_rssi = tmp_sec_rssi = cur_rf_rssi;
|
||||
} else if (rf_num == 2) {
|
||||
if (cur_rf_rssi >= tmp_max_rssi) {
|
||||
tmp_max_rssi = cur_rf_rssi;
|
||||
max_rssi_index = i;
|
||||
} else {
|
||||
if (cur_rf_rssi > tmp_max_rssi) {
|
||||
tmp_sec_rssi = tmp_max_rssi;
|
||||
sec_rssi_index = max_rssi_index;
|
||||
tmp_max_rssi = cur_rf_rssi;
|
||||
max_rssi_index = i;
|
||||
} else if (cur_rf_rssi == tmp_max_rssi) {
|
||||
tmp_sec_rssi = tmp_min_rssi = cur_rf_rssi;
|
||||
sec_rssi_index = min_rssi_index = i;
|
||||
}
|
||||
} else {
|
||||
if (cur_rf_rssi > tmp_max_rssi) {
|
||||
tmp_sec_rssi = tmp_max_rssi;
|
||||
sec_rssi_index = max_rssi_index;
|
||||
tmp_max_rssi = cur_rf_rssi;
|
||||
max_rssi_index = i;
|
||||
} else if (cur_rf_rssi == tmp_max_rssi) {
|
||||
tmp_sec_rssi = cur_rf_rssi;
|
||||
sec_rssi_index = i;
|
||||
} else if ((cur_rf_rssi < tmp_max_rssi) &&
|
||||
(cur_rf_rssi > tmp_sec_rssi)) {
|
||||
tmp_sec_rssi = cur_rf_rssi;
|
||||
sec_rssi_index = i;
|
||||
} else if (cur_rf_rssi == tmp_sec_rssi) {
|
||||
if (tmp_sec_rssi == tmp_min_rssi) {
|
||||
tmp_sec_rssi = cur_rf_rssi;
|
||||
sec_rssi_index = i;
|
||||
} else if ((cur_rf_rssi < tmp_max_rssi) &&
|
||||
(cur_rf_rssi > tmp_sec_rssi)) {
|
||||
tmp_sec_rssi = cur_rf_rssi;
|
||||
sec_rssi_index = i;
|
||||
} else if (cur_rf_rssi == tmp_sec_rssi) {
|
||||
if (tmp_sec_rssi == tmp_min_rssi) {
|
||||
tmp_sec_rssi = cur_rf_rssi;
|
||||
sec_rssi_index = i;
|
||||
}
|
||||
} else if ((cur_rf_rssi < tmp_sec_rssi) &&
|
||||
(cur_rf_rssi > tmp_min_rssi)) {
|
||||
;
|
||||
} else if (cur_rf_rssi == tmp_min_rssi) {
|
||||
if (tmp_sec_rssi == tmp_min_rssi) {
|
||||
tmp_min_rssi = cur_rf_rssi;
|
||||
min_rssi_index = i;
|
||||
}
|
||||
} else if (cur_rf_rssi < tmp_min_rssi) {
|
||||
}
|
||||
} else if ((cur_rf_rssi < tmp_sec_rssi) &&
|
||||
(cur_rf_rssi > tmp_min_rssi)) {
|
||||
;
|
||||
} else if (cur_rf_rssi == tmp_min_rssi) {
|
||||
if (tmp_sec_rssi == tmp_min_rssi) {
|
||||
tmp_min_rssi = cur_rf_rssi;
|
||||
min_rssi_index = i;
|
||||
}
|
||||
} else if (cur_rf_rssi < tmp_min_rssi) {
|
||||
tmp_min_rssi = cur_rf_rssi;
|
||||
min_rssi_index = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1387,59 +1388,52 @@ static void _rtl92e_dm_rx_path_sel_byrssi(struct net_device *dev)
|
||||
rf_num = 0;
|
||||
if (dm_rx_path_sel_table.cck_method == CCK_Rx_Version_2) {
|
||||
for (i = 0; i < RF90_PATH_MAX; i++) {
|
||||
if (priv->brfpath_rxenable[i]) {
|
||||
rf_num++;
|
||||
cur_cck_pwdb =
|
||||
dm_rx_path_sel_table.cck_pwdb_sta[i];
|
||||
if (!priv->brfpath_rxenable[i])
|
||||
continue;
|
||||
|
||||
if (rf_num == 1) {
|
||||
cck_rx_ver2_max_index = i;
|
||||
cck_rx_ver2_sec_index = i;
|
||||
rf_num++;
|
||||
cur_cck_pwdb = dm_rx_path_sel_table.cck_pwdb_sta[i];
|
||||
|
||||
if (rf_num == 1) {
|
||||
cck_rx_ver2_max_index = i;
|
||||
cck_rx_ver2_sec_index = i;
|
||||
tmp_cck_max_pwdb = cur_cck_pwdb;
|
||||
tmp_cck_min_pwdb = cur_cck_pwdb;
|
||||
tmp_cck_sec_pwdb = cur_cck_pwdb;
|
||||
} else if (rf_num == 2) {
|
||||
if (cur_cck_pwdb >= tmp_cck_max_pwdb) {
|
||||
tmp_cck_max_pwdb = cur_cck_pwdb;
|
||||
tmp_cck_min_pwdb = cur_cck_pwdb;
|
||||
tmp_cck_sec_pwdb = cur_cck_pwdb;
|
||||
} else if (rf_num == 2) {
|
||||
if (cur_cck_pwdb >= tmp_cck_max_pwdb) {
|
||||
tmp_cck_max_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_max_index = i;
|
||||
} else {
|
||||
tmp_cck_sec_pwdb = cur_cck_pwdb;
|
||||
tmp_cck_min_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_sec_index = i;
|
||||
}
|
||||
cck_rx_ver2_max_index = i;
|
||||
} else {
|
||||
if (cur_cck_pwdb > tmp_cck_max_pwdb) {
|
||||
tmp_cck_sec_pwdb =
|
||||
tmp_cck_max_pwdb;
|
||||
cck_rx_ver2_sec_index =
|
||||
cck_rx_ver2_max_index;
|
||||
tmp_cck_max_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_max_index = i;
|
||||
} else if (cur_cck_pwdb ==
|
||||
tmp_cck_max_pwdb) {
|
||||
tmp_cck_sec_pwdb = cur_cck_pwdb;
|
||||
tmp_cck_min_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_sec_index = i;
|
||||
}
|
||||
} else {
|
||||
if (cur_cck_pwdb > tmp_cck_max_pwdb) {
|
||||
tmp_cck_sec_pwdb = tmp_cck_max_pwdb;
|
||||
cck_rx_ver2_sec_index = cck_rx_ver2_max_index;
|
||||
tmp_cck_max_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_max_index = i;
|
||||
} else if (cur_cck_pwdb == tmp_cck_max_pwdb) {
|
||||
tmp_cck_sec_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_sec_index = i;
|
||||
} else if (PWDB_IN_RANGE) {
|
||||
tmp_cck_sec_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_sec_index = i;
|
||||
} else if (cur_cck_pwdb == tmp_cck_sec_pwdb) {
|
||||
if (tmp_cck_sec_pwdb == tmp_cck_min_pwdb) {
|
||||
tmp_cck_sec_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_sec_index = i;
|
||||
} else if (PWDB_IN_RANGE) {
|
||||
tmp_cck_sec_pwdb = cur_cck_pwdb;
|
||||
cck_rx_ver2_sec_index = i;
|
||||
} else if (cur_cck_pwdb ==
|
||||
tmp_cck_sec_pwdb) {
|
||||
if (tmp_cck_sec_pwdb ==
|
||||
tmp_cck_min_pwdb) {
|
||||
tmp_cck_sec_pwdb =
|
||||
cur_cck_pwdb;
|
||||
cck_rx_ver2_sec_index =
|
||||
i;
|
||||
}
|
||||
} else if ((cur_cck_pwdb < tmp_cck_sec_pwdb) &&
|
||||
(cur_cck_pwdb > tmp_cck_min_pwdb)) {
|
||||
;
|
||||
} else if (cur_cck_pwdb == tmp_cck_min_pwdb) {
|
||||
if (tmp_cck_sec_pwdb == tmp_cck_min_pwdb)
|
||||
tmp_cck_min_pwdb = cur_cck_pwdb;
|
||||
} else if (cur_cck_pwdb < tmp_cck_min_pwdb) {
|
||||
tmp_cck_min_pwdb = cur_cck_pwdb;
|
||||
}
|
||||
} else if ((cur_cck_pwdb < tmp_cck_sec_pwdb) &&
|
||||
(cur_cck_pwdb > tmp_cck_min_pwdb)) {
|
||||
;
|
||||
} else if (cur_cck_pwdb == tmp_cck_min_pwdb) {
|
||||
if (tmp_cck_sec_pwdb == tmp_cck_min_pwdb)
|
||||
tmp_cck_min_pwdb = cur_cck_pwdb;
|
||||
} else if (cur_cck_pwdb < tmp_cck_min_pwdb) {
|
||||
tmp_cck_min_pwdb = cur_cck_pwdb;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1758,7 +1752,7 @@ static void _rtl92e_dm_check_fsync(struct net_device *dev)
|
||||
|
||||
if (priv->rtllib->link_state == MAC80211_LINKED) {
|
||||
if (priv->undecorated_smoothed_pwdb <=
|
||||
RegC38_TH) {
|
||||
REG_C38_TH) {
|
||||
if (reg_c38_State !=
|
||||
RegC38_NonFsync_Other_AP) {
|
||||
rtl92e_writeb(dev,
|
||||
@ -1769,7 +1763,7 @@ static void _rtl92e_dm_check_fsync(struct net_device *dev)
|
||||
RegC38_NonFsync_Other_AP;
|
||||
}
|
||||
} else if (priv->undecorated_smoothed_pwdb >=
|
||||
(RegC38_TH + 5)) {
|
||||
(REG_C38_TH + 5)) {
|
||||
if (reg_c38_State) {
|
||||
rtl92e_writeb(dev,
|
||||
rOFDM0_RxDetector3,
|
||||
|
@ -33,8 +33,6 @@
|
||||
#define RATE_ADAPTIVE_TH_LOW_40M 10
|
||||
#define VERY_LOW_RSSI 15
|
||||
|
||||
#define WA_IOT_TH_VAL 25
|
||||
|
||||
#define E_FOR_TX_POWER_TRACK 300
|
||||
#define TX_POWER_NEAR_FIELD_THRESH_HIGH 68
|
||||
#define TX_POWER_NEAR_FIELD_THRESH_LOW 62
|
||||
@ -44,7 +42,7 @@
|
||||
#define CURRENT_TX_RATE_REG 0x1e0
|
||||
#define INITIAL_TX_RATE_REG 0x1e1
|
||||
#define TX_RETRY_COUNT_REG 0x1ac
|
||||
#define RegC38_TH 20
|
||||
#define REG_C38_TH 20
|
||||
|
||||
/*--------------------------Define Parameters-------------------------------*/
|
||||
|
||||
@ -135,8 +133,6 @@ extern struct dig_t dm_digtable;
|
||||
extern const u32 dm_tx_bb_gain[TX_BB_GAIN_TABLE_LEN];
|
||||
extern const u8 dm_cck_tx_bb_gain[CCK_TX_BB_GAIN_TABLE_LEN][8];
|
||||
extern const u8 dm_cck_tx_bb_gain_ch14[CCK_TX_BB_GAIN_TABLE_LEN][8];
|
||||
/* Maps table index to iq amplify gain (dB, 12 to -24dB) */
|
||||
#define dm_tx_bb_gain_idx_to_amplify(idx) (-idx + 12)
|
||||
|
||||
/*------------------------Export global variable----------------------------*/
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <linux/pci.h>
|
||||
|
||||
struct net_device;
|
||||
|
||||
bool rtl92e_check_adapter(struct pci_dev *pdev, struct net_device *dev);
|
||||
|
||||
#endif
|
||||
|
@ -241,7 +241,7 @@ static int _rtl92e_wx_set_scan(struct net_device *dev,
|
||||
(ieee->link_state <= RTLLIB_ASSOCIATING_AUTHENTICATED))
|
||||
return 0;
|
||||
if ((priv->rtllib->link_state == MAC80211_LINKED) &&
|
||||
(priv->rtllib->CntAfterLink < 2))
|
||||
(priv->rtllib->cnt_after_link < 2))
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -496,7 +496,7 @@ void ht_on_assoc_rsp(struct rtllib_device *ieee)
|
||||
ieee->HTHighestOperaRate = ht_get_highest_mcs_rate(ieee,
|
||||
ieee->dot11ht_oper_rate_set,
|
||||
pMcsFilter);
|
||||
ieee->HTCurrentOperaRate = ieee->HTHighestOperaRate;
|
||||
ieee->ht_curr_op_rate = ieee->HTHighestOperaRate;
|
||||
|
||||
ht_info->current_op_mode = pPeerHTInfo->opt_mode;
|
||||
}
|
||||
@ -625,7 +625,7 @@ EXPORT_SYMBOL(HT_update_self_and_peer_setting);
|
||||
u8 ht_c_check(struct rtllib_device *ieee, u8 *pFrame)
|
||||
{
|
||||
if (ieee->ht_info->current_ht_support) {
|
||||
if ((IsQoSDataFrame(pFrame) && frame_order(pFrame)) == 1) {
|
||||
if ((is_qos_data_frame(pFrame) && frame_order(pFrame)) == 1) {
|
||||
netdev_dbg(ieee->dev, "HT CONTROL FILED EXIST!!\n");
|
||||
return true;
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ static void RxPktPendingTimeout(struct timer_list *t)
|
||||
|
||||
unsigned long flags = 0;
|
||||
u8 index = 0;
|
||||
bool bPktInBuf = false;
|
||||
bool pkt_in_buf = false;
|
||||
|
||||
spin_lock_irqsave(&(ieee->reorder_spinlock), flags);
|
||||
if (ts->rx_timeout_indicate_seq != 0xffff) {
|
||||
@ -50,7 +50,7 @@ static void RxPktPendingTimeout(struct timer_list *t)
|
||||
list_add_tail(&pReorderEntry->list,
|
||||
&ieee->RxReorder_Unused_List);
|
||||
} else {
|
||||
bPktInBuf = true;
|
||||
pkt_in_buf = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -68,10 +68,10 @@ static void RxPktPendingTimeout(struct timer_list *t)
|
||||
return;
|
||||
}
|
||||
rtllib_indicate_packets(ieee, ieee->stats_IndicateArray, index);
|
||||
bPktInBuf = false;
|
||||
pkt_in_buf = false;
|
||||
}
|
||||
|
||||
if (bPktInBuf && (ts->rx_timeout_indicate_seq == 0xffff)) {
|
||||
if (pkt_in_buf && (ts->rx_timeout_indicate_seq == 0xffff)) {
|
||||
ts->rx_timeout_indicate_seq = ts->rx_indicate_seq;
|
||||
mod_timer(&ts->rx_pkt_pending_timer, jiffies +
|
||||
msecs_to_jiffies(ieee->ht_info->rx_reorder_pending_time)
|
||||
@ -431,7 +431,7 @@ void remove_all_ts(struct rtllib_device *ieee)
|
||||
}
|
||||
}
|
||||
|
||||
void TsStartAddBaProcess(struct rtllib_device *ieee, struct tx_ts_record *pTxTS)
|
||||
void rtllib_ts_start_add_ba_process(struct rtllib_device *ieee, struct tx_ts_record *pTxTS)
|
||||
{
|
||||
if (pTxTS->add_ba_req_in_progress == false) {
|
||||
pTxTS->add_ba_req_in_progress = true;
|
||||
|
@ -105,26 +105,26 @@ struct cb_desc {
|
||||
u8 bCmdOrInit:1;
|
||||
u8 tx_dis_rate_fallback:1;
|
||||
u8 tx_use_drv_assinged_rate:1;
|
||||
u8 bHwSec:1;
|
||||
u8 hw_sec:1;
|
||||
|
||||
u8 nStuckCount;
|
||||
|
||||
/* Tx Firmware Related flags (10-11)*/
|
||||
u8 bCTSEnable:1;
|
||||
u8 bRTSEnable:1;
|
||||
u8 bUseShortGI:1;
|
||||
u8 bUseShortPreamble:1;
|
||||
u8 cts_enable:1;
|
||||
u8 rts_enable:1;
|
||||
u8 use_short_gi:1;
|
||||
u8 use_short_preamble:1;
|
||||
u8 tx_enable_fw_calc_dur:1;
|
||||
u8 ampdu_enable:1;
|
||||
u8 bRTSSTBC:1;
|
||||
u8 rtsstbc:1;
|
||||
u8 RTSSC:1;
|
||||
|
||||
u8 bRTSBW:1;
|
||||
u8 bPacketBW:1;
|
||||
u8 rts_bw:1;
|
||||
u8 packet_bw:1;
|
||||
u8 rts_use_short_preamble:1;
|
||||
u8 bRTSUseShortGI:1;
|
||||
u8 rts_use_short_gi:1;
|
||||
u8 multicast:1;
|
||||
u8 bBroadcast:1;
|
||||
u8 broadcast:1;
|
||||
u8 drv_agg_enable:1;
|
||||
u8 reserved2:1;
|
||||
|
||||
@ -338,9 +338,9 @@ enum rt_op_mode {
|
||||
#define RTLLIB_QCTL_TID 0x000F
|
||||
|
||||
#define FC_QOS_BIT BIT(7)
|
||||
#define IsDataFrame(pdu) (((pdu[0] & 0x0C) == 0x08) ? true : false)
|
||||
#define IsLegacyDataFrame(pdu) (IsDataFrame(pdu) && (!(pdu[0]&FC_QOS_BIT)))
|
||||
#define IsQoSDataFrame(pframe) \
|
||||
#define is_data_frame(pdu) (((pdu[0] & 0x0C) == 0x08) ? true : false)
|
||||
#define is_legacy_data_frame(pdu) (is_data_frame(pdu) && (!(pdu[0]&FC_QOS_BIT)))
|
||||
#define is_qos_data_frame(pframe) \
|
||||
((*(u16 *)pframe&(IEEE80211_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) == \
|
||||
(IEEE80211_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA))
|
||||
#define frame_order(pframe) (*(u16 *)pframe&IEEE80211_FCTL_ORDER)
|
||||
@ -481,7 +481,7 @@ struct rtllib_rx_stats {
|
||||
u16 bHwError:1;
|
||||
u16 bCRC:1;
|
||||
u16 bICV:1;
|
||||
u16 Decrypted:1;
|
||||
u16 decrypted:1;
|
||||
u32 time_stamp_low;
|
||||
u32 time_stamp_high;
|
||||
|
||||
@ -489,7 +489,7 @@ struct rtllib_rx_stats {
|
||||
u8 RxBufShift;
|
||||
bool bIsAMPDU;
|
||||
bool bFirstMPDU;
|
||||
bool bContainHTC;
|
||||
bool contain_htc;
|
||||
u32 RxPWDBAll;
|
||||
u8 RxMIMOSignalStrength[4];
|
||||
s8 RxMIMOSignalQuality[2];
|
||||
@ -728,7 +728,7 @@ union frameqos {
|
||||
#define QOS_VERSION_1 1
|
||||
|
||||
struct rtllib_qos_information_element {
|
||||
u8 elementID;
|
||||
u8 element_id;
|
||||
u8 length;
|
||||
u8 qui[QOS_OUI_LEN];
|
||||
u8 qui_type;
|
||||
@ -799,7 +799,7 @@ static inline const char *eap_get_type(int type)
|
||||
eap_types[type];
|
||||
}
|
||||
|
||||
static inline u8 Frame_QoSTID(u8 *buf)
|
||||
static inline u8 frame_qos_tid(u8 *buf)
|
||||
{
|
||||
struct ieee80211_hdr_3addr *hdr;
|
||||
u16 fc;
|
||||
@ -910,14 +910,14 @@ struct rtllib_network {
|
||||
u8 hidden_ssid_len;
|
||||
struct rtllib_qos_data qos_data;
|
||||
|
||||
bool bWithAironetIE;
|
||||
bool with_aironet_ie;
|
||||
bool ckip_supported;
|
||||
bool ccx_rm_enable;
|
||||
u8 CcxRmState[2];
|
||||
bool bMBssidValid;
|
||||
u8 MBssidMask;
|
||||
u8 MBssid[ETH_ALEN];
|
||||
bool bWithCcxVerNum;
|
||||
u8 ccx_rm_state[2];
|
||||
bool mb_ssid_valid;
|
||||
u8 mb_ssid_mask;
|
||||
u8 mb_ssid[ETH_ALEN];
|
||||
bool with_ccx_ver_num;
|
||||
u8 bss_ccx_ver_number;
|
||||
/* These are network statistics */
|
||||
struct rtllib_rx_stats stats;
|
||||
@ -949,8 +949,8 @@ struct rtllib_network {
|
||||
u8 wmm_info;
|
||||
struct rtllib_wmm_ac_param wmm_param[4];
|
||||
u8 turbo_enable;
|
||||
u16 CountryIeLen;
|
||||
u8 CountryIeBuf[MAX_IE_LEN];
|
||||
u16 country_ie_len;
|
||||
u8 country_ie_buf[MAX_IE_LEN];
|
||||
struct bss_ht bssht;
|
||||
bool broadcom_cap_exist;
|
||||
bool realtek_cap_exit;
|
||||
@ -1018,7 +1018,7 @@ struct tx_pending {
|
||||
struct bandwidth_autoswitch {
|
||||
long threshold_20Mhzto40Mhz;
|
||||
long threshold_40Mhzto20Mhz;
|
||||
bool bforced_tx20Mhz;
|
||||
bool forced_tx_20MHz;
|
||||
bool bautoswitch_enable;
|
||||
};
|
||||
|
||||
@ -1168,7 +1168,7 @@ struct rtllib_device {
|
||||
bool disable_mgnt_queue;
|
||||
|
||||
unsigned long status;
|
||||
u8 CntAfterLink;
|
||||
u8 cnt_after_link;
|
||||
|
||||
enum rt_op_mode op_mode;
|
||||
|
||||
@ -1198,7 +1198,7 @@ struct rtllib_device {
|
||||
u8 reg_dot11tx_ht_oper_rate_set[16];
|
||||
u8 dot11ht_oper_rate_set[16];
|
||||
u8 reg_ht_supp_rate_set[16];
|
||||
u8 HTCurrentOperaRate;
|
||||
u8 ht_curr_op_rate;
|
||||
u8 HTHighestOperaRate;
|
||||
u8 tx_dis_rate_fallback;
|
||||
u8 tx_use_drv_assinged_rate;
|
||||
@ -1407,9 +1407,9 @@ struct rtllib_device {
|
||||
struct work_struct wx_sync_scan_wq;
|
||||
|
||||
union {
|
||||
struct rtllib_rxb *RfdArray[REORDER_WIN_SIZE];
|
||||
struct rtllib_rxb *rfd_array[REORDER_WIN_SIZE];
|
||||
struct rtllib_rxb *stats_IndicateArray[REORDER_WIN_SIZE];
|
||||
struct rtllib_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
|
||||
struct rtllib_rxb *prxb_indicate_array[REORDER_WIN_SIZE];
|
||||
struct {
|
||||
struct sw_chnl_cmd PreCommonCmd[MAX_PRECMD_CNT];
|
||||
struct sw_chnl_cmd PostCommonCmd[MAX_POSTCMD_CNT];
|
||||
@ -1770,7 +1770,7 @@ void rtllib_reset_ba_entry(struct ba_record *ba);
|
||||
bool rtllib_get_ts(struct rtllib_device *ieee, struct ts_common_info **ppTS, u8 *addr,
|
||||
u8 TID, enum tr_select tx_rx_select, bool bAddNewTs);
|
||||
void rtllib_ts_init(struct rtllib_device *ieee);
|
||||
void TsStartAddBaProcess(struct rtllib_device *ieee,
|
||||
void rtllib_ts_start_add_ba_process(struct rtllib_device *ieee,
|
||||
struct tx_ts_record *pTxTS);
|
||||
void remove_peer_ts(struct rtllib_device *ieee, u8 *addr);
|
||||
void remove_all_ts(struct rtllib_device *ieee);
|
||||
@ -1803,7 +1803,7 @@ int rtllib_parse_info_param(struct rtllib_device *ieee,
|
||||
struct rtllib_rx_stats *stats);
|
||||
|
||||
void rtllib_indicate_packets(struct rtllib_device *ieee,
|
||||
struct rtllib_rxb **prxbIndicateArray, u8 index);
|
||||
struct rtllib_rxb **prxb_indicate_array, u8 index);
|
||||
#define RT_ASOC_RETRY_LIMIT 5
|
||||
u8 mgnt_query_tx_rate_exclude_cck_rates(struct rtllib_device *ieee);
|
||||
|
||||
|
@ -182,7 +182,7 @@ static int rtllib_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
*pos++ = key->tx_pn[0];
|
||||
|
||||
hdr = (struct ieee80211_hdr *)skb->data;
|
||||
if (!tcb_desc->bHwSec) {
|
||||
if (!tcb_desc->hw_sec) {
|
||||
struct aead_request *req;
|
||||
struct scatterlist sg[2];
|
||||
u8 *aad = key->tx_aad;
|
||||
@ -265,7 +265,7 @@ static int rtllib_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
key->dot11rsna_stats_ccmp_replays++;
|
||||
return -4;
|
||||
}
|
||||
if (!tcb_desc->bHwSec) {
|
||||
if (!tcb_desc->hw_sec) {
|
||||
size_t data_len = skb->len - hdr_len - CCMP_HDR_LEN;
|
||||
struct aead_request *req;
|
||||
struct scatterlist sg[2];
|
||||
@ -407,4 +407,5 @@ static void __exit rtllib_crypto_ccmp_exit(void)
|
||||
module_init(rtllib_crypto_ccmp_init);
|
||||
module_exit(rtllib_crypto_ccmp_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Support module for rtllib CCMP crypto");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -268,7 +268,7 @@ static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
|
||||
hdr = (struct ieee80211_hdr *)skb->data;
|
||||
|
||||
if (!tcb_desc->bHwSec) {
|
||||
if (!tcb_desc->hw_sec) {
|
||||
if (!tkey->tx_phase1_done) {
|
||||
tkip_mixing_phase1(tkey->tx_ttak, tkey->key, hdr->addr2,
|
||||
tkey->tx_iv32);
|
||||
@ -285,7 +285,7 @@ static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
memmove(pos, pos + 8, hdr_len);
|
||||
pos += hdr_len;
|
||||
|
||||
if (tcb_desc->bHwSec) {
|
||||
if (tcb_desc->hw_sec) {
|
||||
*pos++ = Hi8(tkey->tx_iv16);
|
||||
*pos++ = (Hi8(tkey->tx_iv16) | 0x20) & 0x7F;
|
||||
*pos++ = Lo8(tkey->tx_iv16);
|
||||
@ -301,7 +301,7 @@ static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
*pos++ = (tkey->tx_iv32 >> 16) & 0xff;
|
||||
*pos++ = (tkey->tx_iv32 >> 24) & 0xff;
|
||||
|
||||
if (!tcb_desc->bHwSec) {
|
||||
if (!tcb_desc->hw_sec) {
|
||||
icv = skb_put(skb, 4);
|
||||
crc = ~crc32_le(~0, pos, len);
|
||||
icv[0] = crc;
|
||||
@ -319,7 +319,7 @@ static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
tkey->tx_iv32++;
|
||||
}
|
||||
|
||||
if (!tcb_desc->bHwSec)
|
||||
if (!tcb_desc->hw_sec)
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
@ -371,7 +371,7 @@ static int rtllib_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
iv32 = pos[4] | (pos[5] << 8) | (pos[6] << 16) | (pos[7] << 24);
|
||||
pos += 8;
|
||||
|
||||
if (!tcb_desc->bHwSec || (skb->cb[0] == 1)) {
|
||||
if (!tcb_desc->hw_sec || (skb->cb[0] == 1)) {
|
||||
if ((iv32 < tkey->rx_iv32 ||
|
||||
(iv32 == tkey->rx_iv32 && iv16 <= tkey->rx_iv16)) &&
|
||||
tkey->initialized) {
|
||||
@ -708,4 +708,5 @@ static void __exit rtllib_crypto_tkip_exit(void)
|
||||
module_init(rtllib_crypto_tkip_init);
|
||||
module_exit(rtllib_crypto_tkip_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Support module for rtllib TKIP crypto");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -102,7 +102,7 @@ static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
/* Copy rest of the WEP key (the secret part) */
|
||||
memcpy(key + 3, wep->key, wep->key_len);
|
||||
|
||||
if (!tcb_desc->bHwSec) {
|
||||
if (!tcb_desc->hw_sec) {
|
||||
/* Append little-endian CRC32 and encrypt it to produce ICV */
|
||||
crc = ~crc32_le(~0, pos, len);
|
||||
icv = skb_put(skb, 4);
|
||||
@ -155,7 +155,7 @@ static int prism2_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
/* Apply RC4 to data and compute CRC32 over decrypted data */
|
||||
plen = skb->len - hdr_len - 8;
|
||||
|
||||
if (!tcb_desc->bHwSec) {
|
||||
if (!tcb_desc->hw_sec) {
|
||||
arc4_setkey(&wep->rx_ctx_arc4, key, klen);
|
||||
arc4_crypt(&wep->rx_ctx_arc4, pos, pos, plen + 4);
|
||||
|
||||
@ -238,4 +238,5 @@ static void __exit rtllib_crypto_wep_exit(void)
|
||||
module_init(rtllib_crypto_wep_init);
|
||||
module_exit(rtllib_crypto_wep_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Support module for rtllib WEP crypto");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -175,4 +175,5 @@ static void __exit rtllib_exit(void)
|
||||
module_init(rtllib_init);
|
||||
module_exit(rtllib_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Support module for rtllib wireless devices");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -55,7 +55,7 @@ static inline void rtllib_monitor_rx(struct rtllib_device *ieee,
|
||||
/* Called only as a tasklet (software IRQ) */
|
||||
static struct rtllib_frag_entry *
|
||||
rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq,
|
||||
unsigned int frag, u8 tid, u8 *src, u8 *dst)
|
||||
unsigned int frag, u8 tid, u8 *src, u8 *dst)
|
||||
{
|
||||
struct rtllib_frag_entry *entry;
|
||||
int i;
|
||||
@ -84,7 +84,7 @@ rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq,
|
||||
/* Called only as a tasklet (software IRQ) */
|
||||
static struct sk_buff *
|
||||
rtllib_frag_cache_get(struct rtllib_device *ieee,
|
||||
struct ieee80211_hdr *hdr)
|
||||
struct ieee80211_hdr *hdr)
|
||||
{
|
||||
struct sk_buff *skb = NULL;
|
||||
u16 fc = le16_to_cpu(hdr->frame_control);
|
||||
@ -143,7 +143,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee,
|
||||
* should have already been received
|
||||
*/
|
||||
entry = rtllib_frag_cache_find(ieee, seq, frag, tid, hdr->addr2,
|
||||
hdr->addr1);
|
||||
hdr->addr1);
|
||||
if (entry) {
|
||||
entry->last_frag = frag;
|
||||
skb = entry->skb;
|
||||
@ -155,7 +155,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee,
|
||||
|
||||
/* Called only as a tasklet (software IRQ) */
|
||||
static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee,
|
||||
struct ieee80211_hdr *hdr)
|
||||
struct ieee80211_hdr *hdr)
|
||||
{
|
||||
u16 fc = le16_to_cpu(hdr->frame_control);
|
||||
u16 sc = le16_to_cpu(hdr->seq_ctrl);
|
||||
@ -181,7 +181,7 @@ static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee,
|
||||
}
|
||||
|
||||
entry = rtllib_frag_cache_find(ieee, seq, -1, tid, hdr->addr2,
|
||||
hdr->addr1);
|
||||
hdr->addr1);
|
||||
|
||||
if (!entry) {
|
||||
netdev_dbg(ieee->dev,
|
||||
@ -202,8 +202,7 @@ static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee,
|
||||
*/
|
||||
static inline int
|
||||
rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
struct rtllib_rx_stats *rx_stats, u16 type,
|
||||
u16 stype)
|
||||
struct rtllib_rx_stats *rx_stats, u16 type, u16 stype)
|
||||
{
|
||||
/* On the struct stats definition there is written that
|
||||
* this is not mandatory.... but seems that the probe
|
||||
@ -228,7 +227,7 @@ rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
|
||||
/* Called by rtllib_rx_frame_decrypt */
|
||||
static int rtllib_is_eapol_frame(struct rtllib_device *ieee,
|
||||
struct sk_buff *skb, size_t hdrlen)
|
||||
struct sk_buff *skb, size_t hdrlen)
|
||||
{
|
||||
struct net_device *dev = ieee->dev;
|
||||
u16 fc, ethertype;
|
||||
@ -282,10 +281,10 @@ rtllib_rx_frame_decrypt(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
struct cb_desc *tcb_desc = (struct cb_desc *)
|
||||
(skb->cb + MAX_DEV_ADDR_SIZE);
|
||||
|
||||
tcb_desc->bHwSec = 1;
|
||||
tcb_desc->hw_sec = 1;
|
||||
|
||||
if (ieee->need_sw_enc)
|
||||
tcb_desc->bHwSec = 0;
|
||||
tcb_desc->hw_sec = 0;
|
||||
}
|
||||
|
||||
hdr = (struct ieee80211_hdr *)skb->data;
|
||||
@ -321,10 +320,10 @@ rtllib_rx_frame_decrypt_msdu(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
struct cb_desc *tcb_desc = (struct cb_desc *)
|
||||
(skb->cb + MAX_DEV_ADDR_SIZE);
|
||||
|
||||
tcb_desc->bHwSec = 1;
|
||||
tcb_desc->hw_sec = 1;
|
||||
|
||||
if (ieee->need_sw_enc)
|
||||
tcb_desc->bHwSec = 0;
|
||||
tcb_desc->hw_sec = 0;
|
||||
}
|
||||
|
||||
hdr = (struct ieee80211_hdr *)skb->data;
|
||||
@ -346,7 +345,7 @@ rtllib_rx_frame_decrypt_msdu(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
/* this function is stolen from ipw2200 driver*/
|
||||
#define IEEE_PACKET_RETRY_TIME (5 * HZ)
|
||||
static int is_duplicate_packet(struct rtllib_device *ieee,
|
||||
struct ieee80211_hdr *header)
|
||||
struct ieee80211_hdr *header)
|
||||
{
|
||||
u16 fc = le16_to_cpu(header->frame_control);
|
||||
u16 sc = le16_to_cpu(header->seq_ctrl);
|
||||
@ -403,40 +402,40 @@ drop:
|
||||
return 1;
|
||||
}
|
||||
|
||||
static bool AddReorderEntry(struct rx_ts_record *ts,
|
||||
struct rx_reorder_entry *pReorderEntry)
|
||||
static bool add_reorder_entry(struct rx_ts_record *ts,
|
||||
struct rx_reorder_entry *pReorderEntry)
|
||||
{
|
||||
struct list_head *pList = &ts->rx_pending_pkt_list;
|
||||
struct list_head *list = &ts->rx_pending_pkt_list;
|
||||
|
||||
while (pList->next != &ts->rx_pending_pkt_list) {
|
||||
while (list->next != &ts->rx_pending_pkt_list) {
|
||||
if (SN_LESS(pReorderEntry->SeqNum, ((struct rx_reorder_entry *)
|
||||
list_entry(pList->next, struct rx_reorder_entry,
|
||||
list_entry(list->next, struct rx_reorder_entry,
|
||||
list))->SeqNum))
|
||||
pList = pList->next;
|
||||
list = list->next;
|
||||
else if (SN_EQUAL(pReorderEntry->SeqNum,
|
||||
((struct rx_reorder_entry *)list_entry(pList->next,
|
||||
((struct rx_reorder_entry *)list_entry(list->next,
|
||||
struct rx_reorder_entry, list))->SeqNum))
|
||||
return false;
|
||||
else
|
||||
break;
|
||||
}
|
||||
pReorderEntry->list.next = pList->next;
|
||||
pReorderEntry->list.next = list->next;
|
||||
pReorderEntry->list.next->prev = &pReorderEntry->list;
|
||||
pReorderEntry->list.prev = pList;
|
||||
pList->next = &pReorderEntry->list;
|
||||
pReorderEntry->list.prev = list;
|
||||
list->next = &pReorderEntry->list;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void rtllib_indicate_packets(struct rtllib_device *ieee,
|
||||
struct rtllib_rxb **prxbIndicateArray, u8 index)
|
||||
struct rtllib_rxb **prxb_indicate_array, u8 index)
|
||||
{
|
||||
struct net_device_stats *stats = &ieee->stats;
|
||||
u8 i = 0, j = 0;
|
||||
u16 ethertype;
|
||||
|
||||
for (j = 0; j < index; j++) {
|
||||
struct rtllib_rxb *prxb = prxbIndicateArray[j];
|
||||
struct rtllib_rxb *prxb = prxb_indicate_array[j];
|
||||
|
||||
for (i = 0; i < prxb->nr_subframes; i++) {
|
||||
struct sk_buff *sub_skb = prxb->subframes[i];
|
||||
@ -491,13 +490,13 @@ void rtllib_flush_rx_ts_pending_pkts(struct rtllib_device *ieee,
|
||||
struct rx_ts_record *ts)
|
||||
{
|
||||
struct rx_reorder_entry *pRxReorderEntry;
|
||||
u8 RfdCnt = 0;
|
||||
u8 rfd_cnt = 0;
|
||||
|
||||
del_timer_sync(&ts->rx_pkt_pending_timer);
|
||||
while (!list_empty(&ts->rx_pending_pkt_list)) {
|
||||
if (RfdCnt >= REORDER_WIN_SIZE) {
|
||||
if (rfd_cnt >= REORDER_WIN_SIZE) {
|
||||
netdev_info(ieee->dev,
|
||||
"-------------->%s() error! RfdCnt >= REORDER_WIN_SIZE\n",
|
||||
"-------------->%s() error! rfd_cnt >= REORDER_WIN_SIZE\n",
|
||||
__func__);
|
||||
break;
|
||||
}
|
||||
@ -509,36 +508,36 @@ void rtllib_flush_rx_ts_pending_pkts(struct rtllib_device *ieee,
|
||||
pRxReorderEntry->SeqNum);
|
||||
list_del_init(&pRxReorderEntry->list);
|
||||
|
||||
ieee->RfdArray[RfdCnt] = pRxReorderEntry->prxb;
|
||||
ieee->rfd_array[rfd_cnt] = pRxReorderEntry->prxb;
|
||||
|
||||
RfdCnt = RfdCnt + 1;
|
||||
rfd_cnt = rfd_cnt + 1;
|
||||
list_add_tail(&pRxReorderEntry->list,
|
||||
&ieee->RxReorder_Unused_List);
|
||||
}
|
||||
rtllib_indicate_packets(ieee, ieee->RfdArray, RfdCnt);
|
||||
rtllib_indicate_packets(ieee, ieee->rfd_array, rfd_cnt);
|
||||
|
||||
ts->rx_indicate_seq = 0xffff;
|
||||
}
|
||||
|
||||
static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
||||
struct rtllib_rxb *prxb,
|
||||
struct rx_ts_record *ts, u16 SeqNum)
|
||||
static void rx_reorder_indicate_packet(struct rtllib_device *ieee,
|
||||
struct rtllib_rxb *prxb,
|
||||
struct rx_ts_record *ts, u16 SeqNum)
|
||||
{
|
||||
struct rt_hi_throughput *ht_info = ieee->ht_info;
|
||||
struct rx_reorder_entry *pReorderEntry = NULL;
|
||||
u8 WinSize = ht_info->rx_reorder_win_size;
|
||||
u16 WinEnd = 0;
|
||||
u8 win_size = ht_info->rx_reorder_win_size;
|
||||
u16 win_end = 0;
|
||||
u8 index = 0;
|
||||
bool bMatchWinStart = false, bPktInBuf = false;
|
||||
bool match_win_start = false, pkt_in_buf = false;
|
||||
unsigned long flags;
|
||||
|
||||
netdev_dbg(ieee->dev,
|
||||
"%s(): Seq is %d, ts->rx_indicate_seq is %d, WinSize is %d\n",
|
||||
__func__, SeqNum, ts->rx_indicate_seq, WinSize);
|
||||
"%s(): Seq is %d, ts->rx_indicate_seq is %d, win_size is %d\n",
|
||||
__func__, SeqNum, ts->rx_indicate_seq, win_size);
|
||||
|
||||
spin_lock_irqsave(&(ieee->reorder_spinlock), flags);
|
||||
|
||||
WinEnd = (ts->rx_indicate_seq + WinSize - 1) % 4096;
|
||||
win_end = (ts->rx_indicate_seq + win_size - 1) % 4096;
|
||||
/* Rx Reorder initialize condition.*/
|
||||
if (ts->rx_indicate_seq == 0xffff)
|
||||
ts->rx_indicate_seq = SeqNum;
|
||||
@ -563,17 +562,17 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
||||
|
||||
/* Sliding window manipulation. Conditions includes:
|
||||
* 1. Incoming SeqNum is equal to WinStart =>Window shift 1
|
||||
* 2. Incoming SeqNum is larger than the WinEnd => Window shift N
|
||||
* 2. Incoming SeqNum is larger than the win_end => Window shift N
|
||||
*/
|
||||
if (SN_EQUAL(SeqNum, ts->rx_indicate_seq)) {
|
||||
ts->rx_indicate_seq = (ts->rx_indicate_seq + 1) % 4096;
|
||||
bMatchWinStart = true;
|
||||
} else if (SN_LESS(WinEnd, SeqNum)) {
|
||||
if (SeqNum >= (WinSize - 1))
|
||||
ts->rx_indicate_seq = SeqNum + 1 - WinSize;
|
||||
match_win_start = true;
|
||||
} else if (SN_LESS(win_end, SeqNum)) {
|
||||
if (SeqNum >= (win_size - 1))
|
||||
ts->rx_indicate_seq = SeqNum + 1 - win_size;
|
||||
else
|
||||
ts->rx_indicate_seq = 4095 -
|
||||
(WinSize - (SeqNum + 1)) + 1;
|
||||
(win_size - (SeqNum + 1)) + 1;
|
||||
netdev_dbg(ieee->dev,
|
||||
"Window Shift! IndicateSeq: %d, NewSeq: %d\n",
|
||||
ts->rx_indicate_seq, SeqNum);
|
||||
@ -589,12 +588,12 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
||||
* 2. All packets with SeqNum larger than or equal to
|
||||
* WinStart => Buffer it.
|
||||
*/
|
||||
if (bMatchWinStart) {
|
||||
if (match_win_start) {
|
||||
/* Current packet is going to be indicated.*/
|
||||
netdev_dbg(ieee->dev,
|
||||
"Packets indication! IndicateSeq: %d, NewSeq: %d\n",
|
||||
ts->rx_indicate_seq, SeqNum);
|
||||
ieee->prxbIndicateArray[0] = prxb;
|
||||
ieee->prxb_indicate_array[0] = prxb;
|
||||
index = 1;
|
||||
} else {
|
||||
/* Current packet is going to be inserted into pending list.*/
|
||||
@ -610,7 +609,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
||||
pReorderEntry->SeqNum = SeqNum;
|
||||
pReorderEntry->prxb = prxb;
|
||||
|
||||
if (!AddReorderEntry(ts, pReorderEntry)) {
|
||||
if (!add_reorder_entry(ts, pReorderEntry)) {
|
||||
int i;
|
||||
|
||||
netdev_dbg(ieee->dev,
|
||||
@ -665,7 +664,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
||||
netdev_err(ieee->dev,
|
||||
"%s(): Buffer overflow!\n",
|
||||
__func__);
|
||||
bPktInBuf = true;
|
||||
pkt_in_buf = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -675,7 +674,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
||||
ts->rx_indicate_seq = (ts->rx_indicate_seq + 1) %
|
||||
4096;
|
||||
|
||||
ieee->prxbIndicateArray[index] = pReorderEntry->prxb;
|
||||
ieee->prxb_indicate_array[index] = pReorderEntry->prxb;
|
||||
netdev_dbg(ieee->dev, "%s(): Indicate SeqNum %d!\n",
|
||||
__func__, pReorderEntry->SeqNum);
|
||||
index++;
|
||||
@ -683,7 +682,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
||||
list_add_tail(&pReorderEntry->list,
|
||||
&ieee->RxReorder_Unused_List);
|
||||
} else {
|
||||
bPktInBuf = true;
|
||||
pkt_in_buf = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -706,11 +705,11 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
|
||||
flags);
|
||||
return;
|
||||
}
|
||||
rtllib_indicate_packets(ieee, ieee->prxbIndicateArray, index);
|
||||
bPktInBuf = false;
|
||||
rtllib_indicate_packets(ieee, ieee->prxb_indicate_array, index);
|
||||
pkt_in_buf = false;
|
||||
}
|
||||
|
||||
if (bPktInBuf && ts->rx_timeout_indicate_seq == 0xffff) {
|
||||
if (pkt_in_buf && ts->rx_timeout_indicate_seq == 0xffff) {
|
||||
netdev_dbg(ieee->dev, "%s(): SET rx timeout timer\n", __func__);
|
||||
ts->rx_timeout_indicate_seq = ts->rx_indicate_seq;
|
||||
spin_unlock_irqrestore(&ieee->reorder_spinlock, flags);
|
||||
@ -728,11 +727,10 @@ static u8 parse_subframe(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
struct ieee80211_hdr_3addr *hdr = (struct ieee80211_hdr_3addr *)skb->data;
|
||||
u16 fc = le16_to_cpu(hdr->frame_control);
|
||||
|
||||
u16 LLCOffset = sizeof(struct ieee80211_hdr_3addr);
|
||||
u16 ChkLength;
|
||||
u16 llc_offset = sizeof(struct ieee80211_hdr_3addr);
|
||||
bool is_aggregate_frame = false;
|
||||
u16 nSubframe_Length;
|
||||
u8 nPadding_Length = 0;
|
||||
u8 pad_len = 0;
|
||||
u16 SeqNum = 0;
|
||||
struct sk_buff *sub_skb;
|
||||
/* just for debug purpose */
|
||||
@ -742,16 +740,14 @@ static u8 parse_subframe(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
is_aggregate_frame = true;
|
||||
|
||||
if (RTLLIB_QOS_HAS_SEQ(fc))
|
||||
LLCOffset += 2;
|
||||
if (rx_stats->bContainHTC)
|
||||
LLCOffset += sHTCLng;
|
||||
llc_offset += 2;
|
||||
if (rx_stats->contain_htc)
|
||||
llc_offset += sHTCLng;
|
||||
|
||||
ChkLength = LLCOffset;
|
||||
|
||||
if (skb->len <= ChkLength)
|
||||
if (skb->len <= llc_offset)
|
||||
return 0;
|
||||
|
||||
skb_pull(skb, LLCOffset);
|
||||
skb_pull(skb, llc_offset);
|
||||
ieee->is_aggregate_frame = is_aggregate_frame;
|
||||
if (!is_aggregate_frame) {
|
||||
rxb->nr_subframes = 1;
|
||||
@ -833,15 +829,15 @@ static u8 parse_subframe(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
skb_pull(skb, nSubframe_Length);
|
||||
|
||||
if (skb->len != 0) {
|
||||
nPadding_Length = 4 - ((nSubframe_Length +
|
||||
pad_len = 4 - ((nSubframe_Length +
|
||||
ETHERNET_HEADER_SIZE) % 4);
|
||||
if (nPadding_Length == 4)
|
||||
nPadding_Length = 0;
|
||||
if (pad_len == 4)
|
||||
pad_len = 0;
|
||||
|
||||
if (skb->len < nPadding_Length)
|
||||
if (skb->len < pad_len)
|
||||
return 0;
|
||||
|
||||
skb_pull(skb, nPadding_Length);
|
||||
skb_pull(skb, pad_len);
|
||||
}
|
||||
}
|
||||
|
||||
@ -862,7 +858,7 @@ static size_t rtllib_rx_get_hdrlen(struct rtllib_device *ieee,
|
||||
netdev_info(ieee->dev, "%s: find HTCControl!\n",
|
||||
__func__);
|
||||
hdrlen += 4;
|
||||
rx_stats->bContainHTC = true;
|
||||
rx_stats->contain_htc = true;
|
||||
}
|
||||
|
||||
return hdrlen;
|
||||
@ -881,8 +877,8 @@ static int rtllib_rx_check_duplicate(struct rtllib_device *ieee,
|
||||
|
||||
if (!ieee->ht_info->cur_rx_reorder_enable ||
|
||||
!ieee->current_network.qos_data.active ||
|
||||
!IsDataFrame(skb->data) ||
|
||||
IsLegacyDataFrame(skb->data)) {
|
||||
!is_data_frame(skb->data) ||
|
||||
is_legacy_data_frame(skb->data)) {
|
||||
if (!ieee80211_is_beacon(hdr->frame_control)) {
|
||||
if (is_duplicate_packet(ieee, hdr))
|
||||
return -1;
|
||||
@ -891,7 +887,7 @@ static int rtllib_rx_check_duplicate(struct rtllib_device *ieee,
|
||||
struct rx_ts_record *ts = NULL;
|
||||
|
||||
if (rtllib_get_ts(ieee, (struct ts_common_info **)&ts, hdr->addr2,
|
||||
(u8)Frame_QoSTID((u8 *)(skb->data)), RX_DIR, true)) {
|
||||
(u8)frame_qos_tid((u8 *)(skb->data)), RX_DIR, true)) {
|
||||
if ((fc & (1 << 11)) && (frag == ts->rx_last_frag_num) &&
|
||||
(WLAN_GET_SEQ_SEQ(sc) == ts->rx_last_seq_num))
|
||||
return -1;
|
||||
@ -1025,7 +1021,7 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
sc = le16_to_cpu(hdr->seq_ctrl);
|
||||
frag = WLAN_GET_SEQ_FRAG(sc);
|
||||
|
||||
if ((!rx_stats->Decrypted))
|
||||
if ((!rx_stats->decrypted))
|
||||
ieee->need_sw_enc = 1;
|
||||
else
|
||||
ieee->need_sw_enc = 0;
|
||||
@ -1223,7 +1219,7 @@ static void rtllib_rx_indicate_pkt_legacy(struct rtllib_device *ieee,
|
||||
kfree(rxb);
|
||||
}
|
||||
|
||||
static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
static int rtllib_rx_infra_adhoc(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
struct rtllib_rx_stats *rx_stats)
|
||||
{
|
||||
struct net_device *dev = ieee->dev;
|
||||
@ -1322,9 +1318,9 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
|
||||
/* Get TS for Rx Reorder */
|
||||
hdr = (struct ieee80211_hdr *)skb->data;
|
||||
if (ieee->current_network.qos_data.active && IsQoSDataFrame(skb->data)
|
||||
if (ieee->current_network.qos_data.active && is_qos_data_frame(skb->data)
|
||||
&& !is_multicast_ether_addr(hdr->addr1)) {
|
||||
TID = Frame_QoSTID(skb->data);
|
||||
TID = frame_qos_tid(skb->data);
|
||||
SeqNum = WLAN_GET_SEQ_SEQ(sc);
|
||||
rtllib_get_ts(ieee, (struct ts_common_info **)&ts, hdr->addr2, TID,
|
||||
RX_DIR, true);
|
||||
@ -1366,7 +1362,7 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
if (!ieee->ht_info->cur_rx_reorder_enable || !ts)
|
||||
rtllib_rx_indicate_pkt_legacy(ieee, rx_stats, rxb, dst, src);
|
||||
else
|
||||
RxReorderIndicatePacket(ieee, rxb, ts, SeqNum);
|
||||
rx_reorder_indicate_packet(ieee, rxb, ts, SeqNum);
|
||||
|
||||
dev_kfree_skb(skb);
|
||||
|
||||
@ -1383,7 +1379,7 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rtllib_rx_Monitor(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
static int rtllib_rx_monitor(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
struct rtllib_rx_stats *rx_stats)
|
||||
{
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||
@ -1431,10 +1427,10 @@ int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
|
||||
switch (ieee->iw_mode) {
|
||||
case IW_MODE_INFRA:
|
||||
ret = rtllib_rx_InfraAdhoc(ieee, skb, rx_stats);
|
||||
ret = rtllib_rx_infra_adhoc(ieee, skb, rx_stats);
|
||||
break;
|
||||
case IW_MODE_MONITOR:
|
||||
ret = rtllib_rx_Monitor(ieee, skb, rx_stats);
|
||||
ret = rtllib_rx_monitor(ieee, skb, rx_stats);
|
||||
break;
|
||||
default:
|
||||
netdev_info(ieee->dev, "%s: ERR iw mode!!!\n", __func__);
|
||||
@ -1456,7 +1452,7 @@ static u8 qos_oui[QOS_OUI_LEN] = { 0x00, 0x50, 0xF2 };
|
||||
static int rtllib_verify_qos_info(struct rtllib_qos_information_element
|
||||
*info_element, int sub_type)
|
||||
{
|
||||
if (info_element->elementID != QOS_ELEMENT_ID)
|
||||
if (info_element->element_id != QOS_ELEMENT_ID)
|
||||
return -1;
|
||||
if (info_element->qui_subtype != sub_type)
|
||||
return -1;
|
||||
@ -1813,21 +1809,21 @@ static void rtllib_parse_mife_generic(struct rtllib_device *ieee,
|
||||
info_element->data[2] == 0x96 &&
|
||||
info_element->data[3] == 0x01) {
|
||||
if (info_element->len == 6) {
|
||||
memcpy(network->CcxRmState, &info_element->data[4], 2);
|
||||
if (network->CcxRmState[0] != 0)
|
||||
memcpy(network->ccx_rm_state, &info_element->data[4], 2);
|
||||
if (network->ccx_rm_state[0] != 0)
|
||||
network->ccx_rm_enable = true;
|
||||
else
|
||||
network->ccx_rm_enable = false;
|
||||
network->MBssidMask = network->CcxRmState[1] & 0x07;
|
||||
if (network->MBssidMask != 0) {
|
||||
network->bMBssidValid = true;
|
||||
network->MBssidMask = 0xff <<
|
||||
(network->MBssidMask);
|
||||
ether_addr_copy(network->MBssid,
|
||||
network->mb_ssid_mask = network->ccx_rm_state[1] & 0x07;
|
||||
if (network->mb_ssid_mask != 0) {
|
||||
network->mb_ssid_valid = true;
|
||||
network->mb_ssid_mask = 0xff <<
|
||||
(network->mb_ssid_mask);
|
||||
ether_addr_copy(network->mb_ssid,
|
||||
network->bssid);
|
||||
network->MBssid[5] &= network->MBssidMask;
|
||||
network->mb_ssid[5] &= network->mb_ssid_mask;
|
||||
} else {
|
||||
network->bMBssidValid = false;
|
||||
network->mb_ssid_valid = false;
|
||||
}
|
||||
} else {
|
||||
network->ccx_rm_enable = false;
|
||||
@ -1839,10 +1835,10 @@ static void rtllib_parse_mife_generic(struct rtllib_device *ieee,
|
||||
info_element->data[2] == 0x96 &&
|
||||
info_element->data[3] == 0x03) {
|
||||
if (info_element->len == 5) {
|
||||
network->bWithCcxVerNum = true;
|
||||
network->with_ccx_ver_num = true;
|
||||
network->bss_ccx_ver_number = info_element->data[4];
|
||||
} else {
|
||||
network->bWithCcxVerNum = false;
|
||||
network->with_ccx_ver_num = false;
|
||||
network->bss_ccx_ver_number = 0;
|
||||
}
|
||||
}
|
||||
@ -1914,7 +1910,7 @@ int rtllib_parse_info_param(struct rtllib_device *ieee,
|
||||
switch (info_element->id) {
|
||||
case MFIE_TYPE_SSID:
|
||||
if (rtllib_is_empty_essid(info_element->data,
|
||||
info_element->len)) {
|
||||
info_element->len)) {
|
||||
network->flags |= NETWORK_EMPTY_ESSID;
|
||||
break;
|
||||
}
|
||||
@ -2090,7 +2086,7 @@ int rtllib_parse_info_param(struct rtllib_device *ieee,
|
||||
netdev_dbg(ieee->dev, "MFIE_TYPE_AIRONET: %d bytes\n",
|
||||
info_element->len);
|
||||
if (info_element->len > IE_CISCO_FLAG_POSITION) {
|
||||
network->bWithAironetIE = true;
|
||||
network->with_aironet_ie = true;
|
||||
|
||||
if ((info_element->data[IE_CISCO_FLAG_POSITION]
|
||||
& SUPPORT_CKIP_MIC) ||
|
||||
@ -2100,7 +2096,7 @@ int rtllib_parse_info_param(struct rtllib_device *ieee,
|
||||
else
|
||||
network->ckip_supported = false;
|
||||
} else {
|
||||
network->bWithAironetIE = false;
|
||||
network->with_aironet_ie = false;
|
||||
network->ckip_supported = false;
|
||||
}
|
||||
break;
|
||||
@ -2183,8 +2179,8 @@ static inline int rtllib_network_init(
|
||||
network->turbo_enable = 0;
|
||||
network->SignalStrength = stats->SignalStrength;
|
||||
network->RSSI = stats->SignalStrength;
|
||||
network->CountryIeLen = 0;
|
||||
memset(network->CountryIeBuf, 0, MAX_IE_LEN);
|
||||
network->country_ie_len = 0;
|
||||
memset(network->country_ie_buf, 0, MAX_IE_LEN);
|
||||
ht_initialize_bss_desc(&network->bssht);
|
||||
network->flags |= NETWORK_HAS_CCK;
|
||||
|
||||
@ -2193,10 +2189,10 @@ static inline int rtllib_network_init(
|
||||
network->wzc_ie_len = 0;
|
||||
|
||||
if (rtllib_parse_info_param(ieee,
|
||||
beacon->info_element,
|
||||
(stats->len - sizeof(*beacon)),
|
||||
network,
|
||||
stats))
|
||||
beacon->info_element,
|
||||
(stats->len - sizeof(*beacon)),
|
||||
network,
|
||||
stats))
|
||||
return 1;
|
||||
|
||||
network->mode = 0;
|
||||
@ -2342,21 +2338,21 @@ static inline void update_network(struct rtllib_device *ieee,
|
||||
dst->RSSI = src->RSSI;
|
||||
dst->turbo_enable = src->turbo_enable;
|
||||
|
||||
dst->CountryIeLen = src->CountryIeLen;
|
||||
memcpy(dst->CountryIeBuf, src->CountryIeBuf, src->CountryIeLen);
|
||||
dst->country_ie_len = src->country_ie_len;
|
||||
memcpy(dst->country_ie_buf, src->country_ie_buf, src->country_ie_len);
|
||||
|
||||
dst->bWithAironetIE = src->bWithAironetIE;
|
||||
dst->with_aironet_ie = src->with_aironet_ie;
|
||||
dst->ckip_supported = src->ckip_supported;
|
||||
memcpy(dst->CcxRmState, src->CcxRmState, 2);
|
||||
memcpy(dst->ccx_rm_state, src->ccx_rm_state, 2);
|
||||
dst->ccx_rm_enable = src->ccx_rm_enable;
|
||||
dst->MBssidMask = src->MBssidMask;
|
||||
dst->bMBssidValid = src->bMBssidValid;
|
||||
memcpy(dst->MBssid, src->MBssid, 6);
|
||||
dst->bWithCcxVerNum = src->bWithCcxVerNum;
|
||||
dst->mb_ssid_mask = src->mb_ssid_mask;
|
||||
dst->mb_ssid_valid = src->mb_ssid_valid;
|
||||
memcpy(dst->mb_ssid, src->mb_ssid, 6);
|
||||
dst->with_ccx_ver_num = src->with_ccx_ver_num;
|
||||
dst->bss_ccx_ver_number = src->bss_ccx_ver_number;
|
||||
}
|
||||
|
||||
static int IsPassiveChannel(struct rtllib_device *rtllib, u8 channel)
|
||||
static int is_passive_channel(struct rtllib_device *rtllib, u8 channel)
|
||||
{
|
||||
if (channel > MAX_CHANNEL_NUMBER) {
|
||||
netdev_info(rtllib->dev, "%s(): Invalid Channel\n", __func__);
|
||||
@ -2432,7 +2428,7 @@ static inline void rtllib_process_probe_response(
|
||||
goto free_network;
|
||||
|
||||
if (ieee80211_is_probe_resp(frame_ctl)) {
|
||||
if (IsPassiveChannel(ieee, network->channel)) {
|
||||
if (is_passive_channel(ieee, network->channel)) {
|
||||
netdev_info(ieee->dev,
|
||||
"GetScanInfo(): For Global Domain, filter probe response at channel(%d).\n",
|
||||
network->channel);
|
||||
@ -2562,7 +2558,7 @@ static void rtllib_rx_mgt(struct rtllib_device *ieee,
|
||||
schedule_work(&ieee->ps_task);
|
||||
} else if (ieee80211_is_probe_resp(header->frame_control)) {
|
||||
netdev_dbg(ieee->dev, "received PROBE RESPONSE\n");
|
||||
rtllib_process_probe_response(ieee,
|
||||
(struct rtllib_probe_response *)header, stats);
|
||||
rtllib_process_probe_response(ieee, (struct rtllib_probe_response *)header,
|
||||
stats);
|
||||
}
|
||||
}
|
||||
|
@ -421,7 +421,7 @@ static void rtllib_softmac_scan_syncro(struct rtllib_device *ieee)
|
||||
* So we switch to MAC80211_LINKED_SCANNING to remember
|
||||
* that we are still logically linked (not interested in
|
||||
* new network events, despite for updating the net list,
|
||||
* but we are temporarly 'unlinked' as the driver shall
|
||||
* but we are temporarily 'unlinked' as the driver shall
|
||||
* not filter RX frames and the channel is changing.
|
||||
* So the only situation in which are interested is to check
|
||||
* if the state become LINKED because of the #1 situation
|
||||
@ -934,7 +934,7 @@ static void rtllib_associate_abort(struct rtllib_device *ieee)
|
||||
|
||||
ieee->associate_seq++;
|
||||
|
||||
/* don't scan, and avoid to have the RX path possibily
|
||||
/* don't scan, and avoid to have the RX path possibly
|
||||
* try again to associate. Even do not react to AUTH or
|
||||
* ASSOC response. Just wait for the retry wq to be scheduled.
|
||||
* Here we will check if there are good nets to associate
|
||||
@ -1359,7 +1359,7 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time)
|
||||
return 0;
|
||||
timeout = ieee->current_network.beacon_interval;
|
||||
ieee->current_network.dtim_data = RTLLIB_DTIM_INVALID;
|
||||
/* there's no need to nofity AP that I find you buffered
|
||||
/* there's no need to notify AP that I find you buffered
|
||||
* with broadcast packet
|
||||
*/
|
||||
if (dtim & (RTLLIB_DTIM_UCAST & ieee->ps))
|
||||
@ -1806,7 +1806,7 @@ void rtllib_softmac_xmit(struct rtllib_txb *txb, struct rtllib_device *ieee)
|
||||
|
||||
spin_lock_irqsave(&ieee->lock, flags);
|
||||
|
||||
/* called with 2nd parm 0, no tx mgmt lock required */
|
||||
/* called with 2nd param 0, no tx mgmt lock required */
|
||||
rtllib_sta_wakeup(ieee, 0);
|
||||
|
||||
/* update the tx status */
|
||||
|
@ -228,7 +228,7 @@ err_free:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int rtllib_classify(struct sk_buff *skb, u8 bIsAmsdu)
|
||||
static int rtllib_classify(struct sk_buff *skb)
|
||||
{
|
||||
struct ethhdr *eth;
|
||||
struct iphdr *ip;
|
||||
@ -275,12 +275,12 @@ static void rtllib_tx_query_agg_cap(struct rtllib_device *ieee,
|
||||
|
||||
if (!ht_info->current_ht_support || !ht_info->enable_ht)
|
||||
return;
|
||||
if (!IsQoSDataFrame(skb->data))
|
||||
if (!is_qos_data_frame(skb->data))
|
||||
return;
|
||||
if (is_multicast_ether_addr(hdr->addr1))
|
||||
return;
|
||||
|
||||
if (tcb_desc->bdhcp || ieee->CntAfterLink < 2)
|
||||
if (tcb_desc->bdhcp || ieee->cnt_after_link < 2)
|
||||
return;
|
||||
|
||||
if (ht_info->iot_action & HT_IOT_ACT_TX_NO_AGGREGATION)
|
||||
@ -290,7 +290,7 @@ static void rtllib_tx_query_agg_cap(struct rtllib_device *ieee,
|
||||
return;
|
||||
if (ht_info->current_ampdu_enable) {
|
||||
if (!rtllib_get_ts(ieee, (struct ts_common_info **)(&ts), hdr->addr1,
|
||||
skb->priority, TX_DIR, true)) {
|
||||
skb->priority, TX_DIR, true)) {
|
||||
netdev_info(ieee->dev, "%s: can't get TS\n", __func__);
|
||||
return;
|
||||
}
|
||||
@ -301,7 +301,7 @@ static void rtllib_tx_query_agg_cap(struct rtllib_device *ieee,
|
||||
} else if (tcb_desc->bdhcp == 1) {
|
||||
;
|
||||
} else if (!ts->disable_add_ba) {
|
||||
TsStartAddBaProcess(ieee, ts);
|
||||
rtllib_ts_start_add_ba_process(ieee, ts);
|
||||
}
|
||||
return;
|
||||
} else if (!ts->using_ba) {
|
||||
@ -319,51 +319,51 @@ static void rtllib_tx_query_agg_cap(struct rtllib_device *ieee,
|
||||
}
|
||||
}
|
||||
|
||||
static void rtllib_query_ShortPreambleMode(struct rtllib_device *ieee,
|
||||
struct cb_desc *tcb_desc)
|
||||
static void rtllib_query_short_preamble_mode(struct rtllib_device *ieee,
|
||||
struct cb_desc *tcb_desc)
|
||||
{
|
||||
tcb_desc->bUseShortPreamble = false;
|
||||
tcb_desc->use_short_preamble = false;
|
||||
if (tcb_desc->data_rate == 2)
|
||||
return;
|
||||
else if (ieee->current_network.capability &
|
||||
WLAN_CAPABILITY_SHORT_PREAMBLE)
|
||||
tcb_desc->bUseShortPreamble = true;
|
||||
tcb_desc->use_short_preamble = true;
|
||||
}
|
||||
|
||||
static void rtllib_query_HTCapShortGI(struct rtllib_device *ieee,
|
||||
struct cb_desc *tcb_desc)
|
||||
static void rtllib_query_ht_cap_short_gi(struct rtllib_device *ieee,
|
||||
struct cb_desc *tcb_desc)
|
||||
{
|
||||
struct rt_hi_throughput *ht_info = ieee->ht_info;
|
||||
|
||||
tcb_desc->bUseShortGI = false;
|
||||
tcb_desc->use_short_gi = false;
|
||||
|
||||
if (!ht_info->current_ht_support || !ht_info->enable_ht)
|
||||
return;
|
||||
|
||||
if (ht_info->cur_bw_40mhz && ht_info->cur_short_gi_40mhz)
|
||||
tcb_desc->bUseShortGI = true;
|
||||
tcb_desc->use_short_gi = true;
|
||||
else if (!ht_info->cur_bw_40mhz && ht_info->cur_short_gi_20mhz)
|
||||
tcb_desc->bUseShortGI = true;
|
||||
tcb_desc->use_short_gi = true;
|
||||
}
|
||||
|
||||
static void rtllib_query_BandwidthMode(struct rtllib_device *ieee,
|
||||
struct cb_desc *tcb_desc)
|
||||
static void rtllib_query_bandwidth_mode(struct rtllib_device *ieee,
|
||||
struct cb_desc *tcb_desc)
|
||||
{
|
||||
struct rt_hi_throughput *ht_info = ieee->ht_info;
|
||||
|
||||
tcb_desc->bPacketBW = false;
|
||||
tcb_desc->packet_bw = false;
|
||||
|
||||
if (!ht_info->current_ht_support || !ht_info->enable_ht)
|
||||
return;
|
||||
|
||||
if (tcb_desc->multicast || tcb_desc->bBroadcast)
|
||||
if (tcb_desc->multicast || tcb_desc->broadcast)
|
||||
return;
|
||||
|
||||
if ((tcb_desc->data_rate & 0x80) == 0)
|
||||
return;
|
||||
if (ht_info->cur_bw_40mhz && ht_info->cur_tx_bw40mhz &&
|
||||
!ieee->bandwidth_auto_switch.bforced_tx20Mhz)
|
||||
tcb_desc->bPacketBW = true;
|
||||
!ieee->bandwidth_auto_switch.forced_tx_20MHz)
|
||||
tcb_desc->packet_bw = true;
|
||||
}
|
||||
|
||||
static void rtllib_query_protectionmode(struct rtllib_device *ieee,
|
||||
@ -372,13 +372,13 @@ static void rtllib_query_protectionmode(struct rtllib_device *ieee,
|
||||
{
|
||||
struct rt_hi_throughput *ht_info;
|
||||
|
||||
tcb_desc->bRTSSTBC = false;
|
||||
tcb_desc->bRTSUseShortGI = false;
|
||||
tcb_desc->bCTSEnable = false;
|
||||
tcb_desc->rtsstbc = false;
|
||||
tcb_desc->rts_use_short_gi = false;
|
||||
tcb_desc->cts_enable = false;
|
||||
tcb_desc->RTSSC = 0;
|
||||
tcb_desc->bRTSBW = false;
|
||||
tcb_desc->rts_bw = false;
|
||||
|
||||
if (tcb_desc->bBroadcast || tcb_desc->multicast)
|
||||
if (tcb_desc->broadcast || tcb_desc->multicast)
|
||||
return;
|
||||
|
||||
if (is_broadcast_ether_addr(skb->data + 16))
|
||||
@ -386,11 +386,11 @@ static void rtllib_query_protectionmode(struct rtllib_device *ieee,
|
||||
|
||||
if (ieee->mode < WIRELESS_MODE_N_24G) {
|
||||
if (skb->len > ieee->rts) {
|
||||
tcb_desc->bRTSEnable = true;
|
||||
tcb_desc->rts_enable = true;
|
||||
tcb_desc->rts_rate = MGN_24M;
|
||||
} else if (ieee->current_network.buseprotection) {
|
||||
tcb_desc->bRTSEnable = true;
|
||||
tcb_desc->bCTSEnable = true;
|
||||
tcb_desc->rts_enable = true;
|
||||
tcb_desc->cts_enable = true;
|
||||
tcb_desc->rts_rate = MGN_24M;
|
||||
}
|
||||
return;
|
||||
@ -400,54 +400,54 @@ static void rtllib_query_protectionmode(struct rtllib_device *ieee,
|
||||
|
||||
while (true) {
|
||||
if (ht_info->iot_action & HT_IOT_ACT_FORCED_CTS2SELF) {
|
||||
tcb_desc->bCTSEnable = true;
|
||||
tcb_desc->cts_enable = true;
|
||||
tcb_desc->rts_rate = MGN_24M;
|
||||
tcb_desc->bRTSEnable = true;
|
||||
tcb_desc->rts_enable = true;
|
||||
break;
|
||||
} else if (ht_info->iot_action & (HT_IOT_ACT_FORCED_RTS |
|
||||
HT_IOT_ACT_PURE_N_MODE)) {
|
||||
tcb_desc->bRTSEnable = true;
|
||||
tcb_desc->rts_enable = true;
|
||||
tcb_desc->rts_rate = MGN_24M;
|
||||
break;
|
||||
}
|
||||
if (ieee->current_network.buseprotection) {
|
||||
tcb_desc->bRTSEnable = true;
|
||||
tcb_desc->bCTSEnable = true;
|
||||
tcb_desc->rts_enable = true;
|
||||
tcb_desc->cts_enable = true;
|
||||
tcb_desc->rts_rate = MGN_24M;
|
||||
break;
|
||||
}
|
||||
if (ht_info->current_ht_support && ht_info->enable_ht) {
|
||||
u8 HTOpMode = ht_info->current_op_mode;
|
||||
u8 ht_op_mode = ht_info->current_op_mode;
|
||||
|
||||
if ((ht_info->cur_bw_40mhz && (HTOpMode == 2 ||
|
||||
HTOpMode == 3)) ||
|
||||
(!ht_info->cur_bw_40mhz && HTOpMode == 3)) {
|
||||
if ((ht_info->cur_bw_40mhz && (ht_op_mode == 2 ||
|
||||
ht_op_mode == 3)) ||
|
||||
(!ht_info->cur_bw_40mhz && ht_op_mode == 3)) {
|
||||
tcb_desc->rts_rate = MGN_24M;
|
||||
tcb_desc->bRTSEnable = true;
|
||||
tcb_desc->rts_enable = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (skb->len > ieee->rts) {
|
||||
tcb_desc->rts_rate = MGN_24M;
|
||||
tcb_desc->bRTSEnable = true;
|
||||
tcb_desc->rts_enable = true;
|
||||
break;
|
||||
}
|
||||
if (tcb_desc->ampdu_enable) {
|
||||
tcb_desc->rts_rate = MGN_24M;
|
||||
tcb_desc->bRTSEnable = false;
|
||||
tcb_desc->rts_enable = false;
|
||||
break;
|
||||
}
|
||||
goto NO_PROTECTION;
|
||||
}
|
||||
if (ieee->current_network.capability & WLAN_CAPABILITY_SHORT_PREAMBLE)
|
||||
tcb_desc->bUseShortPreamble = true;
|
||||
tcb_desc->use_short_preamble = true;
|
||||
return;
|
||||
NO_PROTECTION:
|
||||
tcb_desc->bRTSEnable = false;
|
||||
tcb_desc->bCTSEnable = false;
|
||||
tcb_desc->rts_enable = false;
|
||||
tcb_desc->cts_enable = false;
|
||||
tcb_desc->rts_rate = 0;
|
||||
tcb_desc->RTSSC = 0;
|
||||
tcb_desc->bRTSBW = false;
|
||||
tcb_desc->rts_bw = false;
|
||||
}
|
||||
|
||||
static void rtllib_txrate_selectmode(struct rtllib_device *ieee,
|
||||
@ -472,11 +472,11 @@ static u16 rtllib_query_seqnum(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||
|
||||
if (is_multicast_ether_addr(dst))
|
||||
return 0;
|
||||
if (IsQoSDataFrame(skb->data)) {
|
||||
if (is_qos_data_frame(skb->data)) {
|
||||
struct tx_ts_record *ts = NULL;
|
||||
|
||||
if (!rtllib_get_ts(ieee, (struct ts_common_info **)(&ts), dst,
|
||||
skb->priority, TX_DIR, true))
|
||||
skb->priority, TX_DIR, true))
|
||||
return 0;
|
||||
seqnum = ts->tx_cur_seq;
|
||||
ts->tx_cur_seq = (ts->tx_cur_seq + 1) % 4096;
|
||||
@ -510,8 +510,8 @@ static u8 rtllib_current_rate(struct rtllib_device *ieee)
|
||||
if (ieee->mode & IEEE_MODE_MASK)
|
||||
return ieee->rate;
|
||||
|
||||
if (ieee->HTCurrentOperaRate)
|
||||
return ieee->HTCurrentOperaRate;
|
||||
if (ieee->ht_curr_op_rate)
|
||||
return ieee->ht_curr_op_rate;
|
||||
else
|
||||
return ieee->rate & 0x7F;
|
||||
}
|
||||
@ -538,8 +538,7 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
u8 src[ETH_ALEN];
|
||||
struct lib80211_crypt_data *crypt = NULL;
|
||||
struct cb_desc *tcb_desc;
|
||||
u8 bIsMulticast = false;
|
||||
u8 IsAmsdu = false;
|
||||
u8 is_multicast = false;
|
||||
bool bdhcp = false;
|
||||
|
||||
spin_lock_irqsave(&ieee->lock, flags);
|
||||
@ -548,8 +547,8 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
* creating it...
|
||||
*/
|
||||
if (!(ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE) ||
|
||||
((!ieee->softmac_data_hard_start_xmit &&
|
||||
(ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE)))) {
|
||||
((!ieee->softmac_data_hard_start_xmit &&
|
||||
(ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE)))) {
|
||||
netdev_warn(ieee->dev, "No xmit handler.\n");
|
||||
goto success;
|
||||
}
|
||||
@ -607,7 +606,7 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
skb->priority = rtllib_classify(skb, IsAmsdu);
|
||||
skb->priority = rtllib_classify(skb);
|
||||
crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx];
|
||||
encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) && crypt && crypt->ops;
|
||||
if (!encrypt && ieee->ieee802_1x &&
|
||||
@ -648,21 +647,17 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
ether_addr_copy(header.addr1,
|
||||
ieee->current_network.bssid);
|
||||
ether_addr_copy(header.addr2, src);
|
||||
if (IsAmsdu)
|
||||
ether_addr_copy(header.addr3,
|
||||
ieee->current_network.bssid);
|
||||
else
|
||||
ether_addr_copy(header.addr3, dest);
|
||||
ether_addr_copy(header.addr3, dest);
|
||||
}
|
||||
|
||||
bIsMulticast = is_multicast_ether_addr(header.addr1);
|
||||
is_multicast = is_multicast_ether_addr(header.addr1);
|
||||
|
||||
header.frame_control = cpu_to_le16(fc);
|
||||
|
||||
/* Determine fragmentation size based on destination (multicast
|
||||
* and broadcast are not fragmented)
|
||||
*/
|
||||
if (bIsMulticast) {
|
||||
if (is_multicast) {
|
||||
frag_size = MAX_FRAG_THRESHOLD;
|
||||
qos_ctl |= QOS_CTL_NOTCONTAIN_ACK;
|
||||
} else {
|
||||
@ -751,14 +746,14 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
|
||||
if (encrypt) {
|
||||
if (ieee->hwsec_active)
|
||||
tcb_desc->bHwSec = 1;
|
||||
tcb_desc->hw_sec = 1;
|
||||
else
|
||||
tcb_desc->bHwSec = 0;
|
||||
tcb_desc->hw_sec = 0;
|
||||
skb_reserve(skb_frag,
|
||||
crypt->ops->extra_mpdu_prefix_len +
|
||||
crypt->ops->extra_msdu_prefix_len);
|
||||
} else {
|
||||
tcb_desc->bHwSec = 0;
|
||||
tcb_desc->hw_sec = 0;
|
||||
}
|
||||
frag_hdr = skb_put_data(skb_frag, &header, hdr_len);
|
||||
|
||||
@ -774,7 +769,7 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
/* The last fragment has the remaining length */
|
||||
bytes = bytes_last_frag;
|
||||
}
|
||||
if ((qos_activated) && (!bIsMulticast)) {
|
||||
if ((qos_activated) && (!is_multicast)) {
|
||||
frag_hdr->seq_ctrl =
|
||||
cpu_to_le16(rtllib_query_seqnum(ieee, skb_frag,
|
||||
header.addr1));
|
||||
@ -809,7 +804,7 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
skb_put(skb_frag, 4);
|
||||
}
|
||||
|
||||
if ((qos_activated) && (!bIsMulticast)) {
|
||||
if ((qos_activated) && (!is_multicast)) {
|
||||
if (ieee->seq_ctrl[UP2AC(skb->priority) + 1] == 0xFFF)
|
||||
ieee->seq_ctrl[UP2AC(skb->priority) + 1] = 0;
|
||||
else
|
||||
@ -845,9 +840,9 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
if (is_multicast_ether_addr(header.addr1))
|
||||
tcb_desc->multicast = 1;
|
||||
if (is_broadcast_ether_addr(header.addr1))
|
||||
tcb_desc->bBroadcast = 1;
|
||||
tcb_desc->broadcast = 1;
|
||||
rtllib_txrate_selectmode(ieee, tcb_desc);
|
||||
if (tcb_desc->multicast || tcb_desc->bBroadcast)
|
||||
if (tcb_desc->multicast || tcb_desc->broadcast)
|
||||
tcb_desc->data_rate = ieee->basic_rate;
|
||||
else
|
||||
tcb_desc->data_rate = rtllib_current_rate(ieee);
|
||||
@ -868,11 +863,11 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||
tcb_desc->bdhcp = 1;
|
||||
}
|
||||
|
||||
rtllib_query_ShortPreambleMode(ieee, tcb_desc);
|
||||
rtllib_query_short_preamble_mode(ieee, tcb_desc);
|
||||
rtllib_tx_query_agg_cap(ieee, txb->fragments[0],
|
||||
tcb_desc);
|
||||
rtllib_query_HTCapShortGI(ieee, tcb_desc);
|
||||
rtllib_query_BandwidthMode(ieee, tcb_desc);
|
||||
rtllib_query_ht_cap_short_gi(ieee, tcb_desc);
|
||||
rtllib_query_bandwidth_mode(ieee, tcb_desc);
|
||||
rtllib_query_protectionmode(ieee, tcb_desc,
|
||||
txb->fragments[0]);
|
||||
}
|
||||
|
@ -247,7 +247,7 @@ void r8712_construct_txaggr_cmd_desc(struct xmit_buf *pxmitbuf)
|
||||
{
|
||||
struct tx_desc *ptx_desc = (struct tx_desc *)pxmitbuf->pbuf;
|
||||
|
||||
/* Fill up TxCmd Descriptor according as USB FW Tx Aaggregation info.*/
|
||||
/* Fill up TxCmd Descriptor according as USB FW Tx Aggregation info.*/
|
||||
/* dw0 */
|
||||
ptx_desc->txdw0 = cpu_to_le32(CMD_HDR_SZ & 0xffff);
|
||||
ptx_desc->txdw0 |=
|
||||
|
@ -37,7 +37,7 @@ struct surveydone_event {
|
||||
};
|
||||
|
||||
/*
|
||||
* Used to report the link result of joinning the given bss
|
||||
* Used to report the link result of joining the given bss
|
||||
* join_res:
|
||||
* -1: authentication fail
|
||||
* -2: association fail
|
||||
|
@ -62,7 +62,7 @@
|
||||
#define IO_WR_BURST(x) (IO_WRITE_ | _IO_SYNC_ | _IO_BURST_ | \
|
||||
((x) & _IOSZ_MASK_))
|
||||
#define IO_RD_BURST(x) (_IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_))
|
||||
/*below is for the intf_option bit defition...*/
|
||||
/*below is for the intf_option bit definition...*/
|
||||
#define _INTF_ASYNC_ BIT(0) /*support async io*/
|
||||
struct intf_priv;
|
||||
struct intf_hdl;
|
||||
|
@ -944,7 +944,7 @@ void r8712_cpwm_event_callback(struct _adapter *adapter, u8 *pbuf)
|
||||
|
||||
/* When the Netgear 3500 AP is with WPA2PSK-AES mode, it will send
|
||||
* the ADDBA req frame with start seq control = 0 to wifi client after
|
||||
* the WPA handshake and the seqence number of following data packet
|
||||
* the WPA handshake and the sequence number of following data packet
|
||||
* will be 0. In this case, the Rx reorder sequence is not longer than 0
|
||||
* and the WiFi client will drop the data with seq number 0.
|
||||
* So, the 8712 firmware has to inform driver with receiving the
|
||||
|
@ -117,12 +117,9 @@ int _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv,
|
||||
/*init xmit_buf*/
|
||||
_init_queue(&pxmitpriv->free_xmitbuf_queue);
|
||||
_init_queue(&pxmitpriv->pending_xmitbuf_queue);
|
||||
pxmitpriv->pallocated_xmitbuf =
|
||||
kmalloc(NR_XMITBUFF * sizeof(struct xmit_buf) + 4, GFP_ATOMIC);
|
||||
if (!pxmitpriv->pallocated_xmitbuf)
|
||||
pxmitpriv->pxmitbuf = kmalloc(NR_XMITBUFF * sizeof(struct xmit_buf), GFP_ATOMIC);
|
||||
if (!pxmitpriv->pxmitbuf)
|
||||
goto clean_up_frame_buf;
|
||||
pxmitpriv->pxmitbuf = pxmitpriv->pallocated_xmitbuf + 4 -
|
||||
((addr_t)(pxmitpriv->pallocated_xmitbuf) & 3);
|
||||
pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf;
|
||||
for (i = 0; i < NR_XMITBUFF; i++) {
|
||||
INIT_LIST_HEAD(&pxmitbuf->list);
|
||||
@ -165,8 +162,8 @@ clean_up_alloc_buf:
|
||||
for (k = 0; k < 8; k++) /* delete xmit urb's */
|
||||
usb_free_urb(pxmitbuf->pxmit_urb[k]);
|
||||
}
|
||||
kfree(pxmitpriv->pallocated_xmitbuf);
|
||||
pxmitpriv->pallocated_xmitbuf = NULL;
|
||||
kfree(pxmitpriv->pxmitbuf);
|
||||
pxmitpriv->pxmitbuf = NULL;
|
||||
clean_up_frame_buf:
|
||||
kfree(pxmitpriv->pallocated_frame_buf);
|
||||
pxmitpriv->pallocated_frame_buf = NULL;
|
||||
@ -193,7 +190,7 @@ void _free_xmit_priv(struct xmit_priv *pxmitpriv)
|
||||
pxmitbuf++;
|
||||
}
|
||||
kfree(pxmitpriv->pallocated_frame_buf);
|
||||
kfree(pxmitpriv->pallocated_xmitbuf);
|
||||
kfree(pxmitpriv->pxmitbuf);
|
||||
free_hwxmits(padapter);
|
||||
}
|
||||
|
||||
|
@ -244,7 +244,6 @@ struct xmit_priv {
|
||||
int cmdseq;
|
||||
struct __queue free_xmitbuf_queue;
|
||||
struct __queue pending_xmitbuf_queue;
|
||||
u8 *pallocated_xmitbuf;
|
||||
u8 *pxmitbuf;
|
||||
uint free_xmitbuf_cnt;
|
||||
};
|
||||
|
@ -26,13 +26,6 @@
|
||||
#define RTL871X_VENQT_READ 0xc0
|
||||
#define RTL871X_VENQT_WRITE 0x40
|
||||
|
||||
struct zero_bulkout_context {
|
||||
void *pbuf;
|
||||
void *purb;
|
||||
void *pirp;
|
||||
void *padapter;
|
||||
};
|
||||
|
||||
uint r8712_usb_init_intf_priv(struct intf_priv *pintfpriv)
|
||||
{
|
||||
pintfpriv->piorw_urb = usb_alloc_urb(0, GFP_ATOMIC);
|
||||
|
@ -19,420 +19,47 @@
|
||||
#ifndef __INC_HAL8723BREG_H
|
||||
#define __INC_HAL8723BREG_H
|
||||
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
|
||||
/* */
|
||||
/* */
|
||||
/* 0x0000h ~ 0x00FFh System Configuration */
|
||||
/* */
|
||||
/* */
|
||||
#define REG_SYS_ISO_CTRL_8723B 0x0000 /* 2 Byte */
|
||||
#define REG_SYS_FUNC_EN_8723B 0x0002 /* 2 Byte */
|
||||
#define REG_APS_FSMCO_8723B 0x0004 /* 4 Byte */
|
||||
#define REG_SYS_CLKR_8723B 0x0008 /* 2 Byte */
|
||||
#define REG_9346CR_8723B 0x000A /* 2 Byte */
|
||||
#define REG_EE_VPD_8723B 0x000C /* 2 Byte */
|
||||
#define REG_AFE_MISC_8723B 0x0010 /* 1 Byte */
|
||||
#define REG_SPS0_CTRL_8723B 0x0011 /* 7 Byte */
|
||||
#define REG_SPS_OCP_CFG_8723B 0x0018 /* 4 Byte */
|
||||
#define REG_RSV_CTRL_8723B 0x001C /* 3 Byte */
|
||||
#define REG_RF_CTRL_8723B 0x001F /* 1 Byte */
|
||||
#define REG_LPLDO_CTRL_8723B 0x0023 /* 1 Byte */
|
||||
#define REG_AFE_XTAL_CTRL_8723B 0x0024 /* 4 Byte */
|
||||
#define REG_AFE_PLL_CTRL_8723B 0x0028 /* 4 Byte */
|
||||
#define REG_MAC_PLL_CTRL_EXT_8723B 0x002c /* 4 Byte */
|
||||
#define REG_EFUSE_CTRL_8723B 0x0030
|
||||
#define REG_EFUSE_TEST_8723B 0x0034
|
||||
#define REG_PWR_DATA_8723B 0x0038
|
||||
#define REG_CAL_TIMER_8723B 0x003C
|
||||
#define REG_ACLK_MON_8723B 0x003E
|
||||
#define REG_GPIO_MUXCFG_8723B 0x0040
|
||||
#define REG_GPIO_IO_SEL_8723B 0x0042
|
||||
#define REG_MAC_PINMUX_CFG_8723B 0x0043
|
||||
#define REG_GPIO_PIN_CTRL_8723B 0x0044
|
||||
#define REG_GPIO_INTM_8723B 0x0048
|
||||
#define REG_LEDCFG0_8723B 0x004C
|
||||
#define REG_LEDCFG1_8723B 0x004D
|
||||
#define REG_LEDCFG2_8723B 0x004E
|
||||
#define REG_LEDCFG3_8723B 0x004F
|
||||
#define REG_FSIMR_8723B 0x0050
|
||||
#define REG_FSISR_8723B 0x0054
|
||||
#define REG_HSIMR_8723B 0x0058
|
||||
#define REG_HSISR_8723B 0x005c
|
||||
#define REG_GPIO_EXT_CTRL 0x0060
|
||||
#define REG_MULTI_FUNC_CTRL_8723B 0x0068
|
||||
#define REG_GPIO_STATUS_8723B 0x006C
|
||||
#define REG_SDIO_CTRL_8723B 0x0070
|
||||
#define REG_OPT_CTRL_8723B 0x0074
|
||||
#define REG_AFE_XTAL_CTRL_EXT_8723B 0x0078
|
||||
#define REG_MCUFWDL_8723B 0x0080
|
||||
#define REG_BT_PATCH_STATUS_8723B 0x0088
|
||||
#define REG_HIMR0_8723B 0x00B0
|
||||
#define REG_HISR0_8723B 0x00B4
|
||||
#define REG_HIMR1_8723B 0x00B8
|
||||
#define REG_HISR1_8723B 0x00BC
|
||||
#define REG_PMC_DBG_CTRL2_8723B 0x00CC
|
||||
#define REG_EFUSE_BURN_GNT_8723B 0x00CF
|
||||
#define REG_HPON_FSM_8723B 0x00EC
|
||||
#define REG_SYS_CFG_8723B 0x00F0
|
||||
#define REG_SYS_CFG1_8723B 0x00FC
|
||||
#define REG_ROM_VERSION 0x00FD
|
||||
|
||||
/* */
|
||||
/* */
|
||||
/* 0x0100h ~ 0x01FFh MACTOP General Configuration */
|
||||
/* */
|
||||
/* */
|
||||
#define REG_CR_8723B 0x0100
|
||||
#define REG_PBP_8723B 0x0104
|
||||
#define REG_PKT_BUFF_ACCESS_CTRL_8723B 0x0106
|
||||
#define REG_TRXDMA_CTRL_8723B 0x010C
|
||||
#define REG_TRXFF_BNDY_8723B 0x0114
|
||||
#define REG_TRXFF_STATUS_8723B 0x0118
|
||||
#define REG_RXFF_PTR_8723B 0x011C
|
||||
#define REG_CPWM_8723B 0x012F
|
||||
#define REG_FWIMR_8723B 0x0130
|
||||
#define REG_FWISR_8723B 0x0134
|
||||
#define REG_FTIMR_8723B 0x0138
|
||||
#define REG_PKTBUF_DBG_CTRL_8723B 0x0140
|
||||
#define REG_RXPKTBUF_CTRL_8723B 0x0142
|
||||
#define REG_PKTBUF_DBG_DATA_L_8723B 0x0144
|
||||
#define REG_PKTBUF_DBG_DATA_H_8723B 0x0148
|
||||
|
||||
#define REG_TC0_CTRL_8723B 0x0150
|
||||
#define REG_TC1_CTRL_8723B 0x0154
|
||||
#define REG_TC2_CTRL_8723B 0x0158
|
||||
#define REG_TC3_CTRL_8723B 0x015C
|
||||
#define REG_TC4_CTRL_8723B 0x0160
|
||||
#define REG_TCUNIT_BASE_8723B 0x0164
|
||||
#define REG_RSVD3_8723B 0x0168
|
||||
#define REG_C2HEVT_MSG_NORMAL_8723B 0x01A0
|
||||
#define REG_C2HEVT_CMD_SEQ_88XX 0x01A1
|
||||
#define REG_C2HEVT_CMD_CONTENT_88XX 0x01A2
|
||||
#define REG_C2HEVT_CMD_LEN_88XX 0x01AE
|
||||
#define REG_C2HEVT_CLEAR_8723B 0x01AF
|
||||
#define REG_MCUTST_1_8723B 0x01C0
|
||||
#define REG_MCUTST_WOWLAN_8723B 0x01C7
|
||||
#define REG_FMETHR_8723B 0x01C8
|
||||
#define REG_HMETFR_8723B 0x01CC
|
||||
#define REG_HMEBOX_0_8723B 0x01D0
|
||||
#define REG_HMEBOX_1_8723B 0x01D4
|
||||
#define REG_HMEBOX_2_8723B 0x01D8
|
||||
#define REG_HMEBOX_3_8723B 0x01DC
|
||||
#define REG_LLT_INIT_8723B 0x01E0
|
||||
#define REG_HMEBOX_EXT0_8723B 0x01F0
|
||||
#define REG_HMEBOX_EXT1_8723B 0x01F4
|
||||
#define REG_HMEBOX_EXT2_8723B 0x01F8
|
||||
#define REG_HMEBOX_EXT3_8723B 0x01FC
|
||||
|
||||
/* */
|
||||
/* */
|
||||
/* 0x0200h ~ 0x027Fh TXDMA Configuration */
|
||||
/* */
|
||||
/* */
|
||||
#define REG_RQPN_8723B 0x0200
|
||||
#define REG_FIFOPAGE_8723B 0x0204
|
||||
#define REG_DWBCN0_CTRL_8723B REG_TDECTRL
|
||||
#define REG_TXDMA_OFFSET_CHK_8723B 0x020C
|
||||
#define REG_TXDMA_STATUS_8723B 0x0210
|
||||
#define REG_RQPN_NPQ_8723B 0x0214
|
||||
#define REG_DWBCN1_CTRL_8723B 0x0228
|
||||
|
||||
/* */
|
||||
/* */
|
||||
/* 0x0280h ~ 0x02FFh RXDMA Configuration */
|
||||
/* */
|
||||
/* */
|
||||
#define REG_RXDMA_AGG_PG_TH_8723B 0x0280
|
||||
#define REG_FW_UPD_RDPTR_8723B 0x0284 /* FW shall update this register before FW write RXPKT_RELEASE_POLL to 1 */
|
||||
#define REG_RXDMA_CONTROL_8723B 0x0286 /* Control the RX DMA. */
|
||||
#define REG_RXPKT_NUM_8723B 0x0287 /* The number of packets in RXPKTBUF. */
|
||||
#define REG_RXDMA_STATUS_8723B 0x0288
|
||||
#define REG_RXDMA_PRO_8723B 0x0290
|
||||
#define REG_EARLY_MODE_CONTROL_8723B 0x02BC
|
||||
#define REG_RSVD5_8723B 0x02F0
|
||||
#define REG_RSVD6_8723B 0x02F4
|
||||
|
||||
/* */
|
||||
/* */
|
||||
/* 0x0300h ~ 0x03FFh PCIe */
|
||||
/* */
|
||||
/* */
|
||||
#define REG_PCIE_CTRL_REG_8723B 0x0300
|
||||
#define REG_INT_MIG_8723B 0x0304 /* Interrupt Migration */
|
||||
#define REG_BCNQ_DESA_8723B 0x0308 /* TX Beacon Descriptor Address */
|
||||
#define REG_HQ_DESA_8723B 0x0310 /* TX High Queue Descriptor Address */
|
||||
#define REG_MGQ_DESA_8723B 0x0318 /* TX Manage Queue Descriptor Address */
|
||||
#define REG_VOQ_DESA_8723B 0x0320 /* TX VO Queue Descriptor Address */
|
||||
#define REG_VIQ_DESA_8723B 0x0328 /* TX VI Queue Descriptor Address */
|
||||
#define REG_BEQ_DESA_8723B 0x0330 /* TX BE Queue Descriptor Address */
|
||||
#define REG_BKQ_DESA_8723B 0x0338 /* TX BK Queue Descriptor Address */
|
||||
#define REG_RX_DESA_8723B 0x0340 /* RX Queue Descriptor Address */
|
||||
#define REG_DBI_WDATA_8723B 0x0348 /* DBI Write Data */
|
||||
#define REG_DBI_RDATA_8723B 0x034C /* DBI Read Data */
|
||||
#define REG_DBI_ADDR_8723B 0x0350 /* DBI Address */
|
||||
#define REG_DBI_FLAG_8723B 0x0352 /* DBI Read/Write Flag */
|
||||
#define REG_MDIO_WDATA_8723B 0x0354 /* MDIO for Write PCIE PHY */
|
||||
#define REG_MDIO_RDATA_8723B 0x0356 /* MDIO for Reads PCIE PHY */
|
||||
#define REG_MDIO_CTL_8723B 0x0358 /* MDIO for Control */
|
||||
#define REG_DBG_SEL_8723B 0x0360 /* Debug Selection Register */
|
||||
#define REG_PCIE_HRPWM_8723B 0x0361 /* PCIe RPWM */
|
||||
#define REG_PCIE_HCPWM_8723B 0x0363 /* PCIe CPWM */
|
||||
#define REG_PCIE_MULTIFET_CTRL_8723B 0x036A /* PCIE Multi-Fethc Control */
|
||||
|
||||
/* spec version 11 */
|
||||
/* */
|
||||
/* */
|
||||
/* 0x0400h ~ 0x047Fh Protocol Configuration */
|
||||
/* */
|
||||
/* */
|
||||
#define REG_VOQ_INFORMATION_8723B 0x0400
|
||||
#define REG_VIQ_INFORMATION_8723B 0x0404
|
||||
#define REG_BEQ_INFORMATION_8723B 0x0408
|
||||
#define REG_BKQ_INFORMATION_8723B 0x040C
|
||||
#define REG_MGQ_INFORMATION_8723B 0x0410
|
||||
#define REG_HGQ_INFORMATION_8723B 0x0414
|
||||
#define REG_BCNQ_INFORMATION_8723B 0x0418
|
||||
#define REG_TXPKT_EMPTY_8723B 0x041A
|
||||
|
||||
#define REG_FWHW_TXQ_CTRL_8723B 0x0420
|
||||
#define REG_HWSEQ_CTRL_8723B 0x0423
|
||||
#define REG_TXPKTBUF_BCNQ_BDNY_8723B 0x0424
|
||||
#define REG_TXPKTBUF_MGQ_BDNY_8723B 0x0425
|
||||
#define REG_LIFECTRL_CTRL_8723B 0x0426
|
||||
#define REG_MULTI_BCNQ_OFFSET_8723B 0x0427
|
||||
#define REG_SPEC_SIFS_8723B 0x0428
|
||||
#define REG_RL_8723B 0x042A
|
||||
#define REG_TXBF_CTRL_8723B 0x042C
|
||||
#define REG_DARFRC_8723B 0x0430
|
||||
#define REG_RARFRC_8723B 0x0438
|
||||
#define REG_RRSR_8723B 0x0440
|
||||
#define REG_ARFR0_8723B 0x0444
|
||||
#define REG_ARFR1_8723B 0x044C
|
||||
#define REG_CCK_CHECK_8723B 0x0454
|
||||
#define REG_AMPDU_MAX_TIME_8723B 0x0456
|
||||
#define REG_TXPKTBUF_BCNQ_BDNY1_8723B 0x0457
|
||||
|
||||
#define REG_AMPDU_MAX_LENGTH_8723B 0x0458
|
||||
#define REG_TXPKTBUF_WMAC_LBK_BF_HD_8723B 0x045D
|
||||
#define REG_NDPA_OPT_CTRL_8723B 0x045F
|
||||
#define REG_FAST_EDCA_CTRL_8723B 0x0460
|
||||
#define REG_RD_RESP_PKT_TH_8723B 0x0463
|
||||
#define REG_DATA_SC_8723B 0x0483
|
||||
#define REG_TXRPT_START_OFFSET 0x04AC
|
||||
#define REG_POWER_STAGE1_8723B 0x04B4
|
||||
#define REG_POWER_STAGE2_8723B 0x04B8
|
||||
#define REG_AMPDU_BURST_MODE_8723B 0x04BC
|
||||
#define REG_PKT_VO_VI_LIFE_TIME_8723B 0x04C0
|
||||
#define REG_PKT_BE_BK_LIFE_TIME_8723B 0x04C2
|
||||
#define REG_STBC_SETTING_8723B 0x04C4
|
||||
#define REG_HT_SINGLE_AMPDU_8723B 0x04C7
|
||||
#define REG_PROT_MODE_CTRL_8723B 0x04C8
|
||||
#define REG_MAX_AGGR_NUM_8723B 0x04CA
|
||||
#define REG_RTS_MAX_AGGR_NUM_8723B 0x04CB
|
||||
#define REG_BAR_MODE_CTRL_8723B 0x04CC
|
||||
#define REG_RA_TRY_RATE_AGG_LMT_8723B 0x04CF
|
||||
#define REG_MACID_PKT_DROP0_8723B 0x04D0
|
||||
#define REG_MACID_PKT_SLEEP_8723B 0x04D4
|
||||
|
||||
/* */
|
||||
/* */
|
||||
/* 0x0500h ~ 0x05FFh EDCA Configuration */
|
||||
/* */
|
||||
/* */
|
||||
#define REG_EDCA_VO_PARAM_8723B 0x0500
|
||||
#define REG_EDCA_VI_PARAM_8723B 0x0504
|
||||
#define REG_EDCA_BE_PARAM_8723B 0x0508
|
||||
#define REG_EDCA_BK_PARAM_8723B 0x050C
|
||||
#define REG_BCNTCFG_8723B 0x0510
|
||||
#define REG_PIFS_8723B 0x0512
|
||||
#define REG_RDG_PIFS_8723B 0x0513
|
||||
#define REG_SIFS_CTX_8723B 0x0514
|
||||
#define REG_SIFS_TRX_8723B 0x0516
|
||||
#define REG_AGGR_BREAK_TIME_8723B 0x051A
|
||||
#define REG_SLOT_8723B 0x051B
|
||||
#define REG_TX_PTCL_CTRL_8723B 0x0520
|
||||
#define REG_TXPAUSE_8723B 0x0522
|
||||
#define REG_DIS_TXREQ_CLR_8723B 0x0523
|
||||
#define REG_RD_CTRL_8723B 0x0524
|
||||
/* */
|
||||
/* Format for offset 540h-542h: */
|
||||
/* [3:0]: TBTT prohibit setup in unit of 32us. The time for HW getting beacon content before TBTT. */
|
||||
/* [7:4]: Reserved. */
|
||||
/* [19:8]: TBTT prohibit hold in unit of 32us. The time for HW holding to send the beacon packet. */
|
||||
/* [23:20]: Reserved */
|
||||
/* Description: */
|
||||
/* | */
|
||||
/* |<--Setup--|--Hold------------>| */
|
||||
/* --------------|---------------------- */
|
||||
/* | */
|
||||
/* TBTT */
|
||||
/* Note: We cannot update beacon content to HW or send any AC packets during the time between Setup and Hold. */
|
||||
/* Described by Designer Tim and Bruce, 2011-01-14. */
|
||||
/* */
|
||||
#define REG_TBTT_PROHIBIT_8723B 0x0540
|
||||
#define REG_RD_NAV_NXT_8723B 0x0544
|
||||
#define REG_NAV_PROT_LEN_8723B 0x0546
|
||||
#define REG_BCN_CTRL_8723B 0x0550
|
||||
#define REG_BCN_CTRL_1_8723B 0x0551
|
||||
#define REG_MBID_NUM_8723B 0x0552
|
||||
#define REG_DUAL_TSF_RST_8723B 0x0553
|
||||
#define REG_BCN_INTERVAL_8723B 0x0554
|
||||
#define REG_DRVERLYINT_8723B 0x0558
|
||||
#define REG_BCNDMATIM_8723B 0x0559
|
||||
#define REG_ATIMWND_8723B 0x055A
|
||||
#define REG_USTIME_TSF_8723B 0x055C
|
||||
#define REG_BCN_MAX_ERR_8723B 0x055D
|
||||
#define REG_RXTSF_OFFSET_CCK_8723B 0x055E
|
||||
#define REG_RXTSF_OFFSET_OFDM_8723B 0x055F
|
||||
#define REG_TSFTR_8723B 0x0560
|
||||
#define REG_CTWND_8723B 0x0572
|
||||
#define REG_SECONDARY_CCA_CTRL_8723B 0x0577
|
||||
#define REG_PSTIMER_8723B 0x0580
|
||||
#define REG_TIMER0_8723B 0x0584
|
||||
#define REG_TIMER1_8723B 0x0588
|
||||
#define REG_ACMHWCTRL_8723B 0x05C0
|
||||
#define REG_SCH_TXCMD_8723B 0x05F8
|
||||
|
||||
/* 0x0600h ~ 0x07FFh WMAC Configuration */
|
||||
#define REG_MAC_CR_8723B 0x0600
|
||||
#define REG_TCR_8723B 0x0604
|
||||
#define REG_RCR_8723B 0x0608
|
||||
#define REG_RX_PKT_LIMIT_8723B 0x060C
|
||||
#define REG_RX_DLK_TIME_8723B 0x060D
|
||||
#define REG_RX_DRVINFO_SZ_8723B 0x060F
|
||||
|
||||
#define REG_MACID_8723B 0x0610
|
||||
#define REG_BSSID_8723B 0x0618
|
||||
#define REG_MAR_8723B 0x0620
|
||||
#define REG_MBIDCAMCFG_8723B 0x0628
|
||||
|
||||
#define REG_USTIME_EDCA_8723B 0x0638
|
||||
#define REG_MAC_SPEC_SIFS_8723B 0x063A
|
||||
#define REG_RESP_SIFP_CCK_8723B 0x063C
|
||||
#define REG_RESP_SIFS_OFDM_8723B 0x063E
|
||||
#define REG_ACKTO_8723B 0x0640
|
||||
#define REG_CTS2TO_8723B 0x0641
|
||||
#define REG_EIFS_8723B 0x0642
|
||||
|
||||
#define REG_NAV_UPPER_8723B 0x0652 /* unit of 128 */
|
||||
#define REG_TRXPTCL_CTL_8723B 0x0668
|
||||
|
||||
/* Security */
|
||||
#define REG_CAMCMD_8723B 0x0670
|
||||
#define REG_CAMWRITE_8723B 0x0674
|
||||
#define REG_CAMREAD_8723B 0x0678
|
||||
#define REG_CAMDBG_8723B 0x067C
|
||||
#define REG_SECCFG_8723B 0x0680
|
||||
|
||||
/* Power */
|
||||
#define REG_WOW_CTRL_8723B 0x0690
|
||||
#define REG_PS_RX_INFO_8723B 0x0692
|
||||
#define REG_UAPSD_TID_8723B 0x0693
|
||||
#define REG_WKFMCAM_CMD_8723B 0x0698
|
||||
#define REG_WKFMCAM_NUM_8723B 0x0698
|
||||
#define REG_WKFMCAM_RWD_8723B 0x069C
|
||||
#define REG_RXFLTMAP0_8723B 0x06A0
|
||||
#define REG_RXFLTMAP1_8723B 0x06A2
|
||||
#define REG_RXFLTMAP2_8723B 0x06A4
|
||||
#define REG_BCN_PSR_RPT_8723B 0x06A8
|
||||
#define REG_BT_COEX_TABLE_8723B 0x06C0
|
||||
#define REG_BFMER0_INFO_8723B 0x06E4
|
||||
#define REG_BFMER1_INFO_8723B 0x06EC
|
||||
#define REG_CSI_RPT_PARAM_BW20_8723B 0x06F4
|
||||
#define REG_CSI_RPT_PARAM_BW40_8723B 0x06F8
|
||||
#define REG_CSI_RPT_PARAM_BW80_8723B 0x06FC
|
||||
|
||||
/* Hardware Port 2 */
|
||||
#define REG_MACID1_8723B 0x0700
|
||||
#define REG_BSSID1_8723B 0x0708
|
||||
#define REG_BFMEE_SEL_8723B 0x0714
|
||||
#define REG_SND_PTCL_CTRL_8723B 0x0718
|
||||
|
||||
/* Redifine 8192C register definition for compatibility */
|
||||
|
||||
/* TODO: use these definition when using REG_xxx naming rule. */
|
||||
/* NOTE: DO NOT Remove these definition. Use later. */
|
||||
#define EFUSE_CTRL_8723B REG_EFUSE_CTRL_8723B /* E-Fuse Control. */
|
||||
#define EFUSE_TEST_8723B REG_EFUSE_TEST_8723B /* E-Fuse Test. */
|
||||
#define MSR_8723B (REG_CR_8723B + 2) /* Media Status register */
|
||||
#define ISR_8723B REG_HISR0_8723B
|
||||
#define TSFR_8723B REG_TSFTR_8723B /* Timing Sync Function Timer Register. */
|
||||
|
||||
#define PBP_8723B REG_PBP_8723B
|
||||
|
||||
/* Redifine MACID register, to compatible prior ICs. */
|
||||
#define IDR0_8723B REG_MACID_8723B /* MAC ID Register, Offset 0x0050-0x0053 */
|
||||
#define IDR4_8723B (REG_MACID_8723B + 4) /* MAC ID Register, Offset 0x0054-0x0055 */
|
||||
|
||||
/* 9. Security Control Registers (Offset:) */
|
||||
#define RWCAM_8723B REG_CAMCMD_8723B /* IN 8190 Data Sheet is called CAMcmd */
|
||||
#define WCAMI_8723B REG_CAMWRITE_8723B /* Software write CAM input content */
|
||||
#define RCAMO_8723B REG_CAMREAD_8723B /* Software read/write CAM config */
|
||||
#define CAMDBG_8723B REG_CAMDBG_8723B
|
||||
#define SECR_8723B REG_SECCFG_8723B /* Security Configuration Register */
|
||||
|
||||
/* 8195 IMR/ISR bits (offset 0xB0, 8bits) */
|
||||
#define IMR_DISABLED_8723B 0
|
||||
/* IMR DW0(0x00B0-00B3) Bit 0-31 */
|
||||
#define IMR_TIMER2_8723B BIT31 /* Timeout interrupt 2 */
|
||||
#define IMR_TIMER1_8723B BIT30 /* Timeout interrupt 1 */
|
||||
#define IMR_PSTIMEOUT_8723B BIT29 /* Power Save Time Out Interrupt */
|
||||
#define IMR_GTINT4_8723B BIT28 /* When GTIMER4 expires, this bit is set to 1 */
|
||||
#define IMR_GTINT3_8723B BIT27 /* When GTIMER3 expires, this bit is set to 1 */
|
||||
#define IMR_TXBCN0ERR_8723B BIT26 /* Transmit Beacon0 Error */
|
||||
#define IMR_TXBCN0OK_8723B BIT25 /* Transmit Beacon0 OK */
|
||||
#define IMR_TSF_BIT32_TOGGLE_8723B BIT24 /* TSF Timer BIT32 toggle indication interrupt */
|
||||
#define IMR_BCNDMAINT0_8723B BIT20 /* Beacon DMA Interrupt 0 */
|
||||
#define IMR_BCNDERR0_8723B BIT16 /* Beacon Queue DMA OK0 */
|
||||
#define IMR_HSISR_IND_ON_INT_8723B BIT15 /* HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1) */
|
||||
#define IMR_BCNDMAINT_E_8723B BIT14 /* Beacon DMA Interrupt Extension for Win7 */
|
||||
#define IMR_ATIMEND_8723B BIT12 /* CTWidnow End or ATIM Window End */
|
||||
#define IMR_C2HCMD_8723B BIT10 /* CPU to Host Command INT Status, Write 1 clear */
|
||||
#define IMR_CPWM2_8723B BIT9 /* CPU power Mode exchange INT Status, Write 1 clear */
|
||||
#define IMR_CPWM_8723B BIT8 /* CPU power Mode exchange INT Status, Write 1 clear */
|
||||
#define IMR_HIGHDOK_8723B BIT7 /* High Queue DMA OK */
|
||||
#define IMR_MGNTDOK_8723B BIT6 /* Management Queue DMA OK */
|
||||
#define IMR_BKDOK_8723B BIT5 /* AC_BK DMA OK */
|
||||
#define IMR_BEDOK_8723B BIT4 /* AC_BE DMA OK */
|
||||
#define IMR_VIDOK_8723B BIT3 /* AC_VI DMA OK */
|
||||
#define IMR_VODOK_8723B BIT2 /* AC_VO DMA OK */
|
||||
#define IMR_RDU_8723B BIT1 /* Rx Descriptor Unavailable */
|
||||
#define IMR_ROK_8723B BIT0 /* Receive DMA OK */
|
||||
|
||||
/* IMR DW1(0x00B4-00B7) Bit 0-31 */
|
||||
#define IMR_BCNDMAINT7_8723B BIT27 /* Beacon DMA Interrupt 7 */
|
||||
#define IMR_BCNDMAINT6_8723B BIT26 /* Beacon DMA Interrupt 6 */
|
||||
#define IMR_BCNDMAINT5_8723B BIT25 /* Beacon DMA Interrupt 5 */
|
||||
#define IMR_BCNDMAINT4_8723B BIT24 /* Beacon DMA Interrupt 4 */
|
||||
#define IMR_BCNDMAINT3_8723B BIT23 /* Beacon DMA Interrupt 3 */
|
||||
#define IMR_BCNDMAINT2_8723B BIT22 /* Beacon DMA Interrupt 2 */
|
||||
#define IMR_BCNDMAINT1_8723B BIT21 /* Beacon DMA Interrupt 1 */
|
||||
#define IMR_BCNDOK7_8723B BIT20 /* Beacon Queue DMA OK Interrupt 7 */
|
||||
#define IMR_BCNDOK6_8723B BIT19 /* Beacon Queue DMA OK Interrupt 6 */
|
||||
#define IMR_BCNDOK5_8723B BIT18 /* Beacon Queue DMA OK Interrupt 5 */
|
||||
#define IMR_BCNDOK4_8723B BIT17 /* Beacon Queue DMA OK Interrupt 4 */
|
||||
#define IMR_BCNDOK3_8723B BIT16 /* Beacon Queue DMA OK Interrupt 3 */
|
||||
#define IMR_BCNDOK2_8723B BIT15 /* Beacon Queue DMA OK Interrupt 2 */
|
||||
#define IMR_BCNDOK1_8723B BIT14 /* Beacon Queue DMA OK Interrupt 1 */
|
||||
#define IMR_ATIMEND_E_8723B BIT13 /* ATIM Window End Extension for Win7 */
|
||||
#define IMR_TXERR_8723B BIT11 /* Tx Error Flag Interrupt Status, write 1 clear. */
|
||||
#define IMR_RXERR_8723B BIT10 /* Rx Error Flag INT Status, Write 1 clear */
|
||||
#define IMR_TXFOVW_8723B BIT9 /* Transmit FIFO Overflow */
|
||||
#define IMR_RXFOVW_8723B BIT8 /* Receive FIFO Overflow */
|
||||
|
||||
/* 2 ACMHWCTRL 0x05C0 */
|
||||
#define ACMHW_HWEN_8723B BIT(0)
|
||||
#define ACMHW_VOQEN_8723B BIT(1)
|
||||
#define ACMHW_VIQEN_8723B BIT(2)
|
||||
#define ACMHW_BEQEN_8723B BIT(3)
|
||||
#define ACMHW_VOQSTATUS_8723B BIT(5)
|
||||
#define ACMHW_VIQSTATUS_8723B BIT(6)
|
||||
#define ACMHW_BEQSTATUS_8723B BIT(7)
|
||||
|
||||
/* 8195 (RCR) Receive Configuration Register (Offset 0x608, 32 bits) */
|
||||
#define RCR_TCPOFLD_EN BIT25 /* Enable TCP checksum offload */
|
||||
|
||||
#endif /* #ifndef __INC_HAL8723BREG_H */
|
||||
|
@ -70,13 +70,6 @@ static bool CheckPositive(
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool CheckNegative(
|
||||
struct dm_odm_t *pDM_Odm, const u32 Condition1, const u32 Condition2
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* AGC_TAB.TXT
|
||||
******************************************************************************/
|
||||
@ -244,10 +237,7 @@ void ODM_ReadAndConfig_MP_8723B_AGC_TAB(struct dm_odm_t *pDM_Odm)
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
} else {
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
if (!CheckNegative(pDM_Odm, v1, v2))
|
||||
bMatched = false;
|
||||
else
|
||||
bMatched = true;
|
||||
bMatched = true;
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
}
|
||||
|
||||
@ -506,10 +496,7 @@ void ODM_ReadAndConfig_MP_8723B_PHY_REG(struct dm_odm_t *pDM_Odm)
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
} else {
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
if (!CheckNegative(pDM_Odm, v1, v2))
|
||||
bMatched = false;
|
||||
else
|
||||
bMatched = true;
|
||||
bMatched = true;
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
}
|
||||
|
||||
|
@ -68,13 +68,6 @@ static bool CheckPositive(
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool CheckNegative(
|
||||
struct dm_odm_t *pDM_Odm, const u32 Condition1, const u32 Condition2
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* MAC_REG.TXT
|
||||
******************************************************************************/
|
||||
@ -214,10 +207,7 @@ void ODM_ReadAndConfig_MP_8723B_MAC_REG(struct dm_odm_t *pDM_Odm)
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
} else {
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
if (!CheckNegative(pDM_Odm, v1, v2))
|
||||
bMatched = false;
|
||||
else
|
||||
bMatched = true;
|
||||
bMatched = true;
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
}
|
||||
|
||||
|
@ -78,13 +78,6 @@ static bool CheckPositive(
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool CheckNegative(
|
||||
struct dm_odm_t *pDM_Odm, const u32 Condition1, const u32 Condition2
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* RadioA.TXT
|
||||
******************************************************************************/
|
||||
@ -245,10 +238,7 @@ void ODM_ReadAndConfig_MP_8723B_RadioA(struct dm_odm_t *pDM_Odm)
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
} else {
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
if (!CheckNegative(pDM_Odm, v1, v2))
|
||||
bMatched = false;
|
||||
else
|
||||
bMatched = true;
|
||||
bMatched = true;
|
||||
READ_NEXT_PAIR(v1, v2, i);
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@
|
||||
|
||||
/* Remove DIG by Yuchen */
|
||||
|
||||
/* Remoce BB power saving by Yuchn */
|
||||
/* Remove BB power saving by Yuchn */
|
||||
|
||||
/* Remove DIG by yuchen */
|
||||
|
||||
@ -878,7 +878,7 @@ struct dm_odm_t { /* DM_Out_Source_Dynamic_Mechanism_Structure */
|
||||
struct odm_mac_status_info *pMacInfo;
|
||||
/* MAC_INFO_88E MacInfo; */
|
||||
|
||||
/* Different Team independt structure?? */
|
||||
/* Different Team independent structure?? */
|
||||
|
||||
/* */
|
||||
/* TX_RTP_CMN TX_retrpo; */
|
||||
|
@ -700,7 +700,7 @@ void rtl8723b_download_rsvd_page(struct adapter *padapter, u8 mstatus)
|
||||
rtw_write8(padapter, REG_BCN_CTRL, val8);
|
||||
|
||||
/* To make sure that if there exists an adapter which would like to send beacon. */
|
||||
/* If exists, the origianl value of 0x422[6] will be 1, we should check this to */
|
||||
/* If exists, the original value of 0x422[6] will be 1, we should check this to */
|
||||
/* prevent from setting 0x422[6] to 0 after download reserved page, or it will cause */
|
||||
/* the beacon cannot be sent by HW. */
|
||||
/* 2010.06.23. Added by tynli. */
|
||||
@ -964,7 +964,7 @@ void rtl8723b_download_BTCoex_AP_mode_rsvd_page(struct adapter *padapter)
|
||||
rtw_write8(padapter, REG_BCN_CTRL, val8);
|
||||
|
||||
/* To make sure that if there exists an adapter which would like to send beacon. */
|
||||
/* If exists, the origianl value of 0x422[6] will be 1, we should check this to */
|
||||
/* If exists, the original value of 0x422[6] will be 1, we should check this to */
|
||||
/* prevent from setting 0x422[6] to 0 after download reserved page, or it will cause */
|
||||
/* the beacon cannot be sent by HW. */
|
||||
/* 2010.06.23. Added by tynli. */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -49,8 +49,6 @@
|
||||
/*---------------------------------------------*/
|
||||
/* define the base address of each block */
|
||||
#define PWR_BASEADDR_MAC 0x00
|
||||
#define PWR_BASEADDR_USB 0x01
|
||||
#define PWR_BASEADDR_PCIE 0x02
|
||||
#define PWR_BASEADDR_SDIO 0x03
|
||||
|
||||
/*---------------------------------------------*/
|
||||
@ -64,21 +62,12 @@
|
||||
/*---------------------------------------------*/
|
||||
/* 3 The value of fab_msk: 4 bits */
|
||||
/*---------------------------------------------*/
|
||||
#define PWR_FAB_TSMC_MSK BIT(0)
|
||||
#define PWR_FAB_UMC_MSK BIT(1)
|
||||
#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
|
||||
|
||||
/*---------------------------------------------*/
|
||||
/* 3 The value of cut_msk: 8 bits */
|
||||
/*---------------------------------------------*/
|
||||
#define PWR_CUT_TESTCHIP_MSK BIT(0)
|
||||
#define PWR_CUT_A_MSK BIT(1)
|
||||
#define PWR_CUT_B_MSK BIT(2)
|
||||
#define PWR_CUT_C_MSK BIT(3)
|
||||
#define PWR_CUT_D_MSK BIT(4)
|
||||
#define PWR_CUT_E_MSK BIT(5)
|
||||
#define PWR_CUT_F_MSK BIT(6)
|
||||
#define PWR_CUT_G_MSK BIT(7)
|
||||
#define PWR_CUT_ALL_MSK 0xFF
|
||||
|
||||
|
||||
|
@ -490,7 +490,6 @@ static inline u8 *myid(struct eeprom_priv *peepriv)
|
||||
}
|
||||
|
||||
/* HCI Related header file */
|
||||
#include <sdio_osintf.h>
|
||||
#include <sdio_ops.h>
|
||||
#include <sdio_hal.h>
|
||||
|
||||
|
@ -9,86 +9,10 @@
|
||||
|
||||
#define H2C_RSVDPAGE_LOC_LEN 5
|
||||
#define H2C_MEDIA_STATUS_RPT_LEN 3
|
||||
#define H2C_KEEP_ALIVE_CTRL_LEN 2
|
||||
#define H2C_DISCON_DECISION_LEN 3
|
||||
#define H2C_AP_OFFLOAD_LEN 3
|
||||
#define H2C_AP_WOW_GPIO_CTRL_LEN 4
|
||||
#define H2C_AP_PS_LEN 2
|
||||
#define H2C_PWRMODE_LEN 7
|
||||
#define H2C_PSTUNEPARAM_LEN 4
|
||||
#define H2C_MACID_CFG_LEN 7
|
||||
#define H2C_BTMP_OPER_LEN 4
|
||||
#define H2C_WOWLAN_LEN 4
|
||||
#define H2C_REMOTE_WAKE_CTRL_LEN 3
|
||||
#define H2C_AOAC_GLOBAL_INFO_LEN 2
|
||||
#define H2C_AOAC_RSVDPAGE_LOC_LEN 7
|
||||
#define H2C_SCAN_OFFLOAD_CTRL_LEN 4
|
||||
#define H2C_BT_FW_PATCH_LEN 6
|
||||
#define H2C_RSSI_SETTING_LEN 4
|
||||
#define H2C_AP_REQ_TXRPT_LEN 2
|
||||
#define H2C_FORCE_BT_TXPWR_LEN 3
|
||||
#define H2C_BCN_RSVDPAGE_LEN 5
|
||||
#define H2C_PROBERSP_RSVDPAGE_LEN 5
|
||||
|
||||
/* _RSVDPAGE_LOC_CMD_0x00 */
|
||||
#define SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
|
||||
#define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+1, 0, 8, __Value)
|
||||
#define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
|
||||
#define SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 0, 8, __Value)
|
||||
#define SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__pH2CCmd, __Value)SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+4, 0, 8, __Value)
|
||||
|
||||
/* _MEDIA_STATUS_RPT_PARM_CMD_0x01 */
|
||||
#define SET_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
|
||||
#define SET_H2CCMD_MSRRPT_PARM_MACID_IND(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
|
||||
#define SET_H2CCMD_MSRRPT_PARM_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+1, 0, 8, __Value)
|
||||
#define SET_H2CCMD_MSRRPT_PARM_MACID_END(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+2, 0, 8, __Value)
|
||||
|
||||
/* _KEEP_ALIVE_CMD_0x03 */
|
||||
#define SET_H2CCMD_KEEPALIVE_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
|
||||
#define SET_H2CCMD_KEEPALIVE_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
|
||||
#define SET_H2CCMD_KEEPALIVE_PARM_PKT_TYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
|
||||
#define SET_H2CCMD_KEEPALIVE_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+1, 0, 8, __Value)
|
||||
|
||||
/* _DISCONNECT_DECISION_CMD_0x04 */
|
||||
#define SET_H2CCMD_DISCONDECISION_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
|
||||
#define SET_H2CCMD_DISCONDECISION_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
|
||||
#define SET_H2CCMD_DISCONDECISION_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+1, 0, 8, __Value)
|
||||
#define SET_H2CCMD_DISCONDECISION_PARM_TRY_PKT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+2, 0, 8, __Value)
|
||||
|
||||
/* _WoWLAN PARAM_CMD_0x80 */
|
||||
#define SET_H2CCMD_WOWLAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_ALL_PKT_DROP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_GPIO_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_REKEY_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 6, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_GPIONUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 7, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 7, 1, __Value)
|
||||
#define SET_H2CCMD_WOWLAN_GPIO_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
|
||||
/* define SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 1, __Value) */
|
||||
#define SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 0, 8, __Value)
|
||||
|
||||
/* _REMOTE_WAKEUP_CMD_0x81 */
|
||||
#define SET_H2CCMD_REMOTE_WAKECTRL_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
|
||||
#define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
|
||||
#define SET_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
|
||||
#define SET_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value)
|
||||
#define SET_H2CCMD_REMOTE_WAKE_CTRL_NLO_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
|
||||
#define SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
|
||||
#define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 1, __Value)
|
||||
|
||||
/* AOAC_GLOBAL_INFO_0x82 */
|
||||
#define SET_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
|
||||
#define SET_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+1, 0, 8, __Value)
|
||||
|
||||
/* AOAC_RSVDPAGE_LOC_0x83 */
|
||||
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd), 0, 8, __Value)
|
||||
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+1, 0, 8, __Value)
|
||||
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
|
||||
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 0, 8, __Value)
|
||||
#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+4, 0, 8, __Value)
|
||||
|
||||
/* */
|
||||
/* Structure -------------------------------------------------- */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,69 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef __INC_HAL8723BPHYREG_H__
|
||||
#define __INC_HAL8723BPHYREG_H__
|
||||
|
||||
#include <Hal8192CPhyReg.h>
|
||||
|
||||
/* BB Register Definition */
|
||||
/* */
|
||||
/* 4. Page9(0x900) */
|
||||
/* */
|
||||
#define rDPDT_control 0x92c
|
||||
#define rfe_ctrl_anta_src 0x930
|
||||
#define rS0S1_PathSwitch 0x948
|
||||
#define AGC_table_select 0xb2c
|
||||
|
||||
/* */
|
||||
/* PageB(0xB00) */
|
||||
/* */
|
||||
#define rPdp_AntA 0xb00
|
||||
#define rPdp_AntA_4 0xb04
|
||||
#define rPdp_AntA_8 0xb08
|
||||
#define rPdp_AntA_C 0xb0c
|
||||
#define rPdp_AntA_10 0xb10
|
||||
#define rPdp_AntA_14 0xb14
|
||||
#define rPdp_AntA_18 0xb18
|
||||
#define rPdp_AntA_1C 0xb1c
|
||||
#define rPdp_AntA_20 0xb20
|
||||
#define rPdp_AntA_24 0xb24
|
||||
|
||||
#define rConfig_Pmpd_AntA 0xb28
|
||||
#define rConfig_ram64x16 0xb2c
|
||||
|
||||
#define rBndA 0xb30
|
||||
#define rHssiPar 0xb34
|
||||
|
||||
#define rConfig_AntA 0xb68
|
||||
#define rConfig_AntB 0xb6c
|
||||
|
||||
#define rPdp_AntB 0xb70
|
||||
#define rPdp_AntB_4 0xb74
|
||||
#define rPdp_AntB_8 0xb78
|
||||
#define rPdp_AntB_C 0xb7c
|
||||
#define rPdp_AntB_10 0xb80
|
||||
#define rPdp_AntB_14 0xb84
|
||||
#define rPdp_AntB_18 0xb88
|
||||
#define rPdp_AntB_1C 0xb8c
|
||||
#define rPdp_AntB_20 0xb90
|
||||
#define rPdp_AntB_24 0xb94
|
||||
|
||||
#define rConfig_Pmpd_AntB 0xb98
|
||||
|
||||
#define rBndB 0xba0
|
||||
|
||||
#define rAPK 0xbd8
|
||||
#define rPm_Rx0_AntA 0xbdc
|
||||
#define rPm_Rx1_AntA 0xbe0
|
||||
#define rPm_Rx2_AntA 0xbe4
|
||||
#define rPm_Rx3_AntA 0xbe8
|
||||
#define rPm_Rx0_AntB 0xbec
|
||||
#define rPm_Rx1_AntB 0xbf0
|
||||
#define rPm_Rx2_AntB 0xbf4
|
||||
#define rPm_Rx3_AntB 0xbf8
|
||||
|
||||
#endif
|
@ -28,9 +28,7 @@
|
||||
#define RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS 26
|
||||
#define RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS 15
|
||||
#define RTL8723B_TRANS_CARDEMU_TO_SUS_STEPS 15
|
||||
#define RTL8723B_TRANS_SUS_TO_CARDEMU_STEPS 15
|
||||
#define RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS 15
|
||||
#define RTL8723B_TRANS_PDN_TO_CARDEMU_STEPS 15
|
||||
#define RTL8723B_TRANS_ACT_TO_LPS_STEPS 15
|
||||
#define RTL8723B_TRANS_LPS_TO_ACT_STEPS 15
|
||||
#define RTL8723B_TRANS_ACT_TO_SWLPS_STEPS 22
|
||||
@ -128,11 +126,6 @@
|
||||
{0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/
|
||||
|
||||
#define RTL8723B_TRANS_PDN_TO_CARDEMU \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/
|
||||
|
||||
#define RTL8723B_TRANS_ACT_TO_LPS \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include "rtl8723b_cmd.h"
|
||||
#include "rtw_mp.h"
|
||||
#include "hal_pwr_seq.h"
|
||||
#include "hal_phy_reg_8723b.h"
|
||||
#include "Hal8192CPhyReg.h"
|
||||
#include "hal_phy_cfg.h"
|
||||
|
||||
/* */
|
||||
|
@ -7,19 +7,6 @@
|
||||
#ifndef __RTW_EFUSE_H__
|
||||
#define __RTW_EFUSE_H__
|
||||
|
||||
|
||||
#define EFUSE_ERROE_HANDLE 1
|
||||
|
||||
#define PG_STATE_HEADER 0x01
|
||||
#define PG_STATE_WORD_0 0x02
|
||||
#define PG_STATE_WORD_1 0x04
|
||||
#define PG_STATE_WORD_2 0x08
|
||||
#define PG_STATE_WORD_3 0x10
|
||||
#define PG_STATE_DATA 0x20
|
||||
|
||||
#define PG_SWBYTE_H 0x01
|
||||
#define PG_SWBYTE_L 0x02
|
||||
|
||||
#define PGPKT_DATA_SIZE 8
|
||||
|
||||
#define EFUSE_WIFI 0
|
||||
|
@ -63,43 +63,21 @@ enum {
|
||||
|
||||
#define LDPC_HT_ENABLE_RX BIT0
|
||||
#define LDPC_HT_ENABLE_TX BIT1
|
||||
#define LDPC_HT_TEST_TX_ENABLE BIT2
|
||||
#define LDPC_HT_CAP_TX BIT3
|
||||
|
||||
#define STBC_HT_ENABLE_RX BIT0
|
||||
#define STBC_HT_ENABLE_TX BIT1
|
||||
#define STBC_HT_TEST_TX_ENABLE BIT2
|
||||
#define STBC_HT_CAP_TX BIT3
|
||||
|
||||
#define BEAMFORMING_HT_BEAMFORMER_ENABLE BIT0 /* Declare our NIC supports beamformer */
|
||||
#define BEAMFORMING_HT_BEAMFORMEE_ENABLE BIT1 /* Declare our NIC supports beamformee */
|
||||
#define BEAMFORMING_HT_BEAMFORMER_TEST BIT2 /* Transmiting Beamforming no matter the target supports it or not */
|
||||
|
||||
/* */
|
||||
/* The HT Control field */
|
||||
/* */
|
||||
#define SET_HT_CTRL_CSI_STEERING(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 6, 2, _val)
|
||||
#define SET_HT_CTRL_NDP_ANNOUNCEMENT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+3, 0, 1, _val)
|
||||
#define GET_HT_CTRL_NDP_ANNOUNCEMENT(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+3, 0, 1)
|
||||
|
||||
/* 20/40 BSS Coexist */
|
||||
#define SET_EXT_CAPABILITY_ELE_BSS_COEXIST(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 0, 1, _val)
|
||||
#define GET_EXT_CAPABILITY_ELE_BSS_COEXIST(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 0, 1)
|
||||
|
||||
|
||||
#define GET_HT_CAPABILITY_ELE_LDPC_CAP(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 0, 1)
|
||||
#define GET_HT_CAPABILITY_ELE_TX_STBC(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 7, 1)
|
||||
|
||||
#define GET_HT_CAPABILITY_ELE_RX_STBC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 0, 2)
|
||||
|
||||
/* TXBF Capabilities */
|
||||
#define SET_HT_CAP_TXBF_RECEIVE_NDP_CAP(_pEleStart, _val) SET_BITS_TO_LE_4BYTE(((u8 *)(_pEleStart))+21, 3, 1, ((u8)_val))
|
||||
#define SET_HT_CAP_TXBF_TRANSMIT_NDP_CAP(_pEleStart, _val) SET_BITS_TO_LE_4BYTE(((u8 *)(_pEleStart))+21, 4, 1, ((u8)_val))
|
||||
#define SET_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP(_pEleStart, _val) SET_BITS_TO_LE_4BYTE(((u8 *)(_pEleStart))+21, 10, 1, ((u8)_val))
|
||||
#define SET_HT_CAP_TXBF_EXPLICIT_COMP_FEEDBACK_CAP(_pEleStart, _val) SET_BITS_TO_LE_4BYTE(((u8 *)(_pEleStart))+21, 15, 2, ((u8)_val))
|
||||
#define SET_HT_CAP_TXBF_COMP_STEERING_NUM_ANTENNAS(_pEleStart, _val) SET_BITS_TO_LE_4BYTE(((u8 *)(_pEleStart))+21, 23, 2, ((u8)_val))
|
||||
|
||||
#define GET_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart)+21, 10, 1)
|
||||
#define GET_HT_CAP_TXBF_EXPLICIT_COMP_FEEDBACK_CAP(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart)+21, 15, 2)
|
||||
|
||||
#endif /* _RTL871X_HT_H_ */
|
||||
|
@ -8,70 +8,13 @@
|
||||
#ifndef _RTW_IO_H_
|
||||
#define _RTW_IO_H_
|
||||
|
||||
#define NUM_IOREQ 8
|
||||
|
||||
#define MAX_PROT_SZ (64-16)
|
||||
|
||||
#define _IOREADY 0
|
||||
#define _IO_WAIT_COMPLETE 1
|
||||
#define _IO_WAIT_RSP 2
|
||||
|
||||
/* IO COMMAND TYPE */
|
||||
#define _IOSZ_MASK_ (0x7F)
|
||||
#define _IO_WRITE_ BIT(7)
|
||||
#define _IO_FIXED_ BIT(8)
|
||||
#define _IO_BURST_ BIT(9)
|
||||
#define _IO_BYTE_ BIT(10)
|
||||
#define _IO_HW_ BIT(11)
|
||||
#define _IO_WORD_ BIT(12)
|
||||
#define _IO_SYNC_ BIT(13)
|
||||
#define _IO_CMDMASK_ (0x1F80)
|
||||
|
||||
|
||||
/*
|
||||
For prompt mode accessing, caller shall free io_req
|
||||
Otherwise, io_handler will free io_req
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* IO STATUS TYPE */
|
||||
#define _IO_ERR_ BIT(2)
|
||||
#define _IO_SUCCESS_ BIT(1)
|
||||
#define _IO_DONE_ BIT(0)
|
||||
|
||||
|
||||
#define IO_RD32 (_IO_SYNC_ | _IO_WORD_)
|
||||
#define IO_RD16 (_IO_SYNC_ | _IO_HW_)
|
||||
#define IO_RD8 (_IO_SYNC_ | _IO_BYTE_)
|
||||
|
||||
#define IO_RD32_ASYNC (_IO_WORD_)
|
||||
#define IO_RD16_ASYNC (_IO_HW_)
|
||||
#define IO_RD8_ASYNC (_IO_BYTE_)
|
||||
|
||||
#define IO_WR32 (_IO_WRITE_ | _IO_SYNC_ | _IO_WORD_)
|
||||
#define IO_WR16 (_IO_WRITE_ | _IO_SYNC_ | _IO_HW_)
|
||||
#define IO_WR8 (_IO_WRITE_ | _IO_SYNC_ | _IO_BYTE_)
|
||||
|
||||
#define IO_WR32_ASYNC (_IO_WRITE_ | _IO_WORD_)
|
||||
#define IO_WR16_ASYNC (_IO_WRITE_ | _IO_HW_)
|
||||
#define IO_WR8_ASYNC (_IO_WRITE_ | _IO_BYTE_)
|
||||
|
||||
/*
|
||||
|
||||
Only Sync. burst accessing is provided.
|
||||
|
||||
*/
|
||||
|
||||
#define IO_WR_BURST(x) (_IO_WRITE_ | _IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_))
|
||||
#define IO_RD_BURST(x) (_IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_))
|
||||
|
||||
|
||||
|
||||
/* below is for the intf_option bit defition... */
|
||||
|
||||
#define _INTF_ASYNC_ BIT(0) /* support async io */
|
||||
|
||||
struct intf_priv;
|
||||
struct intf_hdl;
|
||||
struct io_queue;
|
||||
|
@ -26,7 +26,6 @@
|
||||
|
||||
#define WIFI_NULL_STATE 0x00000000
|
||||
#define WIFI_ASOC_STATE 0x00000001 /* Under Linked state... */
|
||||
#define WIFI_REASOC_STATE 0x00000002
|
||||
#define WIFI_SLEEP_STATE 0x00000004
|
||||
#define WIFI_STATION_STATE 0x00000008
|
||||
#define WIFI_AP_STATE 0x00000010
|
||||
@ -35,34 +34,11 @@
|
||||
#define WIFI_UNDER_LINKING 0x00000080
|
||||
|
||||
#define WIFI_UNDER_WPS 0x00000100
|
||||
/* define WIFI_UNDER_CMD 0x00000200 */
|
||||
/* define WIFI_UNDER_P2P 0x00000400 */
|
||||
#define WIFI_STA_ALIVE_CHK_STATE 0x00000400
|
||||
#define WIFI_SITE_MONITOR 0x00000800 /* to indicate the station is under site surveying */
|
||||
#ifdef WDS
|
||||
#define WIFI_WDS 0x00001000
|
||||
#define WIFI_WDS_RX_BEACON 0x00002000 /* already rx WDS AP beacon */
|
||||
#endif
|
||||
#ifdef AUTO_CONFIG
|
||||
#define WIFI_AUTOCONF 0x00004000
|
||||
#define WIFI_AUTOCONF_IND 0x00008000
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ========== P2P Section Start ===============
|
||||
#define WIFI_P2P_LISTEN_STATE 0x00010000
|
||||
#define WIFI_P2P_GROUP_FORMATION_STATE 0x00020000
|
||||
========== P2P Section End ===============
|
||||
*/
|
||||
|
||||
/* ifdef UNDER_MPTEST */
|
||||
#define WIFI_MP_STATE 0x00010000
|
||||
#define WIFI_MP_CTX_BACKGROUND 0x00020000 /* in continuous tx background */
|
||||
#define WIFI_MP_CTX_ST 0x00040000 /* in continuous tx with single-tone */
|
||||
#define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 /* pending in continuous tx background due to out of skb */
|
||||
#define WIFI_MP_CTX_CCK_HW 0x00100000 /* in continuous tx */
|
||||
#define WIFI_MP_CTX_CCK_CS 0x00200000 /* in continuous tx with carrier suppression */
|
||||
#define WIFI_MP_LPBK_STATE 0x00400000
|
||||
/* endif */
|
||||
|
||||
/* define _FW_UNDER_CMD WIFI_UNDER_CMD */
|
||||
@ -94,8 +70,6 @@ enum {
|
||||
GHZ_MAX,
|
||||
};
|
||||
|
||||
#define rtw_band_valid(band) ((band) >= GHZ24_50 && (band) < GHZ_MAX)
|
||||
|
||||
/*
|
||||
|
||||
there are several "locks" in mlme_priv,
|
||||
@ -115,10 +89,6 @@ MUST always be first lock xmit_priv.lock and then call any queue functions
|
||||
which take __queue.lock.
|
||||
*/
|
||||
|
||||
|
||||
#define traffic_threshold 10
|
||||
#define traffic_scan_period 500
|
||||
|
||||
struct sitesurvey_ctrl {
|
||||
u64 last_tx_pkts;
|
||||
uint last_rx_pkts;
|
||||
@ -141,139 +111,6 @@ struct rt_link_detect_t {
|
||||
u32 LowPowerTransitionCount;
|
||||
};
|
||||
|
||||
struct profile_info {
|
||||
u8 ssidlen;
|
||||
u8 ssid[WLAN_SSID_MAXLEN];
|
||||
u8 peermac[ETH_ALEN];
|
||||
};
|
||||
|
||||
struct tx_invite_req_info {
|
||||
u8 token;
|
||||
u8 benable;
|
||||
u8 go_ssid[WLAN_SSID_MAXLEN];
|
||||
u8 ssidlen;
|
||||
u8 go_bssid[ETH_ALEN];
|
||||
u8 peer_macaddr[ETH_ALEN];
|
||||
u8 operating_ch; /* This information will be set by using the p2p_set op_ch =x */
|
||||
u8 peer_ch; /* The listen channel for peer P2P device */
|
||||
|
||||
};
|
||||
|
||||
struct tx_invite_resp_info {
|
||||
u8 token; /* Used to record the dialog token of p2p invitation request frame. */
|
||||
};
|
||||
|
||||
struct tx_provdisc_req_info {
|
||||
u16 wps_config_method_request; /* Used when sending the provisioning request frame */
|
||||
u16 peer_channel_num[2]; /* The channel number which the receiver stands. */
|
||||
struct ndis_802_11_ssid ssid;
|
||||
u8 peerDevAddr[ETH_ALEN]; /* Peer device address */
|
||||
u8 peerIFAddr[ETH_ALEN]; /* Peer interface address */
|
||||
u8 benable; /* This provision discovery request frame is trigger to send or not */
|
||||
};
|
||||
|
||||
struct rx_provdisc_req_info { /* When peer device issue prov_disc_req first, we should store the following information */
|
||||
u8 peerDevAddr[ETH_ALEN]; /* Peer device address */
|
||||
u8 strconfig_method_desc_of_prov_disc_req[4]; /* description for the config method located in the provisioning discovery request frame. */
|
||||
/* The UI must know this information to know which config method the remote p2p device is requiring. */
|
||||
};
|
||||
|
||||
struct tx_nego_req_info {
|
||||
u16 peer_channel_num[2]; /* The channel number which the receiver stands. */
|
||||
u8 peerDevAddr[ETH_ALEN]; /* Peer device address */
|
||||
u8 benable; /* This negotiation request frame is trigger to send or not */
|
||||
};
|
||||
|
||||
struct group_id_info {
|
||||
u8 go_device_addr[ETH_ALEN]; /* The GO's device address of this P2P group */
|
||||
u8 ssid[WLAN_SSID_MAXLEN]; /* The SSID of this P2P group */
|
||||
};
|
||||
|
||||
struct scan_limit_info {
|
||||
u8 scan_op_ch_only; /* When this flag is set, the driver should just scan the operation channel */
|
||||
u8 operation_ch[2]; /* Store the operation channel of invitation request frame */
|
||||
};
|
||||
|
||||
struct wifidirect_info {
|
||||
struct adapter *padapter;
|
||||
struct timer_list find_phase_timer;
|
||||
struct timer_list restore_p2p_state_timer;
|
||||
|
||||
/* Used to do the scanning. After confirming the peer is availalble, the driver transmits the P2P frame to peer. */
|
||||
struct timer_list pre_tx_scan_timer;
|
||||
struct timer_list reset_ch_sitesurvey;
|
||||
struct timer_list reset_ch_sitesurvey2; /* Just for resetting the scan limit function by using p2p nego */
|
||||
struct tx_provdisc_req_info tx_prov_disc_info;
|
||||
struct rx_provdisc_req_info rx_prov_disc_info;
|
||||
struct tx_invite_req_info invitereq_info;
|
||||
struct profile_info profileinfo[P2P_MAX_PERSISTENT_GROUP_NUM]; /* Store the profile information of persistent group */
|
||||
struct tx_invite_resp_info inviteresp_info;
|
||||
struct tx_nego_req_info nego_req_info;
|
||||
struct group_id_info groupid_info; /* Store the group id information when doing the group negotiation handshake. */
|
||||
struct scan_limit_info rx_invitereq_info; /* Used for get the limit scan channel from the Invitation procedure */
|
||||
struct scan_limit_info p2p_info; /* Used for get the limit scan channel from the P2P negotiation handshake */
|
||||
enum p2p_role role;
|
||||
enum p2p_state pre_p2p_state;
|
||||
enum p2p_state p2p_state;
|
||||
u8 device_addr[ETH_ALEN]; /* The device address should be the mac address of this device. */
|
||||
u8 interface_addr[ETH_ALEN];
|
||||
u8 social_chan[4];
|
||||
u8 listen_channel;
|
||||
u8 operating_channel;
|
||||
u8 listen_dwell; /* This value should be between 1 and 3 */
|
||||
u8 support_rate[8];
|
||||
u8 p2p_wildcard_ssid[P2P_WILDCARD_SSID_LEN];
|
||||
u8 intent; /* should only include the intent value. */
|
||||
u8 p2p_peer_interface_addr[ETH_ALEN];
|
||||
u8 p2p_peer_device_addr[ETH_ALEN];
|
||||
u8 peer_intent; /* Included the intent value and tie breaker value. */
|
||||
u8 device_name[WPS_MAX_DEVICE_NAME_LEN]; /* Device name for displaying on searching device screen */
|
||||
u8 device_name_len;
|
||||
u8 profileindex; /* Used to point to the index of profileinfo array */
|
||||
u8 peer_operating_ch;
|
||||
u8 find_phase_state_exchange_cnt;
|
||||
u16 device_password_id_for_nego; /* The device password ID for group negotiation */
|
||||
u8 negotiation_dialog_token;
|
||||
u8 nego_ssid[WLAN_SSID_MAXLEN]; /* SSID information for group negotiation */
|
||||
u8 nego_ssidlen;
|
||||
u8 p2p_group_ssid[WLAN_SSID_MAXLEN];
|
||||
u8 p2p_group_ssid_len;
|
||||
u8 persistent_supported; /* Flag to know the persistent function should be supported or not. */
|
||||
/* In the Sigma test, the Sigma will provide this enable from the sta_set_p2p CAPI. */
|
||||
/* 0: disable */
|
||||
/* 1: enable */
|
||||
u8 session_available; /* Flag to set the WFD session available to enable or disable "by Sigma" */
|
||||
/* In the Sigma test, the Sigma will disable the session available by using the sta_preset CAPI. */
|
||||
/* 0: disable */
|
||||
/* 1: enable */
|
||||
|
||||
u8 wfd_tdls_enable; /* Flag to enable or disable the TDLS by WFD Sigma */
|
||||
/* 0: disable */
|
||||
/* 1: enable */
|
||||
u8 wfd_tdls_weaksec; /* Flag to enable or disable the weak security function for TDLS by WFD Sigma */
|
||||
/* 0: disable */
|
||||
/* In this case, the driver can't issue the tdsl setup request frame. */
|
||||
/* 1: enable */
|
||||
/* In this case, the driver can issue the tdls setup request frame */
|
||||
/* even the current security is weak security. */
|
||||
|
||||
enum p2p_wpsinfo ui_got_wps_info; /* This field will store the WPS value (PIN value or PBC) that UI had got from the user. */
|
||||
u16 supported_wps_cm; /* This field describes the WPS config method which this driver supported. */
|
||||
/* The value should be the combination of config method defined in page104 of WPS v2.0 spec. */
|
||||
u8 external_uuid; /* UUID flag */
|
||||
u8 uuid[16]; /* UUID */
|
||||
uint channel_list_attr_len; /* This field will contain the length of body of P2P Channel List attribute of group negotitation response frame. */
|
||||
u8 channel_list_attr[100]; /* This field will contain the body of P2P Channel List attribute of group negotitation response frame. */
|
||||
/* We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame. */
|
||||
u8 driver_interface; /* Indicate DRIVER_WEXT or DRIVER_CFG80211 */
|
||||
};
|
||||
|
||||
struct tdls_ss_record { /* signal strength record */
|
||||
u8 macaddr[ETH_ALEN];
|
||||
u8 rx_pwd_ba11;
|
||||
u8 is_tdls_sta; /* true: direct link sta, false: else */
|
||||
};
|
||||
|
||||
/* used for mlme_priv.roam_flags */
|
||||
enum {
|
||||
RTW_ROAM_ON_EXPIRED = BIT0,
|
||||
@ -408,11 +245,6 @@ struct mlme_priv {
|
||||
unsigned long timeBcnInfoChkStart;
|
||||
};
|
||||
|
||||
#define rtw_mlme_set_auto_scan_int(adapter, ms) \
|
||||
do { \
|
||||
adapter->mlmepriv.auto_scan_int_ms = ms; \
|
||||
while (0)
|
||||
|
||||
void rtw_mlme_reset_auto_scan_int(struct adapter *adapter);
|
||||
|
||||
struct hostapd_priv {
|
||||
@ -556,20 +388,6 @@ int is_same_network(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst, u8 fea
|
||||
|
||||
#define rtw_roam_flags(adapter) ((adapter)->mlmepriv.roam_flags)
|
||||
#define rtw_chk_roam_flags(adapter, flags) ((adapter)->mlmepriv.roam_flags & flags)
|
||||
#define rtw_clr_roam_flags(adapter, flags) \
|
||||
do { \
|
||||
((adapter)->mlmepriv.roam_flags &= ~flags); \
|
||||
} while (0)
|
||||
|
||||
#define rtw_set_roam_flags(adapter, flags) \
|
||||
do { \
|
||||
((adapter)->mlmepriv.roam_flags |= flags); \
|
||||
} while (0)
|
||||
|
||||
#define rtw_assign_roam_flags(adapter, flags) \
|
||||
do { \
|
||||
((adapter)->mlmepriv.roam_flags = flags); \
|
||||
} while (0)
|
||||
|
||||
void _rtw_roaming(struct adapter *adapter, struct wlan_network *tgt_network);
|
||||
void rtw_roaming(struct adapter *adapter, struct wlan_network *tgt_network);
|
||||
|
@ -20,50 +20,18 @@
|
||||
/* define DISCONNECT_TO (3000) */
|
||||
#define ADDBA_TO (2000)
|
||||
|
||||
#define LINKED_TO (1) /* unit:2 sec, 1x2 =2 sec */
|
||||
|
||||
#define REAUTH_LIMIT (4)
|
||||
#define REASSOC_LIMIT (4)
|
||||
#define READDBA_LIMIT (2)
|
||||
|
||||
#define ROAMING_LIMIT 8
|
||||
/* define IOCMD_REG0 0x10250370 */
|
||||
/* define IOCMD_REG1 0x10250374 */
|
||||
/* define IOCMD_REG2 0x10250378 */
|
||||
|
||||
/* define FW_DYNAMIC_FUN_SWITCH 0x10250364 */
|
||||
|
||||
/* define WRITE_BB_CMD 0xF0000001 */
|
||||
/* define SET_CHANNEL_CMD 0xF3000000 */
|
||||
/* define UPDATE_RA_CMD 0xFD0000A2 */
|
||||
|
||||
#define DYNAMIC_FUNC_DISABLE (0x0)
|
||||
|
||||
/* ====== ODM_ABILITY_E ======== */
|
||||
/* BB ODM section BIT 0-15 */
|
||||
#define DYNAMIC_BB_DIG BIT0 /* ODM_BB_DIG */
|
||||
#define DYNAMIC_BB_RA_MASK BIT1 /* ODM_BB_RA_MASK */
|
||||
#define DYNAMIC_BB_DYNAMIC_TXPWR BIT2 /* ODM_BB_DYNAMIC_TXPWR */
|
||||
#define DYNAMIC_BB_BB_FA_CNT BIT3 /* ODM_BB_FA_CNT */
|
||||
#define DYNAMIC_BB_RSSI_MONITOR BIT4 /* ODM_BB_RSSI_MONITOR */
|
||||
#define DYNAMIC_BB_CCK_PD BIT5 /* ODM_BB_CCK_PD */
|
||||
#define DYNAMIC_BB_ANT_DIV BIT6 /* ODM_BB_ANT_DIV */
|
||||
#define DYNAMIC_BB_PWR_SAVE BIT7 /* ODM_BB_PWR_SAVE */
|
||||
#define DYNAMIC_BB_PWR_TRAIN BIT8 /* ODM_BB_PWR_TRAIN */
|
||||
#define DYNAMIC_BB_RATE_ADAPTIVE BIT9 /* ODM_BB_RATE_ADAPTIVE */
|
||||
#define DYNAMIC_BB_PATH_DIV BIT10/* ODM_BB_PATH_DIV */
|
||||
#define DYNAMIC_BB_PSD BIT11/* ODM_BB_PSD */
|
||||
#define DYNAMIC_BB_RXHP BIT12/* ODM_BB_RXHP */
|
||||
#define DYNAMIC_BB_ADAPTIVITY BIT13/* ODM_BB_ADAPTIVITY */
|
||||
#define DYNAMIC_BB_DYNAMIC_ATC BIT14/* ODM_BB_DYNAMIC_ATC */
|
||||
|
||||
/* MAC DM section BIT 16-23 */
|
||||
#define DYNAMIC_MAC_EDCA_TURBO BIT16/* ODM_MAC_EDCA_TURBO */
|
||||
#define DYNAMIC_MAC_EARLY_MODE BIT17/* ODM_MAC_EARLY_MODE */
|
||||
|
||||
/* RF ODM section BIT 24-31 */
|
||||
#define DYNAMIC_RF_TX_PWR_TRACK BIT24/* ODM_RF_TX_PWR_TRACK */
|
||||
#define DYNAMIC_RF_RX_GAIN_TRACK BIT25/* ODM_RF_RX_GAIN_TRACK */
|
||||
#define DYNAMIC_RF_CALIBRATION BIT26/* ODM_RF_CALIBRATION */
|
||||
|
||||
#define DYNAMIC_ALL_FUNC_ENABLE 0xFFFFFFF
|
||||
@ -91,11 +59,6 @@
|
||||
MCS rate definitions
|
||||
*********************************************************/
|
||||
#define MCS_RATE_1R (0x000000ff)
|
||||
#define MCS_RATE_2R (0x0000ffff)
|
||||
#define MCS_RATE_3R (0x00ffffff)
|
||||
#define MCS_RATE_4R (0xffffffff)
|
||||
#define MCS_RATE_2R_13TO15_OFF (0x00001fff)
|
||||
|
||||
|
||||
extern unsigned char RTW_WPA_OUI[];
|
||||
extern unsigned char WMM_OUI[];
|
||||
|
@ -8,7 +8,6 @@
|
||||
#define _RTW_MP_H_
|
||||
|
||||
#define MAX_MP_XMITBUF_SZ 2048
|
||||
#define NR_MP_XMITFRAME 8
|
||||
|
||||
struct mp_xmit_frame {
|
||||
struct list_head list;
|
||||
@ -151,12 +150,6 @@ struct mpt_context {
|
||||
};
|
||||
/* endif */
|
||||
|
||||
/* E-Fuse */
|
||||
#define EFUSE_MAP_SIZE 512
|
||||
|
||||
#define EFUSE_MAX_SIZE 512
|
||||
/* end of E-Fuse */
|
||||
|
||||
/* define RTPRIV_IOCTL_MP (SIOCIWFIRSTPRIV + 0x17) */
|
||||
enum {
|
||||
WRITE_REG = 1,
|
||||
@ -259,33 +252,11 @@ struct mp_priv {
|
||||
u8 *TXradomBuffer;
|
||||
};
|
||||
|
||||
#define LOWER true
|
||||
#define RAISE false
|
||||
|
||||
/* Hardware Registers */
|
||||
#define BB_REG_BASE_ADDR 0x800
|
||||
|
||||
#define MAX_RF_PATH_NUMS RF_PATH_MAX
|
||||
|
||||
extern u8 mpdatarate[NumRates];
|
||||
|
||||
#define MAX_TX_PWR_INDEX_N_MODE 64 /* 0x3F */
|
||||
|
||||
#define RX_PKT_BROADCAST 1
|
||||
#define RX_PKT_DEST_ADDR 2
|
||||
#define RX_PKT_PHY_MATCH 3
|
||||
|
||||
#define Mac_OFDM_OK 0x00000000
|
||||
#define Mac_OFDM_Fail 0x10000000
|
||||
#define Mac_OFDM_FasleAlarm 0x20000000
|
||||
#define Mac_CCK_OK 0x30000000
|
||||
#define Mac_CCK_Fail 0x40000000
|
||||
#define Mac_CCK_FasleAlarm 0x50000000
|
||||
#define Mac_HT_OK 0x60000000
|
||||
#define Mac_HT_Fail 0x70000000
|
||||
#define Mac_HT_FasleAlarm 0x90000000
|
||||
#define Mac_DropPacket 0xA0000000
|
||||
|
||||
#define REG_RF_BB_GAIN_OFFSET 0x7f
|
||||
#define RF_GAIN_OFFSET_MASK 0xfffff
|
||||
|
||||
|
@ -9,25 +9,8 @@
|
||||
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#define FW_PWR0 0
|
||||
#define FW_PWR1 1
|
||||
#define FW_PWR2 2
|
||||
#define FW_PWR3 3
|
||||
|
||||
|
||||
#define HW_PWR0 7
|
||||
#define HW_PWR1 6
|
||||
#define HW_PWR2 2
|
||||
#define HW_PWR3 0
|
||||
#define HW_PWR4 8
|
||||
|
||||
#define FW_PWRMSK 0x7
|
||||
|
||||
|
||||
#define XMIT_ALIVE BIT(0)
|
||||
#define RECV_ALIVE BIT(1)
|
||||
#define CMD_ALIVE BIT(2)
|
||||
#define EVT_ALIVE BIT(3)
|
||||
#define BTCOEX_ALIVE BIT(4)
|
||||
|
||||
|
||||
@ -58,31 +41,17 @@ enum {
|
||||
#define PS_ALL_ON BIT(2)
|
||||
#define PS_ST_ACTIVE BIT(3)
|
||||
|
||||
#define PS_ISR_ENABLE BIT(4)
|
||||
#define PS_IMR_ENABLE BIT(5)
|
||||
#define PS_ACK BIT(6)
|
||||
#define PS_TOGGLE BIT(7)
|
||||
|
||||
#define PS_STATE_MASK (0x0F)
|
||||
#define PS_STATE_HW_MASK (0x07)
|
||||
#define PS_SEQ_MASK (0xc0)
|
||||
|
||||
#define PS_STATE(x) (PS_STATE_MASK & (x))
|
||||
#define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x))
|
||||
#define PS_SEQ(x) (PS_SEQ_MASK & (x))
|
||||
|
||||
#define PS_STATE_S0 (PS_DPS)
|
||||
#define PS_STATE_S1 (PS_LCLK)
|
||||
#define PS_STATE_S2 (PS_RF_OFF)
|
||||
#define PS_STATE_S3 (PS_ALL_ON)
|
||||
#define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON))
|
||||
|
||||
|
||||
#define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON))
|
||||
#define PS_IS_ACTIVE(x) ((x) & (PS_ST_ACTIVE))
|
||||
#define CLR_PS_STATE(x) ((x) = ((x) & (0xF0)))
|
||||
|
||||
|
||||
struct reportpwrstate_parm {
|
||||
unsigned char mode;
|
||||
unsigned char state; /* the CPWM value */
|
||||
@ -91,10 +60,6 @@ struct reportpwrstate_parm {
|
||||
|
||||
#define LPS_DELAY_TIME (1 * HZ) /* 1 sec */
|
||||
|
||||
#define EXE_PWR_NONE 0x01
|
||||
#define EXE_PWR_IPS 0x02
|
||||
#define EXE_PWR_LPS 0x04
|
||||
|
||||
/* RF state. */
|
||||
enum rt_rf_power_state {
|
||||
rf_on, /* RF is on after RFSleep or RFOff */
|
||||
@ -247,9 +212,6 @@ struct pwrctrl_priv {
|
||||
_set_timer(&(pwrctl)->pwr_state_check_timer, (ms)); \
|
||||
} while (0)
|
||||
|
||||
#define rtw_set_pwr_state_check_timer(pwrctl) \
|
||||
_rtw_set_pwr_state_check_timer((pwrctl), (pwrctl)->pwr_state_check_interval)
|
||||
|
||||
extern void rtw_init_pwrctrl_priv(struct adapter *adapter);
|
||||
extern void rtw_free_pwrctrl_priv(struct adapter *adapter);
|
||||
|
||||
|
@ -9,8 +9,6 @@
|
||||
|
||||
#define NR_RECVBUFF (8)
|
||||
|
||||
#define NR_PREALLOC_RECV_SKB (8)
|
||||
|
||||
#define NR_RECVFRAME 256
|
||||
|
||||
#define RXFRAME_ALIGN 8
|
||||
@ -18,21 +16,11 @@
|
||||
|
||||
#define DRVINFO_SZ 4 /* unit is 8bytes */
|
||||
|
||||
#define MAX_RXFRAME_CNT 512
|
||||
#define MAX_RX_NUMBLKS (32)
|
||||
#define RECVFRAME_HDR_ALIGN 128
|
||||
|
||||
|
||||
#define PHY_RSSI_SLID_WIN_MAX 100
|
||||
#define PHY_LINKQUALITY_SLID_WIN_MAX 20
|
||||
|
||||
|
||||
#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
|
||||
|
||||
#define RX_MPDU_QUEUE 0
|
||||
#define RX_CMD_QUEUE 1
|
||||
#define RX_MAX_QUEUE 2
|
||||
|
||||
#define MAX_SUBFRAME_COUNT 64
|
||||
|
||||
#define LLC_HEADER_LENGTH 6
|
||||
@ -178,7 +166,6 @@ struct rx_pkt_attrib {
|
||||
#define RECVBUFF_ALIGN_SZ 8
|
||||
|
||||
#define RXDESC_SIZE 24
|
||||
#define RXDESC_OFFSET RXDESC_SIZE
|
||||
|
||||
struct recv_stat {
|
||||
__le32 rxdw0;
|
||||
@ -191,8 +178,6 @@ struct recv_stat {
|
||||
#endif /* if BUF_DESC_ARCH is defined, rx_buf_desc occupy 4 double words */
|
||||
};
|
||||
|
||||
#define EOR BIT(30)
|
||||
|
||||
/*
|
||||
accesser of recv_priv: rtw_recv_entry(dispatch / passive level); recv_thread(passive) ; returnpkt(dispatch)
|
||||
; halt(passive) ;
|
||||
@ -363,7 +348,6 @@ extern union recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue);
|
||||
extern union recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue); /* get a free recv_frame from pfree_recv_queue */
|
||||
extern int rtw_free_recvframe(union recv_frame *precvframe, struct __queue *pfree_recv_queue);
|
||||
|
||||
#define rtw_dequeue_recvframe(queue) rtw_alloc_recvframe(queue)
|
||||
extern int _rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue);
|
||||
extern int rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue);
|
||||
|
||||
|
@ -22,14 +22,9 @@
|
||||
|
||||
const char *security_type_str(u8 value);
|
||||
|
||||
#define SHA256_MAC_LEN 32
|
||||
#define AES_BLOCK_SIZE 16
|
||||
#define AES_PRIV_SIZE (4 * 44)
|
||||
|
||||
#define RTW_KEK_LEN 16
|
||||
#define RTW_KCK_LEN 16
|
||||
#define RTW_REPLAY_CTR_LEN 8
|
||||
|
||||
enum {
|
||||
ENCRYP_PROTOCOL_OPENSYS, /* open system */
|
||||
ENCRYP_PROTOCOL_WEP, /* WEP */
|
||||
|
@ -35,7 +35,6 @@
|
||||
#define BCN_QUEUE_INX 4
|
||||
#define MGT_QUEUE_INX 5
|
||||
#define HIGH_QUEUE_INX 6
|
||||
#define TXCMD_QUEUE_INX 7
|
||||
|
||||
#define HW_QUEUE_ENTRY 8
|
||||
|
||||
@ -192,16 +191,7 @@ struct pkt_attrib {
|
||||
|
||||
#define NULL_FRAMETAG (0x0)
|
||||
#define DATA_FRAMETAG 0x01
|
||||
#define L2_FRAMETAG 0x02
|
||||
#define MGNT_FRAMETAG 0x03
|
||||
#define AMSDU_FRAMETAG 0x04
|
||||
|
||||
#define EII_FRAMETAG 0x05
|
||||
#define IEEE8023_FRAMETAG 0x06
|
||||
|
||||
#define MP_FRAMETAG 0x07
|
||||
|
||||
#define TXAGG_FRAMETAG 0x08
|
||||
|
||||
enum {
|
||||
XMITBUF_DATA = 0,
|
||||
|
@ -7,10 +7,6 @@
|
||||
#ifndef __SDIO_HAL_H__
|
||||
#define __SDIO_HAL_H__
|
||||
|
||||
|
||||
extern u8 sd_hal_bus_init(struct adapter *padapter);
|
||||
extern u8 sd_hal_bus_deinit(struct adapter *padapter);
|
||||
|
||||
u8 sd_int_isr(struct adapter *padapter);
|
||||
void sd_int_dpc(struct adapter *padapter);
|
||||
void rtw_set_hal_ops(struct adapter *padapter);
|
||||
|
@ -1,16 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef __SDIO_OSINTF_H__
|
||||
#define __SDIO_OSINTF_H__
|
||||
|
||||
|
||||
|
||||
u8 sd_hal_bus_init(struct adapter *padapter);
|
||||
u8 sd_hal_bus_deinit(struct adapter *padapter);
|
||||
void sd_c2h_hdl(struct adapter *padapter);
|
||||
|
||||
#endif
|
@ -222,53 +222,24 @@ struct sta_info {
|
||||
+ sta->sta_stats.rx_ctrl_pkts \
|
||||
+ sta->sta_stats.rx_data_pkts)
|
||||
|
||||
#define sta_last_rx_pkts(sta) \
|
||||
(sta->sta_stats.last_rx_mgnt_pkts \
|
||||
+ sta->sta_stats.last_rx_ctrl_pkts \
|
||||
+ sta->sta_stats.last_rx_data_pkts)
|
||||
|
||||
#define sta_rx_data_pkts(sta) \
|
||||
(sta->sta_stats.rx_data_pkts)
|
||||
|
||||
#define sta_last_rx_data_pkts(sta) \
|
||||
(sta->sta_stats.last_rx_data_pkts)
|
||||
|
||||
#define sta_rx_mgnt_pkts(sta) \
|
||||
(sta->sta_stats.rx_mgnt_pkts)
|
||||
|
||||
#define sta_last_rx_mgnt_pkts(sta) \
|
||||
(sta->sta_stats.last_rx_mgnt_pkts)
|
||||
|
||||
#define sta_rx_beacon_pkts(sta) \
|
||||
(sta->sta_stats.rx_beacon_pkts)
|
||||
|
||||
#define sta_last_rx_beacon_pkts(sta) \
|
||||
(sta->sta_stats.last_rx_beacon_pkts)
|
||||
|
||||
#define sta_rx_probereq_pkts(sta) \
|
||||
(sta->sta_stats.rx_probereq_pkts)
|
||||
|
||||
#define sta_last_rx_probereq_pkts(sta) \
|
||||
(sta->sta_stats.last_rx_probereq_pkts)
|
||||
|
||||
#define sta_rx_probersp_pkts(sta) \
|
||||
(sta->sta_stats.rx_probersp_pkts)
|
||||
|
||||
#define sta_last_rx_probersp_pkts(sta) \
|
||||
(sta->sta_stats.last_rx_probersp_pkts)
|
||||
|
||||
#define sta_rx_probersp_bm_pkts(sta) \
|
||||
(sta->sta_stats.rx_probersp_bm_pkts)
|
||||
|
||||
#define sta_last_rx_probersp_bm_pkts(sta) \
|
||||
(sta->sta_stats.last_rx_probersp_bm_pkts)
|
||||
|
||||
#define sta_rx_probersp_uo_pkts(sta) \
|
||||
(sta->sta_stats.rx_probersp_uo_pkts)
|
||||
|
||||
#define sta_last_rx_probersp_uo_pkts(sta) \
|
||||
(sta->sta_stats.last_rx_probersp_uo_pkts)
|
||||
|
||||
#define sta_update_last_rx_pkts(sta) \
|
||||
do { \
|
||||
sta->sta_stats.last_rx_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \
|
||||
@ -281,21 +252,6 @@ struct sta_info {
|
||||
sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \
|
||||
} while (0)
|
||||
|
||||
#define STA_RX_PKTS_ARG(sta) \
|
||||
sta->sta_stats.rx_mgnt_pkts \
|
||||
, sta->sta_stats.rx_ctrl_pkts \
|
||||
, sta->sta_stats.rx_data_pkts
|
||||
|
||||
#define STA_LAST_RX_PKTS_ARG(sta) \
|
||||
sta->sta_stats.last_rx_mgnt_pkts \
|
||||
, sta->sta_stats.last_rx_ctrl_pkts \
|
||||
, sta->sta_stats.last_rx_data_pkts
|
||||
|
||||
#define STA_RX_PKTS_DIFF_ARG(sta) \
|
||||
sta->sta_stats.rx_mgnt_pkts - sta->sta_stats.last_rx_mgnt_pkts \
|
||||
, sta->sta_stats.rx_ctrl_pkts - sta->sta_stats.last_rx_ctrl_pkts \
|
||||
, sta->sta_stats.rx_data_pkts - sta->sta_stats.last_rx_data_pkts
|
||||
|
||||
#define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)"
|
||||
|
||||
struct sta_priv {
|
||||
|
@ -7,30 +7,11 @@
|
||||
#ifndef _WIFI_H_
|
||||
#define _WIFI_H_
|
||||
|
||||
#define WLAN_ETHHDR_LEN 14
|
||||
#define WLAN_ETHADDR_LEN 6
|
||||
#define WLAN_IEEE_OUI_LEN 3
|
||||
#define WLAN_ADDR_LEN 6
|
||||
#define WLAN_CRC_LEN 4
|
||||
#define WLAN_BSSID_LEN 6
|
||||
#define WLAN_BSS_TS_LEN 8
|
||||
#define WLAN_HDR_A3_LEN 24
|
||||
#define WLAN_HDR_A4_LEN 30
|
||||
#define WLAN_HDR_A3_QOS_LEN 26
|
||||
#define WLAN_HDR_A4_QOS_LEN 32
|
||||
#define WLAN_SSID_MAXLEN 32
|
||||
#define WLAN_DATA_MAXLEN 2312
|
||||
|
||||
#define WLAN_A3_PN_OFFSET 24
|
||||
#define WLAN_A4_PN_OFFSET 30
|
||||
|
||||
#define WLAN_MIN_ETHFRM_LEN 60
|
||||
#define WLAN_MAX_ETHFRM_LEN 1514
|
||||
#define WLAN_ETHHDR_LEN 14
|
||||
#define WLAN_WMM_LEN 24
|
||||
|
||||
#define P80211CAPTURE_VERSION 0x80211001
|
||||
|
||||
/* This value is tested by WiFi 11n Test Plan 5.2.3. */
|
||||
/* This test verifies the WLAN NIC can update the NAV through sending the CTS with large duration. */
|
||||
#define WiFiNavUpperUs 30000 /* 30 ms */
|
||||
@ -164,9 +145,6 @@ enum {
|
||||
#define GetFragNum(pbuf) \
|
||||
(le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) & 0x0f)
|
||||
|
||||
#define GetTupleCache(pbuf) \
|
||||
(cpu_to_le16(*(unsigned short *)((size_t)(pbuf) + 22)))
|
||||
|
||||
#define SetFragNum(pbuf, num) \
|
||||
do { \
|
||||
*(unsigned short *)((size_t)(pbuf) + 22) = \
|
||||
@ -305,27 +283,13 @@ static inline int IsFrameTypeCtrl(unsigned char *pframe)
|
||||
/*-----------------------------------------------------------------------------
|
||||
Below is for the security related definition
|
||||
------------------------------------------------------------------------------*/
|
||||
#define _RESERVED_FRAME_TYPE_ 0
|
||||
#define _SKB_FRAME_TYPE_ 2
|
||||
#define _PRE_ALLOCMEM_ 1
|
||||
#define _PRE_ALLOCHDR_ 3
|
||||
#define _PRE_ALLOCLLCHDR_ 4
|
||||
#define _PRE_ALLOCICVHDR_ 5
|
||||
#define _PRE_ALLOCMICHDR_ 6
|
||||
|
||||
#define _ACKCTSLNG_ 14 /* 14 bytes long, including crclng */
|
||||
#define _CRCLNG_ 4
|
||||
|
||||
#define _ASOCREQ_IE_OFFSET_ 4 /* excluding wlan_hdr */
|
||||
#define _ASOCRSP_IE_OFFSET_ 6
|
||||
#define _REASOCREQ_IE_OFFSET_ 10
|
||||
#define _REASOCRSP_IE_OFFSET_ 6
|
||||
#define _PROBEREQ_IE_OFFSET_ 0
|
||||
#define _PROBERSP_IE_OFFSET_ 12
|
||||
#define _AUTH_IE_OFFSET_ 6
|
||||
#define _DEAUTH_IE_OFFSET_ 0
|
||||
#define _BEACON_IE_OFFSET_ 12
|
||||
#define _PUBLIC_ACTION_IE_OFFSET_ 8
|
||||
|
||||
#define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_
|
||||
|
||||
@ -336,20 +300,11 @@ static inline int IsFrameTypeCtrl(unsigned char *pframe)
|
||||
#define _AUTH_SEQ_NUM_ 2
|
||||
#define _BEACON_ITERVAL_ 2
|
||||
#define _CAPABILITY_ 2
|
||||
#define _CURRENT_APADDR_ 6
|
||||
#define _LISTEN_INTERVAL_ 2
|
||||
#define _RSON_CODE_ 2
|
||||
#define _ASOC_ID_ 2
|
||||
#define _STATUS_CODE_ 2
|
||||
#define _TIMESTAMP_ 8
|
||||
|
||||
#define AUTH_ODD_TO 0
|
||||
#define AUTH_EVEN_TO 1
|
||||
|
||||
#define WLAN_ETHCONV_ENCAP 1
|
||||
#define WLAN_ETHCONV_RFC1042 2
|
||||
#define WLAN_ETHCONV_8021h 3
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
Below is the definition for 802.11i / 802.1x
|
||||
------------------------------------------------------------------------------*/
|
||||
@ -361,18 +316,10 @@ static inline int IsFrameTypeCtrl(unsigned char *pframe)
|
||||
Below is the definition for WMM
|
||||
------------------------------------------------------------------------------*/
|
||||
#define _WMM_IE_Length_ 7 /* for WMM STA */
|
||||
#define _WMM_Para_Element_Length_ 24
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
Below is the definition for 802.11n
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
#define SetOrderBit(pbuf) \
|
||||
do { \
|
||||
*(unsigned short *)(pbuf) |= cpu_to_le16(_ORDER_); \
|
||||
} while (0)
|
||||
|
||||
#define GetOrderBit(pbuf) (((*(unsigned short *)(pbuf)) & cpu_to_le16(_ORDER_)) != 0)
|
||||
|
||||
#define ACT_CAT_VENDOR 0x7F/* 127 */
|
||||
@ -440,244 +387,20 @@ struct ADDBA_request {
|
||||
#define IEEE80211_HT_CAP_SGI_40 0x0040
|
||||
#define IEEE80211_HT_CAP_TX_STBC 0x0080
|
||||
#define IEEE80211_HT_CAP_RX_STBC_1R 0x0100
|
||||
#define IEEE80211_HT_CAP_RX_STBC_2R 0x0200
|
||||
#define IEEE80211_HT_CAP_RX_STBC_3R 0x0300
|
||||
#define IEEE80211_HT_CAP_DELAY_BA 0x0400
|
||||
#define IEEE80211_HT_CAP_MAX_AMSDU 0x0800
|
||||
#define IEEE80211_HT_CAP_DSSSCCK40 0x1000
|
||||
/* 802.11n HT capability AMPDU settings */
|
||||
#define IEEE80211_HT_CAP_AMPDU_FACTOR 0x03
|
||||
#define IEEE80211_HT_CAP_AMPDU_DENSITY 0x1C
|
||||
/* 802.11n HT capability MSC set */
|
||||
#define IEEE80211_SUPP_MCS_SET_UEQM 4
|
||||
#define IEEE80211_HT_CAP_MAX_STREAMS 4
|
||||
#define IEEE80211_SUPP_MCS_SET_LEN 10
|
||||
/* maximum streams the spec allows */
|
||||
#define IEEE80211_HT_CAP_MCS_TX_DEFINED 0x01
|
||||
#define IEEE80211_HT_CAP_MCS_TX_RX_DIFF 0x02
|
||||
#define IEEE80211_HT_CAP_MCS_TX_STREAMS 0x0C
|
||||
#define IEEE80211_HT_CAP_MCS_TX_UEQM 0x10
|
||||
/* 802.11n HT capability TXBF capability */
|
||||
#define IEEE80211_HT_CAP_TXBF_RX_NDP 0x00000008
|
||||
#define IEEE80211_HT_CAP_TXBF_TX_NDP 0x00000010
|
||||
#define IEEE80211_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP 0x00000400
|
||||
|
||||
/* endif */
|
||||
|
||||
/* ===============WPS Section =============== */
|
||||
/* For WPSv1.0 */
|
||||
#define WPSOUI 0x0050f204
|
||||
/* WPS attribute ID */
|
||||
#define WPS_ATTR_VER1 0x104A
|
||||
#define WPS_ATTR_SIMPLE_CONF_STATE 0x1044
|
||||
#define WPS_ATTR_RESP_TYPE 0x103B
|
||||
#define WPS_ATTR_UUID_E 0x1047
|
||||
#define WPS_ATTR_MANUFACTURER 0x1021
|
||||
#define WPS_ATTR_MODEL_NAME 0x1023
|
||||
#define WPS_ATTR_MODEL_NUMBER 0x1024
|
||||
#define WPS_ATTR_SERIAL_NUMBER 0x1042
|
||||
#define WPS_ATTR_PRIMARY_DEV_TYPE 0x1054
|
||||
#define WPS_ATTR_SEC_DEV_TYPE_LIST 0x1055
|
||||
#define WPS_ATTR_DEVICE_NAME 0x1011
|
||||
#define WPS_ATTR_CONF_METHOD 0x1008
|
||||
#define WPS_ATTR_RF_BANDS 0x103C
|
||||
#define WPS_ATTR_DEVICE_PWID 0x1012
|
||||
#define WPS_ATTR_REQUEST_TYPE 0x103A
|
||||
#define WPS_ATTR_ASSOCIATION_STATE 0x1002
|
||||
#define WPS_ATTR_CONFIG_ERROR 0x1009
|
||||
#define WPS_ATTR_VENDOR_EXT 0x1049
|
||||
#define WPS_ATTR_SELECTED_REGISTRAR 0x1041
|
||||
|
||||
/* Value of WPS attribute "WPS_ATTR_DEVICE_NAME */
|
||||
#define WPS_MAX_DEVICE_NAME_LEN 32
|
||||
|
||||
/* Value of WPS Request Type Attribute */
|
||||
#define WPS_REQ_TYPE_ENROLLEE_INFO_ONLY 0x00
|
||||
#define WPS_REQ_TYPE_ENROLLEE_OPEN_8021X 0x01
|
||||
#define WPS_REQ_TYPE_REGISTRAR 0x02
|
||||
#define WPS_REQ_TYPE_WLAN_MANAGER_REGISTRAR 0x03
|
||||
|
||||
/* Value of WPS Response Type Attribute */
|
||||
#define WPS_RESPONSE_TYPE_INFO_ONLY 0x00
|
||||
#define WPS_RESPONSE_TYPE_8021X 0x01
|
||||
#define WPS_RESPONSE_TYPE_REGISTRAR 0x02
|
||||
#define WPS_RESPONSE_TYPE_AP 0x03
|
||||
|
||||
/* Value of WPS WiFi Simple Configuration State Attribute */
|
||||
#define WPS_WSC_STATE_NOT_CONFIG 0x01
|
||||
#define WPS_WSC_STATE_CONFIG 0x02
|
||||
|
||||
/* Value of WPS Version Attribute */
|
||||
#define WPS_VERSION_1 0x10
|
||||
|
||||
/* Value of WPS Configuration Method Attribute */
|
||||
#define WPS_CONFIG_METHOD_FLASH 0x0001
|
||||
#define WPS_CONFIG_METHOD_ETHERNET 0x0002
|
||||
#define WPS_CONFIG_METHOD_LABEL 0x0004
|
||||
#define WPS_CONFIG_METHOD_DISPLAY 0x0008
|
||||
#define WPS_CONFIG_METHOD_E_NFC 0x0010
|
||||
#define WPS_CONFIG_METHOD_I_NFC 0x0020
|
||||
#define WPS_CONFIG_METHOD_NFC 0x0040
|
||||
#define WPS_CONFIG_METHOD_PBC 0x0080
|
||||
#define WPS_CONFIG_METHOD_KEYPAD 0x0100
|
||||
#define WPS_CONFIG_METHOD_VPBC 0x0280
|
||||
#define WPS_CONFIG_METHOD_PPBC 0x0480
|
||||
#define WPS_CONFIG_METHOD_VDISPLAY 0x2008
|
||||
#define WPS_CONFIG_METHOD_PDISPLAY 0x4008
|
||||
|
||||
/* Value of Category ID of WPS Primary Device Type Attribute */
|
||||
#define WPS_PDT_CID_DISPLAYS 0x0007
|
||||
#define WPS_PDT_CID_MULIT_MEDIA 0x0008
|
||||
#define WPS_PDT_CID_RTK_WIDI WPS_PDT_CID_MULIT_MEDIA
|
||||
|
||||
/* Value of Sub Category ID of WPS Primary Device Type Attribute */
|
||||
#define WPS_PDT_SCID_MEDIA_SERVER 0x0005
|
||||
#define WPS_PDT_SCID_RTK_DMP WPS_PDT_SCID_MEDIA_SERVER
|
||||
|
||||
/* Value of Device Password ID */
|
||||
#define WPS_DPID_PIN 0x0000
|
||||
#define WPS_DPID_USER_SPEC 0x0001
|
||||
#define WPS_DPID_MACHINE_SPEC 0x0002
|
||||
#define WPS_DPID_REKEY 0x0003
|
||||
#define WPS_DPID_PBC 0x0004
|
||||
#define WPS_DPID_REGISTRAR_SPEC 0x0005
|
||||
|
||||
/* Value of WPS RF Bands Attribute */
|
||||
#define WPS_RF_BANDS_2_4_GHZ 0x01
|
||||
#define WPS_RF_BANDS_5_GHZ 0x02
|
||||
|
||||
/* Value of WPS Association State Attribute */
|
||||
#define WPS_ASSOC_STATE_NOT_ASSOCIATED 0x00
|
||||
#define WPS_ASSOC_STATE_CONNECTION_SUCCESS 0x01
|
||||
#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE 0x02
|
||||
#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE 0x03
|
||||
#define WPS_ASSOC_STATE_IP_FAILURE 0x04
|
||||
|
||||
/* =====================P2P Section ===================== */
|
||||
/* For P2P */
|
||||
#define P2POUI 0x506F9A09
|
||||
|
||||
/* P2P Attribute ID */
|
||||
#define P2P_ATTR_STATUS 0x00
|
||||
#define P2P_ATTR_MINOR_REASON_CODE 0x01
|
||||
#define P2P_ATTR_CAPABILITY 0x02
|
||||
#define P2P_ATTR_DEVICE_ID 0x03
|
||||
#define P2P_ATTR_GO_INTENT 0x04
|
||||
#define P2P_ATTR_CONF_TIMEOUT 0x05
|
||||
#define P2P_ATTR_LISTEN_CH 0x06
|
||||
#define P2P_ATTR_GROUP_BSSID 0x07
|
||||
#define P2P_ATTR_EX_LISTEN_TIMING 0x08
|
||||
#define P2P_ATTR_INTENTED_IF_ADDR 0x09
|
||||
#define P2P_ATTR_MANAGEABILITY 0x0A
|
||||
#define P2P_ATTR_CH_LIST 0x0B
|
||||
#define P2P_ATTR_NOA 0x0C
|
||||
#define P2P_ATTR_DEVICE_INFO 0x0D
|
||||
#define P2P_ATTR_GROUP_INFO 0x0E
|
||||
#define P2P_ATTR_GROUP_ID 0x0F
|
||||
#define P2P_ATTR_INTERFACE 0x10
|
||||
#define P2P_ATTR_OPERATING_CH 0x11
|
||||
#define P2P_ATTR_INVITATION_FLAGS 0x12
|
||||
|
||||
/* Value of Status Attribute */
|
||||
#define P2P_STATUS_SUCCESS 0x00
|
||||
#define P2P_STATUS_FAIL_INFO_UNAVAILABLE 0x01
|
||||
#define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM 0x02
|
||||
#define P2P_STATUS_FAIL_LIMIT_REACHED 0x03
|
||||
#define P2P_STATUS_FAIL_INVALID_PARAM 0x04
|
||||
#define P2P_STATUS_FAIL_REQUEST_UNABLE 0x05
|
||||
#define P2P_STATUS_FAIL_PREVOUS_PROTO_ERR 0x06
|
||||
#define P2P_STATUS_FAIL_NO_COMMON_CH 0x07
|
||||
#define P2P_STATUS_FAIL_UNKNOWN_P2PGROUP 0x08
|
||||
#define P2P_STATUS_FAIL_BOTH_GOINTENT_15 0x09
|
||||
#define P2P_STATUS_FAIL_INCOMPATIBLE_PROVSION 0x0A
|
||||
#define P2P_STATUS_FAIL_USER_REJECT 0x0B
|
||||
|
||||
/* Value of Invitation Flags Attribute */
|
||||
#define P2P_INVITATION_FLAGS_PERSISTENT BIT(0)
|
||||
|
||||
#define DMP_P2P_DEVCAP_SUPPORT (P2P_DEVCAP_SERVICE_DISCOVERY | \
|
||||
P2P_DEVCAP_CLIENT_DISCOVERABILITY | \
|
||||
P2P_DEVCAP_CONCURRENT_OPERATION | \
|
||||
P2P_DEVCAP_INVITATION_PROC)
|
||||
|
||||
#define DMP_P2P_GRPCAP_SUPPORT (P2P_GRPCAP_INTRABSS)
|
||||
|
||||
/* Value of Device Capability Bitmap */
|
||||
#define P2P_DEVCAP_SERVICE_DISCOVERY BIT(0)
|
||||
#define P2P_DEVCAP_CLIENT_DISCOVERABILITY BIT(1)
|
||||
#define P2P_DEVCAP_CONCURRENT_OPERATION BIT(2)
|
||||
#define P2P_DEVCAP_INFRA_MANAGED BIT(3)
|
||||
#define P2P_DEVCAP_DEVICE_LIMIT BIT(4)
|
||||
#define P2P_DEVCAP_INVITATION_PROC BIT(5)
|
||||
|
||||
/* Value of Group Capability Bitmap */
|
||||
#define P2P_GRPCAP_GO BIT(0)
|
||||
#define P2P_GRPCAP_PERSISTENT_GROUP BIT(1)
|
||||
#define P2P_GRPCAP_GROUP_LIMIT BIT(2)
|
||||
#define P2P_GRPCAP_INTRABSS BIT(3)
|
||||
#define P2P_GRPCAP_CROSS_CONN BIT(4)
|
||||
#define P2P_GRPCAP_PERSISTENT_RECONN BIT(5)
|
||||
#define P2P_GRPCAP_GROUP_FORMATION BIT(6)
|
||||
|
||||
/* P2P Public Action Frame (Management Frame) */
|
||||
#define P2P_PUB_ACTION_ACTION 0x09
|
||||
|
||||
/* P2P Public Action Frame Type */
|
||||
#define P2P_GO_NEGO_REQ 0
|
||||
#define P2P_GO_NEGO_RESP 1
|
||||
#define P2P_GO_NEGO_CONF 2
|
||||
#define P2P_INVIT_REQ 3
|
||||
#define P2P_INVIT_RESP 4
|
||||
#define P2P_DEVDISC_REQ 5
|
||||
#define P2P_DEVDISC_RESP 6
|
||||
#define P2P_PROVISION_DISC_REQ 7
|
||||
#define P2P_PROVISION_DISC_RESP 8
|
||||
|
||||
/* P2P Action Frame Type */
|
||||
#define P2P_NOTICE_OF_ABSENCE 0
|
||||
#define P2P_PRESENCE_REQUEST 1
|
||||
#define P2P_PRESENCE_RESPONSE 2
|
||||
#define P2P_GO_DISC_REQUEST 3
|
||||
|
||||
|
||||
#define P2P_MAX_PERSISTENT_GROUP_NUM 10
|
||||
|
||||
#define P2P_PROVISIONING_SCAN_CNT 3
|
||||
|
||||
#define P2P_WILDCARD_SSID_LEN 7
|
||||
|
||||
#define P2P_FINDPHASE_EX_NONE 0 /* default value, used when: (1)p2p disabled or (2)p2p enabled but only do 1 scan phase */
|
||||
#define P2P_FINDPHASE_EX_FULL 1 /* used when p2p enabled and want to do 1 scan phase and P2P_FINDPHASE_EX_MAX-1 find phase */
|
||||
#define P2P_FINDPHASE_EX_SOCIAL_FIRST (P2P_FINDPHASE_EX_FULL+1)
|
||||
#define P2P_FINDPHASE_EX_MAX 4
|
||||
#define P2P_FINDPHASE_EX_SOCIAL_LAST P2P_FINDPHASE_EX_MAX
|
||||
|
||||
#define P2P_PROVISION_TIMEOUT 5000 /* 5 seconds timeout for sending the provision discovery request */
|
||||
#define P2P_CONCURRENT_PROVISION_TIMEOUT 3000 /* 3 seconds timeout for sending the provision discovery request under concurrent mode */
|
||||
#define P2P_GO_NEGO_TIMEOUT 5000 /* 5 seconds timeout for receiving the group negotiation response */
|
||||
#define P2P_CONCURRENT_GO_NEGO_TIMEOUT 3000 /* 3 seconds timeout for sending the negotiation request under concurrent mode */
|
||||
#define P2P_TX_PRESCAN_TIMEOUT 100 /* 100ms */
|
||||
#define P2P_INVITE_TIMEOUT 5000 /* 5 seconds timeout for sending the invitation request */
|
||||
#define P2P_CONCURRENT_INVITE_TIMEOUT 3000 /* 3 seconds timeout for sending the invitation request under concurrent mode */
|
||||
#define P2P_RESET_SCAN_CH 25000 /* 25 seconds timeout to reset the scan channel (based on channel plan) */
|
||||
#define P2P_MAX_INTENT 15
|
||||
|
||||
#define P2P_MAX_NOA_NUM 2
|
||||
|
||||
/* WPS Configuration Method */
|
||||
#define WPS_CM_NONE 0x0000
|
||||
#define WPS_CM_LABEL 0x0004
|
||||
#define WPS_CM_DISPLYA 0x0008
|
||||
#define WPS_CM_EXTERNAL_NFC_TOKEN 0x0010
|
||||
#define WPS_CM_INTEGRATED_NFC_TOKEN 0x0020
|
||||
#define WPS_CM_NFC_INTERFACE 0x0040
|
||||
#define WPS_CM_PUSH_BUTTON 0x0080
|
||||
#define WPS_CM_KEYPAD 0x0100
|
||||
#define WPS_CM_SW_PUHS_BUTTON 0x0280
|
||||
#define WPS_CM_HW_PUHS_BUTTON 0x0480
|
||||
#define WPS_CM_SW_DISPLAY_PIN 0x2008
|
||||
#define WPS_CM_LCD_DISPLAY_PIN 0x4008
|
||||
|
||||
enum p2p_role {
|
||||
P2P_ROLE_DISABLE = 0,
|
||||
P2P_ROLE_DEVICE = 1,
|
||||
@ -718,28 +441,6 @@ enum p2p_wpsinfo {
|
||||
P2P_GOT_WPSINFO_PBC = 3,
|
||||
};
|
||||
|
||||
#define P2P_PRIVATE_IOCTL_SET_LEN 64
|
||||
|
||||
/* =====================WFD Section ===================== */
|
||||
/* For Wi-Fi Display */
|
||||
#define WFD_ATTR_DEVICE_INFO 0x00
|
||||
#define WFD_ATTR_ASSOC_BSSID 0x01
|
||||
#define WFD_ATTR_COUPLED_SINK_INFO 0x06
|
||||
#define WFD_ATTR_LOCAL_IP_ADDR 0x08
|
||||
#define WFD_ATTR_SESSION_INFO 0x09
|
||||
#define WFD_ATTR_ALTER_MAC 0x0a
|
||||
|
||||
/* For WFD Device Information Attribute */
|
||||
#define WFD_DEVINFO_SOURCE 0x0000
|
||||
#define WFD_DEVINFO_PSINK 0x0001
|
||||
#define WFD_DEVINFO_SSINK 0x0002
|
||||
#define WFD_DEVINFO_DUAL 0x0003
|
||||
|
||||
#define WFD_DEVINFO_SESSION_AVAIL 0x0010
|
||||
#define WFD_DEVINFO_WSD 0x0040
|
||||
#define WFD_DEVINFO_PC_TDLS 0x0080
|
||||
#define WFD_DEVINFO_HDCP_SUPPORT 0x0100
|
||||
|
||||
#define IP_MCAST_MAC(mac) ((mac[0] == 0x01) && (mac[1] == 0x00) && (mac[2] == 0x5e))
|
||||
#define ICMPV6_MCAST_MAC(mac) ((mac[0] == 0x33) && (mac[1] == 0x33) && (mac[2] != 0xff))
|
||||
|
||||
|
@ -2549,9 +2549,7 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
bool ack = true;
|
||||
u8 tx_ch = (u8)ieee80211_frequency_to_channel(chan->center_freq);
|
||||
u8 category, action;
|
||||
int type = (-1);
|
||||
struct adapter *padapter;
|
||||
struct rtw_wdev_priv *pwdev_priv;
|
||||
|
||||
if (!ndev) {
|
||||
ret = -EINVAL;
|
||||
@ -2559,7 +2557,6 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
}
|
||||
|
||||
padapter = rtw_netdev_priv(ndev);
|
||||
pwdev_priv = adapter_wdev_data(padapter);
|
||||
|
||||
/* cookie generation */
|
||||
*cookie = (unsigned long)buf;
|
||||
@ -2581,19 +2578,6 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
tx_ret = _cfg80211_rtw_mgmt_tx(padapter, tx_ch, buf, len);
|
||||
} while (dump_cnt < dump_limit && tx_ret != _SUCCESS);
|
||||
|
||||
switch (type) {
|
||||
case P2P_GO_NEGO_CONF:
|
||||
rtw_clear_scan_deny(padapter);
|
||||
break;
|
||||
case P2P_INVIT_RESP:
|
||||
if (pwdev_priv->invit_info.flags & BIT(0) && pwdev_priv->invit_info.status == 0) {
|
||||
rtw_set_scan_deny(padapter, 5000);
|
||||
rtw_pwr_wakeup_ex(padapter, 5000);
|
||||
rtw_clear_scan_deny(padapter);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
cancel_ps_deny:
|
||||
rtw_ps_deny_cancel(padapter, PS_DENY_MGNT_TX);
|
||||
exit:
|
||||
@ -2602,7 +2586,6 @@ exit:
|
||||
|
||||
static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum nl80211_band band)
|
||||
{
|
||||
#define MAX_BIT_RATE_40MHZ_MCS15 300 /* Mbps */
|
||||
#define MAX_BIT_RATE_40MHZ_MCS7 150 /* Mbps */
|
||||
|
||||
ht_cap->ht_supported = true;
|
||||
|
@ -591,7 +591,7 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count)
|
||||
static void stop_streaming(struct vb2_queue *vq)
|
||||
{
|
||||
int ret;
|
||||
unsigned long timeout;
|
||||
unsigned long time_left;
|
||||
struct bcm2835_mmal_dev *dev = vb2_get_drv_priv(vq);
|
||||
struct vchiq_mmal_port *port = dev->capture.port;
|
||||
|
||||
@ -636,9 +636,9 @@ static void stop_streaming(struct vb2_queue *vq)
|
||||
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
|
||||
"%s: Waiting for buffers to be returned - %d outstanding\n",
|
||||
__func__, atomic_read(&port->buffers_with_vpu));
|
||||
timeout = wait_for_completion_timeout(&dev->capture.frame_cmplt,
|
||||
HZ);
|
||||
if (timeout == 0) {
|
||||
time_left = wait_for_completion_timeout(&dev->capture.frame_cmplt,
|
||||
HZ);
|
||||
if (time_left == 0) {
|
||||
v4l2_err(&dev->v4l2_dev, "%s: Timeout waiting for buffers to be returned - %d outstanding\n",
|
||||
__func__,
|
||||
atomic_read(&port->buffers_with_vpu));
|
||||
|
@ -31,7 +31,7 @@ Here are the most common kernel configurations:
|
||||
|
||||
3. BCM2837 target SoC (ARM 64 bit)
|
||||
|
||||
Use the defconfig as a base and then enable all VCHIQ options.
|
||||
Use the defconfig which has most of the VCHIQ options enabled.
|
||||
|
||||
* Scenarios
|
||||
|
||||
@ -80,3 +80,46 @@ Here are the most common kernel configurations:
|
||||
vchi ping (size 0, 100 async, 100 oneway) -> infus
|
||||
vchi ping (size 0, 200 async, 0 oneway) -> infus
|
||||
...
|
||||
|
||||
* Debugfs test
|
||||
|
||||
Command: cat /sys/kernel/debug/vchiq/state
|
||||
|
||||
Example output:
|
||||
State 0: CONNECTED
|
||||
tx_pos=0x1e8(@43b0acda), rx_pos=0x170(@05493af8)
|
||||
Version: 8 (min 3)
|
||||
Stats: ctrl_tx_count=7, ctrl_rx_count=7, error_count=0
|
||||
Slots: 30 available (29 data), 0 recyclable, 0 stalls (0 data)
|
||||
Platform: 2835 (VC master)
|
||||
Local: slots 34-64 tx_pos=0x1e8 recycle=0x1f
|
||||
Slots claimed:
|
||||
DEBUG: SLOT_HANDLER_COUNT = 20(0x14)
|
||||
DEBUG: SLOT_HANDLER_LINE = 1937(0x791)
|
||||
DEBUG: PARSE_LINE = 1864(0x748)
|
||||
DEBUG: PARSE_HEADER = -249155224(0xf1263168)
|
||||
DEBUG: PARSE_MSGID = 67362817(0x403e001)
|
||||
DEBUG: AWAIT_COMPLETION_LINE = 0(0x0)
|
||||
DEBUG: DEQUEUE_MESSAGE_LINE = 0(0x0)
|
||||
DEBUG: SERVICE_CALLBACK_LINE = 0(0x0)
|
||||
DEBUG: MSG_QUEUE_FULL_COUNT = 0(0x0)
|
||||
DEBUG: COMPLETION_QUEUE_FULL_COUNT = 0(0x0)
|
||||
Remote: slots 2-32 tx_pos=0x170 recycle=0x1f
|
||||
Slots claimed:
|
||||
2: 10/9
|
||||
DEBUG: SLOT_HANDLER_COUNT = 20(0x14)
|
||||
DEBUG: SLOT_HANDLER_LINE = 1851(0x73b)
|
||||
DEBUG: PARSE_LINE = 1827(0x723)
|
||||
DEBUG: PARSE_HEADER = -150330912(0xf70a21e0)
|
||||
DEBUG: PARSE_MSGID = 67113022(0x400103e)
|
||||
DEBUG: AWAIT_COMPLETION_LINE = 0(0x0)
|
||||
DEBUG: DEQUEUE_MESSAGE_LINE = 0(0x0)
|
||||
DEBUG: SERVICE_CALLBACK_LINE = 0(0x0)
|
||||
DEBUG: MSG_QUEUE_FULL_COUNT = 0(0x0)
|
||||
DEBUG: COMPLETION_QUEUE_FULL_COUNT = 0(0x0)
|
||||
Service 0: LISTENING (ref 1) 'PEEK little-endian (0x4b454550)' remote n/a (msg use 0/3840, slot use 0/15)
|
||||
Bulk: tx_pending=0 (size 0), rx_pending=0 (size 0)
|
||||
Ctrl: tx_count=0, tx_bytes=0, rx_count=0, rx_bytes=0
|
||||
Bulk: tx_count=0, tx_bytes=0, rx_count=0, rx_bytes=0
|
||||
0 quota stalls, 0 slot stalls, 0 bulk stalls, 0 aborted, 0 errors
|
||||
instance b511f60b
|
||||
|
@ -16,13 +16,6 @@ some of the ones we want:
|
||||
to manage these buffers as dmabufs so that we can zero-copy import
|
||||
camera images into vc4 for rendering/display.
|
||||
|
||||
* Fix kernel module support
|
||||
|
||||
Even the VPU firmware doesn't support a VCHI re-connect, the driver
|
||||
should properly handle a module unload. This also includes that all
|
||||
resources must be freed (kthreads, debugfs entries, ...) and global
|
||||
variables avoided.
|
||||
|
||||
* Documentation
|
||||
|
||||
A short top-down description of this driver's architecture (function of
|
||||
|
@ -109,11 +109,6 @@ struct vchiq_arm_state {
|
||||
int first_connect;
|
||||
};
|
||||
|
||||
struct vchiq_2835_state {
|
||||
int inited;
|
||||
struct vchiq_arm_state arm_state;
|
||||
};
|
||||
|
||||
struct vchiq_pagelist_info {
|
||||
struct pagelist *pagelist;
|
||||
size_t pagelist_buffer_size;
|
||||
@ -167,7 +162,7 @@ cleanup_pagelistinfo(struct vchiq_instance *instance, struct vchiq_pagelist_info
|
||||
}
|
||||
|
||||
static inline bool
|
||||
is_adjacent_block(u32 *addrs, u32 addr, unsigned int k)
|
||||
is_adjacent_block(u32 *addrs, dma_addr_t addr, unsigned int k)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
@ -382,8 +377,8 @@ create_pagelist(struct vchiq_instance *instance, char *buf, char __user *ubuf,
|
||||
/* Combine adjacent blocks for performance */
|
||||
k = 0;
|
||||
for_each_sg(scatterlist, sg, dma_buffers, i) {
|
||||
u32 len = sg_dma_len(sg);
|
||||
u32 addr = sg_dma_address(sg);
|
||||
unsigned int len = sg_dma_len(sg);
|
||||
dma_addr_t addr = sg_dma_address(sg);
|
||||
|
||||
/* Note: addrs is the address + page_count - 1
|
||||
* The firmware expects blocks after the first to be page-
|
||||
@ -593,49 +588,32 @@ static int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
vchiq_arm_init_state(struct vchiq_state *state,
|
||||
struct vchiq_arm_state *arm_state)
|
||||
{
|
||||
if (arm_state) {
|
||||
rwlock_init(&arm_state->susp_res_lock);
|
||||
|
||||
init_completion(&arm_state->ka_evt);
|
||||
atomic_set(&arm_state->ka_use_count, 0);
|
||||
atomic_set(&arm_state->ka_use_ack_count, 0);
|
||||
atomic_set(&arm_state->ka_release_count, 0);
|
||||
|
||||
arm_state->state = state;
|
||||
arm_state->first_connect = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
vchiq_platform_init_state(struct vchiq_state *state)
|
||||
{
|
||||
struct vchiq_2835_state *platform_state;
|
||||
struct vchiq_arm_state *platform_state;
|
||||
|
||||
state->platform_state = kzalloc(sizeof(*platform_state), GFP_KERNEL);
|
||||
if (!state->platform_state)
|
||||
platform_state = kzalloc(sizeof(*platform_state), GFP_KERNEL);
|
||||
if (!platform_state)
|
||||
return -ENOMEM;
|
||||
|
||||
platform_state = (struct vchiq_2835_state *)state->platform_state;
|
||||
rwlock_init(&platform_state->susp_res_lock);
|
||||
|
||||
platform_state->inited = 1;
|
||||
vchiq_arm_init_state(state, &platform_state->arm_state);
|
||||
init_completion(&platform_state->ka_evt);
|
||||
atomic_set(&platform_state->ka_use_count, 0);
|
||||
atomic_set(&platform_state->ka_use_ack_count, 0);
|
||||
atomic_set(&platform_state->ka_release_count, 0);
|
||||
|
||||
platform_state->state = state;
|
||||
|
||||
state->platform_state = (struct opaque_platform_state *)platform_state;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct vchiq_arm_state *vchiq_platform_get_arm_state(struct vchiq_state *state)
|
||||
{
|
||||
struct vchiq_2835_state *platform_state;
|
||||
|
||||
platform_state = (struct vchiq_2835_state *)state->platform_state;
|
||||
|
||||
WARN_ON_ONCE(!platform_state->inited);
|
||||
|
||||
return &platform_state->arm_state;
|
||||
return (struct vchiq_arm_state *)state->platform_state;
|
||||
}
|
||||
|
||||
void
|
||||
@ -758,8 +736,8 @@ void free_bulk_waiter(struct vchiq_instance *instance)
|
||||
|
||||
int vchiq_shutdown(struct vchiq_instance *instance)
|
||||
{
|
||||
int status = 0;
|
||||
struct vchiq_state *state = instance->state;
|
||||
int ret = 0;
|
||||
|
||||
if (mutex_lock_killable(&state->mutex))
|
||||
return -EAGAIN;
|
||||
@ -769,12 +747,12 @@ int vchiq_shutdown(struct vchiq_instance *instance)
|
||||
|
||||
mutex_unlock(&state->mutex);
|
||||
|
||||
dev_dbg(state->dev, "core: (%p): returning %d\n", instance, status);
|
||||
dev_dbg(state->dev, "core: (%p): returning %d\n", instance, ret);
|
||||
|
||||
free_bulk_waiter(instance);
|
||||
kfree(instance);
|
||||
|
||||
return status;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vchiq_shutdown);
|
||||
|
||||
@ -785,26 +763,26 @@ static int vchiq_is_connected(struct vchiq_instance *instance)
|
||||
|
||||
int vchiq_connect(struct vchiq_instance *instance)
|
||||
{
|
||||
int status;
|
||||
struct vchiq_state *state = instance->state;
|
||||
int ret;
|
||||
|
||||
if (mutex_lock_killable(&state->mutex)) {
|
||||
dev_dbg(state->dev,
|
||||
"core: call to mutex_lock failed\n");
|
||||
status = -EAGAIN;
|
||||
ret = -EAGAIN;
|
||||
goto failed;
|
||||
}
|
||||
status = vchiq_connect_internal(state, instance);
|
||||
ret = vchiq_connect_internal(state, instance);
|
||||
|
||||
if (!status)
|
||||
if (!ret)
|
||||
instance->connected = 1;
|
||||
|
||||
mutex_unlock(&state->mutex);
|
||||
|
||||
failed:
|
||||
dev_dbg(state->dev, "core: (%p): returning %d\n", instance, status);
|
||||
dev_dbg(state->dev, "core: (%p): returning %d\n", instance, ret);
|
||||
|
||||
return status;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vchiq_connect);
|
||||
|
||||
@ -813,10 +791,9 @@ vchiq_add_service(struct vchiq_instance *instance,
|
||||
const struct vchiq_service_params_kernel *params,
|
||||
unsigned int *phandle)
|
||||
{
|
||||
int status;
|
||||
struct vchiq_state *state = instance->state;
|
||||
struct vchiq_service *service = NULL;
|
||||
int srvstate;
|
||||
int srvstate, ret;
|
||||
|
||||
*phandle = VCHIQ_SERVICE_HANDLE_INVALID;
|
||||
|
||||
@ -828,14 +805,14 @@ vchiq_add_service(struct vchiq_instance *instance,
|
||||
|
||||
if (service) {
|
||||
*phandle = service->handle;
|
||||
status = 0;
|
||||
ret = 0;
|
||||
} else {
|
||||
status = -EINVAL;
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
dev_dbg(state->dev, "core: (%p): returning %d\n", instance, status);
|
||||
dev_dbg(state->dev, "core: (%p): returning %d\n", instance, ret);
|
||||
|
||||
return status;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
@ -843,9 +820,9 @@ vchiq_open_service(struct vchiq_instance *instance,
|
||||
const struct vchiq_service_params_kernel *params,
|
||||
unsigned int *phandle)
|
||||
{
|
||||
int status = -EINVAL;
|
||||
struct vchiq_state *state = instance->state;
|
||||
struct vchiq_service *service = NULL;
|
||||
int ret = -EINVAL;
|
||||
|
||||
*phandle = VCHIQ_SERVICE_HANDLE_INVALID;
|
||||
|
||||
@ -856,17 +833,17 @@ vchiq_open_service(struct vchiq_instance *instance,
|
||||
|
||||
if (service) {
|
||||
*phandle = service->handle;
|
||||
status = vchiq_open_service_internal(service, current->pid);
|
||||
if (status) {
|
||||
ret = vchiq_open_service_internal(service, current->pid);
|
||||
if (ret) {
|
||||
vchiq_remove_service(instance, service->handle);
|
||||
*phandle = VCHIQ_SERVICE_HANDLE_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
failed:
|
||||
dev_dbg(state->dev, "core: (%p): returning %d\n", instance, status);
|
||||
dev_dbg(state->dev, "core: (%p): returning %d\n", instance, ret);
|
||||
|
||||
return status;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vchiq_open_service);
|
||||
|
||||
@ -874,20 +851,20 @@ int
|
||||
vchiq_bulk_transmit(struct vchiq_instance *instance, unsigned int handle, const void *data,
|
||||
unsigned int size, void *userdata, enum vchiq_bulk_mode mode)
|
||||
{
|
||||
int status;
|
||||
int ret;
|
||||
|
||||
while (1) {
|
||||
switch (mode) {
|
||||
case VCHIQ_BULK_MODE_NOCALLBACK:
|
||||
case VCHIQ_BULK_MODE_CALLBACK:
|
||||
status = vchiq_bulk_transfer(instance, handle,
|
||||
(void *)data, NULL,
|
||||
size, userdata, mode,
|
||||
VCHIQ_BULK_TRANSMIT);
|
||||
ret = vchiq_bulk_transfer(instance, handle,
|
||||
(void *)data, NULL,
|
||||
size, userdata, mode,
|
||||
VCHIQ_BULK_TRANSMIT);
|
||||
break;
|
||||
case VCHIQ_BULK_MODE_BLOCKING:
|
||||
status = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size,
|
||||
VCHIQ_BULK_TRANSMIT);
|
||||
ret = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size,
|
||||
VCHIQ_BULK_TRANSMIT);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@ -898,13 +875,13 @@ vchiq_bulk_transmit(struct vchiq_instance *instance, unsigned int handle, const
|
||||
* to implement a retry mechanism since this function is
|
||||
* supposed to block until queued
|
||||
*/
|
||||
if (status != -EAGAIN)
|
||||
if (ret != -EAGAIN)
|
||||
break;
|
||||
|
||||
msleep(1);
|
||||
}
|
||||
|
||||
return status;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vchiq_bulk_transmit);
|
||||
|
||||
@ -912,19 +889,19 @@ int vchiq_bulk_receive(struct vchiq_instance *instance, unsigned int handle,
|
||||
void *data, unsigned int size, void *userdata,
|
||||
enum vchiq_bulk_mode mode)
|
||||
{
|
||||
int status;
|
||||
int ret;
|
||||
|
||||
while (1) {
|
||||
switch (mode) {
|
||||
case VCHIQ_BULK_MODE_NOCALLBACK:
|
||||
case VCHIQ_BULK_MODE_CALLBACK:
|
||||
status = vchiq_bulk_transfer(instance, handle, data, NULL,
|
||||
size, userdata,
|
||||
mode, VCHIQ_BULK_RECEIVE);
|
||||
ret = vchiq_bulk_transfer(instance, handle, data, NULL,
|
||||
size, userdata,
|
||||
mode, VCHIQ_BULK_RECEIVE);
|
||||
break;
|
||||
case VCHIQ_BULK_MODE_BLOCKING:
|
||||
status = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size,
|
||||
VCHIQ_BULK_RECEIVE);
|
||||
ret = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size,
|
||||
VCHIQ_BULK_RECEIVE);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@ -935,13 +912,13 @@ int vchiq_bulk_receive(struct vchiq_instance *instance, unsigned int handle,
|
||||
* to implement a retry mechanism since this function is
|
||||
* supposed to block until queued
|
||||
*/
|
||||
if (status != -EAGAIN)
|
||||
if (ret != -EAGAIN)
|
||||
break;
|
||||
|
||||
msleep(1);
|
||||
}
|
||||
|
||||
return status;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vchiq_bulk_receive);
|
||||
|
||||
@ -950,8 +927,8 @@ vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handl
|
||||
unsigned int size, enum vchiq_bulk_dir dir)
|
||||
{
|
||||
struct vchiq_service *service;
|
||||
int status;
|
||||
struct bulk_waiter_node *waiter = NULL, *iter;
|
||||
int ret;
|
||||
|
||||
service = find_service_by_handle(instance, handle);
|
||||
if (!service)
|
||||
@ -991,10 +968,10 @@ vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handl
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
status = vchiq_bulk_transfer(instance, handle, data, NULL, size,
|
||||
&waiter->bulk_waiter,
|
||||
VCHIQ_BULK_MODE_BLOCKING, dir);
|
||||
if ((status != -EAGAIN) || fatal_signal_pending(current) || !waiter->bulk_waiter.bulk) {
|
||||
ret = vchiq_bulk_transfer(instance, handle, data, NULL, size,
|
||||
&waiter->bulk_waiter,
|
||||
VCHIQ_BULK_MODE_BLOCKING, dir);
|
||||
if ((ret != -EAGAIN) || fatal_signal_pending(current) || !waiter->bulk_waiter.bulk) {
|
||||
struct vchiq_bulk *bulk = waiter->bulk_waiter.bulk;
|
||||
|
||||
if (bulk) {
|
||||
@ -1013,7 +990,7 @@ vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handl
|
||||
waiter, current->pid);
|
||||
}
|
||||
|
||||
return status;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -1078,6 +1055,43 @@ add_completion(struct vchiq_instance *instance, enum vchiq_reason reason,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
service_single_message(struct vchiq_instance *instance,
|
||||
enum vchiq_reason reason,
|
||||
struct vchiq_service *service, void *bulk_userdata)
|
||||
{
|
||||
struct user_service *user_service;
|
||||
|
||||
user_service = (struct user_service *)service->base.userdata;
|
||||
|
||||
dev_dbg(service->state->dev, "arm: msg queue full\n");
|
||||
/*
|
||||
* If there is no MESSAGE_AVAILABLE in the completion
|
||||
* queue, add one
|
||||
*/
|
||||
if ((user_service->message_available_pos -
|
||||
instance->completion_remove) < 0) {
|
||||
int ret;
|
||||
|
||||
dev_dbg(instance->state->dev,
|
||||
"arm: Inserting extra MESSAGE_AVAILABLE\n");
|
||||
ret = add_completion(instance, reason, NULL, user_service,
|
||||
bulk_userdata);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (wait_for_completion_interruptible(&user_service->remove_event)) {
|
||||
dev_dbg(instance->state->dev, "arm: interrupted\n");
|
||||
return -EAGAIN;
|
||||
} else if (instance->closing) {
|
||||
dev_dbg(instance->state->dev, "arm: closing\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
service_callback(struct vchiq_instance *instance, enum vchiq_reason reason,
|
||||
struct vchiq_header *header, unsigned int handle, void *bulk_userdata)
|
||||
@ -1127,41 +1141,18 @@ service_callback(struct vchiq_instance *instance, enum vchiq_reason reason,
|
||||
spin_lock(&service->state->msg_queue_spinlock);
|
||||
while (user_service->msg_insert ==
|
||||
(user_service->msg_remove + MSG_QUEUE_SIZE)) {
|
||||
int ret;
|
||||
|
||||
spin_unlock(&service->state->msg_queue_spinlock);
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
DEBUG_COUNT(MSG_QUEUE_FULL_COUNT);
|
||||
dev_dbg(service->state->dev, "arm: msg queue full\n");
|
||||
/*
|
||||
* If there is no MESSAGE_AVAILABLE in the completion
|
||||
* queue, add one
|
||||
*/
|
||||
if ((user_service->message_available_pos -
|
||||
instance->completion_remove) < 0) {
|
||||
int status;
|
||||
|
||||
dev_dbg(instance->state->dev,
|
||||
"arm: Inserting extra MESSAGE_AVAILABLE\n");
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
status = add_completion(instance, reason, NULL, user_service,
|
||||
bulk_userdata);
|
||||
if (status) {
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
vchiq_service_put(service);
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
if (wait_for_completion_interruptible(&user_service->remove_event)) {
|
||||
dev_dbg(instance->state->dev, "arm: interrupted\n");
|
||||
ret = service_single_message(instance, reason,
|
||||
service, bulk_userdata);
|
||||
if (ret) {
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
vchiq_service_put(service);
|
||||
return -EAGAIN;
|
||||
} else if (instance->closing) {
|
||||
dev_dbg(instance->state->dev, "arm: closing\n");
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
vchiq_service_put(service);
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
}
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
spin_lock(&service->state->msg_queue_spinlock);
|
||||
@ -1294,8 +1285,6 @@ vchiq_keepalive_thread_func(void *v)
|
||||
{
|
||||
struct vchiq_state *state = (struct vchiq_state *)v;
|
||||
struct vchiq_arm_state *arm_state = vchiq_platform_get_arm_state(state);
|
||||
|
||||
int status;
|
||||
struct vchiq_instance *instance;
|
||||
unsigned int ka_handle;
|
||||
int ret;
|
||||
@ -1313,20 +1302,20 @@ vchiq_keepalive_thread_func(void *v)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
status = vchiq_connect(instance);
|
||||
if (status) {
|
||||
dev_err(state->dev, "suspend: %s: vchiq_connect failed %d\n", __func__, status);
|
||||
ret = vchiq_connect(instance);
|
||||
if (ret) {
|
||||
dev_err(state->dev, "suspend: %s: vchiq_connect failed %d\n", __func__, ret);
|
||||
goto shutdown;
|
||||
}
|
||||
|
||||
status = vchiq_add_service(instance, ¶ms, &ka_handle);
|
||||
if (status) {
|
||||
ret = vchiq_add_service(instance, ¶ms, &ka_handle);
|
||||
if (ret) {
|
||||
dev_err(state->dev, "suspend: %s: vchiq_open_service failed %d\n",
|
||||
__func__, status);
|
||||
__func__, ret);
|
||||
goto shutdown;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
while (!kthread_should_stop()) {
|
||||
long rc = 0, uc = 0;
|
||||
|
||||
if (wait_for_completion_interruptible(&arm_state->ka_evt)) {
|
||||
@ -1348,17 +1337,17 @@ vchiq_keepalive_thread_func(void *v)
|
||||
*/
|
||||
while (uc--) {
|
||||
atomic_inc(&arm_state->ka_use_ack_count);
|
||||
status = vchiq_use_service(instance, ka_handle);
|
||||
if (status) {
|
||||
ret = vchiq_use_service(instance, ka_handle);
|
||||
if (ret) {
|
||||
dev_err(state->dev, "suspend: %s: vchiq_use_service error %d\n",
|
||||
__func__, status);
|
||||
__func__, ret);
|
||||
}
|
||||
}
|
||||
while (rc--) {
|
||||
status = vchiq_release_service(instance, ka_handle);
|
||||
if (status) {
|
||||
ret = vchiq_release_service(instance, ka_handle);
|
||||
if (ret) {
|
||||
dev_err(state->dev, "suspend: %s: vchiq_release_service error %d\n",
|
||||
__func__, status);
|
||||
__func__, ret);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1408,13 +1397,13 @@ vchiq_use_internal(struct vchiq_state *state, struct vchiq_service *service,
|
||||
write_unlock_bh(&arm_state->susp_res_lock);
|
||||
|
||||
if (!ret) {
|
||||
int status = 0;
|
||||
int ret = 0;
|
||||
long ack_cnt = atomic_xchg(&arm_state->ka_use_ack_count, 0);
|
||||
|
||||
while (ack_cnt && !status) {
|
||||
while (ack_cnt && !ret) {
|
||||
/* Send the use notify to videocore */
|
||||
status = vchiq_send_remote_use_active(state);
|
||||
if (!status)
|
||||
ret = vchiq_send_remote_use_active(state);
|
||||
if (!ret)
|
||||
ack_cnt--;
|
||||
else
|
||||
atomic_add(ack_cnt, &arm_state->ka_use_ack_count);
|
||||
@ -1451,7 +1440,6 @@ vchiq_release_internal(struct vchiq_state *state, struct vchiq_service *service)
|
||||
|
||||
write_lock_bh(&arm_state->susp_res_lock);
|
||||
if (!arm_state->videocore_use_count || !(*entity_uc)) {
|
||||
/* Don't use BUG_ON - don't allow user thread to crash kernel */
|
||||
WARN_ON(!arm_state->videocore_use_count);
|
||||
WARN_ON(!(*entity_uc));
|
||||
ret = -EINVAL;
|
||||
@ -1730,7 +1718,7 @@ static int vchiq_probe(struct platform_device *pdev)
|
||||
struct device_node *fw_node;
|
||||
const struct vchiq_platform_info *info;
|
||||
struct vchiq_drv_mgmt *mgmt;
|
||||
int err;
|
||||
int ret;
|
||||
|
||||
info = of_device_get_match_data(&pdev->dev);
|
||||
if (!info)
|
||||
@ -1755,8 +1743,8 @@ static int vchiq_probe(struct platform_device *pdev)
|
||||
mgmt->info = info;
|
||||
platform_set_drvdata(pdev, mgmt);
|
||||
|
||||
err = vchiq_platform_init(pdev, &mgmt->state);
|
||||
if (err)
|
||||
ret = vchiq_platform_init(pdev, &mgmt->state);
|
||||
if (ret)
|
||||
goto failed_platform_init;
|
||||
|
||||
vchiq_debugfs_init(&mgmt->state);
|
||||
@ -1768,8 +1756,8 @@ static int vchiq_probe(struct platform_device *pdev)
|
||||
* Simply exit on error since the function handles cleanup in
|
||||
* cases of failure.
|
||||
*/
|
||||
err = vchiq_register_chrdev(&pdev->dev);
|
||||
if (err) {
|
||||
ret = vchiq_register_chrdev(&pdev->dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "arm: Failed to initialize vchiq cdev\n");
|
||||
goto error_exit;
|
||||
}
|
||||
@ -1782,18 +1770,26 @@ static int vchiq_probe(struct platform_device *pdev)
|
||||
failed_platform_init:
|
||||
dev_err(&pdev->dev, "arm: Could not initialize vchiq platform\n");
|
||||
error_exit:
|
||||
return err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void vchiq_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct vchiq_drv_mgmt *mgmt = dev_get_drvdata(&pdev->dev);
|
||||
struct vchiq_arm_state *arm_state;
|
||||
|
||||
vchiq_device_unregister(bcm2835_audio);
|
||||
vchiq_device_unregister(bcm2835_camera);
|
||||
vchiq_debugfs_deinit();
|
||||
vchiq_deregister_chrdev();
|
||||
|
||||
kthread_stop(mgmt->state.sync_thread);
|
||||
kthread_stop(mgmt->state.recycle_thread);
|
||||
kthread_stop(mgmt->state.slot_handler_thread);
|
||||
|
||||
arm_state = vchiq_platform_get_arm_state(&mgmt->state);
|
||||
kthread_stop(arm_state->ka_thread);
|
||||
|
||||
kfree(mgmt);
|
||||
}
|
||||
|
||||
|
@ -109,9 +109,6 @@ vchiq_release_service(struct vchiq_instance *instance, unsigned int handle);
|
||||
extern int
|
||||
vchiq_check_service(struct vchiq_service *service);
|
||||
|
||||
extern void
|
||||
vchiq_dump_platform_use_state(struct vchiq_state *state);
|
||||
|
||||
extern void
|
||||
vchiq_dump_service_use_state(struct vchiq_state *state);
|
||||
|
||||
|
@ -501,16 +501,21 @@ remote_event_create(wait_queue_head_t *wq, struct remote_event *event)
|
||||
* routines where switched to the "interruptible" family of functions, as the
|
||||
* former was deemed unjustified and the use "killable" set all VCHIQ's
|
||||
* threads in D state.
|
||||
*
|
||||
* Returns: 0 on success, a negative error code on failure
|
||||
*/
|
||||
static inline int
|
||||
remote_event_wait(wait_queue_head_t *wq, struct remote_event *event)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (!event->fired) {
|
||||
event->armed = 1;
|
||||
dsb(sy);
|
||||
if (wait_event_interruptible(*wq, event->fired)) {
|
||||
ret = wait_event_interruptible(*wq, event->fired);
|
||||
if (ret) {
|
||||
event->armed = 0;
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
event->armed = 0;
|
||||
/* Ensure that the peer sees that we are not waiting (armed == 0). */
|
||||
@ -518,7 +523,7 @@ remote_event_wait(wait_queue_head_t *wq, struct remote_event *event)
|
||||
}
|
||||
|
||||
event->fired = 0;
|
||||
return 1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1140,6 +1145,7 @@ queue_message_sync(struct vchiq_state *state, struct vchiq_service *service,
|
||||
struct vchiq_header *header;
|
||||
ssize_t callback_result;
|
||||
int svc_fourcc;
|
||||
int ret;
|
||||
|
||||
local = state->local;
|
||||
|
||||
@ -1147,7 +1153,9 @@ queue_message_sync(struct vchiq_state *state, struct vchiq_service *service,
|
||||
mutex_lock_killable(&state->sync_mutex))
|
||||
return -EAGAIN;
|
||||
|
||||
remote_event_wait(&state->sync_release_event, &local->sync_release);
|
||||
ret = remote_event_wait(&state->sync_release_event, &local->sync_release);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Ensure that reads don't overtake the remote_event_wait. */
|
||||
rmb();
|
||||
@ -1929,13 +1937,16 @@ slot_handler_func(void *v)
|
||||
{
|
||||
struct vchiq_state *state = v;
|
||||
struct vchiq_shared_state *local = state->local;
|
||||
int ret;
|
||||
|
||||
DEBUG_INITIALISE(local);
|
||||
|
||||
while (1) {
|
||||
while (!kthread_should_stop()) {
|
||||
DEBUG_COUNT(SLOT_HANDLER_COUNT);
|
||||
DEBUG_TRACE(SLOT_HANDLER_LINE);
|
||||
remote_event_wait(&state->trigger_event, &local->trigger);
|
||||
ret = remote_event_wait(&state->trigger_event, &local->trigger);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Ensure that reads don't overtake the remote_event_wait. */
|
||||
rmb();
|
||||
@ -1966,6 +1977,7 @@ recycle_func(void *v)
|
||||
struct vchiq_shared_state *local = state->local;
|
||||
u32 *found;
|
||||
size_t length;
|
||||
int ret;
|
||||
|
||||
length = sizeof(*found) * BITSET_SIZE(VCHIQ_MAX_SERVICES);
|
||||
|
||||
@ -1974,8 +1986,10 @@ recycle_func(void *v)
|
||||
if (!found)
|
||||
return -ENOMEM;
|
||||
|
||||
while (1) {
|
||||
remote_event_wait(&state->recycle_event, &local->recycle);
|
||||
while (!kthread_should_stop()) {
|
||||
ret = remote_event_wait(&state->recycle_event, &local->recycle);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
process_free_queue(state, found, length);
|
||||
}
|
||||
@ -1992,14 +2006,17 @@ sync_func(void *v)
|
||||
(struct vchiq_header *)SLOT_DATA_FROM_INDEX(state,
|
||||
state->remote->slot_sync);
|
||||
int svc_fourcc;
|
||||
int ret;
|
||||
|
||||
while (1) {
|
||||
while (!kthread_should_stop()) {
|
||||
struct vchiq_service *service;
|
||||
int msgid, size;
|
||||
int type;
|
||||
unsigned int localport, remoteport;
|
||||
|
||||
remote_event_wait(&state->sync_trigger_event, &local->sync_trigger);
|
||||
ret = remote_event_wait(&state->sync_trigger_event, &local->sync_trigger);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Ensure that reads don't overtake the remote_event_wait. */
|
||||
rmb();
|
||||
@ -2163,14 +2180,12 @@ vchiq_init_state(struct vchiq_state *state, struct vchiq_slot_zero *slot_zero, s
|
||||
mutex_init(&state->slot_mutex);
|
||||
mutex_init(&state->recycle_mutex);
|
||||
mutex_init(&state->sync_mutex);
|
||||
mutex_init(&state->bulk_transfer_mutex);
|
||||
|
||||
spin_lock_init(&state->msg_queue_spinlock);
|
||||
spin_lock_init(&state->bulk_waiter_spinlock);
|
||||
spin_lock_init(&state->quota_spinlock);
|
||||
|
||||
init_completion(&state->slot_available_event);
|
||||
init_completion(&state->slot_remove_event);
|
||||
init_completion(&state->data_quota_event);
|
||||
|
||||
state->slot_queue_available = 0;
|
||||
@ -3372,7 +3387,7 @@ vchiq_dump_shared_state(struct seq_file *f, struct vchiq_state *state,
|
||||
};
|
||||
int i;
|
||||
|
||||
seq_printf(f, " %s: slots %d-%d tx_pos=%x recycle=%x\n",
|
||||
seq_printf(f, " %s: slots %d-%d tx_pos=0x%x recycle=0x%x\n",
|
||||
label, shared->slot_first, shared->slot_last,
|
||||
shared->tx_pos, shared->slot_queue_recycle);
|
||||
|
||||
@ -3388,7 +3403,7 @@ vchiq_dump_shared_state(struct seq_file *f, struct vchiq_state *state,
|
||||
}
|
||||
|
||||
for (i = 1; i < shared->debug[DEBUG_ENTRIES]; i++) {
|
||||
seq_printf(f, " DEBUG: %s = %d(%x)\n",
|
||||
seq_printf(f, " DEBUG: %s = %d(0x%x)\n",
|
||||
debug_names[i], shared->debug[i], shared->debug[i]);
|
||||
}
|
||||
}
|
||||
@ -3416,7 +3431,7 @@ vchiq_dump_service_state(struct seq_file *f, struct vchiq_service *service)
|
||||
|
||||
if (service->public_fourcc != VCHIQ_FOURCC_INVALID)
|
||||
scnprintf(remoteport + len2, sizeof(remoteport) - len2,
|
||||
" (client %x)", service->client_id);
|
||||
" (client 0x%x)", service->client_id);
|
||||
} else {
|
||||
strscpy(remoteport, "n/a", sizeof(remoteport));
|
||||
}
|
||||
@ -3477,7 +3492,7 @@ void vchiq_dump_state(struct seq_file *f, struct vchiq_state *state)
|
||||
seq_printf(f, "State %d: %s\n", state->id,
|
||||
conn_state_names[state->conn_state]);
|
||||
|
||||
seq_printf(f, " tx_pos=%x(@%pK), rx_pos=%x(@%pK)\n",
|
||||
seq_printf(f, " tx_pos=0x%x(@%pK), rx_pos=0x%x(@%pK)\n",
|
||||
state->local->tx_pos,
|
||||
state->tx_data + (state->local_tx_pos & VCHIQ_SLOT_MASK),
|
||||
state->rx_pos,
|
||||
|
@ -347,8 +347,6 @@ struct vchiq_state {
|
||||
|
||||
struct mutex sync_mutex;
|
||||
|
||||
struct mutex bulk_transfer_mutex;
|
||||
|
||||
spinlock_t msg_queue_spinlock;
|
||||
|
||||
spinlock_t bulk_waiter_spinlock;
|
||||
@ -393,8 +391,6 @@ struct vchiq_state {
|
||||
/* Signalled when a free slot becomes available. */
|
||||
struct completion slot_available_event;
|
||||
|
||||
struct completion slot_remove_event;
|
||||
|
||||
/* Signalled when a free data slot becomes available. */
|
||||
struct completion data_quota_event;
|
||||
|
||||
@ -548,8 +544,6 @@ int vchiq_platform_init_state(struct vchiq_state *state);
|
||||
|
||||
int vchiq_check_service(struct vchiq_service *service);
|
||||
|
||||
void vchiq_on_remote_use_active(struct vchiq_state *state);
|
||||
|
||||
int vchiq_send_remote_use(struct vchiq_state *state);
|
||||
|
||||
int vchiq_send_remote_use_active(struct vchiq_state *state);
|
||||
|
@ -1324,7 +1324,7 @@ static struct miscdevice vchiq_miscdev = {
|
||||
* vchiq_register_chrdev - Register the char driver for vchiq
|
||||
* and create the necessary class and
|
||||
* device files in userspace.
|
||||
* @parent The parent of the char device.
|
||||
* @parent: The parent of the char device.
|
||||
*
|
||||
* Returns 0 on success else returns the error code.
|
||||
*/
|
||||
|
@ -655,7 +655,7 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
|
||||
{
|
||||
struct mmal_msg_context *msg_context;
|
||||
int ret;
|
||||
unsigned long timeout;
|
||||
unsigned long time_left;
|
||||
|
||||
/* payload size must not cause message to exceed max size */
|
||||
if (payload_len >
|
||||
@ -693,9 +693,9 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
|
||||
return ret;
|
||||
}
|
||||
|
||||
timeout = wait_for_completion_timeout(&msg_context->u.sync.cmplt,
|
||||
SYNC_MSG_TIMEOUT * HZ);
|
||||
if (timeout == 0) {
|
||||
time_left = wait_for_completion_timeout(&msg_context->u.sync.cmplt,
|
||||
SYNC_MSG_TIMEOUT * HZ);
|
||||
if (time_left == 0) {
|
||||
pr_err("timed out waiting for sync completion\n");
|
||||
ret = -ETIME;
|
||||
/* todo: what happens if the message arrives after aborting */
|
||||
|
@ -106,6 +106,7 @@ static struct vme_dev *vme_user_bridge; /* Pointer to user device */
|
||||
static const struct class vme_user_sysfs_class = {
|
||||
.name = DRIVER_NAME,
|
||||
};
|
||||
|
||||
static const int type[VME_DEVS] = { MASTER_MINOR, MASTER_MINOR,
|
||||
MASTER_MINOR, MASTER_MINOR,
|
||||
SLAVE_MINOR, SLAVE_MINOR,
|
||||
|
@ -11,7 +11,6 @@ TODO:
|
||||
- switch to use LIB80211
|
||||
- switch to use MAC80211
|
||||
- use kernel coding style
|
||||
- checkpatch.pl fixes
|
||||
- sparse fixes
|
||||
- integrate with drivers/net/wireless
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user