@@ -443,7 +443,10 @@ void *nrf_wifi_wpa_supp_dev_init(void *supp_drv_if_ctx, const char *iface_name,
443
443
struct zep_wpa_supp_dev_callbk_fns * supp_callbk_fns )
444
444
{
445
445
struct nrf_wifi_vif_ctx_zep * vif_ctx_zep = NULL ;
446
- const struct device * device = DEVICE_DT_GET (DT_CHOSEN (zephyr_wifi ));
446
+ // Get device for Each interface
447
+ const int if_idx = net_if_get_by_name (iface_name );
448
+ struct net_if * iface = net_if_get_by_index (if_idx );
449
+ const struct device * device = net_if_get_device (iface );
447
450
448
451
if (!device ) {
449
452
LOG_ERR ("%s: Interface %s not found" , __func__ , iface_name );
@@ -1587,6 +1590,7 @@ void nrf_wifi_wpa_supp_event_get_wiphy(void *if_priv,
1587
1590
struct nrf_wifi_vif_ctx_zep * vif_ctx_zep = NULL ;
1588
1591
struct nrf_wifi_ctx_zep * rpu_ctx_zep = NULL ;
1589
1592
struct wpa_supp_event_supported_band band ;
1593
+ unsigned int vif_ctx_cnt = 0 ;
1590
1594
1591
1595
if (!if_priv || !wiphy_info || !event_len ) {
1592
1596
LOG_ERR ("%s: Invalid parameters" , __func__ );
@@ -1595,44 +1599,53 @@ void nrf_wifi_wpa_supp_event_get_wiphy(void *if_priv,
1595
1599
1596
1600
vif_ctx_zep = if_priv ;
1597
1601
rpu_ctx_zep = vif_ctx_zep -> rpu_ctx_zep ;
1602
+ vif_ctx_cnt = nrf_wifi_fmac_get_num_vifs (rpu_ctx_zep -> rpu_ctx );
1598
1603
1599
1604
memset (& band , 0 , sizeof (band ));
1600
-
1601
- for (int i = 0 ; i < NRF_WIFI_EVENT_GET_WIPHY_NUM_BANDS ; i ++ ) {
1602
- if (nrf_wifi_parse_sband (& wiphy_info -> sband [i ], & band ) != WLAN_STATUS_SUCCESS ) {
1605
+
1606
+ for (int idx = 0 ; idx < vif_ctx_cnt ; ++ idx ) {
1607
+ vif_ctx_zep = nrf_wifi_get_vif_ctx_by_idx (idx );
1608
+ if (vif_ctx_zep == NULL )
1603
1609
continue ;
1604
- }
1605
- if (vif_ctx_zep -> supp_drv_if_ctx && vif_ctx_zep -> supp_callbk_fns .get_wiphy_res ) {
1606
- vif_ctx_zep -> supp_callbk_fns .get_wiphy_res (vif_ctx_zep -> supp_drv_if_ctx ,
1607
- & band );
1608
- }
1609
- }
1610
-
1611
- if ((wiphy_info -> params_valid & NRF_WIFI_GET_WIPHY_VALID_EXTENDED_CAPABILITIES ) &&
1612
- rpu_ctx_zep -> extended_capa == NULL ) {
1613
1610
1614
- rpu_ctx_zep -> extended_capa = k_malloc (wiphy_info -> extended_capabilities_len );
1615
-
1616
- if (rpu_ctx_zep -> extended_capa ) {
1617
- memcpy (rpu_ctx_zep -> extended_capa , wiphy_info -> extended_capabilities ,
1618
- wiphy_info -> extended_capabilities_len );
1611
+ for (int i = 0 ; i < NRF_WIFI_EVENT_GET_WIPHY_NUM_BANDS ; i ++ ) {
1612
+ if (nrf_wifi_parse_sband (& wiphy_info -> sband [i ], & band ) != WLAN_STATUS_SUCCESS ) {
1613
+ continue ;
1614
+ }
1615
+ if (vif_ctx_zep -> supp_drv_if_ctx && vif_ctx_zep -> supp_callbk_fns .get_wiphy_res ) {
1616
+ vif_ctx_zep -> supp_callbk_fns .get_wiphy_res (vif_ctx_zep -> supp_drv_if_ctx ,
1617
+ & band );
1618
+ }
1619
1619
}
1620
1620
1621
- rpu_ctx_zep -> extended_capa_mask = k_malloc (wiphy_info -> extended_capabilities_len );
1622
-
1623
- if (rpu_ctx_zep -> extended_capa_mask ) {
1624
- memcpy (rpu_ctx_zep -> extended_capa_mask ,
1625
- wiphy_info -> extended_capabilities_mask ,
1626
- wiphy_info -> extended_capabilities_len );
1627
- } else {
1628
- free (rpu_ctx_zep -> extended_capa );
1629
- rpu_ctx_zep -> extended_capa = NULL ;
1630
- rpu_ctx_zep -> extended_capa_len = 0 ;
1621
+ if ((wiphy_info -> params_valid & NRF_WIFI_GET_WIPHY_VALID_EXTENDED_CAPABILITIES ) &&
1622
+ rpu_ctx_zep -> extended_capa == NULL ) {
1623
+ /* To avoid overflowing the 100 column limit */
1624
+ unsigned char ec_len = wiphy_info -> extended_capabilities_len ;
1625
+
1626
+ rpu_ctx_zep -> extended_capa = k_malloc (wiphy_info -> extended_capabilities_len );
1627
+
1628
+ if (rpu_ctx_zep -> extended_capa ) {
1629
+ memcpy (rpu_ctx_zep -> extended_capa , wiphy_info -> extended_capabilities ,
1630
+ wiphy_info -> extended_capabilities_len );
1631
+ }
1632
+
1633
+ rpu_ctx_zep -> extended_capa_mask = k_malloc (wiphy_info -> extended_capabilities_len );
1634
+
1635
+ if (rpu_ctx_zep -> extended_capa_mask ) {
1636
+ memcpy (rpu_ctx_zep -> extended_capa_mask ,
1637
+ wiphy_info -> extended_capabilities_mask ,
1638
+ ec_len );
1639
+ } else {
1640
+ nrf_wifi_osal_mem_free (rpu_ctx_zep -> extended_capa );
1641
+ rpu_ctx_zep -> extended_capa = NULL ;
1642
+ rpu_ctx_zep -> extended_capa_len = 0 ;
1643
+ }
1631
1644
}
1632
- }
1633
1645
1634
- if (vif_ctx_zep -> supp_drv_if_ctx && vif_ctx_zep -> supp_callbk_fns .get_wiphy_res ) {
1635
- vif_ctx_zep -> supp_callbk_fns .get_wiphy_res (vif_ctx_zep -> supp_drv_if_ctx , NULL );
1646
+ if (vif_ctx_zep -> supp_drv_if_ctx && vif_ctx_zep -> supp_callbk_fns .get_wiphy_res ) {
1647
+ vif_ctx_zep -> supp_callbk_fns .get_wiphy_res (vif_ctx_zep -> supp_drv_if_ctx , NULL );
1648
+ }
1636
1649
}
1637
1650
}
1638
1651
@@ -1945,19 +1958,31 @@ void nrf_wifi_supp_event_proc_get_conn_info(void *if_priv,
1945
1958
{
1946
1959
struct nrf_wifi_vif_ctx_zep * vif_ctx_zep = NULL ;
1947
1960
struct wpa_conn_info * conn_info = NULL ;
1961
+ struct nrf_wifi_ctx_zep * rpu_ctx_zep = NULL ;
1962
+ unsigned int vif_ctx_cnt = 0 ;
1948
1963
1949
1964
if (!if_priv || !info ) {
1950
1965
LOG_ERR ("%s: Invalid params" , __func__ );
1951
1966
k_sem_give (& wait_for_event_sem );
1952
1967
return ;
1953
1968
}
1954
1969
vif_ctx_zep = if_priv ;
1955
- conn_info = vif_ctx_zep -> conn_info ;
1956
-
1957
- conn_info -> beacon_interval = info -> beacon_interval ;
1958
- conn_info -> dtim_period = info -> dtim_interval ;
1959
- conn_info -> twt_capable = info -> twt_capable ;
1960
- k_sem_give (& wait_for_event_sem );
1970
+ rpu_ctx_zep = vif_ctx_zep -> rpu_ctx_zep ;
1971
+ vif_ctx_cnt = nrf_wifi_fmac_get_num_vifs (rpu_ctx_zep -> rpu_ctx );
1972
+
1973
+ /* Notify all vif */
1974
+ for (int idx = 0 ; idx < vif_ctx_cnt ; ++ idx ) {
1975
+ vif_ctx_zep = nrf_wifi_get_vif_ctx_by_idx (idx );
1976
+ if (vif_ctx_zep )
1977
+ {
1978
+ conn_info = vif_ctx_zep -> conn_info ;
1979
+
1980
+ conn_info -> beacon_interval = info -> beacon_interval ;
1981
+ conn_info -> dtim_period = info -> dtim_interval ;
1982
+ conn_info -> twt_capable = info -> twt_capable ;
1983
+ k_sem_give (& wait_for_event_sem );
1984
+ }
1985
+ }
1961
1986
}
1962
1987
1963
1988
#ifdef CONFIG_NRF70_AP_MODE
0 commit comments