forked from espressif/esp-idf
Merge branch 'bugfix/backport_wifi_fix_1124_v4.3' into 'release/v4.3'
fix(wifi): backport some wifi bugfix(v4.3) See merge request espressif/esp-idf!27386
This commit is contained in:
@@ -3,8 +3,8 @@ ESP32C3 ECO3 ROM address table
|
||||
Version 3 API's imported from the ROM
|
||||
*/
|
||||
|
||||
esf_buf_alloc_dynamic = 0x400015c0;
|
||||
esf_buf_recycle = 0x400015c4;
|
||||
/*esf_buf_alloc_dynamic = 0x400015c0;*/
|
||||
/*esf_buf_recycle = 0x400015c4;*/
|
||||
/*lmacTxDone = 0x4000162c;*/
|
||||
ppMapTxQueue = 0x400016d8;
|
||||
/*rcGetSched = 0x40001764;*/
|
||||
|
@@ -1503,7 +1503,7 @@ r_sch_plan_offset_req_hook = 0x40001ce4;
|
||||
esp_pp_rom_version_get = 0x400015b0;
|
||||
RC_GetBlockAckTime = 0x400015b4;
|
||||
ebuf_list_remove = 0x400015b8;
|
||||
esf_buf_alloc = 0x400015bc;
|
||||
/*esf_buf_alloc = 0x400015bc;*/
|
||||
GetAccess = 0x400015c8;
|
||||
hal_mac_is_low_rate_enabled = 0x400015cc;
|
||||
hal_mac_tx_get_blockack = 0x400015d0;
|
||||
@@ -1559,10 +1559,10 @@ pm_rx_data_process = 0x40001694;
|
||||
pm_sleep_for = 0x4000169c;
|
||||
/* pm_tbtt_process = 0x400016a0; */
|
||||
ppAMPDU2Normal = 0x400016a4;
|
||||
ppAssembleAMPDU = 0x400016a8;
|
||||
/* ppAssembleAMPDU = 0x400016a8; */
|
||||
ppCalFrameTimes = 0x400016ac;
|
||||
ppCalSubFrameLength = 0x400016b0;
|
||||
ppCalTxAMPDULength = 0x400016b4;
|
||||
/* ppCalTxAMPDULength = 0x400016b4; */
|
||||
ppCheckTxAMPDUlength = 0x400016b8;
|
||||
ppDequeueRxq_Locked = 0x400016bc;
|
||||
ppDequeueTxQ = 0x400016c0;
|
||||
@@ -1582,7 +1582,7 @@ ppRecycleRxPkt = 0x400016f8;
|
||||
ppResortTxAMPDU = 0x400016fc;
|
||||
ppResumeTxAMPDU = 0x40001700;
|
||||
/* ppRxFragmentProc = 0x40001704; */
|
||||
ppRxPkt = 0x40001708;
|
||||
/* ppRxPkt = 0x40001708;*/
|
||||
ppRxProtoProc = 0x4000170c;
|
||||
ppSearchTxQueue = 0x40001710;
|
||||
ppSearchTxframe = 0x40001714;
|
||||
@@ -1609,7 +1609,7 @@ rcLowerSched = 0x40001768;
|
||||
rcSetTxAmpduLimit = 0x4000176c;
|
||||
/* rcTxUpdatePer = 0x40001770; */
|
||||
rcUpdateAckSnr = 0x40001774;
|
||||
rcUpdateRate = 0x40001778;
|
||||
/* rcUpdateRate = 0x40001778;*/
|
||||
/* rcUpdateTxDone = 0x4000177c; */
|
||||
rcUpdateTxDoneAmpdu2 = 0x40001780;
|
||||
rcUpSched = 0x40001784;
|
||||
@@ -1628,7 +1628,7 @@ wDev_AppendRxBlocks = 0x400017b8;
|
||||
wDev_DiscardFrame = 0x400017bc;
|
||||
wDev_GetNoiseFloor = 0x400017c0;
|
||||
wDev_IndicateAmpdu = 0x400017c4;
|
||||
wDev_IndicateFrame = 0x400017c8;
|
||||
/*wDev_IndicateFrame = 0x400017c8;*/
|
||||
wdev_bank_store = 0x400017cc;
|
||||
wdev_bank_load = 0x400017d0;
|
||||
wdev_mac_reg_load = 0x400017d4;
|
||||
@@ -1638,8 +1638,8 @@ wdev_mac_special_reg_store = 0x400017e0;
|
||||
wdev_mac_wakeup = 0x400017e4;
|
||||
wdev_mac_sleep = 0x400017e8;
|
||||
hal_mac_is_dma_enable = 0x400017ec;
|
||||
/* wDev_ProcessFiq = 0x400017f0; */
|
||||
wDev_ProcessRxSucData = 0x400017f4;
|
||||
/*wDev_ProcessFiq = 0x400017f0;*/
|
||||
/*wDev_ProcessRxSucData = 0x400017f4;*/
|
||||
wdevProcessRxSucDataAll = 0x400017f8;
|
||||
wdev_csi_len_align = 0x400017fc;
|
||||
ppDequeueTxDone_Locked = 0x40001800;
|
||||
|
@@ -117,6 +117,40 @@ menu "Wi-Fi"
|
||||
can deliver frames faster than WiFi layer can transmit. In these cases, we may run out of TX
|
||||
buffers.
|
||||
|
||||
choice ESP_WIFI_MGMT_RX_BUFFER
|
||||
prompt "Type of WiFi RX MGMT buffers"
|
||||
default ESP_WIFI_STATIC_RX_MGMT_BUFFER
|
||||
help
|
||||
Select type of WiFi RX MGMT buffers:
|
||||
|
||||
If "Static" is selected, WiFi RX MGMT buffers are allocated when WiFi is initialized and released
|
||||
when WiFi is de-initialized. The size of each static RX MGMT buffer is fixed to about 500 Bytes.
|
||||
|
||||
If "Dynamic" is selected, each WiFi RX MGMT buffer is allocated as needed when a MGMT data frame is
|
||||
received. The MGMT buffer is freed after the MGMT data frame has been processed by the WiFi driver.
|
||||
|
||||
|
||||
config ESP_WIFI_STATIC_RX_MGMT_BUFFER
|
||||
bool "Static"
|
||||
config ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER
|
||||
bool "Dynamic"
|
||||
endchoice
|
||||
|
||||
config ESP_WIFI_DYNAMIC_RX_MGMT_BUF
|
||||
int
|
||||
default 0 if ESP_WIFI_STATIC_RX_MGMT_BUFFER
|
||||
default 1 if ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER
|
||||
|
||||
config ESP_WIFI_RX_MGMT_BUF_NUM_DEF
|
||||
int "Max number of WiFi RX MGMT buffers"
|
||||
range 1 10
|
||||
default 5
|
||||
help
|
||||
Set the number of WiFi RX_MGMT buffers.
|
||||
|
||||
For Management buffers, the number of dynamic and static management buffers is the same.
|
||||
In order to prevent memory fragmentation, the management buffer type should be set to static first.
|
||||
|
||||
config ESP32_WIFI_CSI_ENABLED
|
||||
bool "WiFi CSI(Channel State Information)"
|
||||
default n
|
||||
|
@@ -95,6 +95,8 @@ typedef struct {
|
||||
int tx_buf_type; /**< WiFi TX buffer type */
|
||||
int static_tx_buf_num; /**< WiFi static TX buffer number */
|
||||
int dynamic_tx_buf_num; /**< WiFi dynamic TX buffer number */
|
||||
int rx_mgmt_buf_type; /**< WiFi RX MGMT buffer type */
|
||||
int rx_mgmt_buf_num; /**< WiFi RX MGMT buffer number */
|
||||
int cache_tx_buf_num; /**< WiFi TX cache buffer number */
|
||||
int csi_enable; /**< WiFi channel state information enable flag */
|
||||
int ampdu_rx_enable; /**< WiFi AMPDU RX feature enable flag */
|
||||
@@ -129,6 +131,12 @@ typedef struct {
|
||||
#define WIFI_DYNAMIC_TX_BUFFER_NUM 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF
|
||||
#define WIFI_RX_MGMT_BUF_NUM_DEF CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF
|
||||
#else
|
||||
#define WIFI_RX_MGMT_BUF_NUM_DEF 0
|
||||
#endif
|
||||
|
||||
#if CONFIG_ESP32_WIFI_CSI_ENABLED
|
||||
#define WIFI_CSI_ENABLED 1
|
||||
#else
|
||||
@@ -214,6 +222,8 @@ extern uint64_t g_wifi_feature_caps;
|
||||
.tx_buf_type = CONFIG_ESP32_WIFI_TX_BUFFER_TYPE,\
|
||||
.static_tx_buf_num = WIFI_STATIC_TX_BUFFER_NUM,\
|
||||
.dynamic_tx_buf_num = WIFI_DYNAMIC_TX_BUFFER_NUM,\
|
||||
.rx_mgmt_buf_type = CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF,\
|
||||
.rx_mgmt_buf_num = WIFI_RX_MGMT_BUF_NUM_DEF,\
|
||||
.cache_tx_buf_num = WIFI_CACHE_TX_BUFFER_NUM,\
|
||||
.csi_enable = WIFI_CSI_ENABLED,\
|
||||
.ampdu_rx_enable = WIFI_AMPDU_RX_ENABLED,\
|
||||
@@ -426,7 +436,7 @@ esp_err_t esp_wifi_scan_stop(void);
|
||||
/**
|
||||
* @brief Get number of APs found in last scan
|
||||
*
|
||||
* @param[out] number store number of APIs found in last scan
|
||||
* @param[out] number store number of APs found in last scan
|
||||
*
|
||||
* @attention This API can only be called when the scan is completed, otherwise it may get wrong value.
|
||||
*
|
||||
@@ -807,7 +817,7 @@ esp_err_t esp_wifi_get_promiscuous_ctrl_filter(wifi_promiscuous_filter_t *filter
|
||||
* - ESP_ERR_WIFI_MODE: invalid mode
|
||||
* - ESP_ERR_WIFI_PASSWORD: invalid password
|
||||
* - ESP_ERR_WIFI_NVS: WiFi internal NVS error
|
||||
* - others: refer to the erro code in esp_err.h
|
||||
* - others: refer to the error code in esp_err.h
|
||||
*/
|
||||
esp_err_t esp_wifi_set_config(wifi_interface_t interface, wifi_config_t *conf);
|
||||
|
||||
|
Submodule components/esp_wifi/lib updated: d0159b0764...1920f9c051
@@ -257,6 +257,7 @@
|
||||
/* bits 0-3: Field length (n-1) */
|
||||
#define WLAN_RSNX_CAPAB_SAE_H2E 5
|
||||
|
||||
#define WLAN_EXT_CAPAB_20_40_COEX 0
|
||||
#define WLAN_EXT_CAPAB_BSS_TRANSITION 19
|
||||
|
||||
/* Action frame categories (IEEE Std 802.11-2016, 9.4.1.11, Table 9-76) */
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include "esp_rrm.h"
|
||||
#include "esp_wnm.h"
|
||||
#include "rsn_supp/wpa.h"
|
||||
#include "esp_private/wifi.h"
|
||||
|
||||
|
||||
struct wpa_supplicant g_wpa_supp;
|
||||
@@ -489,6 +490,7 @@ static uint8_t get_extended_caps_ie(uint8_t *ie, size_t len)
|
||||
uint8_t ext_caps_ie[5] = {0};
|
||||
uint8_t ext_caps_ie_len = 3;
|
||||
uint8_t *pos = ext_caps_ie;
|
||||
wifi_ioctl_config_t cfg = {0};
|
||||
|
||||
if (!esp_wifi_is_btm_enabled_internal(WIFI_IF_STA)) {
|
||||
return 0;
|
||||
@@ -496,7 +498,12 @@ static uint8_t get_extended_caps_ie(uint8_t *ie, size_t len)
|
||||
|
||||
*pos++ = WLAN_EID_EXT_CAPAB;
|
||||
*pos++ = ext_caps_ie_len;
|
||||
*pos++ = 0;
|
||||
esp_err_t err = esp_wifi_internal_ioctl(WIFI_IOCTL_GET_STA_HT2040_COEX, &cfg);
|
||||
if (err == ESP_OK && cfg.data.ht2040_coex.enable) {
|
||||
*pos++ |= BIT(WLAN_EXT_CAPAB_20_40_COEX);
|
||||
} else {
|
||||
*pos++ = 0;
|
||||
}
|
||||
*pos++ = 0;
|
||||
#define CAPAB_BSS_TRANSITION BIT(3)
|
||||
*pos |= CAPAB_BSS_TRANSITION;
|
||||
|
Reference in New Issue
Block a user