@@ -130,7 +130,6 @@ const char *nrf_wifi_get_drv_version(void)
130
130
return NRF70_DRIVER_VERSION ;
131
131
}
132
132
133
- /* If the interface is not Wi-Fi then errors are expected, so, fail silently */
134
133
struct nrf_wifi_vif_ctx_zep * nrf_wifi_get_vif_ctx_by_idx (int index )
135
134
{
136
135
struct nrf_wifi_vif_ctx_zep * vif_ctx_zep = NULL ;
@@ -140,7 +139,7 @@ struct nrf_wifi_vif_ctx_zep *nrf_wifi_get_vif_ctx_by_idx(int index)
140
139
return NULL ;
141
140
}
142
141
143
- for (int i = 0 ; i < rpu_ctx_zep -> vif_ctx_cnt ; i ++ ) {
142
+ for (int i = 0 ; i < ARRAY_SIZE ( rpu_ctx_zep -> vif_ctx_zep ) ; i ++ ) {
144
143
if (rpu_ctx_zep -> vif_ctx_zep [i ].vif_idx == index ) {
145
144
vif_ctx_zep = & rpu_ctx_zep -> vif_ctx_zep [i ];
146
145
break ;
@@ -154,15 +153,15 @@ struct nrf_wifi_vif_ctx_zep *nrf_wifi_get_vif_ctx_by_idx(int index)
154
153
struct nrf_wifi_vif_ctx_zep * nrf_wifi_get_vif_ctx (struct net_if * iface )
155
154
{
156
155
struct nrf_wifi_vif_ctx_zep * vif_ctx_zep = NULL ;
157
- struct nrf_wifi_ctx_zep * rpu_ctx_zep = & rpu_drv_priv_zep .rpu_ctx_zep ;
156
+ struct nrf_wifi_ctx_zep * rpu_ctx = & rpu_drv_priv_zep .rpu_ctx_zep ;
158
157
159
- if (!iface || !rpu_ctx_zep || !rpu_ctx_zep -> rpu_ctx ) {
158
+ if (!iface || !rpu_ctx || !rpu_ctx -> rpu_ctx ) {
160
159
return NULL ;
161
160
}
162
161
163
- for (int i = 0 ; i < rpu_ctx_zep -> vif_ctx_cnt ; i ++ ) {
164
- if (rpu_ctx_zep -> vif_ctx_zep [i ].zep_net_if_ctx == iface ) {
165
- vif_ctx_zep = & rpu_ctx_zep -> vif_ctx_zep [i ];
162
+ for (int i = 0 ; i < ARRAY_SIZE ( rpu_ctx -> vif_ctx_zep ) ; i ++ ) {
163
+ if (rpu_ctx -> vif_ctx_zep [i ].zep_net_if_ctx == iface ) {
164
+ vif_ctx_zep = & rpu_ctx -> vif_ctx_zep [i ];
166
165
break ;
167
166
}
168
167
}
@@ -441,6 +440,7 @@ void nrf_wifi_event_proc_cookie_rsp(void *vif_ctx,
441
440
struct nrf_wifi_vif_ctx_zep * vif_ctx_zep = NULL ;
442
441
struct nrf_wifi_ctx_zep * rpu_ctx_zep = NULL ;
443
442
struct nrf_wifi_fmac_dev_ctx * fmac_dev_ctx = NULL ;
443
+ unsigned int vif_ctx_cnt = 0 ;
444
444
445
445
vif_ctx_zep = vif_ctx ;
446
446
@@ -451,6 +451,7 @@ void nrf_wifi_event_proc_cookie_rsp(void *vif_ctx,
451
451
452
452
rpu_ctx_zep = vif_ctx_zep -> rpu_ctx_zep ;
453
453
fmac_dev_ctx = rpu_ctx_zep -> rpu_ctx ;
454
+ vif_ctx_cnt = nrf_wifi_fmac_get_num_vifs (rpu_ctx_zep -> rpu_ctx );
454
455
455
456
LOG_DBG ("%s: cookie_rsp_event->cookie = %llx" , __func__ , cookie_rsp_event -> cookie );
456
457
LOG_DBG ("%s: host_cookie = %llx" , __func__ , cookie_rsp_event -> host_cookie );
@@ -462,8 +463,11 @@ void nrf_wifi_event_proc_cookie_rsp(void *vif_ctx,
462
463
cookie_rsp_event -> mac_addr [4 ],
463
464
cookie_rsp_event -> mac_addr [5 ]);
464
465
465
- for (int i = 0 ; i < rpu_ctx_zep -> vif_ctx_cnt ; ++ i ) {
466
- rpu_ctx_zep -> vif_ctx_zep [i ].cookie_resp_received = true;
466
+ /* Notify all vif */
467
+ for (int idx = 0 ; idx < vif_ctx_cnt ; ++ idx ) {
468
+ vif_ctx_zep = nrf_wifi_get_vif_ctx_by_idx (idx );
469
+ if (vif_ctx_zep )
470
+ vif_ctx_zep -> cookie_resp_received = true;
467
471
}
468
472
/* TODO: When supp_callbk_fns.mgmt_tx_status is implemented, add logic
469
473
* here to use the cookie and host_cookie to map requests to responses.
@@ -737,16 +741,14 @@ static int nrf_wifi_drv_main_zep(const struct device *dev)
737
741
struct rx_buf_pool_params rx_buf_pools [MAX_NUM_OF_RX_QUEUES ];
738
742
struct nrf_wifi_vif_ctx_zep * vif_ctx_zep = dev -> data ;
739
743
struct nrf_wifi_ctx_zep * rpu_ctx_zep = & rpu_drv_priv_zep .rpu_ctx_zep ;
744
+ unsigned int vif_ctx_cnt = nrf_wifi_fmac_get_num_vifs (rpu_ctx_zep -> rpu_ctx );
740
745
741
- vif_ctx_zep -> rpu_ctx_zep = rpu_ctx_zep ;
742
-
743
- if (rpu_ctx_zep -> vif_ctx_cnt >= MAX_NUM_VIFS ){
746
+ if (vif_ctx_cnt >= MAX_NUM_VIFS ){
744
747
LOG_ERR ("%s: Max number of VIFs reached" , __func__ );
745
748
return - ENOMEM ;
746
- }
749
+ }
747
750
748
- rpu_ctx_zep -> vif_ctx_cnt ++ ;
749
- if (rpu_ctx_zep -> vif_ctx_cnt > 1 ) {
751
+ if (vif_ctx_cnt > 1 ) {
750
752
// FMAC is already initialized for VIF-0
751
753
return 0 ;
752
754
}
@@ -976,7 +978,7 @@ ETH_NET_DEVICE_DT_INST_DEFINE(0,
976
978
CONFIG_WIFI_INIT_PRIORITY , /* prio */
977
979
& wifi_offload_ops , /* api */
978
980
CONFIG_NRF_WIFI_IFACE_MTU ); /*mtu */
979
- #ifdef CONFIG_NRF70_STA_AP_MODE
981
+ #ifdef CONFIG_NRF70_WIFI_ENABLE_DUAL_VIF
980
982
// Register second interface
981
983
ETH_NET_DEVICE_DT_INST_DEFINE (1 ,
982
984
nrf_wifi_drv_main_zep , /* init_fn */
0 commit comments