esp_wifi/wifi/
internal.rs

1use esp_wifi_sys::include::{
2    ESP_WIFI_OS_ADAPTER_MAGIC,
3    ESP_WIFI_OS_ADAPTER_VERSION,
4    WIFI_INIT_CONFIG_MAGIC,
5    wifi_init_config_t,
6    wifi_osi_funcs_t,
7    wpa_crypto_funcs_t,
8};
9
10use super::os_adapter::*;
11use crate::common_adapter::*;
12
13#[cfg(all(coex, any(esp32, esp32c2, esp32c3, esp32c6, esp32s3)))]
14pub(super) static mut G_COEX_ADAPTER_FUNCS: crate::binary::include::coex_adapter_funcs_t =
15    crate::binary::include::coex_adapter_funcs_t {
16        _version: crate::binary::include::COEX_ADAPTER_VERSION as i32,
17        _task_yield_from_isr: Some(task_yield_from_isr),
18        _semphr_create: Some(semphr_create),
19        _semphr_delete: Some(semphr_delete),
20        _semphr_take_from_isr: Some(semphr_take_from_isr_wrapper),
21        _semphr_give_from_isr: Some(semphr_give_from_isr_wrapper),
22        _semphr_take: Some(semphr_take),
23        _semphr_give: Some(semphr_give),
24        _is_in_isr: Some(is_in_isr_wrapper),
25        _malloc_internal: Some(malloc),
26        _free: Some(free),
27        _esp_timer_get_time: Some(esp_timer_get_time),
28        _env_is_chip: Some(env_is_chip),
29        _magic: crate::binary::include::COEX_ADAPTER_MAGIC as i32,
30        _timer_disarm: Some(ets_timer_disarm),
31        _timer_done: Some(ets_timer_done),
32        _timer_setfn: Some(ets_timer_setfn),
33        _timer_arm_us: Some(ets_timer_arm_us),
34
35        #[cfg(esp32)]
36        _spin_lock_create: Some(spin_lock_create),
37        #[cfg(esp32)]
38        _spin_lock_delete: Some(spin_lock_delete),
39        #[cfg(esp32)]
40        _int_disable: Some(wifi_int_disable),
41        #[cfg(esp32)]
42        _int_enable: Some(wifi_int_restore),
43
44        #[cfg(esp32c2)]
45        _slowclk_cal_get: Some(slowclk_cal_get),
46    };
47
48#[cfg(coex)]
49unsafe extern "C" fn semphr_take_from_isr_wrapper(
50    semphr: *mut crate::binary::c_types::c_void,
51    hptw: *mut crate::binary::c_types::c_void,
52) -> i32 {
53    unsafe { crate::common_adapter::semphr_take_from_isr(semphr as *const (), hptw as *const ()) }
54}
55
56#[cfg(coex)]
57unsafe extern "C" fn semphr_give_from_isr_wrapper(
58    semphr: *mut crate::binary::c_types::c_void,
59    hptw: *mut crate::binary::c_types::c_void,
60) -> i32 {
61    unsafe { crate::common_adapter::semphr_give_from_isr(semphr as *const (), hptw as *const ()) }
62}
63
64#[cfg(coex)]
65unsafe extern "C" fn is_in_isr_wrapper() -> i32 {
66    crate::is_interrupts_disabled() as i32
67}
68
69#[unsafe(no_mangle)]
70static g_wifi_osi_funcs: wifi_osi_funcs_t = wifi_osi_funcs_t {
71    _version: ESP_WIFI_OS_ADAPTER_VERSION as i32,
72    _env_is_chip: Some(env_is_chip),
73    _set_intr: Some(set_intr),
74    _clear_intr: Some(clear_intr),
75    _set_isr: Some(os_adapter_chip_specific::set_isr),
76    _ints_on: Some(ints_on),
77    _ints_off: Some(ints_off),
78    _is_from_isr: Some(is_from_isr),
79    _spin_lock_create: Some(spin_lock_create),
80    _spin_lock_delete: Some(spin_lock_delete),
81    _wifi_int_disable: Some(wifi_int_disable),
82    _wifi_int_restore: Some(wifi_int_restore),
83    _task_yield_from_isr: Some(task_yield_from_isr),
84    _semphr_create: Some(semphr_create),
85    _semphr_delete: Some(semphr_delete),
86    _semphr_take: Some(semphr_take),
87    _semphr_give: Some(semphr_give),
88    _wifi_thread_semphr_get: Some(wifi_thread_semphr_get),
89    _mutex_create: Some(mutex_create),
90    _recursive_mutex_create: Some(recursive_mutex_create),
91    _mutex_delete: Some(mutex_delete),
92    _mutex_lock: Some(mutex_lock),
93    _mutex_unlock: Some(mutex_unlock),
94    _queue_create: Some(queue_create),
95    _queue_delete: Some(queue_delete),
96    _queue_send: Some(queue_send),
97    _queue_send_from_isr: Some(queue_send_from_isr),
98    _queue_send_to_back: Some(queue_send_to_back),
99    _queue_send_to_front: Some(queue_send_to_front),
100    _queue_recv: Some(queue_recv),
101    _queue_msg_waiting: Some(queue_msg_waiting),
102    _event_group_create: Some(event_group_create),
103    _event_group_delete: Some(event_group_delete),
104    _event_group_set_bits: Some(event_group_set_bits),
105    _event_group_clear_bits: Some(event_group_clear_bits),
106    _event_group_wait_bits: Some(event_group_wait_bits),
107    _task_create_pinned_to_core: Some(task_create_pinned_to_core),
108    _task_create: Some(task_create),
109    _task_delete: Some(task_delete),
110    _task_delay: Some(task_delay),
111    _task_ms_to_tick: Some(task_ms_to_tick),
112    _task_get_current_task: Some(task_get_current_task),
113    _task_get_max_priority: Some(task_get_max_priority),
114    _malloc: Some(malloc),
115    _free: Some(free),
116    _event_post: Some(event_post),
117    _get_free_heap_size: Some(get_free_heap_size),
118    _rand: Some(rand),
119    _dport_access_stall_other_cpu_start_wrap: Some(dport_access_stall_other_cpu_start_wrap),
120    _dport_access_stall_other_cpu_end_wrap: Some(dport_access_stall_other_cpu_end_wrap),
121    _wifi_apb80m_request: Some(wifi_apb80m_request),
122    _wifi_apb80m_release: Some(wifi_apb80m_release),
123    _phy_disable: Some(phy_disable),
124    _phy_enable: Some(phy_enable),
125    _phy_update_country_info: Some(phy_update_country_info),
126    _read_mac: Some(read_mac),
127    _timer_arm: Some(ets_timer_arm),
128    _timer_disarm: Some(ets_timer_disarm),
129    _timer_done: Some(ets_timer_done),
130    _timer_setfn: Some(ets_timer_setfn),
131    _timer_arm_us: Some(ets_timer_arm_us),
132    _wifi_reset_mac: Some(wifi_reset_mac),
133    _wifi_clock_enable: Some(wifi_clock_enable),
134    _wifi_clock_disable: Some(wifi_clock_disable),
135    _wifi_rtc_enable_iso: Some(wifi_rtc_enable_iso),
136    _wifi_rtc_disable_iso: Some(wifi_rtc_disable_iso),
137    _esp_timer_get_time: Some(esp_timer_get_time),
138    _nvs_set_i8: Some(nvs_set_i8),
139    _nvs_get_i8: Some(nvs_get_i8),
140    _nvs_set_u8: Some(nvs_set_u8),
141    _nvs_get_u8: Some(nvs_get_u8),
142    _nvs_set_u16: Some(nvs_set_u16),
143    _nvs_get_u16: Some(nvs_get_u16),
144    _nvs_open: Some(nvs_open),
145    _nvs_close: Some(nvs_close),
146    _nvs_commit: Some(nvs_commit),
147    _nvs_set_blob: Some(nvs_set_blob),
148    _nvs_get_blob: Some(nvs_get_blob),
149    _nvs_erase_key: Some(nvs_erase_key),
150    _get_random: Some(get_random),
151    _get_time: Some(get_time),
152    _random: Some(random),
153    #[cfg(feature = "sys-logs")]
154    _log_write: Some(log_write),
155    #[cfg(not(feature = "sys-logs"))]
156    _log_write: None,
157    #[cfg(feature = "sys-logs")]
158    _log_writev: Some(log_writev),
159    #[cfg(not(feature = "sys-logs"))]
160    _log_writev: None,
161    _log_timestamp: Some(log_timestamp),
162    _malloc_internal: Some(malloc_internal),
163    _realloc_internal: Some(realloc_internal),
164    _calloc_internal: Some(calloc_internal),
165    _zalloc_internal: Some(zalloc_internal),
166    _wifi_malloc: Some(wifi_malloc),
167    _wifi_realloc: Some(wifi_realloc),
168    _wifi_calloc: Some(wifi_calloc),
169    _wifi_zalloc: Some(wifi_zalloc),
170    _wifi_create_queue: Some(wifi_create_queue),
171    _wifi_delete_queue: Some(wifi_delete_queue),
172    _coex_init: Some(super::coex_init),
173    _coex_deinit: Some(coex_deinit),
174    _coex_enable: Some(coex_enable),
175    _coex_disable: Some(coex_disable),
176    _coex_status_get: Some(coex_status_get),
177    _coex_condition_set: None,
178    _coex_wifi_request: Some(coex_wifi_request),
179    _coex_wifi_release: Some(coex_wifi_release),
180    _coex_wifi_channel_set: Some(coex_wifi_channel_set),
181    _coex_event_duration_get: Some(coex_event_duration_get),
182    _coex_pti_get: Some(coex_pti_get),
183    _coex_schm_status_bit_clear: Some(coex_schm_status_bit_clear),
184    _coex_schm_status_bit_set: Some(coex_schm_status_bit_set),
185    _coex_schm_interval_set: Some(coex_schm_interval_set),
186    _coex_schm_interval_get: Some(coex_schm_interval_get),
187    _coex_schm_curr_period_get: Some(coex_schm_curr_period_get),
188    _coex_schm_curr_phase_get: Some(coex_schm_curr_phase_get),
189    #[cfg(any(esp32c3, esp32c2, esp32c6, esp32h2, esp32s3, esp32s2))]
190    _slowclk_cal_get: Some(slowclk_cal_get),
191    #[cfg(any(esp32, esp32s2))]
192    _phy_common_clock_disable: Some(os_adapter_chip_specific::phy_common_clock_disable),
193    #[cfg(any(esp32, esp32s2))]
194    _phy_common_clock_enable: Some(os_adapter_chip_specific::phy_common_clock_enable),
195    _coex_register_start_cb: Some(coex_register_start_cb),
196
197    #[cfg(esp32c6)]
198    _regdma_link_set_write_wait_content: Some(
199        os_adapter_chip_specific::regdma_link_set_write_wait_content_dummy,
200    ),
201    #[cfg(esp32c6)]
202    _sleep_retention_find_link_by_id: Some(
203        os_adapter_chip_specific::sleep_retention_find_link_by_id_dummy,
204    ),
205    _coex_schm_process_restart: Some(coex_schm_process_restart_wrapper),
206    _coex_schm_register_cb: Some(coex_schm_register_cb_wrapper),
207
208    _magic: ESP_WIFI_OS_ADAPTER_MAGIC as i32,
209
210    _coex_schm_flexible_period_set: Some(coex_schm_flexible_period_set),
211    _coex_schm_flexible_period_get: Some(coex_schm_flexible_period_get),
212};
213
214const WIFI_ENABLE_WPA3_SAE: u64 = 1 << 0;
215const WIFI_ENABLE_ENTERPRISE: u64 = 1 << 7;
216// const WIFI_FTM_INITIATOR: u64 = 1 << 2;
217// const WIFI_FTM_RESPONDER: u64 = 1 << 3;
218// const WIFI_ENABLE_GCMP: u64 = 1 << 4;
219// const WIFI_ENABLE_GMAC: u64 = 1 << 5;
220// const WIFI_ENABLE_11R: u64 = 1 << 6;
221
222const WIFI_FEATURE_CAPS: u64 = WIFI_ENABLE_WPA3_SAE | WIFI_ENABLE_ENTERPRISE;
223
224#[unsafe(no_mangle)]
225pub(super) static mut g_wifi_feature_caps: u64 = WIFI_FEATURE_CAPS;
226
227pub(super) static mut G_CONFIG: wifi_init_config_t = wifi_init_config_t {
228    osi_funcs: core::ptr::addr_of!(g_wifi_osi_funcs).cast_mut(),
229
230    // dummy for now - populated in init
231    wpa_crypto_funcs: wpa_crypto_funcs_t {
232        size: 0,
233        version: 1,
234        aes_wrap: None,
235        aes_unwrap: None,
236        hmac_sha256_vector: None,
237        sha256_prf: None,
238        hmac_md5: None,
239        hamc_md5_vector: None,
240        hmac_sha1: None,
241        hmac_sha1_vector: None,
242        sha1_prf: None,
243        sha1_vector: None,
244        pbkdf2_sha1: None,
245        rc4_skip: None,
246        md5_vector: None,
247        aes_encrypt: None,
248        aes_encrypt_init: None,
249        aes_encrypt_deinit: None,
250        aes_decrypt: None,
251        aes_decrypt_init: None,
252        aes_decrypt_deinit: None,
253        aes_128_encrypt: None,
254        aes_128_decrypt: None,
255        omac1_aes_128: None,
256        ccmp_decrypt: None,
257        ccmp_encrypt: None,
258        aes_gmac: None,
259        sha256_vector: None,
260        crc32: None,
261    },
262    static_rx_buf_num: crate::CONFIG.static_rx_buf_num as i32,
263    dynamic_rx_buf_num: crate::CONFIG.dynamic_rx_buf_num as i32,
264    tx_buf_type: esp_wifi_sys::include::CONFIG_ESP_WIFI_TX_BUFFER_TYPE as i32,
265    static_tx_buf_num: crate::CONFIG.static_tx_buf_num as i32,
266    dynamic_tx_buf_num: crate::CONFIG.dynamic_tx_buf_num as i32,
267    rx_mgmt_buf_type: esp_wifi_sys::include::CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF as i32,
268    rx_mgmt_buf_num: esp_wifi_sys::include::CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF as i32,
269    cache_tx_buf_num: esp_wifi_sys::include::WIFI_CACHE_TX_BUFFER_NUM as i32,
270    csi_enable: cfg!(feature = "csi") as i32,
271    ampdu_rx_enable: crate::CONFIG.ampdu_rx_enable as i32,
272    ampdu_tx_enable: crate::CONFIG.ampdu_tx_enable as i32,
273    amsdu_tx_enable: crate::CONFIG.amsdu_tx_enable as i32,
274    nvs_enable: 0,
275    nano_enable: 0,
276    rx_ba_win: crate::CONFIG.rx_ba_win as i32,
277    wifi_task_core_id: 0,
278    beacon_max_len: esp_wifi_sys::include::WIFI_SOFTAP_BEACON_MAX_LEN as i32,
279    mgmt_sbuf_num: esp_wifi_sys::include::WIFI_MGMT_SBUF_NUM as i32,
280    feature_caps: WIFI_FEATURE_CAPS,
281    sta_disconnected_pm: false,
282    espnow_max_encrypt_num: esp_wifi_sys::include::CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM as i32,
283    magic: WIFI_INIT_CONFIG_MAGIC as i32,
284
285    tx_hetb_queue_num: 3,
286    dump_hesigb_enable: false,
287};