mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 20:24:32 +02:00
Merge branch 'bugfix/backport_wifi_fix_1130_v4.4' into 'release/v4.4'
fix(wifi): backport some wifi bugfix(v4.4) See merge request espressif/esp-idf!27507
This commit is contained in:
@@ -3,8 +3,8 @@ ESP32C3 ECO3 ROM address table
|
|||||||
Version 3 API's imported from the ROM
|
Version 3 API's imported from the ROM
|
||||||
*/
|
*/
|
||||||
|
|
||||||
esf_buf_alloc_dynamic = 0x400015c0;
|
/*esf_buf_alloc_dynamic = 0x400015c0;*/
|
||||||
esf_buf_recycle = 0x400015c4;
|
/*esf_buf_recycle = 0x400015c4;*/
|
||||||
/*lmacTxDone = 0x4000162c;*/
|
/*lmacTxDone = 0x4000162c;*/
|
||||||
ppMapTxQueue = 0x400016d8;
|
ppMapTxQueue = 0x400016d8;
|
||||||
/*rcGetSched = 0x40001764;*/
|
/*rcGetSched = 0x40001764;*/
|
||||||
|
@@ -1503,7 +1503,7 @@ r_sch_plan_offset_req_hook = 0x40001ce4;
|
|||||||
esp_pp_rom_version_get = 0x400015b0;
|
esp_pp_rom_version_get = 0x400015b0;
|
||||||
RC_GetBlockAckTime = 0x400015b4;
|
RC_GetBlockAckTime = 0x400015b4;
|
||||||
ebuf_list_remove = 0x400015b8;
|
ebuf_list_remove = 0x400015b8;
|
||||||
esf_buf_alloc = 0x400015bc;
|
/*esf_buf_alloc = 0x400015bc;*/
|
||||||
GetAccess = 0x400015c8;
|
GetAccess = 0x400015c8;
|
||||||
hal_mac_is_low_rate_enabled = 0x400015cc;
|
hal_mac_is_low_rate_enabled = 0x400015cc;
|
||||||
hal_mac_tx_get_blockack = 0x400015d0;
|
hal_mac_tx_get_blockack = 0x400015d0;
|
||||||
@@ -1559,10 +1559,10 @@ pm_process_tim = 0x4000168c;
|
|||||||
pm_sleep_for = 0x4000169c;
|
pm_sleep_for = 0x4000169c;
|
||||||
/* pm_tbtt_process = 0x400016a0; */
|
/* pm_tbtt_process = 0x400016a0; */
|
||||||
ppAMPDU2Normal = 0x400016a4;
|
ppAMPDU2Normal = 0x400016a4;
|
||||||
ppAssembleAMPDU = 0x400016a8;
|
/* ppAssembleAMPDU = 0x400016a8; */
|
||||||
ppCalFrameTimes = 0x400016ac;
|
ppCalFrameTimes = 0x400016ac;
|
||||||
ppCalSubFrameLength = 0x400016b0;
|
ppCalSubFrameLength = 0x400016b0;
|
||||||
ppCalTxAMPDULength = 0x400016b4;
|
/* ppCalTxAMPDULength = 0x400016b4; */
|
||||||
ppCheckTxAMPDUlength = 0x400016b8;
|
ppCheckTxAMPDUlength = 0x400016b8;
|
||||||
ppDequeueRxq_Locked = 0x400016bc;
|
ppDequeueRxq_Locked = 0x400016bc;
|
||||||
ppDequeueTxQ = 0x400016c0;
|
ppDequeueTxQ = 0x400016c0;
|
||||||
@@ -1581,7 +1581,7 @@ ppRecycleRxPkt = 0x400016f8;
|
|||||||
ppResortTxAMPDU = 0x400016fc;
|
ppResortTxAMPDU = 0x400016fc;
|
||||||
ppResumeTxAMPDU = 0x40001700;
|
ppResumeTxAMPDU = 0x40001700;
|
||||||
/* ppRxFragmentProc = 0x40001704; */
|
/* ppRxFragmentProc = 0x40001704; */
|
||||||
ppRxPkt = 0x40001708;
|
/* ppRxPkt = 0x40001708;*/
|
||||||
ppRxProtoProc = 0x4000170c;
|
ppRxProtoProc = 0x4000170c;
|
||||||
ppSearchTxQueue = 0x40001710;
|
ppSearchTxQueue = 0x40001710;
|
||||||
ppSearchTxframe = 0x40001714;
|
ppSearchTxframe = 0x40001714;
|
||||||
@@ -1608,7 +1608,7 @@ rcLowerSched = 0x40001768;
|
|||||||
rcSetTxAmpduLimit = 0x4000176c;
|
rcSetTxAmpduLimit = 0x4000176c;
|
||||||
/* rcTxUpdatePer = 0x40001770;*/
|
/* rcTxUpdatePer = 0x40001770;*/
|
||||||
rcUpdateAckSnr = 0x40001774;
|
rcUpdateAckSnr = 0x40001774;
|
||||||
rcUpdateRate = 0x40001778;
|
/* rcUpdateRate = 0x40001778;*/
|
||||||
/* rcUpdateTxDone = 0x4000177c; */
|
/* rcUpdateTxDone = 0x4000177c; */
|
||||||
rcUpdateTxDoneAmpdu2 = 0x40001780;
|
rcUpdateTxDoneAmpdu2 = 0x40001780;
|
||||||
rcUpSched = 0x40001784;
|
rcUpSched = 0x40001784;
|
||||||
@@ -1627,7 +1627,7 @@ wDev_AppendRxBlocks = 0x400017b8;
|
|||||||
wDev_DiscardFrame = 0x400017bc;
|
wDev_DiscardFrame = 0x400017bc;
|
||||||
wDev_GetNoiseFloor = 0x400017c0;
|
wDev_GetNoiseFloor = 0x400017c0;
|
||||||
wDev_IndicateAmpdu = 0x400017c4;
|
wDev_IndicateAmpdu = 0x400017c4;
|
||||||
wDev_IndicateFrame = 0x400017c8;
|
/*wDev_IndicateFrame = 0x400017c8;*/
|
||||||
wdev_bank_store = 0x400017cc;
|
wdev_bank_store = 0x400017cc;
|
||||||
wdev_bank_load = 0x400017d0;
|
wdev_bank_load = 0x400017d0;
|
||||||
wdev_mac_reg_load = 0x400017d4;
|
wdev_mac_reg_load = 0x400017d4;
|
||||||
@@ -1637,8 +1637,8 @@ wdev_mac_special_reg_store = 0x400017e0;
|
|||||||
wdev_mac_wakeup = 0x400017e4;
|
wdev_mac_wakeup = 0x400017e4;
|
||||||
wdev_mac_sleep = 0x400017e8;
|
wdev_mac_sleep = 0x400017e8;
|
||||||
hal_mac_is_dma_enable = 0x400017ec;
|
hal_mac_is_dma_enable = 0x400017ec;
|
||||||
/* wDev_ProcessFiq = 0x400017f0; */
|
/*wDev_ProcessFiq = 0x400017f0;*/
|
||||||
wDev_ProcessRxSucData = 0x400017f4;
|
/*wDev_ProcessRxSucData = 0x400017f4;*/
|
||||||
wdevProcessRxSucDataAll = 0x400017f8;
|
wdevProcessRxSucDataAll = 0x400017f8;
|
||||||
wdev_csi_len_align = 0x400017fc;
|
wdev_csi_len_align = 0x400017fc;
|
||||||
ppDequeueTxDone_Locked = 0x40001800;
|
ppDequeueTxDone_Locked = 0x40001800;
|
||||||
@@ -1722,7 +1722,7 @@ ieee80211_ampdu_start_age_timer = 0x40001858;
|
|||||||
/*ieee80211_encap_esfbuf = 0x4000185c;*/
|
/*ieee80211_encap_esfbuf = 0x4000185c;*/
|
||||||
ieee80211_is_tx_allowed = 0x40001860;
|
ieee80211_is_tx_allowed = 0x40001860;
|
||||||
ieee80211_output_pending_eb = 0x40001864;
|
ieee80211_output_pending_eb = 0x40001864;
|
||||||
ieee80211_output_process = 0x40001868;
|
/* ieee80211_output_process = 0x40001868;*/
|
||||||
ieee80211_set_tx_desc = 0x4000186c;
|
ieee80211_set_tx_desc = 0x4000186c;
|
||||||
rom_sta_input = 0x40001870;
|
rom_sta_input = 0x40001870;
|
||||||
wifi_get_macaddr = 0x40001874;
|
wifi_get_macaddr = 0x40001874;
|
||||||
|
@@ -2030,7 +2030,7 @@ ieee80211_ampdu_start_age_timer = 0x40005a60;
|
|||||||
/* ieee80211_encap_esfbuf = 0x40005a6c; */
|
/* ieee80211_encap_esfbuf = 0x40005a6c; */
|
||||||
ieee80211_is_tx_allowed = 0x40005a78;
|
ieee80211_is_tx_allowed = 0x40005a78;
|
||||||
ieee80211_output_pending_eb = 0x40005a84;
|
ieee80211_output_pending_eb = 0x40005a84;
|
||||||
ieee80211_output_process = 0x40005a90;
|
/* ieee80211_output_process = 0x40005a90;*/
|
||||||
ieee80211_set_tx_desc = 0x40005a9c;
|
ieee80211_set_tx_desc = 0x40005a9c;
|
||||||
/*sta_input = 0x40005aa8;*/
|
/*sta_input = 0x40005aa8;*/
|
||||||
wifi_get_macaddr = 0x40005ab4;
|
wifi_get_macaddr = 0x40005ab4;
|
||||||
|
@@ -122,6 +122,40 @@ menu "Wi-Fi"
|
|||||||
can deliver frames faster than WiFi layer can transmit. In these cases, we may run out of TX
|
can deliver frames faster than WiFi layer can transmit. In these cases, we may run out of TX
|
||||||
buffers.
|
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
|
config ESP32_WIFI_CSI_ENABLED
|
||||||
bool "WiFi CSI(Channel State Information)"
|
bool "WiFi CSI(Channel State Information)"
|
||||||
default n
|
default n
|
||||||
|
@@ -95,6 +95,8 @@ typedef struct {
|
|||||||
int tx_buf_type; /**< WiFi TX buffer type */
|
int tx_buf_type; /**< WiFi TX buffer type */
|
||||||
int static_tx_buf_num; /**< WiFi static TX buffer number */
|
int static_tx_buf_num; /**< WiFi static TX buffer number */
|
||||||
int dynamic_tx_buf_num; /**< WiFi dynamic 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 cache_tx_buf_num; /**< WiFi TX cache buffer number */
|
||||||
int csi_enable; /**< WiFi channel state information enable flag */
|
int csi_enable; /**< WiFi channel state information enable flag */
|
||||||
int ampdu_rx_enable; /**< WiFi AMPDU RX feature enable flag */
|
int ampdu_rx_enable; /**< WiFi AMPDU RX feature enable flag */
|
||||||
@@ -130,6 +132,12 @@ typedef struct {
|
|||||||
#define WIFI_DYNAMIC_TX_BUFFER_NUM 0
|
#define WIFI_DYNAMIC_TX_BUFFER_NUM 0
|
||||||
#endif
|
#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
|
#if CONFIG_ESP32_WIFI_CSI_ENABLED
|
||||||
#define WIFI_CSI_ENABLED 1
|
#define WIFI_CSI_ENABLED 1
|
||||||
#else
|
#else
|
||||||
@@ -215,6 +223,8 @@ extern uint64_t g_wifi_feature_caps;
|
|||||||
.tx_buf_type = CONFIG_ESP32_WIFI_TX_BUFFER_TYPE,\
|
.tx_buf_type = CONFIG_ESP32_WIFI_TX_BUFFER_TYPE,\
|
||||||
.static_tx_buf_num = WIFI_STATIC_TX_BUFFER_NUM,\
|
.static_tx_buf_num = WIFI_STATIC_TX_BUFFER_NUM,\
|
||||||
.dynamic_tx_buf_num = WIFI_DYNAMIC_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,\
|
.cache_tx_buf_num = WIFI_CACHE_TX_BUFFER_NUM,\
|
||||||
.csi_enable = WIFI_CSI_ENABLED,\
|
.csi_enable = WIFI_CSI_ENABLED,\
|
||||||
.ampdu_rx_enable = WIFI_AMPDU_RX_ENABLED,\
|
.ampdu_rx_enable = WIFI_AMPDU_RX_ENABLED,\
|
||||||
@@ -431,7 +441,7 @@ esp_err_t esp_wifi_scan_stop(void);
|
|||||||
/**
|
/**
|
||||||
* @brief Get number of APs found in last scan
|
* @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.
|
* @attention This API can only be called when the scan is completed, otherwise it may get wrong value.
|
||||||
*
|
*
|
||||||
@@ -812,7 +822,7 @@ esp_err_t esp_wifi_get_promiscuous_ctrl_filter(wifi_promiscuous_filter_t *filter
|
|||||||
* - ESP_ERR_WIFI_MODE: invalid mode
|
* - ESP_ERR_WIFI_MODE: invalid mode
|
||||||
* - ESP_ERR_WIFI_PASSWORD: invalid password
|
* - ESP_ERR_WIFI_PASSWORD: invalid password
|
||||||
* - ESP_ERR_WIFI_NVS: WiFi internal NVS error
|
* - 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);
|
esp_err_t esp_wifi_set_config(wifi_interface_t interface, wifi_config_t *conf);
|
||||||
|
|
||||||
|
Submodule components/esp_wifi/lib updated: 80782b7152...c5a5c931ca
@@ -1004,12 +1004,12 @@ static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
|
|||||||
"WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
|
"WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
|
||||||
keyidx, MAC2STR(igtk->pn));
|
keyidx, MAC2STR(igtk->pn));
|
||||||
wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
|
wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
|
||||||
|
|
||||||
|
if (esp_wifi_set_igtk_internal(WIFI_IF_STA, igtk) < 0) {
|
||||||
if (keyidx > 4095) {
|
if (keyidx > 4095) {
|
||||||
wpa_printf(MSG_WARNING,
|
wpa_printf(MSG_WARNING,
|
||||||
"WPA: Invalid IGTK KeyID %d", keyidx);
|
"WPA: Invalid IGTK KeyID %d", keyidx);
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
if (esp_wifi_set_igtk_internal(WIFI_IF_STA, igtk) < 0) {
|
|
||||||
wpa_printf(MSG_WARNING,
|
wpa_printf(MSG_WARNING,
|
||||||
"WPA: Failed to configure IGTK to the driver");
|
"WPA: Failed to configure IGTK to the driver");
|
||||||
return -1;
|
return -1;
|
||||||
|
@@ -149,10 +149,11 @@ static void wifi_scan(void)
|
|||||||
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
|
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
|
||||||
ESP_ERROR_CHECK(esp_wifi_start());
|
ESP_ERROR_CHECK(esp_wifi_start());
|
||||||
esp_wifi_scan_start(NULL, true);
|
esp_wifi_scan_start(NULL, true);
|
||||||
|
ESP_LOGI(TAG, "Max AP number ap_info can hold = %u", number);
|
||||||
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
|
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
|
||||||
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));
|
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));
|
||||||
ESP_LOGI(TAG, "Total APs scanned = %u", ap_count);
|
ESP_LOGI(TAG, "Total APs scanned = %u, actual AP number ap_info holds = %u", ap_count, number);
|
||||||
for (int i = 0; (i < DEFAULT_SCAN_LIST_SIZE) && (i < ap_count); i++) {
|
for (int i = 0; i < number; i++) {
|
||||||
ESP_LOGI(TAG, "SSID \t\t%s", ap_info[i].ssid);
|
ESP_LOGI(TAG, "SSID \t\t%s", ap_info[i].ssid);
|
||||||
ESP_LOGI(TAG, "RSSI \t\t%d", ap_info[i].rssi);
|
ESP_LOGI(TAG, "RSSI \t\t%d", ap_info[i].rssi);
|
||||||
print_auth_mode(ap_info[i].authmode);
|
print_auth_mode(ap_info[i].authmode);
|
||||||
|
Reference in New Issue
Block a user