Scope

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

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

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.

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:

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

Onewifi

hostap 

References