@ -10795,38 +10795,49 @@ static int wpa_driver_do_acs(void *priv, struct drv_acs_params *params)
}
static int nl80211_set_band ( void * priv , enum set_band band )
static int nl80211_set_band ( void * priv , u32 band_mask )
{
struct i802_bss * bss = priv ;
struct wpa_driver_nl80211_data * drv = bss - > drv ;
struct nl_msg * msg ;
struct nlattr * data ;
int ret ;
enum qca_set_band qca_band ;
enum qca_set_band qca_band_value ;
u32 qca_band_mask = QCA_SETBAND_AUTO ;
if ( ! drv - > setband_vendor_cmd_avail )
if ( ! drv - > setband_vendor_cmd_avail | |
( band_mask > ( WPA_SETBAND_2G | WPA_SETBAND_5G | WPA_SETBAND_6G ) ) )
return - 1 ;
switch ( band ) {
case WPA_SETBAND_AUTO :
qca_band = QCA_SETBAND_AUTO ;
break ;
case WPA_SETBAND_5G :
qca_band = QCA_SETBAND_5G ;
break ;
case WPA_SETBAND_2G :
qca_band = QCA_SETBAND_2G ;
break ;
default :
return - 1 ;
}
if ( band_mask & WPA_SETBAND_5G )
qca_band_mask | = QCA_SETBAND_5G ;
if ( band_mask & WPA_SETBAND_2G )
qca_band_mask | = QCA_SETBAND_2G ;
if ( band_mask & WPA_SETBAND_6G )
qca_band_mask | = QCA_SETBAND_6G ;
/*
* QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE is a legacy interface hence make
* it suite to its values ( AUTO / 5 G / 2 G ) for backwards compatibility .
*/
qca_band_value = ( ( qca_band_mask & QCA_SETBAND_5G ) & &
( qca_band_mask & QCA_SETBAND_2G ) ) ?
QCA_SETBAND_AUTO :
qca_band_mask & ~ QCA_SETBAND_6G ;
wpa_printf ( MSG_DEBUG ,
" nl80211: QCA_BAND_MASK = 0x%x, QCA_BAND_VALUE = %d " ,
qca_band_mask , qca_band_value ) ;
if ( ! ( msg = nl80211_drv_msg ( drv , 0 , NL80211_CMD_VENDOR ) ) | |
nla_put_u32 ( msg , NL80211_ATTR_VENDOR_ID , OUI_QCA ) | |
nla_put_u32 ( msg , NL80211_ATTR_VENDOR_SUBCMD ,
QCA_NL80211_VENDOR_SUBCMD_SETBAND ) | |
! ( data = nla_nest_start ( msg , NL80211_ATTR_VENDOR_DATA ) ) | |
nla_put_u32 ( msg , QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE , qca_band ) ) {
nla_put_u32 ( msg , QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE ,
qca_band_value ) | |
nla_put_u32 ( msg , QCA_WLAN_VENDOR_ATTR_SETBAND_MASK ,
qca_band_mask ) ) {
nlmsg_free ( msg ) ;
return - ENOBUFS ;
}