mirror of
https://github.com/espressif/esp-idf.git
synced 2024-09-20 00:36:01 -04: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:
commit
e62727886e
@ -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_process_tim = 0x4000168c;
|
||||
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;
|
||||
@ -1581,7 +1581,7 @@ ppRecycleRxPkt = 0x400016f8;
|
||||
ppResortTxAMPDU = 0x400016fc;
|
||||
ppResumeTxAMPDU = 0x40001700;
|
||||
/* ppRxFragmentProc = 0x40001704; */
|
||||
ppRxPkt = 0x40001708;
|
||||
/* ppRxPkt = 0x40001708;*/
|
||||
ppRxProtoProc = 0x4000170c;
|
||||
ppSearchTxQueue = 0x40001710;
|
||||
ppSearchTxframe = 0x40001714;
|
||||
@ -1608,7 +1608,7 @@ rcLowerSched = 0x40001768;
|
||||
rcSetTxAmpduLimit = 0x4000176c;
|
||||
/* rcTxUpdatePer = 0x40001770;*/
|
||||
rcUpdateAckSnr = 0x40001774;
|
||||
rcUpdateRate = 0x40001778;
|
||||
/* rcUpdateRate = 0x40001778;*/
|
||||
/* rcUpdateTxDone = 0x4000177c; */
|
||||
rcUpdateTxDoneAmpdu2 = 0x40001780;
|
||||
rcUpSched = 0x40001784;
|
||||
@ -1627,7 +1627,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;
|
||||
@ -1637,8 +1637,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;
|
||||
@ -1722,7 +1722,7 @@ ieee80211_ampdu_start_age_timer = 0x40001858;
|
||||
/*ieee80211_encap_esfbuf = 0x4000185c;*/
|
||||
ieee80211_is_tx_allowed = 0x40001860;
|
||||
ieee80211_output_pending_eb = 0x40001864;
|
||||
ieee80211_output_process = 0x40001868;
|
||||
/* ieee80211_output_process = 0x40001868;*/
|
||||
ieee80211_set_tx_desc = 0x4000186c;
|
||||
rom_sta_input = 0x40001870;
|
||||
wifi_get_macaddr = 0x40001874;
|
||||
|
@ -2030,7 +2030,7 @@ ieee80211_ampdu_start_age_timer = 0x40005a60;
|
||||
/* ieee80211_encap_esfbuf = 0x40005a6c; */
|
||||
ieee80211_is_tx_allowed = 0x40005a78;
|
||||
ieee80211_output_pending_eb = 0x40005a84;
|
||||
ieee80211_output_process = 0x40005a90;
|
||||
/* ieee80211_output_process = 0x40005a90;*/
|
||||
ieee80211_set_tx_desc = 0x40005a9c;
|
||||
/*sta_input = 0x40005aa8;*/
|
||||
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
|
||||
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 */
|
||||
@ -130,6 +132,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
|
||||
@ -215,6 +223,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,\
|
||||
@ -431,7 +441,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.
|
||||
*
|
||||
@ -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_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);
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 80782b71525cb9543a664e65fdd576332cde622b
|
||||
Subproject commit c5a5c931cab8ad88e719c803b255b05fc900a524
|
@ -988,37 +988,37 @@ int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
|
||||
static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
|
||||
const wifi_wpa_igtk_t *igtk)
|
||||
{
|
||||
size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
|
||||
u16 keyidx = WPA_GET_LE16(igtk->keyid);
|
||||
size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
|
||||
u16 keyidx = WPA_GET_LE16(igtk->keyid);
|
||||
|
||||
/* Detect possible key reinstallation */
|
||||
if (sm->igtk.igtk_len == len &&
|
||||
os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
|
||||
keyidx);
|
||||
return 0;
|
||||
}
|
||||
/* Detect possible key reinstallation */
|
||||
if (sm->igtk.igtk_len == len &&
|
||||
os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
|
||||
keyidx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
|
||||
keyidx, MAC2STR(igtk->pn));
|
||||
wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
|
||||
if (keyidx > 4095) {
|
||||
wpa_printf(MSG_WARNING,
|
||||
"WPA: Invalid IGTK KeyID %d", keyidx);
|
||||
return -1;
|
||||
}
|
||||
if (esp_wifi_set_igtk_internal(WIFI_IF_STA, igtk) < 0) {
|
||||
wpa_printf(MSG_WARNING,
|
||||
"WPA: Failed to configure IGTK to the driver");
|
||||
return -1;
|
||||
}
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
|
||||
keyidx, MAC2STR(igtk->pn));
|
||||
wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
|
||||
|
||||
sm->igtk.igtk_len = len;
|
||||
os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
|
||||
if (esp_wifi_set_igtk_internal(WIFI_IF_STA, igtk) < 0) {
|
||||
if (keyidx > 4095) {
|
||||
wpa_printf(MSG_WARNING,
|
||||
"WPA: Invalid IGTK KeyID %d", keyidx);
|
||||
}
|
||||
wpa_printf(MSG_WARNING,
|
||||
"WPA: Failed to configure IGTK to the driver");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
sm->igtk.igtk_len = len;
|
||||
os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_IEEE80211W */
|
||||
|
||||
|
@ -149,10 +149,11 @@ static void wifi_scan(void)
|
||||
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
|
||||
ESP_ERROR_CHECK(esp_wifi_start());
|
||||
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_num(&ap_count));
|
||||
ESP_LOGI(TAG, "Total APs scanned = %u", ap_count);
|
||||
for (int i = 0; (i < DEFAULT_SCAN_LIST_SIZE) && (i < ap_count); i++) {
|
||||
ESP_LOGI(TAG, "Total APs scanned = %u, actual AP number ap_info holds = %u", ap_count, number);
|
||||
for (int i = 0; i < number; i++) {
|
||||
ESP_LOGI(TAG, "SSID \t\t%s", ap_info[i].ssid);
|
||||
ESP_LOGI(TAG, "RSSI \t\t%d", ap_info[i].rssi);
|
||||
print_auth_mode(ap_info[i].authmode);
|
||||
|
Loading…
Reference in New Issue
Block a user