You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Scope

  • Design and implement and test single wiphy design for Onewifi

Background

By default Banana Pi R4 uses official supported BE14 wifi7 card from Banana Pi. Driver for BE 14 card is designed in such a way that all the wireless radios (2.4G/5G/6g) are mapped under single phy for supporting MLO in Wi-Fi 7. However, current rdk-wifi-hal associated with Onewifi is not supporting this mechanism. 

RDKM In collaboration with comcast will design Single wiphy use case for Onewifi/rdk-wifi-hal/hostap. This page will capture the design changes to achieve this.

Block diagram

Phy0
Phy1
radio0
(2.4G)
radio1
(5G)
Phy2
radio2
(6G)
Phy0
radio0
(2G)
radio1
(5G)
radio2
(6G)
Currently supported in Onewifi
Support after the changes

Main Assumption:

The radio_interface_mapping_t structure part of wifi_hal_generic.h is used to define the mapping of phy to a particular radio along with the primary interface. Structure declaration is as below:

typedef struct {
    unsigned int phy_index;                  /* Phy Index */
    unsigned int radio_index;               /* Radio Index, 0 - 2.4G, 1 - 5G, 2 - 6G */
    char radio_name[16];                     /* Readable radio name */
    wifi_interface_name_t interface_name;  / Primary interface associated with the radio */
}__attribute__((packed)) radio_interface_mapping_t;

We will use this structure to map the multiple radio to the same phy.  

For e.g. in case of the current implementation, the elements of the structure for a 3 radio will be as below (indicating different phy index for different radio): 

{ 0, 0, "radio1", "wlan0"},

{ 1, 1,  "radio2", "wlan1"},

{ 2, 2, "radio3", "wlan2"},

In case of single phy, the elements of this structure for a 3 radio will have the same phy mapped to different radio index indicated in green.

{ 0, 0, "radio1", "wlan0"},

{ 0, 1,  "radio2", "wlan1"},

{ 0, 2, "radio3", "wlan2"},

Low Level Design Changes

This section will provide details on the changes in different modules to support Single wiphy usecase.

 rdk-wifi-hal

    • wiphy_dump_handler

      In wiphy_dump_handler, the global object g_wifi_hal's (an instance of wifi_hal_priv_t) is populated with the radio info associated with each phy.

      Here there is a function get_rdk_radio_index which takes in phy_index and provides a single radio_index as output. 

Proposed change:

Introduce a new function get_rdk_radio_indices replacing get_rdk_radio_index, which provides an array of rdk_radio_index associated with a particular phy_index. The array will be based on the defined radio_interface_mapping elements.

Use this array to populate the g_wifi_hal.radio_info.

    • get_radio_by_phy_index

This function takes input as phy_index and returns a single radio_info structure. In case of single phy, since there would be multiple radio_info associated with the same phy_index returning a single radio_info structure is incorrect. 

Proposed Change:

All the usage instances of this function was checked. We can remove the usage of this function and fully deprecate it with the below changes:

      • Interface_info_handler: get_radio_by_phy_index is used to get the radio_info instance in which the interface is updated into the hash_map. The right radio_info instance can be passed as an argument to this function in the nl80211_send_and_recv call where the interface_info_handler is passed as callback function pointer. 

The right radio info is then passed as arg to this function and can be accessed without calling get_radio_by_phy_index.

      • wiphy_get_info_handler: Similar change as that of interface_info_handler to pass the right radio_info instance in the nl80211_send_and_recv_call where wiphy_get_info_handler is passed as callback function pointer.
      • remove_station_from_other_interfaces: Implement new function get_radio_from_interface_index to get the right radio_info instead of get_radio_by_phy_index. radio_info stores the various interface and interface_index associated with this radio. Thus we can obtain the right radio parsing this interface list.
      • phy_info_handler: Similar change as that of Interface_info_handler to pass the right radio_info instance in the nl80211_send_and_recv_call.

This function is called in update_channel_flags which does not use radio_info structure, thus this needs to be changed. Look further in this

      • platform_get_radio_phytemperature: In broadcom platform.c file, get_radio_by_phy_index is called in this function. Instead of this function, obtain the appropriate radio_info pointer by calling get_radio_by_rdk_index
         



References



  • No labels