Update wifi stack from LA.UM.7.4.r1-05400-8x98.0
Change-Id: I7e46d6e7c3c73ead5c66d10ee2955c8a8f3f5292
This commit is contained in:
parent
a84f38de6b
commit
2b6f677357
39 changed files with 801 additions and 233 deletions
|
@ -120,6 +120,11 @@ typedef PREPACK struct _HTC_FRAME_HDR{
|
|||
#define HTC_FLAGS_SEND_BUNDLE (1 << 1) /* start or part of bundle */
|
||||
#define HTC_FLAGS_SEQ_CHECK (1 << 2) /* seq check on rx side */
|
||||
#define HTC_FLAGS_CRC_CHECK (1 << 3) /* CRC check on rx side */
|
||||
/* HTC_FLAGS_PADDING_CHECK
|
||||
* Set by the sender to inform the receiver that the HTC packet begins
|
||||
* with continuation (block) alignment padding from the prior HTC packet.
|
||||
*/
|
||||
#define HTC_FLAGS_PADDING_CHECK (1 << 4)
|
||||
/* receive direction */
|
||||
#define HTC_FLAGS_RECV_1MORE_BLOCK (1 << 0) /* bit 0 bundle trailer present */
|
||||
#define HTC_FLAGS_RECV_TRAILER (1 << 1) /* bit 1 trailer data present */
|
||||
|
|
|
@ -1233,23 +1233,27 @@ typedef struct {
|
|||
* BIT [ 27: 24] :- gi - HTT_PPDU_STATS_GI
|
||||
* BIT [ 28: 28] :- dcm
|
||||
* BIT [ 29: 29] :- ldpc
|
||||
* BIT [ 31: 30] :- reserved4
|
||||
* BIT [ 30: 30] :- valid_skipped_rate_ctrl
|
||||
* This flag indicates whether the skipped_rate_ctrl
|
||||
* flag should be ignored, or if it holds valid data.
|
||||
* BIT [ 31: 31] :- skipped_rate_ctrl
|
||||
*/
|
||||
union {
|
||||
A_UINT32 rate_info;
|
||||
struct {
|
||||
A_UINT32 ltf_size: 2,
|
||||
stbc: 1,
|
||||
he_re: 1,
|
||||
txbf: 4,
|
||||
bw: 4,
|
||||
nss: 4,
|
||||
mcs: 4,
|
||||
preamble: 4,
|
||||
gi: 4,
|
||||
dcm: 1,
|
||||
ldpc: 1,
|
||||
reserved4: 2;
|
||||
A_UINT32 ltf_size: 2,
|
||||
stbc: 1,
|
||||
he_re: 1,
|
||||
txbf: 4,
|
||||
bw: 4,
|
||||
nss: 4,
|
||||
mcs: 4,
|
||||
preamble: 4,
|
||||
gi: 4,
|
||||
dcm: 1,
|
||||
ldpc: 1,
|
||||
valid_skipped_rate_ctrl: 1,
|
||||
skipped_rate_ctrl: 1;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -771,6 +771,15 @@ typedef struct {
|
|||
A_UINT32 phy_warm_reset_reason_num_cca_rx_frame_stuck;
|
||||
A_UINT32 phy_warm_reset_reason_wal_rx_recovery_rst_rx_busy;
|
||||
A_UINT32 phy_warm_reset_reason_wal_rx_recovery_rst_mac_hang;
|
||||
A_UINT32 phy_warm_reset_reason_mac_reset_converted_phy_reset;
|
||||
|
||||
A_UINT32 wal_rx_recovery_rst_mac_hang_count;
|
||||
A_UINT32 wal_rx_recovery_rst_known_sig_count;
|
||||
A_UINT32 wal_rx_recovery_rst_no_rx_count;
|
||||
A_UINT32 wal_rx_recovery_rst_no_rx_consecutive_count;
|
||||
A_UINT32 wal_rx_recovery_rst_rx_busy_count;
|
||||
A_UINT32 wal_rx_recovery_rst_phy_mac_hang_count;
|
||||
A_UINT32 rx_flush_cnt; /* Num rx flush issued */
|
||||
} htt_hw_stats_pdev_errs_tlv;
|
||||
|
||||
typedef struct {
|
||||
|
@ -1222,6 +1231,11 @@ typedef struct _htt_rx_peer_rate_stats_tlv {
|
|||
*/
|
||||
A_UINT32 per_chain_rssi_pkt_type;
|
||||
A_INT8 rx_per_chain_rssi_in_dbm[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PEER_STATS_NUM_BW_COUNTERS];
|
||||
|
||||
A_UINT32 rx_ulmumimo_non_data_ppdu; /* ppdu level */
|
||||
A_UINT32 rx_ulmumimo_data_ppdu; /* ppdu level */
|
||||
A_UINT32 rx_ulmumimo_mpdu_ok; /* mpdu level */
|
||||
A_UINT32 rx_ulmumimo_mpdu_fail; /* mpdu level */
|
||||
} htt_rx_peer_rate_stats_tlv;
|
||||
|
||||
typedef enum {
|
||||
|
@ -2998,6 +3012,7 @@ typedef struct {
|
|||
#define HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
|
||||
#define HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
|
||||
#define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8
|
||||
#define HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER 8
|
||||
#define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16
|
||||
#define HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS 6
|
||||
|
||||
|
@ -3095,6 +3110,11 @@ typedef struct {
|
|||
A_UINT32 rx_br_poll;
|
||||
A_UINT32 rx_11ax_dl_ofdma_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
|
||||
A_UINT32 rx_11ax_dl_ofdma_ru[HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS];
|
||||
|
||||
A_UINT32 rx_ulmumimo_non_data_ppdu[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER]; /* ppdu level */
|
||||
A_UINT32 rx_ulmumimo_data_ppdu[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER]; /* ppdu level */
|
||||
A_UINT32 rx_ulmumimo_mpdu_ok[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER]; /* mpdu level */
|
||||
A_UINT32 rx_ulmumimo_mpdu_fail[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER]; /* mpdu level */
|
||||
} htt_rx_pdev_rate_stats_tlv;
|
||||
|
||||
/* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_RX_RATE
|
||||
|
|
|
@ -981,8 +981,8 @@ typedef enum {
|
|||
WMITLV_TAG_STRUC_wmi_wlanfw_iface_cmb_ind_event_fixed_param,
|
||||
WMITLV_TAG_STRUC_wmi_wlanfw_iface_combination_param,
|
||||
WMITLV_TAG_STRUC_wmi_wlanfw_iface_limit_param,
|
||||
WMITLV_TAG_STRUC_wmi_roam_dsm_filter_fixed_param,
|
||||
WMITLV_TAG_STRUC_wmi_roam_bssid_disallow_list_config_param,
|
||||
WMITLV_TAG_STRUC_wmi_pdev_dsm_filter_fixed_param,
|
||||
WMITLV_TAG_STRUC_wmi_pdev_bssid_disallow_list_config_param,
|
||||
WMITLV_TAG_STRUC_wmi_mgmt_hdr,
|
||||
} WMITLV_TAG_ID;
|
||||
|
||||
|
@ -1382,7 +1382,7 @@ typedef enum {
|
|||
OP(WMI_ROAM_DEAUTH_CONFIG_CMDID) \
|
||||
OP(WMI_ROAM_IDLE_CONFIG_CMDID) \
|
||||
OP(WMI_IDLE_TRIGGER_MONITOR_CMDID) \
|
||||
OP(WMI_ROAM_DSM_FILTER_CMDID) \
|
||||
OP(WMI_PDEV_DSM_FILTER_CMDID) \
|
||||
/* add new CMD_LIST elements above this line */
|
||||
|
||||
|
||||
|
@ -3055,11 +3055,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_IDLE_CONFIG_CMDID);
|
|||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_idle_trigger_monitor_cmd_fixed_param, wmi_idle_trigger_monitor_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
|
||||
WMITLV_CREATE_PARAM_STRUC(WMI_IDLE_TRIGGER_MONITOR_CMDID);
|
||||
|
||||
/* DSM roam filter parameters */
|
||||
#define WMITLV_TABLE_WMI_ROAM_DSM_FILTER_CMDID(id,op,buf,len) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_dsm_filter_fixed_param, wmi_roam_dsm_filter_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_bssid_disallow_list_config_param, bssid_disallow_list, WMITLV_SIZE_VAR)
|
||||
WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_DSM_FILTER_CMDID);
|
||||
/* DSM filter parameters */
|
||||
#define WMITLV_TABLE_WMI_PDEV_DSM_FILTER_CMDID(id,op,buf,len) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_dsm_filter_fixed_param, wmi_pdev_dsm_filter_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_bssid_disallow_list_config_param, bssid_disallow_list, WMITLV_SIZE_VAR)
|
||||
WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_DSM_FILTER_CMDID);
|
||||
|
||||
#define WMITLV_TABLE_WMI_ROAM_BLACKLIST_EVENTID(id,op,buf,len) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_blacklist_event_fixed_param, wmi_roam_blacklist_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
|
||||
|
@ -4228,7 +4228,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_AGGR_STATE_TRIG_EVENTID);
|
|||
|
||||
/* Roam Event */
|
||||
#define WMITLV_TABLE_WMI_ROAM_EVENTID(id,op,buf,len) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_event_fixed_param, wmi_roam_event_fixed_param, fixed_param, WMITLV_SIZE_FIX)
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_event_fixed_param, wmi_roam_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, deauth_disassoc_frame, WMITLV_SIZE_VAR)
|
||||
WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_EVENTID);
|
||||
|
||||
/* Roam Synch Event */
|
||||
|
|
|
@ -407,6 +407,8 @@ typedef enum {
|
|||
WMI_PDEV_PKTLOG_FILTER_CMDID,
|
||||
/** wmi command for setting rogue ap configuration */
|
||||
WMI_PDEV_SET_RAP_CONFIG_CMDID,
|
||||
/** Specify DSM filters along with disallow bssid filters */
|
||||
WMI_PDEV_DSM_FILTER_CMDID,
|
||||
|
||||
/* VDEV (virtual device) specific commands */
|
||||
/** vdev create */
|
||||
|
@ -697,8 +699,11 @@ typedef enum {
|
|||
WMI_ROAM_DEAUTH_CONFIG_CMDID,
|
||||
/** Configure idle roam trigger parameters */
|
||||
WMI_ROAM_IDLE_CONFIG_CMDID,
|
||||
/** roaming filter cmd with DSM filters along with existing roam filters */
|
||||
WMI_ROAM_DSM_FILTER_CMDID,
|
||||
/**
|
||||
* WMI_ROAM_DSM_FILTER_CMDID is deprecated and should be unused,
|
||||
* but leave it reserved just to be safe.
|
||||
*/
|
||||
DEPRECATED__WMI_ROAM_DSM_FILTER_CMDID,
|
||||
|
||||
/** offload scan specific commands */
|
||||
/** set offload scan AP profile */
|
||||
|
@ -2063,6 +2068,8 @@ typedef enum {
|
|||
#define WMI_HE_CAP_1X_LTF_400NS_GI_SUPPORT 0x00000001
|
||||
#define WMI_HE_CAP_2X_LTF_400NS_GI_SUPPORT 0x00000002
|
||||
#define WMI_HE_CAP_2X_LTF_160_80_80_SUPPORT 0x00000004
|
||||
#define WMI_HE_CAP_RX_DL_OFDMA_SUPPORT 0x00000018
|
||||
#define WMI_HE_CAP_RX_DL_MUMIMO_SUPPORT 0x00000030
|
||||
|
||||
#define WMI_HE_CAP_1X_LTF_400NS_GI_SUPPORT_GET(he_cap_info_dword1) \
|
||||
WMI_GET_BITS(he_cap_info_dword1, 0, 1)
|
||||
|
@ -2079,6 +2086,16 @@ typedef enum {
|
|||
#define WMI_HE_CAP_2X_LTF_160_80_80_SUPPORT_SET(he_cap_info_dword1, value) \
|
||||
WMI_SET_BITS(he_cap_info_dword1, 2, 1, value)
|
||||
|
||||
#define WMI_HE_CAP_RX_DL_OFDMA_SUPPORT_GET(he_cap_info_dword1) \
|
||||
WMI_GET_BITS(he_cap_info_dword1, 3, 2)
|
||||
#define WMI_HE_CAP_RX_DL_OFDMA_SUPPORT_SET(he_cap_info_dword1, value) \
|
||||
WMI_SET_BITS(he_cap_info_dword1, 3, 2, value)
|
||||
|
||||
#define WMI_HE_CAP_RX_DL_MUMIMO_SUPPORT_GET(he_cap_info_dword1) \
|
||||
WMI_GET_BITS(he_cap_info_dword1, 5, 2)
|
||||
#define WMI_HE_CAP_RX_DL_MUMIMO_SUPPORT_SET(he_cap_info_dword1, value) \
|
||||
WMI_SET_BITS(he_cap_info_dword1, 5, 2, value)
|
||||
|
||||
/* Interested readers refer to Rx/Tx MCS Map definition as defined in 802.11ax
|
||||
*/
|
||||
#define WMI_HE_MAX_MCS_4_SS_MASK(r,ss) ((3 & (r)) << (((ss) - 1) << 1))
|
||||
|
@ -2091,6 +2108,20 @@ enum {
|
|||
WMI_HE_FRAG_SUPPORT_LEVEL3, /* support for multiple fragments per MSDU within an A-MPDU */
|
||||
};
|
||||
|
||||
enum {
|
||||
WMI_HE_RX_DL_OFDMA_SUPPORT_DEFAULT, /* Default */
|
||||
WMI_HE_RX_DL_OFDMA_SUPPORT_DISABLE, /* RX DL OFDMA Support Disabled */
|
||||
WMI_HE_RX_DL_OFDMA_SUPPORT_ENABLE, /* RX DL OFDMA Support Enabled */
|
||||
WMI_HE_RX_DL_OFDMA_SUPPORT_INVALID, /* INVALID */
|
||||
};
|
||||
|
||||
enum {
|
||||
WMI_HE_RX_DL_MUMIMO_SUPPORT_DEFAULT, /* Default */
|
||||
WMI_HE_RX_DL_MUMIMO_SUPPORT_DISABLE, /* RX DL MU-MIMO Support Disabled */
|
||||
WMI_HE_RX_DL_MUMIMO_SUPPORT_ENABLE, /* RX DL MU-MIMO Support Enabled */
|
||||
WMI_HE_RX_DL_MUMIMO_SUPPORT_INVALID, /* INVALID */
|
||||
};
|
||||
|
||||
/** NOTE: This defs cannot be changed in the future without breaking WMI compatibility */
|
||||
#define WMI_MAX_NUM_SS MAX_HE_NSS
|
||||
#define WMI_MAX_NUM_RU MAX_HE_RU
|
||||
|
@ -5841,19 +5872,26 @@ typedef enum {
|
|||
|
||||
/* Parameter used to configure OBSS Packet Detect threshold
|
||||
* for Spatial Reuse feature.
|
||||
* The accepted values are in between 62 and 95, inclusive.
|
||||
* The accepted values are in between 0x00 and 0xFF, inclusive.
|
||||
* The parameter value is programmed into the spatial reuse register,
|
||||
* to specify how low the background signal strength from neighboring
|
||||
* BSS cells must be, for this AP to employ spatial reuse.
|
||||
* The value of the parameter is multiplied by -1 to get the
|
||||
* OBSS RSSI threshold, in dBm, below which spatial reuse will
|
||||
* be allowed.
|
||||
* For example, if the parameter value is 62, the target will
|
||||
*
|
||||
* The value of the parameter is compared against the OBSS RSSI in dB.
|
||||
* It is a 8-bit value whose
|
||||
* range is -128 to 127 (after two's complement operation).
|
||||
* For example, if the parameter value is 0xF5, the target will
|
||||
* allow spatial reuse if the RSSI detected from other BSS
|
||||
* is below -62 dBm.
|
||||
* Similarly, if the parameter value is 80, the target will
|
||||
* is below -10 dB.
|
||||
* Similarly, if the parameter value is 0x0A, the target will
|
||||
* allow spatial reuse only if the RSSI detected from neighboring
|
||||
* BSS cells is no more than -80 dBm.
|
||||
* BSS cells is no more than 10 dB.
|
||||
*
|
||||
* bit | purpose
|
||||
* -------------
|
||||
* 0 - 7 | Param Value
|
||||
* 8 - 30 | reserved
|
||||
* 31 | Enable/Disable. If set to 0, ignore bits 0-7.
|
||||
*/
|
||||
WMI_PDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD,
|
||||
|
||||
|
@ -10087,6 +10125,7 @@ typedef struct {
|
|||
#define WMI_VDEV_START_RESPONSE_INVALID_VDEVID 0x1 /** requested VDEV not found */
|
||||
#define WMI_VDEV_START_RESPONSE_NOT_SUPPORTED 0x2 /** unsupported VDEV combination */
|
||||
#define WMI_VDEV_START_RESPONSE_DFS_VIOLATION 0x3 /** DFS_VIOLATION since channel in the NOL is selected */
|
||||
#define WMI_VDEV_START_RESPONSE_INVALID_REGDOMAIN 0x4 /** Invalid regulatory domain in VDEV start */
|
||||
|
||||
/** Beacon processing related command and event structures */
|
||||
typedef struct {
|
||||
|
@ -11523,7 +11562,11 @@ typedef struct {
|
|||
* bit 0 : Indicated support for RX 1xLTF + 0.4us
|
||||
* bit 1 : Indicates support for RX 2xLTF + 0.4us
|
||||
* bit 2 : Indicates support for 2xLTF in 160/80+80 MHz HE PPDU
|
||||
* bit[31:3] : Reserved
|
||||
* bit[4:3] : Indicates support for DL OFDMA
|
||||
* Refer to enum WMI_HE_RX_DL_OFDMA_SUPPORT_x
|
||||
* bit[6:5] : Indicates support for DL MU-MIMO
|
||||
* Refer to enum WMI_HE_RX_DL_MUMIMO_SUPPORT_x
|
||||
* bit[31:7] : Reserved
|
||||
* Refer to WMI_HE_CAP_xx_LTF_xxx_SUPPORT_GET/SET macros
|
||||
*/
|
||||
A_UINT32 peer_he_cap_info_internal;
|
||||
|
@ -12691,6 +12734,10 @@ typedef struct {
|
|||
* Refer to WMI_ROAM_NOTIF_ defs to interpret the notif_params value.
|
||||
*/
|
||||
A_UINT32 notif_params;
|
||||
/** roam notification param1
|
||||
* Refer to WMI_ROAM_NOTIF_ defs to interpret the notif_params1 value.
|
||||
*/
|
||||
A_UINT32 notif_params1;
|
||||
} wmi_roam_event_fixed_param;
|
||||
|
||||
|
||||
|
@ -12763,8 +12810,8 @@ typedef enum
|
|||
#define WMI_ROAM_NOTIF_DISCONNECT 0x6 /** indicate that roaming not allowed due BTM req */
|
||||
#define WMI_ROAM_NOTIF_SUBNET_CHANGED 0x7 /** indicate that subnet has changed */
|
||||
#define WMI_ROAM_NOTIF_SCAN_START 0x8 /** indicate roam scan start, notif_params to be sent as WMI_ROAM_TRIGGER_REASON_ID */
|
||||
#define WMI_ROAM_NOTIF_DEAUTH_RECV 0x9 /** indicate deauth received, notif_params to be sent as reason code */
|
||||
#define WMI_ROAM_NOTIF_DISASSOC_RECV 0xa /** indicate disassoc received, notif_params to be sent as reason code */
|
||||
#define WMI_ROAM_NOTIF_DEAUTH_RECV 0x9 /** indicate deauth received, notif_params to be sent as reason code, notif_params1 to be sent as frame length */
|
||||
#define WMI_ROAM_NOTIF_DISASSOC_RECV 0xa /** indicate disassoc received, notif_params to be sent as reason code, notif_params1 to be sent as frame length */
|
||||
|
||||
/**whenever RIC request information change, host driver should pass all ric related information to firmware (now only support tsepc)
|
||||
* Once, 11r roaming happens, firmware can generate RIC request in reassoc request based on these informations
|
||||
|
@ -12825,6 +12872,7 @@ typedef struct{
|
|||
#define WMI_ROAM_INVOKE_SCAN_MODE_CACHE_LIST 1 /* scan cached channel list */
|
||||
#define WMI_ROAM_INVOKE_SCAN_MODE_FULL_CH 2 /* scan full channel */
|
||||
#define WMI_ROAM_INVOKE_SCAN_MODE_SKIP 3 /* no scan is performed. use beacon/probe resp given by the host */
|
||||
#define WMI_ROAM_INVOKE_SCAN_MODE_CACHE_MAP 4 /* scan cached channel map */
|
||||
|
||||
#define WMI_ROAM_INVOKE_AP_SEL_FIXED_BSSID 0 /* roam to given BSSID only */
|
||||
#define WMI_ROAM_INVOKE_AP_SEL_ANY_BSSID 1 /* roam to any BSSID */
|
||||
|
@ -23993,7 +24041,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command)
|
|||
WMI_RETURN_STRING(WMI_ROAM_DEAUTH_CONFIG_CMDID);
|
||||
WMI_RETURN_STRING(WMI_ROAM_IDLE_CONFIG_CMDID);
|
||||
WMI_RETURN_STRING(WMI_IDLE_TRIGGER_MONITOR_CMDID);
|
||||
WMI_RETURN_STRING(WMI_ROAM_DSM_FILTER_CMDID);
|
||||
WMI_RETURN_STRING(WMI_PDEV_DSM_FILTER_CMDID);
|
||||
}
|
||||
|
||||
return "Invalid WMI cmd";
|
||||
|
@ -24498,11 +24546,11 @@ typedef enum {
|
|||
/*
|
||||
* Lay out of flags in wmi_wlm_config_cmd_fixed_param
|
||||
*
|
||||
* |31 17|16 14| 13 | 12 | 11 | 10 |9 8|7 6|5 4|3 2| 1 | 0 |
|
||||
* +------+-----+----+----+------+------+------+------+------+------+-----+-----+
|
||||
* | RSVD | NSS |EDCA| TRY| SSLP | CSLP | RSVD | Roam | RSVD | DWLT | DFS | SUP |
|
||||
* +----------------------+-------------+-------------+-------------------------+
|
||||
* | WAL | PS | Roam | Scan |
|
||||
* |31 19| 18 | 17|16 14| 13 | 12| 11 | 10 | 9 | 8 |7 6|5 4|3 2| 1 | 0 |
|
||||
* +-----+-----+---+-----+----+---+----+----+-----+----+----+----+----+---+---+
|
||||
* | RSVD|SRATE|RTS| NSS |EDCA|TRY|SSLP|CSLP|DBMPS|RSVD|Roam|RSVD|DWLT|DFS|SUP|
|
||||
* +------------------------------+---------------+---------+-----------------+
|
||||
* | WAL | PS | Roam | Scan |
|
||||
*
|
||||
* Flag values:
|
||||
* TRY: (1) enable short limit for retrying unacked tx, where the limit is
|
||||
|
@ -24513,6 +24561,10 @@ typedef enum {
|
|||
* NSS: (0) no Nss limits, other than those negotiatied during association
|
||||
* (1) during 2-chain operation, tx only a single spatial stream
|
||||
* (2) - (7) reserved / invalid
|
||||
* RTS: (0) default protection
|
||||
* (1) always enable RTS/CTS protection
|
||||
* SRATE: (0) default secondary rate policy
|
||||
* (1) disable secondary rate
|
||||
*/
|
||||
/* bit 0-3 of flags is used for scan operation */
|
||||
/* bit 0: WLM_FLAGS_SCAN_SUPPRESS, suppress all scan and other bits would be ignored if bit is set */
|
||||
|
@ -24589,6 +24641,10 @@ typedef enum {
|
|||
#define WLM_FLAGS_WAL_ADJUST_EDCA_SET(flag, val) WMI_SET_BITS(flag, 13, 1, val)
|
||||
#define WLM_FLAGS_WAL_1NSS_ENABLED(flag) (WMI_GET_BITS(flag, 14, 3) & 0x1)
|
||||
#define WLM_FLAGS_WAL_NSS_SET(flag, val) WMI_SET_BITS(flag, 14, 3, val)
|
||||
#define WLM_FLAGS_WAL_ALWAYS_RTS_PROTECTION(flag) WMI_GET_BITS(flag, 17, 1)
|
||||
#define WLM_FLAGS_WAL_RTS_PROTECTION_SET(flag, val) WMI_SET_BITS(flag, 17, 1, val)
|
||||
#define WLM_FLAGS_WAL_DISABLE_SECONDARY_RATE(flag) WMI_GET_BITS(flag, 18, 1)
|
||||
#define WLM_FLAGS_WAL_SECONDARY_RATE_SET(flag, val) WMI_SET_BITS(flag, 18, 1, val)
|
||||
|
||||
typedef struct {
|
||||
/** TLV tag and len; tag equals
|
||||
|
@ -24881,15 +24937,17 @@ typedef struct {
|
|||
|
||||
/**
|
||||
* [7:0] : channel metric - 0 = unusable, 1 = worst, 100 = best
|
||||
* [11:8] : channel BW -
|
||||
* 0 = 20MHz
|
||||
* 1 = 40MHz
|
||||
* 2 = 80MHz
|
||||
* 3 = 160MHz
|
||||
* (4-10 unused)
|
||||
* 11 = 5MHz
|
||||
* 12 = 10MHz
|
||||
* (13-15 unused)
|
||||
* [11:8] : channel BW - This bit-field uses values compatible with
|
||||
* enum definitions used internally within the target's
|
||||
* halphy code. These values are specified below.
|
||||
* BW_20MHZ = 0,
|
||||
* BW_40MHZ = 1,
|
||||
* BW_80MHZ = 2,
|
||||
* BW_160MHZ = 3,
|
||||
* BW_80P80MHZ = 4,
|
||||
* BW_5MHZ = 5,
|
||||
* BW_10MHZ = 6,
|
||||
* BW_165MHZ = 7,
|
||||
* [15:12]: Reserved
|
||||
* [31:16]: Frequency - Center frequency of the channel for which
|
||||
* the RF characterisation info applies (MHz)
|
||||
|
@ -25227,21 +25285,20 @@ typedef enum {
|
|||
} WMI_SCREEN_STATUS_NOTIFY_ID;
|
||||
|
||||
typedef struct {
|
||||
/** TLV tag and len; tag equals wmi_roam_dsm_filter_fixed_param */
|
||||
/** TLV tag and len; tag equals wmi_pdev_dsm_filter_fixed_param */
|
||||
A_UINT32 tlv_header;
|
||||
/** Unique id identifying the VDEV on which new roaming filter(data stall AP mitigation) is adopted */
|
||||
A_UINT32 vdev_id;
|
||||
/**
|
||||
* TLV (tag length value) parameter's following roam_dsm_filter_cmd are,
|
||||
* TLV (tag length value) parameter's following pdev_dsm_filter_cmd are,
|
||||
*
|
||||
* wmi_roam_bssid_disallow_list_config_param bssid_disallow_list[]; i.e array containing
|
||||
* all roam filter lists including the new DSM lists(avoidlist/driver_blacklist) and
|
||||
* existing roam lists(supplicant_blacklist/rssi_rejectlist etc.)
|
||||
* wmi_pdev_bssid_disallow_list_config_param bssid_disallow_list[];
|
||||
* i.e array containing all disallow AP filter lists including
|
||||
* the new DSM lists (avoidlist / driver_blacklist) and existing
|
||||
* lists (supplicant_blacklist / rssi_rejectlist etc.)
|
||||
*/
|
||||
} wmi_roam_dsm_filter_fixed_param;
|
||||
} wmi_pdev_dsm_filter_fixed_param;
|
||||
|
||||
typedef struct {
|
||||
/** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_bssid_disallow_list_config_param */
|
||||
/** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_bssid_disallow_list_config_param */
|
||||
A_UINT32 tlv_header;
|
||||
/** bssid type i.e whether bssid falls in avoid list or driver_blacklist etc.
|
||||
see WMI_BSSID_DISALLOW_LIST_TYPE **/
|
||||
|
@ -25252,13 +25309,13 @@ typedef struct {
|
|||
A_UINT32 remaining_disallow_duration;
|
||||
/** AP will be allowed for candidate, when AP RSSI better than expected RSSI units in dBm */
|
||||
A_INT32 expected_rssi;
|
||||
} wmi_roam_bssid_disallow_list_config_param;
|
||||
} wmi_pdev_bssid_disallow_list_config_param;
|
||||
|
||||
typedef enum {
|
||||
/* USER_SPACE_BLACK_LIST
|
||||
* Black Listed AP's by host's user space
|
||||
*/
|
||||
WMI_BSSID_DISALLOW_USER_SPACE_BLACK_LIST = 0,
|
||||
WMI_BSSID_DISALLOW_USER_SPACE_BLACK_LIST = 1,
|
||||
/* DRIVER_BLACK_LIST
|
||||
* Black Listed AP's by host driver
|
||||
* used for data stall migitation
|
||||
|
@ -25280,6 +25337,12 @@ typedef enum {
|
|||
WMI_BSSID_DISALLOW_RSSI_REJECT_LIST,
|
||||
} WMI_BSSID_DISALLOW_LIST_TYPE;
|
||||
|
||||
/* WLAN_PDEV_MAX_NUM_BSSID_DISALLOW_LIST:
|
||||
* Maximum number of BSSID disallow entries which host is allowed to send
|
||||
* to firmware within the WMI_PDEV_DSM_FILTER_CMDID message.
|
||||
*/
|
||||
#define WLAN_PDEV_MAX_NUM_BSSID_DISALLOW_LIST 28
|
||||
|
||||
typedef struct {
|
||||
/*
|
||||
* The timestamp is in units of ticks of a 19.2MHz clock.
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#define __WMI_VER_MINOR_ 0
|
||||
/** WMI revision number has to be incremented when there is a
|
||||
* change that may or may not break compatibility. */
|
||||
#define __WMI_REVISION_ 664
|
||||
#define __WMI_REVISION_ 671
|
||||
|
||||
/** The Version Namespace should not be normally changed. Only
|
||||
* host and firmware of the same WMI namespace will work
|
||||
|
|
|
@ -936,6 +936,24 @@ QDF_STATUS cds_set_hw_mode_on_channel_switch(uint8_t session_id);
|
|||
void cds_set_do_hw_mode_change_flag(bool flag);
|
||||
bool cds_is_hw_mode_change_after_vdev_up(void);
|
||||
void cds_checkn_update_hw_mode_single_mac_mode(uint8_t channel);
|
||||
|
||||
/**
|
||||
* cds_check_and_stop_opportunistic_timer() - Stop dbs opportunistic timer
|
||||
*
|
||||
* Stop dbs opportunistic timer and depending on the current connections change
|
||||
* hw_mode to single mac mode.
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void cds_check_and_stop_opportunistic_timer(void);
|
||||
|
||||
/**
|
||||
* cds_set_opportunistic_update() - Set opportunistic update event
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cds_set_opportunistic_update(void);
|
||||
|
||||
void cds_dump_connection_status_info(void);
|
||||
/**
|
||||
* cds_mode_specific_vdev_id() - provides the
|
||||
|
|
|
@ -376,6 +376,7 @@ typedef struct _cds_context_type {
|
|||
qdf_event_t connection_update_done_evt;
|
||||
qdf_mutex_t qdf_conc_list_lock;
|
||||
qdf_mc_timer_t dbs_opportunistic_timer;
|
||||
qdf_event_t opportunistic_update_done_evt;
|
||||
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
|
||||
void (*sap_restart_chan_switch_cb)(struct hdd_adapter_s *,
|
||||
uint32_t, uint32_t);
|
||||
|
|
|
@ -2683,19 +2683,19 @@ static void cds_pdev_set_hw_mode_cb(uint32_t status,
|
|||
cds_ctx = cds_get_context(QDF_MODULE_ID_QDF);
|
||||
if (!cds_ctx) {
|
||||
cds_err("Invalid CDS Context");
|
||||
return;
|
||||
goto set_done_event;
|
||||
}
|
||||
|
||||
cds_set_hw_mode_change_in_progress(CDS_HW_MODE_NOT_IN_PROGRESS);
|
||||
|
||||
if (status != SET_HW_MODE_STATUS_OK) {
|
||||
cds_err("Set HW mode failed with status %d", status);
|
||||
return;
|
||||
goto set_done_event;
|
||||
}
|
||||
|
||||
if (!vdev_mac_map) {
|
||||
cds_err("vdev_mac_map is NULL");
|
||||
return;
|
||||
goto set_done_event;
|
||||
}
|
||||
|
||||
cds_debug("cfgd_hw_mode_index=%d", cfgd_hw_mode_index);
|
||||
|
@ -2708,7 +2708,7 @@ static void cds_pdev_set_hw_mode_cb(uint32_t status,
|
|||
ret = wma_get_hw_mode_from_idx(cfgd_hw_mode_index, &hw_mode);
|
||||
if (ret != QDF_STATUS_SUCCESS) {
|
||||
cds_err("Get HW mode failed: %d", ret);
|
||||
return;
|
||||
goto set_done_event;
|
||||
}
|
||||
|
||||
cds_debug("MAC0: TxSS:%d, RxSS:%d, Bw:%d",
|
||||
|
@ -2736,7 +2736,10 @@ static void cds_pdev_set_hw_mode_cb(uint32_t status,
|
|||
if (cds_ctx->mode_change_cb)
|
||||
cds_ctx->mode_change_cb();
|
||||
|
||||
return;
|
||||
set_done_event:
|
||||
ret = cds_set_opportunistic_update();
|
||||
if (!QDF_IS_STATUS_SUCCESS(ret))
|
||||
cds_err("ERROR: set opportunistic_update event failed");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4403,6 +4406,14 @@ QDF_STATUS cds_deinit_policy_mgr(void)
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/* Destroy opportunistic_update_done_evt */
|
||||
status = qdf_event_destroy(&cds_ctx->opportunistic_update_done_evt);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
cds_err("Failed to destroy opportunistic_update_done_evt");
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
QDF_ASSERT(0);
|
||||
}
|
||||
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_event_destroy
|
||||
(&cds_ctx->connection_update_done_evt))) {
|
||||
cds_err("Failed to destroy connection_update_done_evt");
|
||||
|
@ -4507,6 +4518,12 @@ QDF_STATUS cds_init_policy_mgr(struct cds_sme_cbacks *sme_cbacks)
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
status = qdf_event_create(&cds_ctx->opportunistic_update_done_evt);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
cds_err("opportunistic_update_done_evt init failed");
|
||||
return status;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -11096,6 +11113,67 @@ void cds_checkn_update_hw_mode_single_mac_mode(uint8_t channel)
|
|||
cds_dbs_opportunistic_timer_handler((void *)cds_ctx);
|
||||
}
|
||||
|
||||
QDF_STATUS cds_set_opportunistic_update(void)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
cds_context_type *cds_ctx;
|
||||
|
||||
cds_ctx = cds_get_context(QDF_MODULE_ID_QDF);
|
||||
if (!cds_ctx) {
|
||||
cds_err("Invalid CDS Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
status = qdf_event_set(&cds_ctx->opportunistic_update_done_evt);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
cds_err("set event failed");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void cds_check_and_stop_opportunistic_timer(void)
|
||||
{
|
||||
cds_context_type *cds_ctx;
|
||||
enum cds_conc_next_action action = CDS_NOP;
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
|
||||
cds_ctx = cds_get_context(QDF_MODULE_ID_QDF);
|
||||
if (!cds_ctx) {
|
||||
cds_err("Invalid CDS Context");
|
||||
return;
|
||||
}
|
||||
|
||||
if (cds_ctx->dbs_opportunistic_timer.state != QDF_TIMER_STATE_RUNNING)
|
||||
return;
|
||||
|
||||
qdf_mc_timer_stop(&cds_ctx->dbs_opportunistic_timer);
|
||||
|
||||
action = cds_need_opportunistic_upgrade();
|
||||
if (!action)
|
||||
return;
|
||||
|
||||
qdf_event_reset(&cds_ctx->opportunistic_update_done_evt);
|
||||
|
||||
/*
|
||||
* lets call for action, session id is being used only
|
||||
* in hidden ssid case for now. So, session id 0 is ok here.
|
||||
*/
|
||||
status = cds_next_actions(0, action, SIR_UPDATE_REASON_OPPORTUNISTIC);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
cds_err("Failed in cds_next_actions");
|
||||
return;
|
||||
}
|
||||
|
||||
status = qdf_wait_single_event(&cds_ctx->opportunistic_update_done_evt,
|
||||
CONNECTION_UPDATE_TIMEOUT);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
cds_err("wait on opportunistic_update_done_evt is failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_set_do_hw_mode_change_flag() - Set flag to indicate hw mode change
|
||||
* @flag: Indicate if hw mode change is required or not
|
||||
|
|
|
@ -6163,6 +6163,7 @@ ol_txrx_mon_rx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id,
|
|||
|
||||
/* clear IEEE80211_RADIOTAP_F_FCS flag*/
|
||||
rx_status.rtap_flags &= ~(BIT(4));
|
||||
rx_status.rtap_flags &= ~(BIT(2));
|
||||
|
||||
/*
|
||||
* convert 802.3 header format into 802.11 format
|
||||
|
|
|
@ -11368,8 +11368,8 @@ enum restart_beaconing_on_ch_avoid_rule {
|
|||
* <ini>
|
||||
* gAutoBmpsTimerValue - Set Auto BMPS Timer value
|
||||
* @Min: 0
|
||||
* @Max: 120
|
||||
* @Default: 90
|
||||
* @Max: 1000
|
||||
* @Default: 600
|
||||
*
|
||||
* This ini is used to set Auto BMPS Timer value in seconds
|
||||
*
|
||||
|
@ -11383,8 +11383,8 @@ enum restart_beaconing_on_ch_avoid_rule {
|
|||
*/
|
||||
#define CFG_AUTO_PS_ENABLE_TIMER_NAME "gAutoBmpsTimerValue"
|
||||
#define CFG_AUTO_PS_ENABLE_TIMER_MIN (0)
|
||||
#define CFG_AUTO_PS_ENABLE_TIMER_MAX (120)
|
||||
#define CFG_AUTO_PS_ENABLE_TIMER_DEFAULT (90)
|
||||
#define CFG_AUTO_PS_ENABLE_TIMER_MAX (1000)
|
||||
#define CFG_AUTO_PS_ENABLE_TIMER_DEFAULT (600)
|
||||
|
||||
#ifdef WLAN_ICMP_DISABLE_PS
|
||||
/*
|
||||
|
@ -12675,7 +12675,7 @@ enum hw_filter_mode {
|
|||
* </ini>
|
||||
*/
|
||||
#define CFG_ACTION_OUI_SWITCH_TO_11N_MODE_NAME "gActionOUISwitchTo11nMode"
|
||||
#define CFG_ACTION_OUI_SWITCH_TO_11N_MODE_DEFAULT "00904C 03 0418BF E0 21 40"
|
||||
#define CFG_ACTION_OUI_SWITCH_TO_11N_MODE_DEFAULT "00904C 05 0418BF0CB2 F8 21 40"
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -506,6 +506,11 @@ static int hdd_apf_read_memory(hdd_adapter_t *adapter, struct nlattr **tb)
|
|||
|
||||
ENTER();
|
||||
|
||||
if (context->apf_enabled) {
|
||||
hdd_err("Cannot get/set while interpreter is enabled");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
read_mem_params.vdev_id = adapter->sessionId;
|
||||
|
||||
/* Read APF work memory offset */
|
||||
|
@ -531,11 +536,6 @@ static int hdd_apf_read_memory(hdd_adapter_t *adapter, struct nlattr **tb)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (context->apf_enabled) {
|
||||
hdd_err("Cannot get/set while interpreter is enabled");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
qdf_event_reset(&context->qdf_apf_event);
|
||||
context->offset = read_mem_params.addr_offset;
|
||||
|
||||
|
|
|
@ -2323,9 +2323,10 @@ static int hdd_set_dwell_time(hdd_adapter_t *adapter, uint8_t *command)
|
|||
sme_get_config_param(hHal, sme_config);
|
||||
|
||||
if (strncmp(command, "SETDWELLTIME ACTIVE MAX", 23) == 0) {
|
||||
if (drv_cmd_validate(command, 23))
|
||||
return -EINVAL;
|
||||
|
||||
if (drv_cmd_validate(command, 23)) {
|
||||
retval = -EINVAL;
|
||||
goto free;
|
||||
}
|
||||
value = value + 24;
|
||||
temp = kstrtou32(value, 10, &val);
|
||||
if (temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN ||
|
||||
|
@ -2338,8 +2339,10 @@ static int hdd_set_dwell_time(hdd_adapter_t *adapter, uint8_t *command)
|
|||
sme_config->csrConfig.nActiveMaxChnTime = val;
|
||||
sme_update_config(hHal, sme_config);
|
||||
} else if (strncmp(command, "SETDWELLTIME ACTIVE MIN", 23) == 0) {
|
||||
if (drv_cmd_validate(command, 23))
|
||||
return -EINVAL;
|
||||
if (drv_cmd_validate(command, 23)) {
|
||||
retval = -EINVAL;
|
||||
goto free;
|
||||
}
|
||||
|
||||
value = value + 24;
|
||||
temp = kstrtou32(value, 10, &val);
|
||||
|
@ -2353,8 +2356,10 @@ static int hdd_set_dwell_time(hdd_adapter_t *adapter, uint8_t *command)
|
|||
sme_config->csrConfig.nActiveMinChnTime = val;
|
||||
sme_update_config(hHal, sme_config);
|
||||
} else if (strncmp(command, "SETDWELLTIME PASSIVE MAX", 24) == 0) {
|
||||
if (drv_cmd_validate(command, 24))
|
||||
return -EINVAL;
|
||||
if (drv_cmd_validate(command, 24)) {
|
||||
retval = -EINVAL;
|
||||
goto free;
|
||||
}
|
||||
|
||||
value = value + 25;
|
||||
temp = kstrtou32(value, 10, &val);
|
||||
|
@ -2368,8 +2373,10 @@ static int hdd_set_dwell_time(hdd_adapter_t *adapter, uint8_t *command)
|
|||
sme_config->csrConfig.nPassiveMaxChnTime = val;
|
||||
sme_update_config(hHal, sme_config);
|
||||
} else if (strncmp(command, "SETDWELLTIME PASSIVE MIN", 24) == 0) {
|
||||
if (drv_cmd_validate(command, 24))
|
||||
return -EINVAL;
|
||||
if (drv_cmd_validate(command, 24)) {
|
||||
retval = -EINVAL;
|
||||
goto free;
|
||||
}
|
||||
|
||||
value = value + 25;
|
||||
temp = kstrtou32(value, 10, &val);
|
||||
|
@ -2383,8 +2390,10 @@ static int hdd_set_dwell_time(hdd_adapter_t *adapter, uint8_t *command)
|
|||
sme_config->csrConfig.nPassiveMinChnTime = val;
|
||||
sme_update_config(hHal, sme_config);
|
||||
} else if (strncmp(command, "SETDWELLTIME", 12) == 0) {
|
||||
if (drv_cmd_validate(command, 12))
|
||||
return -EINVAL;
|
||||
if (drv_cmd_validate(command, 12)) {
|
||||
retval = -EINVAL;
|
||||
goto free;
|
||||
}
|
||||
|
||||
value = value + 13;
|
||||
temp = kstrtou32(value, 10, &val);
|
||||
|
|
|
@ -2420,9 +2420,11 @@ int hdd_wlan_start_modules(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter,
|
|||
}
|
||||
|
||||
|
||||
ret = hdd_ipa_init(hdd_ctx);
|
||||
if (ret)
|
||||
status = hdd_ipa_init(hdd_ctx);
|
||||
if (status) {
|
||||
ret = qdf_status_to_os_return(status);
|
||||
goto err_post_disable;
|
||||
}
|
||||
|
||||
hdd_sysfs_create_version_interface();
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -31,6 +31,7 @@
|
|||
#include "nan_api.h"
|
||||
#include "wlan_hdd_main.h"
|
||||
#include "wlan_hdd_nan.h"
|
||||
#include "cds_concurrency.h"
|
||||
|
||||
/**
|
||||
* __wlan_hdd_cfg80211_nan_request() - cfg80211 NAN request handler
|
||||
|
@ -72,6 +73,21 @@ static int __wlan_hdd_cfg80211_nan_request(struct wiphy *wiphy,
|
|||
return -EPERM;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: NAN commands in DBS hw_mode are not supported.
|
||||
*
|
||||
* When STA + SAP is operating in DBS mode and if the SAP is stopped,
|
||||
* then after 10 seconds dbs opportunistic timer handler is invoked
|
||||
* to move hw_mode to single mac.
|
||||
*
|
||||
* Meanwhile in this 10 seconds window, if there is NAN enable request,
|
||||
* then firmware rejects it, since hw_mode is in DBS.
|
||||
*
|
||||
* Therefore, when NAN request is issued try to change hw_mode to
|
||||
* single MAC.
|
||||
*/
|
||||
cds_check_and_stop_opportunistic_timer();
|
||||
|
||||
nan_req.request_data_len = data_len;
|
||||
nan_req.request_data = data;
|
||||
|
||||
|
|
|
@ -8977,7 +8977,8 @@ static int __iw_setnone_getint(struct net_device *dev,
|
|||
if (QDF_STATUS_SUCCESS !=
|
||||
sme_cfg_get_int(hHal, WNI_CFG_CURRENT_TX_POWER_LEVEL,
|
||||
&txpow2g)) {
|
||||
return -EIO;
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
hdd_debug("2G tx_power %d", txpow2g);
|
||||
break;
|
||||
|
@ -8995,7 +8996,8 @@ static int __iw_setnone_getint(struct net_device *dev,
|
|||
if (QDF_STATUS_SUCCESS !=
|
||||
sme_cfg_get_int(hHal, WNI_CFG_CURRENT_TX_POWER_LEVEL,
|
||||
&txpow5g)) {
|
||||
return -EIO;
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
hdd_debug("5G tx_power %d", txpow5g);
|
||||
break;
|
||||
|
|
|
@ -32,9 +32,9 @@
|
|||
#define QWLAN_VERSION_MAJOR 5
|
||||
#define QWLAN_VERSION_MINOR 1
|
||||
#define QWLAN_VERSION_PATCH 1
|
||||
#define QWLAN_VERSION_EXTRA "E"
|
||||
#define QWLAN_VERSION_EXTRA "Q"
|
||||
#define QWLAN_VERSION_BUILD 73
|
||||
|
||||
#define QWLAN_VERSIONSTR "5.1.1.73E"
|
||||
#define QWLAN_VERSIONSTR "5.1.1.73Q"
|
||||
|
||||
#endif /* QWLAN_VERSION_H */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -455,6 +455,13 @@
|
|||
#define SIR_MAX_NOA_ATTR_LEN 31
|
||||
#define SIR_MAX_NOA_DESCR 2
|
||||
#define SIR_P2P_IE_HEADER_LEN 6
|
||||
#define HEADER_LEN_P2P_IE 6
|
||||
#define OUI_SIZE_P2P 4
|
||||
|
||||
#define P2P_1X1_WAR_OUI "\x00\x50\xf2\x04"
|
||||
#define P2P_1X1_OUI_LEN 4
|
||||
#define MAX_CONFIG_METHODS_LEN 2
|
||||
#define DEVICE_CATEGORY_MAX_LEN 1
|
||||
|
||||
#define SIR_MAC_CISCO_OUI "\x00\x40\x96"
|
||||
#define SIR_MAC_CISCO_OUI_SIZE 3
|
||||
|
@ -2261,4 +2268,67 @@ typedef struct sSirMacRadioMeasureReport {
|
|||
#define SIR_MAC_TXSTBC 1
|
||||
#define SIR_MAC_RXSTBC 1
|
||||
|
||||
/**
|
||||
* enum p2p_attr_id - enum for P2P attributes ID in P2P IE
|
||||
* @P2P_ATTR_STATUS - Attribute Status none
|
||||
* @P2P_ATTR_MINOR_REASON_CODE: Minor reason code attribute
|
||||
* @P2P_ATTR_CAPABILITY: Capability attribute
|
||||
* @P2P_ATTR_DEVICE_ID: device ID attribute
|
||||
* @P2P_ATTR_GROUP_OWNER_INTENT: Group owner intent attribute
|
||||
* @P2P_ATTR_CONFIGURATION_TIMEOUT: Config timeout attribute
|
||||
* @P2P_ATTR_LISTEN_CHANNEL: listen channel attribute
|
||||
* @P2P_ATTR_GROUP_BSSID: Group BSSID attribute
|
||||
* @P2P_ATTR_EXT_LISTEN_TIMING: Listen timing attribute
|
||||
* @P2P_ATTR_INTENDED_INTERFACE_ADDR: Intended interface address attribute
|
||||
* @P2P_ATTR_MANAGEABILITY: Manageability attribute
|
||||
* @P2P_ATTR_CHANNEL_LIST: Channel list attribute
|
||||
* @P2P_ATTR_NOTICE_OF_ABSENCE: Notice of Absence attribute
|
||||
* @P2P_ATTR_DEVICE_INFO: Device Info attribute
|
||||
* @P2P_ATTR_GROUP_INFO: Group Info attribute
|
||||
* @P2P_ATTR_GROUP_ID: Group ID attribute
|
||||
* @P2P_ATTR_INTERFACE: Interface attribute
|
||||
* @P2P_ATTR_OPERATING_CHANNEL: Operating channel attribute
|
||||
* @P2P_ATTR_INVITATION_FLAGS: Invitation flags attribute
|
||||
* @P2P_ATTR_OOB_GO_NEG_CHANNEL: GO neg channel attribute
|
||||
* @P2P_ATTR_SERVICE_HASH: Service HASH attribute
|
||||
* @P2P_ATTR_SESSION_INFORMATION_DATA: Session Info data attribute
|
||||
* @P2P_ATTR_CONNECTION_CAPABILITY = Connection capability attribute
|
||||
* @P2P_ATTR_ADVERTISEMENT_ID = Advertisement ID attribute
|
||||
* @P2P_ATTR_ADVERTISED_SERVICE = Advertised Service attribute
|
||||
* @P2P_ATTR_SESSION_ID = Session ID attribute
|
||||
* @P2P_ATTR_FEATURE_CAPABILITY = Feature capability attribute
|
||||
* @P2P_ATTR_PERSISTENT_GROUP -Persistent group attribute
|
||||
* @P2P_ATTR_VENDOR_SPECIFIC - Vendor specific attribute
|
||||
*/
|
||||
enum p2p_attr_id {
|
||||
P2P_ATTR_STATUS = 0,
|
||||
P2P_ATTR_MINOR_REASON_CODE = 1,
|
||||
P2P_ATTR_CAPABILITY = 2,
|
||||
P2P_ATTR_DEVICE_ID = 3,
|
||||
P2P_ATTR_GROUP_OWNER_INTENT = 4,
|
||||
P2P_ATTR_CONFIGURATION_TIMEOUT = 5,
|
||||
P2P_ATTR_LISTEN_CHANNEL = 6,
|
||||
P2P_ATTR_GROUP_BSSID = 7,
|
||||
P2P_ATTR_EXT_LISTEN_TIMING = 8,
|
||||
P2P_ATTR_INTENDED_INTERFACE_ADDR = 9,
|
||||
P2P_ATTR_MANAGEABILITY = 10,
|
||||
P2P_ATTR_CHANNEL_LIST = 11,
|
||||
P2P_ATTR_NOTICE_OF_ABSENCE = 12,
|
||||
P2P_ATTR_DEVICE_INFO = 13,
|
||||
P2P_ATTR_GROUP_INFO = 14,
|
||||
P2P_ATTR_GROUP_ID = 15,
|
||||
P2P_ATTR_INTERFACE = 16,
|
||||
P2P_ATTR_OPERATING_CHANNEL = 17,
|
||||
P2P_ATTR_INVITATION_FLAGS = 18,
|
||||
P2P_ATTR_OOB_GO_NEG_CHANNEL = 19,
|
||||
P2P_ATTR_SERVICE_HASH = 21,
|
||||
P2P_ATTR_SESSION_INFORMATION_DATA = 22,
|
||||
P2P_ATTR_CONNECTION_CAPABILITY = 23,
|
||||
P2P_ATTR_ADVERTISEMENT_ID = 24,
|
||||
P2P_ATTR_ADVERTISED_SERVICE = 25,
|
||||
P2P_ATTR_SESSION_ID = 26,
|
||||
P2P_ATTR_FEATURE_CAPABILITY = 27,
|
||||
P2P_ATTR_PERSISTENT_GROUP = 28,
|
||||
P2P_ATTR_VENDOR_SPECIFIC = 221
|
||||
};
|
||||
#endif /* __MAC_PROT_DEFS_H */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -340,6 +340,7 @@ typedef struct sLimMlmStaContext {
|
|||
/* 802.11n HT Capability in Station: Enabled 1 or DIsabled 0 */
|
||||
uint8_t htCapability:1;
|
||||
uint8_t vhtCapability:1;
|
||||
bool force_1x1;
|
||||
} tLimMlmStaContext, *tpLimMlmStaContext;
|
||||
|
||||
/* Structure definition to hold deferred messages queue parameters */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -774,3 +774,90 @@ tSirRetStatus __lim_process_sme_no_a_update(tpAniSirGlobal pMac, uint32_t *pMsgB
|
|||
return eSIR_SUCCESS;
|
||||
} /*** end __limProcessSmeGoNegReq() ***/
|
||||
|
||||
bool lim_p2p_check_oui_and_force_1x1(tpAniSirGlobal mac_ctx,
|
||||
uint8_t *assoc_ie, uint32_t assoc_ie_len)
|
||||
{
|
||||
const uint8_t *vendor_ie, *p2p_ie, *pos;
|
||||
uint8_t rem_len, attr;
|
||||
uint16_t attr_len;
|
||||
|
||||
if (!assoc_ie || !assoc_ie_len)
|
||||
return false;
|
||||
|
||||
vendor_ie = (uint8_t *)limGetP2pIEPtr(mac_ctx, assoc_ie, assoc_ie_len);
|
||||
if (!vendor_ie) {
|
||||
pe_debug("P2P IE not found");
|
||||
return false;
|
||||
}
|
||||
|
||||
rem_len = vendor_ie[1];
|
||||
if (rem_len < (2 + SIR_MAC_P2P_OUI_SIZE) ||
|
||||
rem_len > SIR_MAC_MAX_IE_LENGTH) {
|
||||
pe_err("Invalid IE len %d", rem_len);
|
||||
return false;
|
||||
}
|
||||
|
||||
p2p_ie = vendor_ie + HEADER_LEN_P2P_IE;
|
||||
rem_len -= SIR_MAC_P2P_OUI_SIZE;
|
||||
|
||||
while (rem_len) {
|
||||
attr = p2p_ie[0];
|
||||
attr_len = LE_READ_2(&p2p_ie[1]);
|
||||
if (attr_len > rem_len) {
|
||||
pe_err("Invalid len %d for elem:%d", attr_len, attr);
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (attr) {
|
||||
case P2P_ATTR_CAPABILITY:
|
||||
case P2P_ATTR_DEVICE_ID:
|
||||
case P2P_ATTR_GROUP_OWNER_INTENT:
|
||||
case P2P_ATTR_STATUS:
|
||||
case P2P_ATTR_LISTEN_CHANNEL:
|
||||
case P2P_ATTR_OPERATING_CHANNEL:
|
||||
case P2P_ATTR_GROUP_INFO:
|
||||
case P2P_ATTR_MANAGEABILITY:
|
||||
case P2P_ATTR_CHANNEL_LIST:
|
||||
break;
|
||||
|
||||
case P2P_ATTR_DEVICE_INFO:
|
||||
if (attr_len < (QDF_MAC_ADDR_SIZE +
|
||||
MAX_CONFIG_METHODS_LEN + 8 +
|
||||
DEVICE_CATEGORY_MAX_LEN)) {
|
||||
pe_err("Invalid Device info attr len %d",
|
||||
attr_len);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* move by attr id and 2 bytes of attr len */
|
||||
pos = p2p_ie + 3;
|
||||
|
||||
/*
|
||||
* the P2P Device info is of format:
|
||||
* attr_id - 1 byte
|
||||
* attr_len - 2 bytes
|
||||
* device mac addr - 6 bytes
|
||||
* config methods - 2 bytes
|
||||
* primary device type - 8bytes
|
||||
* -primary device type category - 1 byte
|
||||
* -primary device type oui - 4bytes
|
||||
* number of secondary device type - 2 bytes
|
||||
*/
|
||||
pos += ETH_ALEN + MAX_CONFIG_METHODS_LEN +
|
||||
DEVICE_CATEGORY_MAX_LEN;
|
||||
|
||||
if (!qdf_mem_cmp(pos, P2P_1X1_WAR_OUI,
|
||||
P2P_1X1_OUI_LEN))
|
||||
return true;
|
||||
|
||||
break;
|
||||
default:
|
||||
pe_err("Invalid P2P attribute");
|
||||
break;
|
||||
}
|
||||
p2p_ie += (3 + attr_len);
|
||||
rem_len -= (3 + attr_len);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -1209,6 +1209,8 @@ static bool lim_chk_wmm(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr,
|
|||
* @peer_idx: peer index
|
||||
* @qos_mode: qos mode
|
||||
* @pmf_connection: flag indicating pmf connection
|
||||
* @force_1x1: Flag to check if the HT capable STA needs to be downgraded to 1x1
|
||||
* nss.
|
||||
*
|
||||
* Updates ds dph entry
|
||||
*
|
||||
|
@ -1219,7 +1221,8 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr,
|
|||
uint8_t sub_type, tpDphHashNode sta_ds,
|
||||
tAniAuthType auth_type,
|
||||
bool *assoc_req_copied, uint16_t peer_idx,
|
||||
tHalBitVal qos_mode, bool pmf_connection)
|
||||
tHalBitVal qos_mode, bool pmf_connection,
|
||||
bool force_1x1)
|
||||
{
|
||||
tHalBitVal wme_mode, wsm_mode;
|
||||
uint8_t *ht_cap_ie = NULL;
|
||||
|
@ -1283,6 +1286,7 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr,
|
|||
sta_ds->valid = 0;
|
||||
sta_ds->mlmStaContext.authType = auth_type;
|
||||
sta_ds->staType = STA_ENTRY_PEER;
|
||||
sta_ds->mlmStaContext.force_1x1 = force_1x1;
|
||||
|
||||
/*
|
||||
* TODO: If listen interval is more than certain limit, reject the
|
||||
|
@ -1754,7 +1758,7 @@ void lim_process_assoc_req_frame(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info,
|
|||
tSirMacCapabilityInfo local_cap;
|
||||
tpDphHashNode sta_ds = NULL;
|
||||
tpSirAssocReq assoc_req;
|
||||
bool dup_entry = false;
|
||||
bool dup_entry = false, force_1x1 = false;
|
||||
|
||||
lim_get_phy_mode(mac_ctx, &phy_mode, session);
|
||||
|
||||
|
@ -1984,6 +1988,25 @@ void lim_process_assoc_req_frame(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info,
|
|||
(LIM_ASSOC == sub_type) ? "Assoc" : "ReAssoc",
|
||||
MAC_ADDR_ARRAY(hdr->sa));
|
||||
|
||||
if (session->pePersona == QDF_P2P_GO_MODE) {
|
||||
/*
|
||||
* WAR: In P2P GO mode, if the P2P client device
|
||||
* is only HT capable and not VHT capable, but the P2P
|
||||
* GO device is VHT capable and advertises 2x2 NSS with
|
||||
* HT capablity client device, which results in IOT
|
||||
* issues.
|
||||
* When GO is operating in DBS mode, GO beacons
|
||||
* advertise 2x2 capability but include OMN IE to
|
||||
* indicate current operating mode of 1x1. But here
|
||||
* peer device is only HT capable and will not
|
||||
* understand OMN IE.
|
||||
*/
|
||||
force_1x1 = lim_p2p_check_oui_and_force_1x1(
|
||||
mac_ctx,
|
||||
frm_body + LIM_ASSOC_REQ_IE_OFFSET,
|
||||
frame_len - LIM_ASSOC_REQ_IE_OFFSET);
|
||||
}
|
||||
|
||||
/*
|
||||
* AID for this association will be same as the peer Index used in DPH
|
||||
* table. Assign unused/least recently used peer Index from perStaDs.
|
||||
|
@ -2027,7 +2050,7 @@ sendIndToSme:
|
|||
if (false == lim_update_sta_ds(mac_ctx, hdr, session, assoc_req,
|
||||
sub_type, sta_ds, auth_type,
|
||||
&assoc_req_copied, peer_idx, qos_mode,
|
||||
pmf_connection))
|
||||
pmf_connection, force_1x1))
|
||||
goto error;
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -620,7 +620,8 @@ __lim_ext_scan_forward_bcn_probe_rsp(tpAniSirGlobal pmac, uint8_t *rx_pkt_info,
|
|||
frame_len = sizeof(*bssdescr) + ie_len - sizeof(bssdescr->ieFields[1]);
|
||||
bssdescr = (tSirBssDescription *) qdf_mem_malloc(frame_len);
|
||||
|
||||
if (NULL == bssdescr) {
|
||||
if (!bssdescr) {
|
||||
qdf_mem_free(result);
|
||||
pe_err("qdf_mem_malloc(length=%d) failed", frame_len);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -203,8 +203,15 @@ lim_collect_bss_description(tpAniSirGlobal pMac,
|
|||
/* HT capability */
|
||||
if (pBPR->HTCaps.present) {
|
||||
pBssDescr->ht_caps_present = 1;
|
||||
if (pBPR->HTCaps.supportedChannelWidthSet)
|
||||
pBssDescr->chan_width = eHT_CHANNEL_WIDTH_40MHZ;
|
||||
if (pBPR->HTCaps.supportedChannelWidthSet) {
|
||||
if (!pBPR->HTInfo.present) {
|
||||
pBssDescr->chan_width =
|
||||
eHT_CHANNEL_WIDTH_40MHZ;
|
||||
} else if (pBPR->HTInfo.recommendedTxWidthSet) {
|
||||
pBssDescr->chan_width =
|
||||
eHT_CHANNEL_WIDTH_40MHZ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* VHT Parameters */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -1204,7 +1204,7 @@ lim_send_assoc_rsp_mgmt_frame(tpAniSirGlobal mac_ctx,
|
|||
frm.HTCaps.shortGI40MHz = 0;
|
||||
|
||||
populate_dot11f_ht_info(mac_ctx, &frm.HTInfo,
|
||||
pe_session);
|
||||
pe_session);
|
||||
}
|
||||
pe_debug("SupportedChnlWidth: %d, mimoPS: %d, GF: %d, short GI20:%d, shortGI40: %d, dsssCck: %d, AMPDU Param: %x",
|
||||
frm.HTCaps.supportedChannelWidthSet,
|
||||
|
@ -1222,6 +1222,22 @@ lim_send_assoc_rsp_mgmt_frame(tpAniSirGlobal mac_ctx,
|
|||
populate_dot11f_vht_operation(mac_ctx, pe_session,
|
||||
&frm.VHTOperation);
|
||||
is_vht = true;
|
||||
} else if (sta->mlmStaContext.force_1x1 &&
|
||||
frm.HTCaps.present) {
|
||||
/*
|
||||
* WAR: In P2P GO mode, if the P2P client device
|
||||
* is only HT capable and not VHT capable, but the P2P
|
||||
* GO device is VHT capable and advertises 2x2 NSS with
|
||||
* HT capablity client device, which results in IOT
|
||||
* issues.
|
||||
* When GO is operating in DBS mode, GO beacons
|
||||
* advertise 2x2 capability but include OMN IE to
|
||||
* indicate current operating mode of 1x1. But here
|
||||
* peer device is only HT capable and will not
|
||||
* understand OMN IE.
|
||||
*/
|
||||
frm.HTInfo.basicMCSSet[1] = 0;
|
||||
frm.HTCaps.supportedMCSSet[1] = 0;
|
||||
}
|
||||
|
||||
if (pe_session->vhtCapability &&
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -1028,4 +1028,16 @@ void lim_process_assoc_failure_timeout(tpAniSirGlobal mac_ctx,
|
|||
void lim_send_mgmt_frame_tx(tpAniSirGlobal mac_ctx,
|
||||
uint32_t *msg_buf);
|
||||
|
||||
/**
|
||||
* lim_p2p_check_oui_and_force_1x1() - Function to get P2P client device
|
||||
* attributes from assoc request frame IE passed in.
|
||||
* @mac_ctx: Pointer to mac_context
|
||||
* @assoc_ie: Pointer to IE in association request
|
||||
* @assoc_ie_len: Total association IE length
|
||||
*
|
||||
* Return: True if OUI is found. Else return false
|
||||
*
|
||||
*/
|
||||
bool lim_p2p_check_oui_and_force_1x1(tpAniSirGlobal mac_ctx,
|
||||
uint8_t *assoc_ie, uint32_t assoc_ie_len);
|
||||
#endif /* __LIM_TYPES_H */
|
||||
|
|
|
@ -460,6 +460,11 @@ void lim_handle_heart_beat_failure_timeout(tpAniSirGlobal pMac);
|
|||
cfg_get_vendor_ie_ptr_from_oui(pMac, SIR_MAC_P2P_OUI, \
|
||||
SIR_MAC_P2P_OUI_SIZE, ie, ie_len)
|
||||
|
||||
#define LE_READ_2(p) \
|
||||
((uint16_t)\
|
||||
((((const uint8_t *)(p))[0]) |\
|
||||
(((const uint8_t *)(p))[1] << 8)))
|
||||
|
||||
uint8_t lim_get_noa_attr_stream_in_mult_p2p_ies(tpAniSirGlobal pMac,
|
||||
uint8_t *noaStream, uint8_t noaLen,
|
||||
uint8_t overFlowLen);
|
||||
|
|
|
@ -6107,6 +6107,7 @@ QDF_STATUS sme_oem_data_req(tHalHandle hal, struct oem_data_req *hdd_oem_req)
|
|||
oem_data_req->data_len = hdd_oem_req->data_len;
|
||||
oem_data_req->data = qdf_mem_malloc(oem_data_req->data_len);
|
||||
if (!oem_data_req->data) {
|
||||
qdf_mem_free(oem_data_req);
|
||||
sme_err("mem alloc failed");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
@ -12623,6 +12624,7 @@ QDF_STATUS sme_notify_ht2040_mode(tHalHandle hHal, uint16_t staId,
|
|||
break;
|
||||
|
||||
default:
|
||||
qdf_mem_free(pHtOpMode);
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Invalid OP mode", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
@ -12816,7 +12818,7 @@ QDF_STATUS sme_send_rate_update_ind(tHalHandle hHal,
|
|||
{
|
||||
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
|
||||
QDF_STATUS status;
|
||||
cds_msg_t msg;
|
||||
cds_msg_t msg = {0};
|
||||
tSirRateUpdateInd *rate_upd = qdf_mem_malloc(sizeof(tSirRateUpdateInd));
|
||||
|
||||
if (rate_upd == NULL) {
|
||||
|
@ -12835,26 +12837,27 @@ QDF_STATUS sme_send_rate_update_ind(tHalHandle hHal,
|
|||
eHAL_TX_RATE_HT20 | eHAL_TX_RATE_SGI;
|
||||
|
||||
status = sme_acquire_global_lock(&pMac->sme);
|
||||
if (QDF_STATUS_SUCCESS == status) {
|
||||
msg.type = WMA_RATE_UPDATE_IND;
|
||||
msg.bodyptr = rate_upd;
|
||||
MTRACE(qdf_trace(QDF_MODULE_ID_SME, TRACE_CODE_SME_TX_WMA_MSG,
|
||||
NO_SESSION, msg.type));
|
||||
if (!QDF_IS_STATUS_SUCCESS
|
||||
(cds_mq_post_message(QDF_MODULE_ID_WMA, &msg))) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Not able to post WMA_SET_RMC_RATE_IND to WMA!",
|
||||
__func__);
|
||||
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
qdf_mem_free(rate_upd);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
qdf_mem_free(rate_upd);
|
||||
return status;
|
||||
}
|
||||
|
||||
msg.type = WMA_RATE_UPDATE_IND;
|
||||
msg.bodyptr = rate_upd;
|
||||
MTRACE(qdf_trace(QDF_MODULE_ID_SME, TRACE_CODE_SME_TX_WMA_MSG,
|
||||
NO_SESSION, msg.type));
|
||||
|
||||
status = cds_mq_post_message(QDF_MODULE_ID_WMA, &msg);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Not able to post WMA_SET_RMC_RATE_IND to WMA!",
|
||||
__func__);
|
||||
qdf_mem_free(rate_upd);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -13027,8 +13030,9 @@ QDF_STATUS sme_update_sta_inactivity_timeout(tHalHandle hal_handle,
|
|||
inactivity_time->sta_inactivity_timeout =
|
||||
sta_inactivity_timer->sta_inactivity_timeout;
|
||||
|
||||
wma_update_sta_inactivity_timeout(wma_handle,
|
||||
inactivity_time);
|
||||
wma_update_sta_inactivity_timeout(wma_handle, inactivity_time);
|
||||
qdf_mem_free(inactivity_time);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -13249,10 +13253,14 @@ QDF_STATUS sme_set_miracast(tHalHandle hal, uint8_t filter_type)
|
|||
uint32_t *val;
|
||||
tpAniSirGlobal mac_ptr = PMAC_STRUCT(hal);
|
||||
|
||||
if (!mac_ptr) {
|
||||
sme_err("Invalid pointer");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
val = qdf_mem_malloc(sizeof(*val));
|
||||
if (NULL == val || NULL == mac_ptr) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Invalid pointer", __func__);
|
||||
if (!val) {
|
||||
sme_err("Mem allocation failed");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
|
@ -13583,9 +13591,8 @@ QDF_STATUS sme_set_thermal_level(tHalHandle hal, uint8_t level)
|
|||
*/
|
||||
QDF_STATUS sme_txpower_limit(tHalHandle hHal, tSirTxPowerLimit *psmetx)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||
cds_msg_t cds_message;
|
||||
QDF_STATUS status;
|
||||
cds_msg_t cds_message = {0};
|
||||
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
|
||||
tSirTxPowerLimit *tx_power_limit;
|
||||
|
||||
|
@ -13600,21 +13607,25 @@ QDF_STATUS sme_txpower_limit(tHalHandle hHal, tSirTxPowerLimit *psmetx)
|
|||
*tx_power_limit = *psmetx;
|
||||
|
||||
status = sme_acquire_global_lock(&pMac->sme);
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
cds_message.type = WMA_TX_POWER_LIMIT;
|
||||
cds_message.reserved = 0;
|
||||
cds_message.bodyptr = tx_power_limit;
|
||||
|
||||
qdf_status = cds_mq_post_message(QDF_MODULE_ID_WMA, &cds_message);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: not able to post WMA_TX_POWER_LIMIT",
|
||||
__func__);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
qdf_mem_free(tx_power_limit);
|
||||
}
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
qdf_mem_free(tx_power_limit);
|
||||
return status;
|
||||
}
|
||||
|
||||
cds_message.type = WMA_TX_POWER_LIMIT;
|
||||
cds_message.bodyptr = tx_power_limit;
|
||||
|
||||
status = cds_mq_post_message(QDF_MODULE_ID_WMA, &cds_message);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: not able to post WMA_TX_POWER_LIMIT",
|
||||
__func__);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
qdf_mem_free(tx_power_limit);
|
||||
}
|
||||
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -13657,17 +13668,21 @@ QDF_STATUS sme_ap_disable_intra_bss_fwd(tHalHandle hHal, uint8_t sessionId,
|
|||
pSapDisableIntraFwd->disableintrabssfwd = disablefwd;
|
||||
|
||||
status = sme_acquire_global_lock(&pMac->sme);
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
/* serialize the req through MC thread */
|
||||
cds_message.bodyptr = pSapDisableIntraFwd;
|
||||
cds_message.type = WMA_SET_SAP_INTRABSS_DIS;
|
||||
qdf_status = cds_mq_post_message(QDF_MODULE_ID_WMA, &cds_message);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
qdf_mem_free(pSapDisableIntraFwd);
|
||||
}
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
qdf_mem_free(pSapDisableIntraFwd);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/* serialize the req through MC thread */
|
||||
cds_message.bodyptr = pSapDisableIntraFwd;
|
||||
cds_message.type = WMA_SET_SAP_INTRABSS_DIS;
|
||||
qdf_status = cds_mq_post_message(QDF_MODULE_ID_WMA, &cds_message);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
qdf_mem_free(pSapDisableIntraFwd);
|
||||
}
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -14313,12 +14328,17 @@ QDF_STATUS sme_set_wisa_params(tHalHandle hal,
|
|||
|
||||
*cds_msg_wisa_params = *wisa_params;
|
||||
status = sme_acquire_global_lock(&mac->sme);
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
cds_message.bodyptr = cds_msg_wisa_params;
|
||||
cds_message.type = WMA_SET_WISA_PARAMS;
|
||||
status = cds_mq_post_message(QDF_MODULE_ID_WMA, &cds_message);
|
||||
sme_release_global_lock(&mac->sme);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
qdf_mem_free(cds_msg_wisa_params);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
cds_message.bodyptr = cds_msg_wisa_params;
|
||||
cds_message.type = WMA_SET_WISA_PARAMS;
|
||||
status = cds_mq_post_message(QDF_MODULE_ID_WMA, &cds_message);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
qdf_mem_free(cds_msg_wisa_params);
|
||||
|
||||
sme_release_global_lock(&mac->sme);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -18689,19 +18709,24 @@ QDF_STATUS sme_get_chain_rssi(tHalHandle phal,
|
|||
*req_msg = *input;
|
||||
|
||||
status = sme_acquire_global_lock(&pmac->sme);
|
||||
if (QDF_STATUS_SUCCESS == status) {
|
||||
/* serialize the req through MC thread */
|
||||
cds_message.bodyptr = req_msg;
|
||||
cds_message.type = SIR_HAL_GET_CHAIN_RSSI_REQ;
|
||||
cds_status = cds_mq_post_message(QDF_MODULE_ID_WMA, &cds_message);
|
||||
if (!QDF_IS_STATUS_SUCCESS(cds_status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("Post Get Chain Rssi msg fail"));
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
sme_release_global_lock(&pmac->sme);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
qdf_mem_free(req_msg);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/* serialize the req through MC thread */
|
||||
cds_message.bodyptr = req_msg;
|
||||
cds_message.type = SIR_HAL_GET_CHAIN_RSSI_REQ;
|
||||
cds_status = cds_mq_post_message(QDF_MODULE_ID_WMA, &cds_message);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("Post Get Chain Rssi msg fail"));
|
||||
qdf_mem_free(req_msg);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
sme_release_global_lock(&pmac->sme);
|
||||
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
@ -810,7 +810,7 @@ static void csr_roam_sort_channel_for_early_stop(tpAniSirGlobal mac_ctx,
|
|||
if (!chan_list_greedy || !chan_list_non_greedy) {
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
|
||||
"Failed to allocate memory for tSirUpdateChanList");
|
||||
return;
|
||||
goto scan_list_sort_error;
|
||||
}
|
||||
/*
|
||||
* fixed_greedy_chan_list is an evaluated channel list based on most of
|
||||
|
@ -7207,7 +7207,6 @@ static void csr_roam_process_start_bss_success(tpAniSirGlobal mac_ctx,
|
|||
tSirBssDescription *bss_desc = NULL;
|
||||
tCsrRoamInfo roam_info;
|
||||
tSirSmeStartBssRsp *start_bss_rsp = NULL;
|
||||
struct tag_csrscan_result *scan_res = NULL;
|
||||
eRoamCmdStatus roam_status;
|
||||
eCsrRoamResult roam_result;
|
||||
tDot11fBeaconIEs *ies_ptr = NULL;
|
||||
|
@ -7274,10 +7273,8 @@ static void csr_roam_process_start_bss_success(tpAniSirGlobal mac_ctx,
|
|||
}
|
||||
}
|
||||
if (!CSR_IS_INFRA_AP(profile) && !CSR_IS_NDI(profile)) {
|
||||
scan_res =
|
||||
csr_scan_append_bss_description(mac_ctx,
|
||||
bss_desc, ies_ptr,
|
||||
session_id);
|
||||
csr_scan_append_bss_description(mac_ctx, bss_desc, ies_ptr,
|
||||
session_id);
|
||||
}
|
||||
csr_roam_save_connected_bss_desc(mac_ctx, session_id, bss_desc);
|
||||
csr_roam_free_connect_profile(&session->connectedProfile);
|
||||
|
|
|
@ -3889,11 +3889,9 @@ static struct tag_csrscan_result *csr_scan_save_bss_description(tpAniSirGlobal
|
|||
}
|
||||
|
||||
/* Append a Bss Description... */
|
||||
struct tag_csrscan_result *csr_scan_append_bss_description(tpAniSirGlobal pMac,
|
||||
tSirBssDescription *
|
||||
pSirBssDescription,
|
||||
tDot11fBeaconIEs *pIes,
|
||||
uint8_t sessionId)
|
||||
bool csr_scan_append_bss_description(tpAniSirGlobal pMac,
|
||||
tSirBssDescription *pSirBssDescription,
|
||||
tDot11fBeaconIEs *pIes, uint8_t sessionId)
|
||||
{
|
||||
struct tag_csrscan_result *pCsrBssDescription = NULL;
|
||||
tAniSSID tmpSsid;
|
||||
|
@ -3901,12 +3899,15 @@ struct tag_csrscan_result *csr_scan_append_bss_description(tpAniSirGlobal pMac,
|
|||
int result;
|
||||
|
||||
tmpSsid.length = 0;
|
||||
result = csr_remove_dup_bss_description(pMac, pSirBssDescription,
|
||||
&tmpSsid, &timer);
|
||||
|
||||
pCsrBssDescription = csr_scan_save_bss_description(pMac,
|
||||
pSirBssDescription, pIes, sessionId);
|
||||
if (result && (pCsrBssDescription != NULL)) {
|
||||
if (!pCsrBssDescription)
|
||||
return false;
|
||||
result = csr_remove_dup_bss_description(pMac, pSirBssDescription,
|
||||
&tmpSsid, &timer);
|
||||
|
||||
if (result) {
|
||||
/*
|
||||
* Check if the new one has SSID it it, if not, use the older
|
||||
* SSID if it exists.
|
||||
|
@ -3930,8 +3931,8 @@ struct tag_csrscan_result *csr_scan_append_bss_description(tpAniSirGlobal pMac,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pCsrBssDescription;
|
||||
csr_free_scan_result_entry(pMac, pCsrBssDescription);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void csr_purge_channel_power(tpAniSirGlobal pMac, tDblLinkList
|
||||
|
@ -7149,7 +7150,7 @@ QDF_STATUS csr_scan_for_ssid(tpAniSirGlobal mac_ctx, uint32_t session_id,
|
|||
tpCsrNeighborRoamControlInfo neighbor_roaminfo =
|
||||
&mac_ctx->roam.neighborRoamInfo[session_id];
|
||||
tCsrSSIDs *ssids = NULL;
|
||||
struct csr_scan_for_ssid_context *context;
|
||||
struct csr_scan_for_ssid_context *context = NULL;
|
||||
|
||||
if (!(mac_ctx->scan.fScanEnable) && (num_ssid != 1)) {
|
||||
sme_err(
|
||||
|
@ -7322,6 +7323,7 @@ error:
|
|||
csr_roam_call_callback(mac_ctx, session_id, NULL,
|
||||
roam_id, eCSR_ROAM_FAILED,
|
||||
eCSR_ROAM_RESULT_FAILURE);
|
||||
qdf_mem_free(context);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
@ -8152,7 +8154,7 @@ QDF_STATUS csr_scan_create_entry_in_scan_cache(tpAniSirGlobal pMac,
|
|||
qdf_mem_copy(pNewBssDescriptor->bssId, bssid.bytes,
|
||||
sizeof(tSirMacAddr));
|
||||
pNewBssDescriptor->channelId = channel;
|
||||
if (NULL == csr_scan_append_bss_description(pMac, pNewBssDescriptor,
|
||||
if (!csr_scan_append_bss_description(pMac, pNewBssDescriptor,
|
||||
pNewIes, sessionId)) {
|
||||
sme_err("csr_scan_append_bss_description failed");
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -327,11 +327,10 @@ QDF_STATUS csr_scan_handle_failed_lostlink2(tpAniSirGlobal pMac,
|
|||
uint32_t sessionId);
|
||||
QDF_STATUS csr_scan_handle_failed_lostlink3(tpAniSirGlobal pMac,
|
||||
uint32_t sessionId);
|
||||
struct tag_csrscan_result *csr_scan_append_bss_description(tpAniSirGlobal pMac,
|
||||
tSirBssDescription *
|
||||
pSirBssDescription,
|
||||
tDot11fBeaconIEs *pIes,
|
||||
uint8_t sessionId);
|
||||
bool csr_scan_append_bss_description(tpAniSirGlobal pMac,
|
||||
tSirBssDescription *pSirBssDescription,
|
||||
tDot11fBeaconIEs *pIes,
|
||||
uint8_t sessionId);
|
||||
void csr_scan_call_callback(tpAniSirGlobal pMac, tSmeCmd *pCommand,
|
||||
eCsrScanStatus scanStatus);
|
||||
QDF_STATUS csr_scan_copy_request(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq,
|
||||
|
|
|
@ -397,6 +397,8 @@ csr_neighbor_roam_prepare_scan_profile_filter(tpAniSirGlobal pMac,
|
|||
pScanFilter->SSIDs.numOfSSIDs);
|
||||
if (NULL == pScanFilter->SSIDs.SSIDList) {
|
||||
sme_err("Scan Filter SSID mem alloc failed");
|
||||
qdf_mem_free(pScanFilter->BSSIDs.bssid);
|
||||
pScanFilter->BSSIDs.bssid = NULL;
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
for (i = 0; i < roam_params->num_ssid_allowed_list; i++) {
|
||||
|
@ -416,6 +418,8 @@ csr_neighbor_roam_prepare_scan_profile_filter(tpAniSirGlobal pMac,
|
|||
qdf_mem_malloc(sizeof(tCsrSSIDInfo));
|
||||
if (NULL == pScanFilter->SSIDs.SSIDList) {
|
||||
sme_err("Scan Filter SSID mem alloc failed");
|
||||
qdf_mem_free(pScanFilter->BSSIDs.bssid);
|
||||
pScanFilter->BSSIDs.bssid = NULL;
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
pScanFilter->SSIDs.SSIDList->handoffPermitted = 1;
|
||||
|
@ -456,6 +460,8 @@ csr_neighbor_roam_prepare_scan_profile_filter(tpAniSirGlobal pMac,
|
|||
qdf_mem_malloc(num_ch * sizeof(uint8_t));
|
||||
if (NULL == pScanFilter->ChannelInfo.ChannelList) {
|
||||
sme_err("Scan Filter Ch list mem alloc failed");
|
||||
qdf_mem_free(pScanFilter->BSSIDs.bssid);
|
||||
pScanFilter->BSSIDs.bssid = NULL;
|
||||
qdf_mem_free(pScanFilter->SSIDs.SSIDList);
|
||||
pScanFilter->SSIDs.SSIDList = NULL;
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -575,6 +575,7 @@ QDF_STATUS csr_roam_issue_ft_preauth_req(tHalHandle hal, uint32_t session_id,
|
|||
+ bss_desc->length);
|
||||
if (NULL == preauth_req->pbssDescription) {
|
||||
sme_err("Memory allocation for FT Preauth request failed");
|
||||
qdf_mem_free(preauth_req);
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
@ -739,6 +739,8 @@ wma_ds_peek_rx_packet_info
|
|||
|
||||
void wma_tx_abort(uint8_t vdev_id);
|
||||
|
||||
bool wma_is_rmf_mgmt_action_frame(uint8_t action_category);
|
||||
|
||||
QDF_STATUS wma_tx_packet(void *pWMA,
|
||||
void *pFrmBuf,
|
||||
uint16_t frmLen,
|
||||
|
|
|
@ -2579,7 +2579,7 @@ static void wma_update_tx_send_params(struct tx_send_params *tx_param,
|
|||
*
|
||||
* Return: true - if category is robust mgmt type
|
||||
*/
|
||||
static bool wma_is_rmf_mgmt_action_frame(uint8_t action_category)
|
||||
bool wma_is_rmf_mgmt_action_frame(uint8_t action_category)
|
||||
{
|
||||
switch (action_category) {
|
||||
case SIR_MAC_ACTION_SPECTRUM_MGMT:
|
||||
|
|
|
@ -5056,6 +5056,7 @@ static void wma_del_tdls_sta(tp_wma_handle wma, tpDeleteStaParams del_sta)
|
|||
if (wma_is_roam_synch_in_progress(wma, del_sta->smesessionId)) {
|
||||
WMA_LOGE("%s: roaming in progress, reject del sta!", __func__);
|
||||
del_sta->status = QDF_STATUS_E_PERM;
|
||||
qdf_mem_free(peerStateParams);
|
||||
goto send_del_rsp;
|
||||
}
|
||||
|
||||
|
|
|
@ -7805,15 +7805,6 @@ QDF_STATUS wma_process_add_periodic_tx_ptrn_ind(WMA_HANDLE handle,
|
|||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
params_ptr = qdf_mem_malloc(sizeof(*params_ptr));
|
||||
|
||||
if (!params_ptr) {
|
||||
WMA_LOGE(
|
||||
"%s: unable to allocate memory for periodic_tx_pattern",
|
||||
__func__);
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
if (!wma_find_vdev_by_addr(wma_handle,
|
||||
pAddPeriodicTxPtrnParams->mac_address.bytes,
|
||||
&vdev_id)) {
|
||||
|
@ -7822,6 +7813,14 @@ QDF_STATUS wma_process_add_periodic_tx_ptrn_ind(WMA_HANDLE handle,
|
|||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
params_ptr = qdf_mem_malloc(sizeof(*params_ptr));
|
||||
if (!params_ptr) {
|
||||
WMA_LOGE(
|
||||
"%s: unable to allocate memory for periodic_tx_pattern",
|
||||
__func__);
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
params_ptr->ucPtrnId = pAddPeriodicTxPtrnParams->ucPtrnId;
|
||||
params_ptr->ucPtrnSize = pAddPeriodicTxPtrnParams->ucPtrnSize;
|
||||
params_ptr->usPtrnIntervalMs =
|
||||
|
|
|
@ -1328,7 +1328,9 @@ QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma,
|
|||
if (cmd->peer_nss > WMA_MAX_NSS)
|
||||
cmd->peer_nss = WMA_MAX_NSS;
|
||||
|
||||
intr->nss = cmd->peer_nss;
|
||||
if (!wma_is_vdev_in_ap_mode(wma, params->smesessionId))
|
||||
intr->nss = cmd->peer_nss;
|
||||
|
||||
cmd->peer_phymode = phymode;
|
||||
WMA_LOGI("%s: vdev_id %d associd %d peer_flags %x nss %d phymode %d ht_caps %x",
|
||||
__func__, cmd->vdev_id, cmd->peer_associd, cmd->peer_flags,
|
||||
|
@ -2792,6 +2794,21 @@ wma_process_mon_mgmt_tx_data(wmi_mgmt_hdr *hdr,
|
|||
ol_txrx_mon_callback_fp data_rx = NULL;
|
||||
struct mon_rx_status txrx_status = {0};
|
||||
uint16_t channel_flags = 0;
|
||||
tpSirMacFrameCtl pFc = (tpSirMacFrameCtl) (qdf_nbuf_data(nbuf));
|
||||
struct ieee80211_frame *wh;
|
||||
uint8_t action_category = 0;
|
||||
bool deauth_disassoc = false;
|
||||
uint8_t mgt_type;
|
||||
tp_wma_handle wma_handle;
|
||||
struct wma_txrx_node *iface = NULL;
|
||||
uint8_t vdev_id = WMA_INVALID_VDEV_ID;
|
||||
|
||||
wma_handle = cds_get_context(QDF_MODULE_ID_WMA);
|
||||
|
||||
if (!wma_handle) {
|
||||
WMA_LOGE(FL("Failed to get WMA handle"));
|
||||
return false;
|
||||
}
|
||||
|
||||
pdev_ctx = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
if (!pdev_ctx) {
|
||||
|
@ -2803,6 +2820,56 @@ wma_process_mon_mgmt_tx_data(wmi_mgmt_hdr *hdr,
|
|||
if (!data_rx)
|
||||
return false;
|
||||
|
||||
wh = (struct ieee80211_frame *)qdf_nbuf_data(nbuf);
|
||||
mgt_type = (wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
|
||||
|
||||
if (mgt_type == IEEE80211_FC0_TYPE_MGT &&
|
||||
(pFc->subType == SIR_MAC_MGMT_DISASSOC ||
|
||||
pFc->subType == SIR_MAC_MGMT_DEAUTH ||
|
||||
pFc->subType == SIR_MAC_MGMT_ACTION)) {
|
||||
uint8_t *orig_hdr;
|
||||
uint8_t mic_len, hdr_len;
|
||||
|
||||
if (pFc->subType == SIR_MAC_MGMT_ACTION)
|
||||
action_category =
|
||||
*((uint8_t *)(qdf_nbuf_data(nbuf)) +
|
||||
sizeof(struct ieee80211_frame));
|
||||
else
|
||||
deauth_disassoc = true;
|
||||
|
||||
if (wma_find_vdev_by_bssid(wma_handle, wh->i_addr3, &vdev_id))
|
||||
iface = &wma_handle->interfaces[vdev_id];
|
||||
|
||||
if (iface && iface->rmfEnabled &&
|
||||
!IEEE80211_IS_BROADCAST(wh->i_addr1) &&
|
||||
!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
|
||||
if (pFc->wep) {
|
||||
orig_hdr = (uint8_t *)qdf_nbuf_data(nbuf);
|
||||
|
||||
if (iface->ucast_key_cipher ==
|
||||
WMI_CIPHER_AES_GCM) {
|
||||
hdr_len = WLAN_IEEE80211_GCMP_HEADERLEN;
|
||||
mic_len = WLAN_IEEE80211_GCMP_MICLEN;
|
||||
} else {
|
||||
hdr_len = IEEE80211_CCMP_HEADERLEN;
|
||||
mic_len = IEEE80211_CCMP_MICLEN;
|
||||
}
|
||||
/* Strip privacy headers (and trailer)
|
||||
* for a received frame
|
||||
*/
|
||||
qdf_mem_move(orig_hdr +
|
||||
hdr_len, wh,
|
||||
sizeof(*wh));
|
||||
qdf_nbuf_pull_head(nbuf,
|
||||
hdr_len);
|
||||
qdf_nbuf_trim_tail(nbuf, mic_len);
|
||||
}
|
||||
} else if (iface && iface->rmfEnabled && (deauth_disassoc ||
|
||||
wma_is_rmf_mgmt_action_frame(action_category))) {
|
||||
qdf_nbuf_trim_tail(nbuf, IEEE80211_MMIE_LEN);
|
||||
}
|
||||
}
|
||||
|
||||
txrx_status.tsft = (u_int64_t)hdr->tsf_l32;
|
||||
txrx_status.chan_num = cds_freq_to_chan(hdr->chan_freq);
|
||||
txrx_status.chan_freq = hdr->chan_freq;
|
||||
|
@ -2827,6 +2894,9 @@ wma_process_mon_mgmt_tx_data(wmi_mgmt_hdr *hdr,
|
|||
txrx_status.chan_flags = channel_flags;
|
||||
txrx_status.rate = ((txrx_status.rate == 6 /* Mbps */) ? 0x0c : 0x02);
|
||||
|
||||
wh = (struct ieee80211_frame *)qdf_nbuf_data(nbuf);
|
||||
wh->i_fc[1] &= ~IEEE80211_FC1_WEP;
|
||||
|
||||
return ol_txrx_mon_mgmt_process(&txrx_status, nbuf, status);
|
||||
}
|
||||
|
||||
|
@ -3652,6 +3722,7 @@ wma_process_mon_mgmt_rx_data(wmi_mgmt_rx_hdr *hdr,
|
|||
ol_txrx_mon_callback_fp data_rx = NULL;
|
||||
struct mon_rx_status txrx_status = {0};
|
||||
uint16_t channel_flags = 0;
|
||||
struct ieee80211_frame *wh;
|
||||
|
||||
pdev_ctx = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
if (!pdev_ctx) {
|
||||
|
@ -3681,6 +3752,9 @@ wma_process_mon_mgmt_rx_data(wmi_mgmt_rx_hdr *hdr,
|
|||
txrx_status.chan_flags = channel_flags;
|
||||
txrx_status.rate = ((txrx_status.rate == 6 /* Mbps */) ? 0x0c : 0x02);
|
||||
|
||||
wh = (struct ieee80211_frame *)qdf_nbuf_data(nbuf);
|
||||
wh->i_fc[1] &= ~IEEE80211_FC1_WEP;
|
||||
|
||||
return ol_txrx_mon_mgmt_process(&txrx_status, nbuf, 0);
|
||||
}
|
||||
|
||||
|
@ -4165,14 +4239,17 @@ static int wma_mgmt_rx_process(void *handle, uint8_t *data,
|
|||
(ol_cfg_pktcapture_mode(pdev->ctrl_pdev) &
|
||||
PKT_CAPTURE_MODE_MGMT_ONLY)) {
|
||||
if (pdev->mon_cb) {
|
||||
int buf_len;
|
||||
|
||||
buf_len = qdf_nbuf_len(wbuf);
|
||||
nbuf = qdf_nbuf_alloc(NULL, roundup(
|
||||
hdr->buf_len + RESERVE_BYTES, 4),
|
||||
buf_len + RESERVE_BYTES, 4),
|
||||
RESERVE_BYTES, 4, false);
|
||||
if (nbuf) {
|
||||
qdf_nbuf_put_tail(nbuf, hdr->buf_len);
|
||||
qdf_nbuf_put_tail(nbuf, buf_len);
|
||||
qdf_mem_copy(qdf_nbuf_data(nbuf),
|
||||
qdf_nbuf_data(wbuf),
|
||||
hdr->buf_len);
|
||||
buf_len);
|
||||
if (!wma_process_mon_mgmt_rx_data(hdr, nbuf))
|
||||
qdf_nbuf_free(nbuf);
|
||||
}
|
||||
|
|
|
@ -2927,14 +2927,29 @@ static void wma_roam_update_vdev(tp_wma_handle wma,
|
|||
vdev_id = roam_synch_ind_ptr->roamedVdevId;
|
||||
wma->interfaces[vdev_id].nss = roam_synch_ind_ptr->nss;
|
||||
del_bss_params = qdf_mem_malloc(sizeof(*del_bss_params));
|
||||
if (!del_bss_params)
|
||||
return;
|
||||
|
||||
del_sta_params = qdf_mem_malloc(sizeof(*del_sta_params));
|
||||
set_link_params = qdf_mem_malloc(sizeof(*set_link_params));
|
||||
add_sta_params = qdf_mem_malloc(sizeof(*add_sta_params));
|
||||
if (!del_bss_params || !del_sta_params ||
|
||||
!set_link_params || !add_sta_params) {
|
||||
WMA_LOGE("%s: failed to allocate memory", __func__);
|
||||
if (!del_sta_params) {
|
||||
qdf_mem_free(del_bss_params);
|
||||
return;
|
||||
}
|
||||
|
||||
set_link_params = qdf_mem_malloc(sizeof(*set_link_params));
|
||||
if (!set_link_params) {
|
||||
qdf_mem_free(del_bss_params);
|
||||
qdf_mem_free(del_sta_params);
|
||||
return;
|
||||
}
|
||||
add_sta_params = qdf_mem_malloc(sizeof(*add_sta_params));
|
||||
if (!add_sta_params) {
|
||||
qdf_mem_free(del_bss_params);
|
||||
qdf_mem_free(del_sta_params);
|
||||
qdf_mem_free(set_link_params);
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_mem_zero(del_bss_params, sizeof(*del_bss_params));
|
||||
qdf_mem_zero(del_sta_params, sizeof(*del_sta_params));
|
||||
qdf_mem_zero(set_link_params, sizeof(*set_link_params));
|
||||
|
@ -4784,6 +4799,7 @@ int wma_extscan_operations_event_handler(void *handle,
|
|||
WMA_LOGE("FW mesg num_buk %d more than TLV hdr %d",
|
||||
oprn_event->num_buckets,
|
||||
param_buf->num_bucket_id);
|
||||
qdf_mem_free(oprn_ind);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -3658,8 +3658,7 @@ QDF_STATUS wma_send_link_speed(uint32_t link_speed)
|
|||
{
|
||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||
tpAniSirGlobal mac_ctx;
|
||||
tSirLinkSpeedInfo *ls_ind =
|
||||
(tSirLinkSpeedInfo *) qdf_mem_malloc(sizeof(tSirLinkSpeedInfo));
|
||||
tSirLinkSpeedInfo *ls_ind;
|
||||
|
||||
mac_ctx = cds_get_context(QDF_MODULE_ID_PE);
|
||||
if (!mac_ctx) {
|
||||
|
@ -3667,19 +3666,21 @@ QDF_STATUS wma_send_link_speed(uint32_t link_speed)
|
|||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
ls_ind = (tSirLinkSpeedInfo *)qdf_mem_malloc(sizeof(tSirLinkSpeedInfo));
|
||||
if (!ls_ind) {
|
||||
WMA_LOGE("%s: Memory allocation failed.", __func__);
|
||||
qdf_status = QDF_STATUS_E_NOMEM;
|
||||
} else {
|
||||
ls_ind->estLinkSpeed = link_speed;
|
||||
if (mac_ctx->sme.pLinkSpeedIndCb)
|
||||
mac_ctx->sme.pLinkSpeedIndCb(ls_ind,
|
||||
mac_ctx->sme.pLinkSpeedCbContext);
|
||||
else
|
||||
WMA_LOGD("%s: pLinkSpeedIndCb is null", __func__);
|
||||
qdf_mem_free(ls_ind);
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
ls_ind->estLinkSpeed = link_speed;
|
||||
if (mac_ctx->sme.pLinkSpeedIndCb)
|
||||
mac_ctx->sme.pLinkSpeedIndCb(ls_ind,
|
||||
mac_ctx->sme.pLinkSpeedCbContext);
|
||||
else
|
||||
WMA_LOGD("%s: pLinkSpeedIndCb is null", __func__);
|
||||
|
||||
qdf_mem_free(ls_ind);
|
||||
|
||||
return qdf_status;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue