@ -3893,30 +3893,41 @@ static int wpas_p2p_setup_channels(struct wpa_supplicant *wpa_s,
}
}
int wpas_p2p_get_ht40_mode ( struct wpa_supplicant * wpa_s ,
int wpas_p2p_get_sec_channel_offset_40mhz ( struct wpa_supplicant * wpa_s ,
struct hostapd_hw_modes * mode , u8 channel )
struct hostapd_hw_modes * mode ,
u8 channel )
{
{
int op ;
int op ;
enum chan_allowed ret ;
enum chan_allowed ret ;
for ( op = 0 ; global_op_class [ op ] . op_class ; op + + ) {
for ( op = 0 ; global_op_class [ op ] . op_class ; op + + ) {
const struct oper_class_map * o = & global_op_class [ op ] ;
const struct oper_class_map * o = & global_op_class [ op ] ;
u8 ch ;
u16 ch ;
int chan = channel ;
if ( o - > p2p = = NO_P2P_SUPP | |
if ( o - > p2p = = NO_P2P_SUPP | |
( is_6ghz_op_class ( o - > op_class ) & &
( is_6ghz_op_class ( o - > op_class ) & &
wpa_s - > conf - > p2p_6ghz_disable ) )
wpa_s - > conf - > p2p_6ghz_disable ) )
continue ;
continue ;
if ( is_6ghz_op_class ( o - > op_class ) & & o - > bw = = BW40 & &
get_6ghz_sec_channel ( channel ) < 0 )
chan = channel - 4 ;
for ( ch = o - > min_chan ; ch < = o - > max_chan ; ch + = o - > inc ) {
for ( ch = o - > min_chan ; ch < = o - > max_chan ; ch + = o - > inc ) {
if ( o - > mode ! = HOSTAPD_MODE_IEEE80211A | |
if ( o - > mode ! = HOSTAPD_MODE_IEEE80211A | |
( o - > bw ! = BW40PLUS & & o - > bw ! = BW40MINUS ) | |
( o - > bw ! = BW40PLUS & & o - > bw ! = BW40MINUS & &
ch ! = channel )
o - > bw ! = BW40 ) | |
ch ! = chan )
continue ;
continue ;
ret = wpas_p2p_verify_channel ( wpa_s , mode , o - > op_class ,
ret = wpas_p2p_verify_channel ( wpa_s , mode , o - > op_class ,
ch , o - > bw ) ;
ch , o - > bw ) ;
if ( ret = = ALLOWED )
if ( ret = = ALLOWED ) {
if ( is_6ghz_op_class ( o - > op_class ) & &
o - > bw = = BW40 )
return get_6ghz_sec_channel ( channel ) ;
return ( o - > bw = = BW40MINUS ) ? - 1 : 1 ;
return ( o - > bw = = BW40MINUS ) ? - 1 : 1 ;
}
}
}
}
}
return 0 ;
return 0 ;