/****************************************************************************
*
- * Copyright (c) 2014 - 2018 Samsung Electronics Co., Ltd. All rights reserved
+ * Copyright (c) 2014 - 2019 Samsung Electronics Co., Ltd. All rights reserved
*
****************************************************************************/
#define FAPI_SAP_TYPE_DEBUG 0x8000
#define FAPI_SAP_TYPE_TEST 0x9000
-#define FAPI_DEBUG_SAP_ENG_VERSION 0x0000
-#define FAPI_CONTROL_SAP_ENG_VERSION 0x0000
-#define FAPI_DATA_SAP_ENG_VERSION 0x0000
-#define FAPI_TEST_SAP_ENG_VERSION 0x0006
+#define FAPI_DEBUG_SAP_ENG_VERSION 0x0001
+#define FAPI_DATA_SAP_ENG_VERSION 0x0001
+#define FAPI_CONTROL_SAP_ENG_VERSION 0x0006
+#define FAPI_TEST_SAP_ENG_VERSION 0x000e
#define FAPI_DEBUG_SAP_VERSION 0x0d03
#define FAPI_CONTROL_SAP_VERSION 0x0e00
#define FAPI_TEST_SAP_VERSION 0x0e00
#define FAPI_ACLPOLICY_BLACKLIST 0x0000
#define FAPI_ACLPOLICY_WHITELIST 0x0001
+#define FAPI_ACTION_STOP 0x0000
+#define FAPI_ACTION_START 0x0001
+
+#define FAPI_APFFILTERMODE_SUSPEND 0x0001
+#define FAPI_APFFILTERMODE_ACTIVE 0x0002
+
#define FAPI_AUTHENTICATIONTYPE_OPEN_SYSTEM 0x0000
#define FAPI_AUTHENTICATIONTYPE_SHARED_KEY 0x0001
+#define FAPI_AUTHENTICATIONTYPE_SAE 0x0003
#define FAPI_AUTHENTICATIONTYPE_LEAP 0x0080
#define FAPI_BANDWIDTH_20_MHZ 0x0
#define FAPI_DATARATE_CTR_DUPLICATE 0xe005
#define FAPI_DATARATE_CTR_ERROR 0xe006
#define FAPI_DATARATE_CTR_LDPC 0xe007
+#define FAPI_DATARATE_CTR_BEAMFORMED 0xe008
#define FAPI_DATAUNITDESCRIPTOR_IEEE802_11_FRAME 0x0000
#define FAPI_DATAUNITDESCRIPTOR_IEEE802_3_FRAME 0x0001
#define FAPI_DEVICESTATE_CW_RUNNING 3
#define FAPI_DEVICESTATE_BIST_RUNNING 4
+#define FAPI_DFSREGULATORY_UNKNOWN 0x0000
+#define FAPI_DFSREGULATORY_FCC 0x0001
+#define FAPI_DFSREGULATORY_ETSI 0x0002
+#define FAPI_DFSREGULATORY_JAPAN 0x0003
+#define FAPI_DFSREGULATORY_GLOBAL 0x0004
+#define FAPI_DFSREGULATORY_CHINA 0x0006
+
#define FAPI_DIRECTION_TRANSMIT 0x0000
#define FAPI_DIRECTION_RECEIVE 0x0001
-#define FAPI_DIRECTION_ANY 0x0003
#define FAPI_ENDPOINT_HOSTIO 0x0001
#define FAPI_ENDPOINT_DPLP 0x0002
#define FAPI_HIDDENSSID_HIDDEN_ZERO_LENGTH 0x0001
#define FAPI_HIDDENSSID_HIDDEN_ZERO_DATA 0x0002
-#define FAPI_HOSTSTATE_LCD_ACTIVE 0x0001
-#define FAPI_HOSTSTATE_CELLULAR_ACTIVE 0x0002
-#define FAPI_HOSTSTATE_SAR_ACTIVE 0x0004
-#define FAPI_HOSTSTATE_GRIP_ACTIVE 0x0008
+#define FAPI_HOSTSTATE_LCD_ACTIVE 0x0001
+#define FAPI_HOSTSTATE_CELLULAR_ACTIVE 0x0002
+#define FAPI_HOSTSTATE_SAR_ACTIVE 0x0004
+#define FAPI_HOSTSTATE_GRIP_ACTIVE 0x0040
+#define FAPI_HOSTSTATE_LOW_LATENCY_ACTIVE 0x0080
#define FAPI_HT_NON_HT_RATE 0x1
#define FAPI_HT_HT_RATE 0x2
#define FAPI_KEYTYPE_PAIRWISE 0x0001
#define FAPI_KEYTYPE_WEP 0x0002
#define FAPI_KEYTYPE_IGTK 0x0003
-#define FAPI_KEYTYPE_FIRST_ILLEGAL 0x0004
+#define FAPI_KEYTYPE_PMK 0x0004
+#define FAPI_KEYTYPE_FIRST_ILLEGAL 0x0005
#define FAPI_MESSAGETYPE_EAP_MESSAGE 0x0001
#define FAPI_MESSAGETYPE_EAPOL_KEY_M123 0x0002
#define FAPI_MESSAGETYPE_DHCP 0x0005
#define FAPI_MESSAGETYPE_NEIGHBOR_DISCOVERY 0x0006
#define FAPI_MESSAGETYPE_WAI_MESSAGE 0x0007
-#define FAPI_MESSAGETYPE_PERIODIC_OFFLOAD 0x0008
+#define FAPI_MESSAGETYPE_ANY_OTHER 0x0008
#define FAPI_MESSAGETYPE_IEEE80211_ACTION 0x0010
-/* TBD: Auto generate to add this */
-#define FAPI_MESSAGETYPE_IEEE80211_MGMT_NOT_ACTION 0x0011
+#define FAPI_MESSAGETYPE_IEEE80211_MGMT 0x0011
#define FAPI_MODE_SOURCE 0x0001
#define FAPI_MODE_SINK 0x0002
#define FAPI_NANAVAILABILITYDURATION_32MS 0x01
#define FAPI_NANAVAILABILITYDURATION_64MS 0x02
-#define FAPI_NANOPERATIONCONTROL_CLUSTER_SDF 0x0001
#define FAPI_NANOPERATIONCONTROL_MAC_ADDRESS_EVENT 0x0002
#define FAPI_NANOPERATIONCONTROL_START_CLUSTER_EVENT 0x0004
#define FAPI_NANOPERATIONCONTROL_JOINED_CLUSTER_EVENT 0x0008
#define FAPI_NANSDFCONTROL_SUBSCRIBE_END_EVENT 0x0002
#define FAPI_NANSDFCONTROL_MATCH_EXPIRED_EVENT 0x0004
#define FAPI_NANSDFCONTROL_RECEIVED_FOLLOWUP_EVENT 0x0008
-#define FAPI_NANSDFCONTROL_DISABLE_RESPONSES_AFTER_FOLLOWUP 0x0010
+#define FAPI_NANSDFCONTROL_DISABLE_FOLLOWUP_TRANSMIT_STATUS 0x0010
+
+#define FAPI_NSSTYPE_NSS_ONE_STREAM 0x0000
+#define FAPI_NSSTYPE_NSS_TWO_STREAMS 0x0001
+#define FAPI_NSSTYPE_NSS_THREE_STREAMS 0x0002
+#define FAPI_NSSTYPE_NSS_FOUR_STREAMS 0x0003
+#define FAPI_NSSTYPE_NSS_FIVE_STREAMS 0x0004
+#define FAPI_NSSTYPE_NSS_SIX_STREAMS 0x0005
+#define FAPI_NSSTYPE_NSS_SEVEN_STREAMS 0x0006
+#define FAPI_NSSTYPE_NSS_EIGHT_STREAMS 0x0007
#define FAPI_PACKETFILTERMODE_OPT_OUT 0x01
#define FAPI_PACKETFILTERMODE_OPT_IN 0x02
#define FAPI_RADIOBITMAP_RADIO_0 0x0001
#define FAPI_RADIOBITMAP_RADIO_1 0x0002
-#define FAPI_REASONCODE_RESERVED 0x0000
-#define FAPI_REASONCODE_UNSPECIFIED_REASON 0x0001
-#define FAPI_REASONCODE_DEAUTHENTICATED_INVALID_AUTHENTICATION 0x0002
-#define FAPI_REASONCODE_DEAUTHENTICATED_LEAVING_ESS 0x0003
-#define FAPI_REASONCODE_DEAUTHENTICATED_INACTIVITY 0x0004
-#define FAPI_REASONCODE_DEAUTHENTICATED_NO_MORE_STATIONS 0x0005
-#define FAPI_REASONCODE_DEAUTHENTICATED_INVALID_CLASS_2_FRAME 0x0006
-#define FAPI_REASONCODE_DEAUTHENTICATED_INVALID_CLASS_3_FRAME 0x0007
-#define FAPI_REASONCODE_DEAUTHENTICATED_UNACCEPTABLE_POWER_CAPABILITY 0x000a
-#define FAPI_REASONCODE_DEAUTHENTICATED_4_WAY_HANDSHAKE_TIMEOUT 0x000f
-#define FAPI_REASONCODE_DEAUTHENTICATED_GROUP_HANDSHAKE_TIMEOUT 0x0010
-#define FAPI_REASONCODE_DEAUTHENTICATED_HANDSHAKE_ELEMENT_MISMATCH 0x0011
-#define FAPI_REASONCODE_DEAUTHENTICATED_REASON_INVALID_RSNE 0x0014
-#define FAPI_REASONCODE_DEAUTHENTICATED_802_1_X_AUTH_FAILED 0x0017
-#define FAPI_REASONCODE_TDLS_PEER_UNREACHABLE 0x0019
-#define FAPI_REASONCODE_TDLS_TEARDOWN_UNSPECIFIED_REASON 0x001a
-#define FAPI_REASONCODE_QOS_UNSPECIFIED_REASON 0x0020
-#define FAPI_REASONCODE_QOS_EXCESSIVE_NOT_ACK 0x0022
-#define FAPI_REASONCODE_QOS_TXOP_LIMIT_EXCEEDED 0x0023
-#define FAPI_REASONCODE_QSTA_LEAVING 0x0024
-#define FAPI_REASONCODE_END 0x0025
-#define FAPI_REASONCODE_UNKNOWN 0x0026
-#define FAPI_REASONCODE_TIMEOUT 0x0027
-#define FAPI_REASONCODE_KEEP_ALIVE_FAILURE 0x0028
-#define FAPI_REASONCODE_START 0x0029
-#define FAPI_REASONCODE_SYNCHRONISATION_LOSS 0x8003
-#define FAPI_REASONCODE_SECURITY_REQUIRED 0x8004
-#define FAPI_REASONCODE_ROAMING_FAILURE_LINK_LOSS_NO_CANDIDATE 0x8005
-#define FAPI_REASONCODE_HOTSPOT_MAX_CLIENT_REACHED 0x8006
-#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_TIMEOUT 0x9001
-#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_USER_REQUEST 0x9002
-#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_COUNT_REACHED 0x9003
-#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_DISCOVERY_SHUTDOWN 0x9004
-#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_POST_DISCOVERY_EXPIRED 0x9005
-#define FAPI_REASONCODE_NAN_TRANSMIT_FOLLOWUP_SUCCESS 0x9006
-#define FAPI_REASONCODE_NAN_TRANSMIT_FOLLOWUP_FAILURE 0x9007
-
-#define FAPI_REPORTMODE_BUFFER_FULL 0x0001
+#define FAPI_REASONCODE_RESERVED 0x0000
+#define FAPI_REASONCODE_UNSPECIFIED_REASON 0x0001
+#define FAPI_REASONCODE_DEAUTHENTICATED_INVALID_AUTHENTICATION 0x0002
+#define FAPI_REASONCODE_DEAUTHENTICATED_LEAVING 0x0003
+#define FAPI_REASONCODE_DEAUTHENTICATED_NO_MORE_STATIONS 0x0005
+#define FAPI_REASONCODE_DEAUTHENTICATED_INVALID_CLASS_2_FRAME 0x0006
+#define FAPI_REASONCODE_DEAUTHENTICATED_INVALID_CLASS_3_FRAME 0x0007
+#define FAPI_REASONCODE_DEAUTHENTICATED_REASON_INVALID_IE 0x000d
+#define FAPI_REASONCODE_DEAUTHENTICATED_4_WAY_HANDSHAKE_TIMEOUT 0x000f
+#define FAPI_REASONCODE_DEAUTHENTICATED_GROUP_HANDSHAKE_TIMEOUT 0x0010
+#define FAPI_REASONCODE_DEAUTHENTICATED_HANDSHAKE_ELEMENT_MISMATCH 0x0011
+#define FAPI_REASONCODE_DEAUTHENTICATED_REASON_INVALID_RSNE 0x0014
+#define FAPI_REASONCODE_DEAUTHENTICATED_802_1_X_AUTH_FAILED 0x0017
+#define FAPI_REASONCODE_TDLS_PEER_UNREACHABLE 0x0019
+#define FAPI_REASONCODE_TDLS_TEARDOWN_UNSPECIFIED_REASON 0x001a
+#define FAPI_REASONCODE_QOS_UNSPECIFIED_REASON 0x0020
+#define FAPI_REASONCODE_QOS_EXCESSIVE_NOT_ACK 0x0022
+#define FAPI_REASONCODE_QOS_TXOP_LIMIT_EXCEEDED 0x0023
+#define FAPI_REASONCODE_QSTA_LEAVING 0x0024
+#define FAPI_REASONCODE_END 0x0025
+#define FAPI_REASONCODE_UNKNOWN 0x0026
+#define FAPI_REASONCODE_TIMEOUT 0x0027
+#define FAPI_REASONCODE_KEEP_ALIVE_FAILURE 0x0028
+#define FAPI_REASONCODE_START 0x0029
+#define FAPI_REASONCODE_DEAUTHENTICATED_REASON_INVALID_PMKID 0x0031
+#define FAPI_REASONCODE_INVALID_PMKID 0x0049
+#define FAPI_REASONCODE_SYNCHRONISATION_LOSS 0x8003
+#define FAPI_REASONCODE_SECURITY_REQUIRED 0x8004
+#define FAPI_REASONCODE_ROAMING_FAILURE_LINK_LOSS_NO_CANDIDATE 0x8005
+#define FAPI_REASONCODE_HOTSPOT_MAX_CLIENT_REACHED 0x8006
+#define FAPI_REASONCODE_CHANNEL_SWITCH_FAILURE 0x8007
+#define FAPI_REASONCODE_REPORTING_ABORTED_SCANNING 0x8008
+#define FAPI_REASONCODE_REPORTING_ABORTED_ROAMING 0x8009
+#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_TIMEOUT 0x9001
+#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_USER_REQUEST 0x9002
+#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_COUNT_REACHED 0x9003
+#define FAPI_REASONCODE_NAN_SERVICE_TERMINATED_DISCOVERY_SHUTDOWN 0x9004
+#define FAPI_REASONCODE_NAN_TRANSMIT_FOLLOWUP_SUCCESS 0x9006
+#define FAPI_REASONCODE_NAN_TRANSMIT_FOLLOWUP_FAILURE 0x9007
+#define FAPI_REASONCODE_NDP_ACCEPTED 0x9008
+#define FAPI_REASONCODE_NDP_REJECTED 0x9009
+
+#define FAPI_REPORTMODE_RESERVED 0x0001
#define FAPI_REPORTMODE_END_OF_SCAN_CYCLE 0x0002
#define FAPI_REPORTMODE_REAL_TIME 0x0004
#define FAPI_REPORTMODE_NO_BATCH 0x0008
-#define FAPI_REQUESTTYPE_SMAPPER_RX_CONFIG 0x0000
-
#define FAPI_RESULTCODE_SUCCESS 0x0000
#define FAPI_RESULTCODE_UNSPECIFIED_FAILURE 0x0001
#define FAPI_RESULTCODE_INVALID_PARAMETERS 0x0026
#define FAPI_RESULTCODE_NOT_ALLOWED 0x0030
#define FAPI_RESULTCODE_NOT_PRESENT 0x0031
#define FAPI_RESULTCODE_TRANSMISSION_FAILURE 0x004f
-#define FAPI_RESULTCODE_TIMEOUT 0x8000
#define FAPI_RESULTCODE_TOO_MANY_SIMULTANEOUS_REQUESTS 0x8001
#define FAPI_RESULTCODE_BSS_ALREADY_STARTED_OR_JOINED 0x8002
#define FAPI_RESULTCODE_NOT_SUPPORTED 0x8003
#define FAPI_RESULTCODE_INVALID_STATE 0x8004
#define FAPI_RESULTCODE_INSUFFICIENT_RESOURCE 0x8006
-#define FAPI_RESULTCODE_MISSING_INFORMATION_ELEMENT 0x8007
#define FAPI_RESULTCODE_INVALID_VIRTUAL_INTERFACE_INDEX 0x800a
#define FAPI_RESULTCODE_HOST_REQUEST_SUCCESS 0x800b
#define FAPI_RESULTCODE_HOST_REQUEST_FAILED 0x800c
-#define FAPI_RESULTCODE_COMEBACK_TIME_RUNNING 0x800d
#define FAPI_RESULTCODE_INVALID_FREQUENCY 0x800e
#define FAPI_RESULTCODE_PROBE_TIMEOUT 0x800f
#define FAPI_RESULTCODE_AUTH_TIMEOUT 0x8010
#define FAPI_RESULTCODE_ASSOC_TIMEOUT 0x8011
#define FAPI_RESULTCODE_ASSOC_ABORT 0x8012
-/*Will remove it once we get latest fapi.xml */
-#define FAPI_RESULTCODE_AUTH_NO_ACK 0x8013
-#define FAPI_RESULTCODE_ASSOC_NO_ACK 0x8014
-/*--------------------------------------------------*/
+#define FAPI_RESULTCODE_AUTH_NO_ACK 0x8013
+#define FAPI_RESULTCODE_ASSOC_NO_ACK 0x8014
+#define FAPI_RESULTCODE_AUTH_FAILED_CODE 0x8100
+#define FAPI_RESULTCODE_ASSOC_FAILED_CODE 0x8200
#define FAPI_RESULTCODE_INVALID_TLV_VALUE 0x9000
#define FAPI_RESULTCODE_NAN_PROTOCOL_FAILURE 0x9001
#define FAPI_RESULTCODE_NAN_INVALID_PUBLISH_SUBSCRIBE_ID 0x9002
#define FAPI_RESULTCODE_NAN_INVALID_REQUESTOR_INSTANCE_ID 0x9003
+#define FAPI_RESULTCODE_UNSUPPORTED_CONCURRENCY 0x9004
+#define FAPI_RESULTCODE_NAN_INVALID_NDP_ID 0x9005
+#define FAPI_RESULTCODE_NAN_INVALID_PEER_ID 0x9006
+#define FAPI_RESULTCODE_NAN_NO_OTA_ACK 0x9007
+#define FAPI_RESULTCODE_NAN_INVALID_AVAILABILITY 0x9008
+#define FAPI_RESULTCODE_NAN_IMMUTABLE_UNACCEPTABLE 0x9009
+#define FAPI_RESULTCODE_NAN_REJECTED_SECURITY_POLICY 0x900a
+#define FAPI_RESULTCODE_NDP_REJECTED 0x900b
+#define FAPI_RESULTCODE_NDL_UNACCEPTABLE 0x900c
+#define FAPI_RESULTCODE_NDL_FAILED_SCHEDULE 0x900d
#define FAPI_RTTBANDWIDTH_20MHZ 0x0004
#define FAPI_RTTBANDWIDTH_40MHZ 0x0008
#define FAPI_RTTBANDWIDTH_80MHZ 0x0010
#define FAPI_RTTBANDWIDTH_160MHZ 0x0020
-#define FAPI_RTTPEERTYPE_UNKNOWN 0x0000
-#define FAPI_RTTPEERTYPE_AP 0x0001
-#define FAPI_RTTPEERTYPE_STA 0x0002
-#define FAPI_RTTPEERTYPE_P2P_GO 0x0003
-#define FAPI_RTTPEERTYPE_P2P_CLIENT 0x0004
-#define FAPI_RTTPEERTYPE_NAN_DEVICE 0x0005
-
#define FAPI_RTTPREAMBLE_LEGACY 0x0001
#define FAPI_RTTPREAMBLE_HT 0x0002
#define FAPI_RTTPREAMBLE_VHT 0x0004
#define FAPI_RTTSTATUS_FAIL_TIMEOUT 0x0005
#define FAPI_RTTSTATUS_FAIL_INCORRECT_CHANNEL 0x0006
#define FAPI_RTTSTATUS_FAIL_FTM_NOT_SUPPORTED 0x0007
-#define FAPI_RTTSTATUS_MEASUREMENT_ABORTED 0x0008
+#define FAPI_RTTSTATUS_FAIL_MEASUREMENT_ABORTED 0x0008
#define FAPI_RTTSTATUS_FAIL_INVALID_TIME_STAMP 0x0009
#define FAPI_RTTSTATUS_FAIL_NO_FTM_RECEIVED 0x000a
#define FAPI_RTTSTATUS_FAIL_BURST_NOT_SCHEDULED 0x000b
#define FAPI_RTTTYPE_ONE_SIDED 0x0001
#define FAPI_RTTTYPE_TWO_SIDED 0x0002
-#define FAPI_RXSTARTFLAGS_NONE 0x0000
-#define FAPI_RXSTARTFLAGS_SCAN_CHANNEL 0x0001
-#define FAPI_RXSTARTFLAGS_FILTERING 0x0002
-#define FAPI_RXSTARTFLAGS_ACK 0x0008
-#define FAPI_RXSTARTFLAGS_LP_MODE 0x0010
+#define FAPI_RULEFLAG_NO_IR 0x0001
+#define FAPI_RULEFLAG_DFS 0x0002
+#define FAPI_RULEFLAG_NO_OFDM 0x0004
+#define FAPI_RULEFLAG_NO_INDOOR 0x0008
+#define FAPI_RULEFLAG_NO_OUTDOOR 0x0010
+
+#define FAPI_RXSTARTFLAGS_NONE 0x0000
+#define FAPI_RXSTARTFLAGS_SCAN_CHANNEL 0x0001
+#define FAPI_RXSTARTFLAGS_FILTERING 0x0002
+#define FAPI_RXSTARTFLAGS_BEAMFORMING 0x0004
+#define FAPI_RXSTARTFLAGS_ACK 0x0008
+#define FAPI_RXSTARTFLAGS_LP_MODE 0x0010
+#define FAPI_RXSTARTFLAGS_CHAN_RSSI 0x0020
+#define FAPI_RXSTARTFLAGS_DISABLE_EXTERNAL_LNA 0x0040
#define FAPI_SCANPOLICY_PASSIVE 0x01
#define FAPI_SCANPOLICY_TEST_MODE 0x02
#define FAPI_SCANTYPE_HARD_ALL_ROAMING_SCAN 0x0010
#define FAPI_SCANTYPE_OBSS_SCAN_INTERNAL 0x0011
#define FAPI_SCANTYPE_NAN_SCAN 0x0012
-#define FAPI_SCANTYPE_FIRST_ILLEGAL 0x0013
+#define FAPI_SCANTYPE_FTM_NEIGHBOUR_SCAN 0x0013
+#define FAPI_SCANTYPE_FIRST_ILLEGAL 0x0014
#define FAPI_STATSSTOPBITMAP_STATS_RADIO 0x0001
#define FAPI_STATSSTOPBITMAP_STATS_RADIO_CCA 0x0002
#define FAPI_STATSSTOPBITMAP_STATS_IFACE_AC 0x0040
#define FAPI_STATSSTOPBITMAP_STATS_IFACE_CONTENSION 0x0080
-#define FAPI_TDLSACTION_DISCOVERY 0x0000
-#define FAPI_TDLSACTION_SETUP 0x0001
-#define FAPI_TDLSACTION_TEARDOWN 0x0002
+#define FAPI_TDLSACTION_DISCOVERY 0x0000
+#define FAPI_TDLSACTION_SETUP 0x0001
+#define FAPI_TDLSACTION_TEARDOWN 0x0002
+/*todo*/
#define FAPI_TDLSACTION_CHANNEL_SWITCH 0x0003
#define FAPI_TDLSEVENT_CONNECTED 0x0001
#define FAPI_TXREADFLAGS_FRAME_COUNTING 0x0001
#define FAPI_TXREADFLAGS_THERMAL_CUTOUT 0x0002
-#define FAPI_TXSETPARAMSFLAGS_NONE 0x0000
-#define FAPI_TXSETPARAMSFLAGS_ACK 0x0001
-#define FAPI_TXSETPARAMSFLAGS_DUPLICATE_80 0x0002
-#define FAPI_TXSETPARAMSFLAGS_DUPLICATE_40 0x0004
-#define FAPI_TXSETPARAMSFLAGS_DEAFEN_RX 0x0008
-#define FAPI_TXSETPARAMSFLAGS_CS 0x0010
-#define FAPI_TXSETPARAMSFLAGS_SCAN_CHANNEL 0x0020
-#define FAPI_TXSETPARAMSFLAGS_SHORT_PREAMBLE 0x0040
-#define FAPI_TXSETPARAMSFLAGS_DISABLE_SCRAMBLER 0x0080
-#define FAPI_TXSETPARAMSFLAGS_LDPC 0x0100
-#define FAPI_TXSETPARAMSFLAGS_STBC 0x0200
-#define FAPI_TXSETPARAMSFLAGS_DISABLE_SPREADER 0x0400
-#define FAPI_TXSETPARAMSFLAGS_GREENFIELD_PREAMBLE 0x0800
-#define FAPI_TXSETPARAMSFLAGS_IBSS_FRAMES 0x2000
+#define FAPI_TXSETPARAMSFLAGS_NONE 0x0000
+#define FAPI_TXSETPARAMSFLAGS_ACK 0x0001
+#define FAPI_TXSETPARAMSFLAGS_DUPLICATE_80 0x0002
+#define FAPI_TXSETPARAMSFLAGS_DUPLICATE_40 0x0004
+#define FAPI_TXSETPARAMSFLAGS_DEAFEN_RX 0x0008
+#define FAPI_TXSETPARAMSFLAGS_CS 0x0010
+#define FAPI_TXSETPARAMSFLAGS_SCAN_CHANNEL 0x0020
+#define FAPI_TXSETPARAMSFLAGS_SHORT_PREAMBLE 0x0040
+#define FAPI_TXSETPARAMSFLAGS_DISABLE_SCRAMBLER 0x0080
+#define FAPI_TXSETPARAMSFLAGS_LDPC 0x0100
+#define FAPI_TXSETPARAMSFLAGS_STBC 0x0200
+#define FAPI_TXSETPARAMSFLAGS_DISABLE_SPREADER 0x0400
+#define FAPI_TXSETPARAMSFLAGS_GREENFIELD_PREAMBLE 0x0800
+#define FAPI_TXSETPARAMSFLAGS_RX_LOW_POWER 0x1000
+#define FAPI_TXSETPARAMSFLAGS_IBSS_FRAMES 0x2000
+#define FAPI_TXSETPARAMSFLAGS_BEAMFORMING 0x4000
+#define FAPI_TXSETPARAMSFLAGS_DISABLE_EXTERNAL_LNA 0x8000
#define FAPI_TYPEOFAIRPOWER_EIRP 0x00
#define FAPI_TYPEOFAIRPOWER_TPO 0x01
#define FAPI_VIFRANGE_VIF_INDEX_MAX 0x0008
#define FAPI_VIFTYPE_UNSYNCHRONISED 0x0000
-#define FAPI_VIFTYPE_SCAN 0x0001
#define FAPI_VIFTYPE_STATION 0x0002
#define FAPI_VIFTYPE_AP 0x0003
#define FAPI_VIFTYPE_WLANLITE 0x0004
#define FAPI_VIFTYPE_NAN 0x0005
#define FAPI_VIFTYPE_DISCOVERY 0x0006
-#define FAPI_VIFTYPE_OFFCHANNEL 0x0007
-#define FAPI_VIFTYPE_RANGE 0x0008
+#define FAPI_VIFTYPE_PRECONNECT 0x0007
+#define FAPI_VIFTYPE_NANDATAPATH 0x0008
#define FAPI_VIFTYPE_MONITOR 0x0010
+#define FAPI_VIFTYPE_SCAN 0x0020
+#define FAPI_VIFTYPE_OFFCHANNEL 0x0021
+#define FAPI_VIFTYPE_RANGE 0x0022
+
+#define FAPI_WIFILOGGINGPARAMS_BEACON_PERIOD 0xf000
+#define FAPI_WIFILOGGINGPARAMS_BLACKOUT_ID 0xf001
+#define FAPI_WIFILOGGINGPARAMS_BLACKOUT_SOURCE 0xf002
+#define FAPI_WIFILOGGINGPARAMS_BLACKOUT_TYPE 0xf003
+#define FAPI_WIFILOGGINGPARAMS_BLOCKACK_PARAMETER_SET 0xf004
+#define FAPI_WIFILOGGINGPARAMS_DIRECTION 0xf005
+#define FAPI_WIFILOGGINGPARAMS_DUTY_CYCLE 0xf006
+#define FAPI_WIFILOGGINGPARAMS_EAPOL_KEY_TYPE 0xf007
+#define FAPI_WIFILOGGINGPARAMS_FRAME 0xf008
+#define FAPI_WIFILOGGINGPARAMS_LOCAL_DURATION 0xf009
+#define FAPI_WIFILOGGINGPARAMS_PERIOD 0xf00a
+#define FAPI_WIFILOGGINGPARAMS_REASON 0xf00b
+#define FAPI_WIFILOGGINGPARAMS_REPORT_MODE 0xf00c
+#define FAPI_WIFILOGGINGPARAMS_RETRY_COUNT 0xf00d
+#define FAPI_WIFILOGGINGPARAMS_SCAN_TYPE 0xf00e
+#define FAPI_WIFILOGGINGPARAMS_SECONDARY_CHANNEL_OFFSET 0xf00f
+#define FAPI_WIFILOGGINGPARAMS_SEQUENCE_NUMBER 0xf010
+#define FAPI_WIFILOGGINGPARAMS_SNIFF_ACL 0xf011
+#define FAPI_WIFILOGGINGPARAMS_TEMPORAL_KEYS_REQUIRED 0xf012
+#define FAPI_WIFILOGGINGPARAMS_VIF_ID 0xf013
#define FAPI_CHANNELBANDWIDTH_BANDWIDTH_20MHZ_PRIMARYCHANNELPOSITION_P0 0x0000
#define FAPI_CHANNELBANDWIDTH_BANDWIDTH_20MHZ_PRIMARYCHANNELPOSITION_P1 0x0001
#define FAPI_CHANNELBANDWIDTH_BANDWIDTH_80MHZ_PRIMARYCHANNELPOSITION_NOT_APPLICABLE 0x0208
#define MA_UNITDATA_REQ 0x1000
-#define MA_CONTROL_REQ 0x1001
-#define MA_SPARE_SIGNAL_1_REQ 0x1002
-#define MA_SPARE_SIGNAL_2_REQ 0x1003
-#define MA_SPARE_SIGNAL_3_REQ 0x1004
+#define MA_SPARE_1_REQ 0x1002
+#define MA_SPARE_2_REQ 0x1003
+#define MA_SPARE_3_REQ 0x1004
+#define MA_SPARE_SIGNAL_1_REQ 0x1005
+#define MA_SPARE_SIGNAL_2_REQ 0x1006
+#define MA_SPARE_SIGNAL_3_REQ 0x1007
#define MA_UNITDATA_CFM 0x1100
-#define MA_CONTROL_CFM 0x1101
-#define MA_SPARE_SIGNAL_1_CFM 0x1102
-#define MA_SPARE_SIGNAL_2_CFM 0x1103
-#define MA_SPARE_SIGNAL_3_CFM 0x1104
-#define MA_SPARE_SIGNAL_1_RES 0x1200
-#define MA_SPARE_SIGNAL_2_RES 0x1201
-#define MA_SPARE_SIGNAL_3_RES 0x1202
+#define MA_SPARE_1_CFM 0x1102
+#define MA_SPARE_2_CFM 0x1103
+#define MA_SPARE_3_CFM 0x1104
+#define MA_SPARE_SIGNAL_1_CFM 0x1105
+#define MA_SPARE_SIGNAL_2_CFM 0x1106
+#define MA_SPARE_SIGNAL_3_CFM 0x1107
+#define MA_SPARE_1_RES 0x1200
+#define MA_SPARE_2_RES 0x1201
+#define MA_SPARE_3_RES 0x1202
+#define MA_SPARE_SIGNAL_1_RES 0x1203
+#define MA_SPARE_SIGNAL_2_RES 0x1204
+#define MA_SPARE_SIGNAL_3_RES 0x1205
#define MA_UNITDATA_IND 0x1300
#define MA_BLOCKACK_IND 0x1301
-#define MA_SPARE_SIGNAL_1_IND 0x1302
-#define MA_SPARE_SIGNAL_2_IND 0x1303
-#define MA_SPARE_SIGNAL_3_IND 0x1304
+#define MA_SPARE_1_IND 0x1302
+#define MA_SPARE_2_IND 0x1303
+#define MA_SPARE_3_IND 0x1304
+#define MA_SPARE_SIGNAL_1_IND 0x1305
+#define MA_SPARE_SIGNAL_2_IND 0x1306
+#define MA_SPARE_SIGNAL_3_IND 0x1307
#define MLME_GET_REQ 0x2001
#define MLME_SET_REQ 0x2002
#define MLME_POWERMGT_REQ 0x2003
#define MLME_MONITOR_RSSI_REQ 0x2023
#define MLME_START_LINK_STATISTICS_REQ 0x2024
#define MLME_STOP_LINK_STATISTICS_REQ 0x2025
-#define MLME_SET_BSSID_HOTLIST_REQ 0x2026
#define MLME_SET_PNO_LIST_REQ 0x2027
#define MLME_HOST_STATE_REQ 0x2028
#define MLME_ADD_RANGE_REQ 0x2029
#define MLME_NAN_PUBLISH_REQ 0x202f
#define MLME_NAN_SUBSCRIBE_REQ 0x2030
#define MLME_NAN_FOLLOWUP_REQ 0x2031
-#define MLME_SPARE_SIGNAL_1_REQ 0x2032
-#define MLME_SPARE_SIGNAL_2_REQ 0x2033
-#define MLME_SPARE_SIGNAL_3_REQ 0x2034
+#define MLME_UNSET_CHANNEL_REQ 0x2032
+#define MLME_SET_COUNTRY_REQ 0x2033
+#define MLME_FORWARD_BEACON_REQ 0x2034
+#define MLME_NDP_SETUP_REQ 0x2035
+#define MLME_NDP_SETUP_RESPONSE_REQ 0x2036
+#define MLME_NDP_TERMINATE_REQ 0x2037
+#define MLME_NAN_ADD_RANGE_REQ 0x2038
+#define MLME_NAN_DEL_RANGE_REQ 0x2039
+#define MLME_SPARE_4_REQ 0x203a
+#define MLME_SPARE_5_REQ 0x203b
+#define MLME_SPARE_6_REQ 0x203c
+#define MLME_INSTALL_APF_REQ 0x203d
+#define MLME_READ_APF_REQ 0x203e
+#define MLME_SET_NSS_REQ 0x203f
+#define MLME_ARP_DETECT_REQ 0x2040
+#define MLME_SPARE_SIGNAL_1_REQ 0x2041
+#define MLME_SPARE_SIGNAL_2_REQ 0x2042
+#define MLME_SPARE_SIGNAL_3_REQ 0x2043
#define MLME_GET_CFM 0x2101
#define MLME_SET_CFM 0x2102
#define MLME_POWERMGT_CFM 0x2103
#define MLME_MONITOR_RSSI_CFM 0x2123
#define MLME_START_LINK_STATISTICS_CFM 0x2124
#define MLME_STOP_LINK_STATISTICS_CFM 0x2125
-#define MLME_SET_BSSID_HOTLIST_CFM 0x2126
#define MLME_SET_PNO_LIST_CFM 0x2127
#define MLME_HOST_STATE_CFM 0x2128
#define MLME_ADD_RANGE_CFM 0x2129
#define MLME_NAN_PUBLISH_CFM 0x212f
#define MLME_NAN_SUBSCRIBE_CFM 0x2130
#define MLME_NAN_FOLLOWUP_CFM 0x2131
-#define MLME_SPARE_SIGNAL_1_CFM 0x2132
-#define MLME_SPARE_SIGNAL_2_CFM 0x2133
-#define MLME_SPARE_SIGNAL_3_CFM 0x2134
+#define MLME_UNSET_CHANNEL_CFM 0x2132
+#define MLME_SET_COUNTRY_CFM 0x2133
+#define MLME_FORWARD_BEACON_CFM 0x2134
+#define MLME_NDP_SETUP_CFM 0x2135
+#define MLME_NDP_SETUP_RESPONSE_CFM 0x2136
+#define MLME_NDP_TERMINATE_CFM 0x2137
+#define MLME_NAN_ADD_RANGE_CFM 0x2138
+#define MLME_NAN_DEL_RANGE_CFM 0x2139
+#define MLME_SPARE_4_CFM 0x213a
+#define MLME_SPARE_5_CFM 0x213b
+#define MLME_SPARE_6_CFM 0x213c
+#define MLME_INSTALL_APF_CFM 0x213d
+#define MLME_READ_APF_CFM 0x213e
+#define MLME_SET_NSS_CFM 0x213f
+#define MLME_ARP_DETECT_CFM 0x2140
+#define MLME_SPARE_SIGNAL_1_CFM 0x2141
+#define MLME_SPARE_SIGNAL_2_CFM 0x2142
+#define MLME_SPARE_SIGNAL_3_CFM 0x2143
#define MLME_CONNECT_RES 0x2200
#define MLME_CONNECTED_RES 0x2201
#define MLME_REASSOCIATE_RES 0x2202
#define MLME_ROAMED_RES 0x2203
#define MLME_TDLS_PEER_RES 0x2204
-#define MLME_SPARE_SIGNAL_1_RES 0x2205
-#define MLME_SPARE_SIGNAL_2_RES 0x2206
-#define MLME_SPARE_SIGNAL_3_RES 0x2207
+#define MLME_SYNCHRONISED_RES 0x2205
+#define MLME_SPARE_2_RES 0x2206
+#define MLME_SPARE_3_RES 0x2207
+#define MLME_SPARE_4_RES 0x2208
+#define MLME_SPARE_SIGNAL_1_RES 0x2209
+#define MLME_SPARE_SIGNAL_2_RES 0x220a
+#define MLME_SPARE_SIGNAL_3_RES 0x220b
#define MLME_SCAN_IND 0x2300
#define MLME_SCAN_DONE_IND 0x2301
#define MLME_LISTEN_END_IND 0x2302
#define MLME_FRAME_TRANSMISSION_IND 0x230c
#define MLME_RECEIVED_FRAME_IND 0x230d
#define MLME_TDLS_PEER_IND 0x230f
-#define MLME_AP_LOSS_IND 0x2310
-#define MLME_SIGNIFICANT_CHANGE_IND 0x2311
#define MLME_RSSI_REPORT_IND 0x2312
#define MLME_AC_PRIORITY_UPDATE_IND 0x2313
#define MLME_RANGE_IND 0x2314
#define MLME_NAN_SERVICE_IND 0x2318
#define MLME_NAN_FOLLOWUP_IND 0x2319
#define MLME_CHANNEL_SWITCHED_IND 0x231a
-#define MLME_SPARE_SIGNAL_1_IND 0x231b
-#define MLME_SPARE_SIGNAL_2_IND 0x231c
-#define MLME_SPARE_SIGNAL_3_IND 0x231d
-#define DEBUG_SPARE_SIGNAL_1_REQ 0x8000
-#define DEBUG_SPARE_SIGNAL_2_REQ 0x8001
-#define DEBUG_SPARE_SIGNAL_3_REQ 0x8002
-#define DEBUG_SPARE_SIGNAL_1_CFM 0x8100
-#define DEBUG_SPARE_SIGNAL_2_CFM 0x8101
-#define DEBUG_SPARE_SIGNAL_3_CFM 0x8102
-#define DEBUG_SPARE_SIGNAL_1_RES 0x8200
-#define DEBUG_SPARE_SIGNAL_2_RES 0x8201
-#define DEBUG_SPARE_SIGNAL_3_RES 0x8202
+#define MLME_SYNCHRONISED_IND 0x231b
+#define MLME_BEACON_REPORTING_EVENT_IND 0x231c
+#define MLME_SPARE_3_IND 0x231d
+#define MLME_SPARE_4_IND 0x231e
+#define MLME_NDP_SETUP_IND 0x231f
+#define MLME_NDP_REQUESTED_IND 0x2320
+#define MLME_NDP_SETUP_RESPONSE_IND 0x2321
+#define MLME_NDP_TERMINATED_IND 0x2322
+#define MLME_NAN_ADD_RANGE_IND 0x2323
+#define MLME_SPARE_5_IND 0x2324
+#define MLME_SPARE_SIGNAL_1_IND 0x2325
+#define MLME_SPARE_SIGNAL_2_IND 0x2326
+#define MLME_SPARE_SIGNAL_3_IND 0x2327
+#define DEBUG_SPARE_1_REQ 0x8000
+#define DEBUG_SPARE_2_REQ 0x8001
+#define DEBUG_SPARE_3_REQ 0x8002
+#define DEBUG_SPARE_SIGNAL_1_REQ 0x8003
+#define DEBUG_SPARE_SIGNAL_2_REQ 0x8004
+#define DEBUG_SPARE_SIGNAL_3_REQ 0x8005
+#define DEBUG_SPARE_1_CFM 0x8100
+#define DEBUG_SPARE_2_CFM 0x8101
+#define DEBUG_SPARE_3_CFM 0x8102
+#define DEBUG_SPARE_SIGNAL_1_CFM 0x8103
+#define DEBUG_SPARE_SIGNAL_2_CFM 0x8104
+#define DEBUG_SPARE_SIGNAL_3_CFM 0x8105
+#define DEBUG_SPARE_1_RES 0x8200
+#define DEBUG_SPARE_2_RES 0x8201
+#define DEBUG_SPARE_3_RES 0x8202
+#define DEBUG_SPARE_SIGNAL_1_RES 0x8203
+#define DEBUG_SPARE_SIGNAL_2_RES 0x8204
+#define DEBUG_SPARE_SIGNAL_3_RES 0x8205
#define DEBUG_WORD12IND 0x8301
#define DEBUG_FAULT_IND 0x8302
-#define DEBUG_SPARE_SIGNAL_1_IND 0x8303
-#define DEBUG_SPARE_SIGNAL_2_IND 0x8304
-#define DEBUG_SPARE_SIGNAL_3_IND 0x8305
+#define DEBUG_WORDS_IND 0x8303
+#define DEBUG_SPARE_2_IND 0x8304
+#define DEBUG_SPARE_3_IND 0x8305
+#define DEBUG_SPARE_4_IND 0x8306
+#define DEBUG_SPARE_SIGNAL_1_IND 0x8307
+#define DEBUG_SPARE_SIGNAL_2_IND 0x8308
+#define DEBUG_SPARE_SIGNAL_3_IND 0x8309
#define TEST_BLOCK_REQUESTS_REQ 0x9000
#define TEST_PANIC_REQ 0x9001
#define TEST_SUSPEND_REQ 0x9002
#define TEST_HIP_TESTER_SET_PARAMS_REQ 0x901d
#define TEST_HIP_TESTER_REPORT_REQ 0x901e
#define TEST_BIST_GET_TX_GAIN_REQ 0x901f
-#define TEST_SPARE_SIGNAL_1_REQ 0x9020
-#define TEST_SPARE_SIGNAL_2_REQ 0x9021
-#define TEST_SPARE_SIGNAL_3_REQ 0x9022
+#define TEST_SPARE_1_REQ 0x9020
+#define TEST_SPARE_2_REQ 0x9021
+#define TEST_SPARE_3_REQ 0x9022
+#define TEST_SPARE_SIGNAL_1_REQ 0x9023
+#define TEST_SPARE_SIGNAL_2_REQ 0x9024
+#define TEST_SPARE_SIGNAL_3_REQ 0x9025
#define RADIO_LOGGING_CFM 0x9100
#define WLANLITE_CW_START_CFM 0x9101
#define WLANLITE_TX_SET_PARAMS_CFM 0x9102
#define TEST_HIP_TESTER_STOP_CFM 0x9114
#define TEST_HIP_TESTER_SET_PARAMS_CFM 0x9115
#define TEST_BIST_GET_TX_GAIN_CFM 0x9116
-#define TEST_SPARE_SIGNAL_1_CFM 0x9117
-#define TEST_SPARE_SIGNAL_2_CFM 0x9118
-#define TEST_SPARE_SIGNAL_3_CFM 0x9119
-#define TEST_SPARE_SIGNAL_1_RES 0x9200
-#define TEST_SPARE_SIGNAL_2_RES 0x9201
-#define TEST_SPARE_SIGNAL_3_RES 0x9202
+#define TEST_SPARE_1_CFM 0x9117
+#define TEST_SPARE_2_CFM 0x9118
+#define TEST_SPARE_3_CFM 0x9119
+#define TEST_SPARE_SIGNAL_1_CFM 0x911a
+#define TEST_SPARE_SIGNAL_2_CFM 0x911b
+#define TEST_SPARE_SIGNAL_3_CFM 0x911c
+#define TEST_SPARE_1_RES 0x9200
+#define TEST_SPARE_2_RES 0x9201
+#define TEST_SPARE_3_RES 0x9202
+#define TEST_SPARE_SIGNAL_1_RES 0x9203
+#define TEST_SPARE_SIGNAL_2_RES 0x9204
+#define TEST_SPARE_SIGNAL_3_RES 0x9205
#define RADIO_LOGGING_IND 0x9300
#define DEBUG_GENERIC_IND 0x9301
#define DEBUG_PKT_SINK_REPORT_IND 0x9302
#define DEBUG_PKT_GEN_REPORT_IND 0x9303
#define TEST_HIP_TESTER_REPORT_IND 0x9304
-#define TEST_SPARE_SIGNAL_1_IND 0x9305
-#define TEST_SPARE_SIGNAL_2_IND 0x9306
-#define TEST_SPARE_SIGNAL_3_IND 0x9307
+#define TEST_SPARE_1_IND 0x9305
+#define TEST_SPARE_2_IND 0x9306
+#define TEST_SPARE_3_IND 0x9307
+#define TEST_SPARE_SIGNAL_1_IND 0x9308
+#define TEST_SPARE_SIGNAL_2_IND 0x9309
+#define TEST_SPARE_SIGNAL_3_IND 0x930a
struct fapi_signal_header {
__le16 id;
} __packed ma_unitdata_req;
struct {
__le16 vif;
- __le16 control_request_type;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed ma_control_req;
+ } __packed ma_spare_1_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_2_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_3_req;
struct {
__le16 vif;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed ma_control_cfm;
+ } __packed ma_spare_1_cfm;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_2_cfm;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_3_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_3;
u8 dr[0];
} __packed ma_spare_signal_3_cfm;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_1_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_2_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_3_res;
struct {
__le16 vif;
__le32 spare_1;
__le32 spare_3;
u8 dr[0];
} __packed ma_blockack_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_1_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_2_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed ma_spare_3_ind;
struct {
__le16 vif;
__le32 spare_1;
__le32 spare_3;
u8 dr[0];
} __packed mlme_stop_link_statistics_req;
- struct {
- __le16 vif;
- __le32 spare_1;
- __le32 spare_2;
- __le32 spare_3;
- u8 dr[0];
- } __packed mlme_set_bssid_hotlist_req;
struct {
__le16 vif;
__le32 spare_1;
struct {
__le16 vif;
__le16 rtt_id;
+ u8 device_address[ETH_ALEN];
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
} __packed mlme_set_ctwindow_req;
struct {
__le16 vif;
- __le16 cluster_low;
- __le16 cluster_high;
+ __le16 operatein5gband;
+ __le16 hopcountmax;
__le16 nan_operation_control_flags;
__le32 spare_1;
__le32 spare_2;
struct {
__le16 vif;
__le16 publish_subscribe_id;
- __le16 requestor_instance_id;
+ __le16 peer_id;
__le16 nan_sdf_flags;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
} __packed mlme_nan_followup_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_unset_channel_req;
+ struct {
+ __le16 vif;
+ __le16 country_code;
+ __le16 dfs_regulatory_domain;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_set_country_req;
+ struct {
+ __le16 vif;
+ __le16 wips_action;
+ __le16 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_forward_beacon_req;
+ struct {
+ __le16 vif;
+ __le16 instance_id;
+ __le16 peer_id;
+ u8 local_ndp_interface_address[ETH_ALEN];
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_ndp_setup_req;
+ struct {
+ __le16 vif;
+ __le16 instance_id;
+ __le16 reason_code;
+ u8 local_ndp_interface_address[ETH_ALEN];
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_ndp_setup_response_req;
+ struct {
+ __le16 vif;
+ __le16 instance_id;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_ndp_terminate_req;
+ struct {
+ __le16 vif;
+ __le16 rtt_id;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_nan_add_range_req;
+ struct {
+ __le16 vif;
+ __le16 rtt_id;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_nan_del_range_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_4_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_5_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_6_req;
+ struct {
+ __le16 vif;
+ __le16 filter_mode;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_install_apf_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_read_apf_req;
+ struct {
+ __le16 vif;
+ __le16 rx_nss;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_set_nss_req;
+ struct {
+ __le16 vif;
+ __le16 arp_detect_action;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_arp_detect_req;
struct {
__le16 vif;
__le32 spare_1;
__le32 spare_3;
u8 dr[0];
} __packed mlme_stop_link_statistics_cfm;
- struct {
- __le16 vif;
- __le16 result_code;
- __le32 spare_1;
- __le32 spare_2;
- __le32 spare_3;
- u8 dr[0];
- } __packed mlme_set_bssid_hotlist_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_spare_signal_1_cfm;
+ } __packed mlme_unset_channel_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_spare_signal_2_cfm;
+ } __packed mlme_set_country_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_spare_signal_3_cfm;
+ } __packed mlme_forward_beacon_cfm;
struct {
__le16 vif;
+ __le16 result_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_connect_res;
+ } __packed mlme_ndp_setup_cfm;
struct {
__le16 vif;
- __le16 peer_index;
+ __le16 result_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_connected_res;
+ } __packed mlme_ndp_setup_response_cfm;
struct {
__le16 vif;
+ __le16 result_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_reassociate_res;
+ } __packed mlme_ndp_terminate_cfm;
struct {
__le16 vif;
+ __le16 result_code;
+ __le16 rtt_id;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_roamed_res;
+ } __packed mlme_nan_add_range_cfm;
struct {
__le16 vif;
- __le16 peer_index;
- __le16 tdls_event;
+ __le16 result_code;
+ __le16 rtt_id;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_tdls_peer_res;
+ } __packed mlme_nan_del_range_cfm;
struct {
__le16 vif;
+ __le16 result_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_spare_signal_1_res;
+ } __packed mlme_spare_4_cfm;
struct {
+ __le16 result_code;
__le16 vif;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_spare_signal_2_res;
+ } __packed mlme_spare_5_cfm;
struct {
+ __le16 result_code;
__le16 vif;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_spare_signal_3_res;
+ } __packed mlme_spare_6_cfm;
struct {
__le16 vif;
- __le16 channel_frequency;
- __le16 rssi;
- __le16 scan_id;
- __le16 hotlisted_ap;
- __le16 preferrednetwork_ap;
- __le16 anqp_elements_length;
- __le16 network_block_id;
+ __le16 result_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_scan_ind;
+ } __packed mlme_install_apf_cfm;
struct {
__le16 vif;
- __le16 scan_id;
+ __le16 result_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_scan_done_ind;
+ } __packed mlme_read_apf_cfm;
struct {
__le16 vif;
+ __le16 result_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_listen_end_ind;
+ } __packed mlme_set_nss_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_connect_ind;
+ } __packed mlme_arp_detect_cfm;
struct {
__le16 vif;
- __le16 peer_index;
+ __le16 result_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_connected_ind;
+ } __packed mlme_spare_signal_1_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_reassociate_ind;
+ } __packed mlme_spare_signal_2_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_roam_ind;
+ } __packed mlme_spare_signal_3_cfm;
struct {
__le16 vif;
- __le16 temporal_keys_required;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_roamed_ind;
+ } __packed mlme_connect_res;
struct {
__le16 vif;
- u8 peer_sta_address[ETH_ALEN];
+ __le16 peer_index;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_disconnect_ind;
+ } __packed mlme_connected_res;
struct {
__le16 vif;
- u8 peer_sta_address[ETH_ALEN];
- __le16 reason_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_disconnected_ind;
+ } __packed mlme_reassociate_res;
struct {
__le16 vif;
- __le16 procedure_type;
- __le16 peer_index;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_procedure_started_ind;
+ } __packed mlme_roamed_res;
struct {
__le16 vif;
- u8 peer_sta_address[ETH_ALEN];
- __le16 key_type;
- __le16 key_id;
- __le16 key_sequence_number[8];
+ __le16 peer_index;
+ __le16 tdls_event;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_mic_failure_ind;
+ } __packed mlme_tdls_peer_res;
struct {
__le16 vif;
- __le16 host_tag;
- __le16 transmission_status;
- __le32 spare_1;
- __le32 spare_2;
+ __le16 result_code;
+ u8 bssid[ETH_ALEN];
__le32 spare_3;
u8 dr[0];
- } __packed mlme_frame_transmission_ind;
+ } __packed mlme_synchronised_res;
struct {
__le16 vif;
- __le16 data_unit_descriptor;
- __le16 channel_frequency;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_received_frame_ind;
+ } __packed mlme_spare_2_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_3_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_4_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_signal_1_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_signal_2_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_signal_3_res;
+ struct {
+ __le16 vif;
+ __le16 channel_frequency;
+ __le16 rssi;
+ __le16 scan_id;
+ __le16 hotlisted_ap;
+ __le16 preferrednetwork_ap;
+ __le16 anqp_elements_length;
+ __le16 network_block_id;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_scan_ind;
+ struct {
+ __le16 vif;
+ __le16 scan_id;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_scan_done_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_listen_end_ind;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_connect_ind;
struct {
__le16 vif;
- u8 peer_sta_address[ETH_ALEN];
__le16 peer_index;
- __le16 tdls_event;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_connected_ind;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_reassociate_ind;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_roam_ind;
+ struct {
+ __le16 vif;
+ __le16 temporal_keys_required;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_roamed_ind;
+ struct {
+ __le16 vif;
+ u8 peer_sta_address[ETH_ALEN];
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_disconnect_ind;
+ struct {
+ __le16 vif;
+ u8 peer_sta_address[ETH_ALEN];
__le16 reason_code;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_tdls_peer_ind;
+ } __packed mlme_disconnected_ind;
struct {
__le16 vif;
- __le16 entries;
+ __le16 procedure_type;
+ __le16 peer_index;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_procedure_started_ind;
+ struct {
+ __le16 vif;
+ u8 peer_sta_address[ETH_ALEN];
+ __le16 key_type;
+ __le16 key_id;
+ __le16 key_sequence_number[8];
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_mic_failure_ind;
+ struct {
+ __le16 vif;
+ __le16 host_tag;
+ __le16 transmission_status;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_ap_loss_ind;
+ } __packed mlme_frame_transmission_ind;
struct {
__le16 vif;
- __le16 number_of_results;
- __le16 number_of_rssi_entries;
+ __le16 data_unit_descriptor;
+ __le16 channel_frequency;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
- } __packed mlme_significant_change_ind;
+ } __packed mlme_received_frame_ind;
+ struct {
+ __le16 vif;
+ u8 peer_sta_address[ETH_ALEN];
+ __le16 peer_index;
+ __le16 tdls_event;
+ __le16 reason_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_tdls_peer_ind;
struct {
__le16 vif;
u8 bssid[ETH_ALEN];
struct {
__le16 vif;
__le16 publish_subscribe_id;
- __le16 requestor_instance_id;
+ __le16 peer_id;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
struct {
__le16 vif;
__le16 publish_subscribe_id;
- __le16 requestor_instance_id;
+ __le16 peer_id;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
__le32 spare_3;
u8 dr[0];
} __packed mlme_channel_switched_ind;
+ struct {
+ __le16 vif;
+ __le16 rssi;
+ __le16 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_synchronised_ind;
+ struct {
+ __le16 vif;
+ __le16 abort_reason;
+ __le16 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_beacon_reporting_event_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_3_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_4_ind;
+ struct {
+ __le16 vif;
+ __le16 instance_id;
+ u8 peer_ndp_interface_address[ETH_ALEN];
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_ndp_setup_ind;
+ struct {
+ __le16 vif;
+ __le16 instance_id;
+ __le16 publish_subscribe_id;
+ u8 peer_ndp_interface_address[ETH_ALEN];
+ __le16 security_required;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_ndp_requested_ind;
+ struct {
+ __le16 vif;
+ __le16 instance_id;
+ u8 peer_ndp_interface_address[ETH_ALEN];
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_ndp_setup_response_ind;
+ struct {
+ __le16 vif;
+ __le16 instance_id;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_ndp_terminated_ind;
+ struct {
+ __le16 vif;
+ __le16 rtt_id;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_nan_add_range_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed mlme_spare_5_ind;
struct {
__le16 vif;
__le32 spare_1;
__le32 spare_3;
u8 dr[0];
} __packed mlme_spare_signal_3_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_1_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_2_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_3_req;
struct {
__le16 vif;
__le32 spare_1;
__le32 spare_3;
u8 dr[0];
} __packed debug_spare_signal_3_req;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_1_cfm;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_2_cfm;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_3_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_3;
u8 dr[0];
} __packed debug_spare_signal_3_cfm;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_1_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_2_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_3_res;
struct {
__le16 vif;
__le32 spare_1;
__le32 spare_3;
u8 dr[0];
} __packed debug_fault_ind;
+ struct {
+ __le16 vif;
+ __le16 module_id;
+ __le16 module_sub_id;
+ __le32 timestamp;
+ __le16 sequence_number;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_words_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_2_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_3_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed debug_spare_4_ind;
struct {
__le16 vif;
__le32 spare_1;
__le16 length;
__le32 interval;
__le16 flags;
- __le16 channel_description_index;
+ __le16 aid;
__le16 distance_to_band_edge_half_mhz;
- __le16 band_oob_rule_selector;
- __le16 pa_voltage;
+ __le16 regulatory_domain;
+ __le16 spare_0;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
__le16 channel_information;
__le16 flags;
u8 mac_addr[ETH_ALEN];
- __le32 reserved1;
- __le32 reserved2;
+ u8 bssid[ETH_ALEN];
+ __le16 aid;
__le16 num_mpdus_per_ampdu;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
} __packed test_bist_get_tx_gain_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_1_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_2_req;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_3_req;
struct {
__le16 vif;
__le32 spare_1;
__le16 result_code;
__le32 freq_offset_cur;
__le32 freq_offset_avg;
- __le32 rssi_cur;
- __le32 rssi_avg;
- __le32 snr_cur;
- __le32 snr_avg;
+ __le16 rssi_cur;
+ __le16 rssi_avg;
+ __le16 rssi_min;
+ __le16 rssi_max;
+ __le16 snr_cur;
+ __le16 snr_avg;
+ __le16 snr_min;
+ __le16 snr_max;
__le32 interval;
__le32 spare_1;
__le32 spare_2;
__le32 spare_3;
u8 dr[0];
} __packed test_bist_get_tx_gain_cfm;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_1_cfm;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_2_cfm;
+ struct {
+ __le16 vif;
+ __le16 result_code;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_3_cfm;
struct {
__le16 vif;
__le16 result_code;
__le32 spare_3;
u8 dr[0];
} __packed test_spare_signal_3_cfm;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_1_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_2_res;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_3_res;
struct {
__le16 vif;
__le32 spare_1;
__le32 spare_3;
u8 dr[0];
} __packed test_hip_tester_report_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_1_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_2_ind;
+ struct {
+ __le16 vif;
+ __le32 spare_1;
+ __le32 spare_2;
+ __le32 spare_3;
+ u8 dr[0];
+ } __packed test_spare_3_ind;
struct {
__le16 vif;
__le32 spare_1;
static inline struct sk_buff *fapi_alloc_f(size_t sig_size, size_t data_size, u16 id, u16 vif, const char *file, int line)
{
- struct sk_buff *skb = slsi_alloc_skb_headroom_f(sig_size + data_size, GFP_ATOMIC, file, line);
+ struct sk_buff *skb = slsi_alloc_skb_f(sig_size + data_size, GFP_ATOMIC, file, line);
struct fapi_vif_signal_header *header;
WARN_ON(sig_size < sizeof(struct fapi_signal_header));
#define fapi_get_buff(mp_skb, mp_name) (((struct fapi_signal *)(mp_skb)->data)->mp_name)
#define fapi_get_u16(mp_skb, mp_name) le16_to_cpu(((struct fapi_signal *)(mp_skb)->data)->mp_name)
#define fapi_get_u32(mp_skb, mp_name) le32_to_cpu(((struct fapi_signal *)(mp_skb)->data)->mp_name)
+/*todo*/
#define fapi_get_u64(mp_skb, mp_name) le64_to_cpu(((struct fapi_signal *)(mp_skb)->data)->mp_name)
#define fapi_set_u16(mp_skb, mp_name, mp_value) (((struct fapi_signal *)(mp_skb)->data)->mp_name = cpu_to_le16(mp_value))
#define fapi_set_u32(mp_skb, mp_name, mp_value) (((struct fapi_signal *)(mp_skb)->data)->mp_name = cpu_to_le32(mp_value))
{
static const u16 fapi_ma_req_size_table[] = {
fapi_sig_size(ma_unitdata_req),
- fapi_sig_size(ma_control_req),
+ 0,
+ fapi_sig_size(ma_spare_1_req),
+ fapi_sig_size(ma_spare_2_req),
+ fapi_sig_size(ma_spare_3_req),
fapi_sig_size(ma_spare_signal_1_req),
fapi_sig_size(ma_spare_signal_2_req),
fapi_sig_size(ma_spare_signal_3_req),
fapi_sig_size(mlme_monitor_rssi_req),
fapi_sig_size(mlme_start_link_statistics_req),
fapi_sig_size(mlme_stop_link_statistics_req),
- fapi_sig_size(mlme_set_bssid_hotlist_req),
+ 0,
fapi_sig_size(mlme_set_pno_list_req),
fapi_sig_size(mlme_host_state_req),
fapi_sig_size(mlme_add_range_req),
fapi_sig_size(mlme_nan_publish_req),
fapi_sig_size(mlme_nan_subscribe_req),
fapi_sig_size(mlme_nan_followup_req),
+ fapi_sig_size(mlme_unset_channel_req),
+ fapi_sig_size(mlme_set_country_req),
+ fapi_sig_size(mlme_forward_beacon_req),
+ fapi_sig_size(mlme_ndp_setup_req),
+ fapi_sig_size(mlme_ndp_setup_response_req),
+ fapi_sig_size(mlme_ndp_terminate_req),
+ fapi_sig_size(mlme_nan_add_range_req),
+ fapi_sig_size(mlme_nan_del_range_req),
+ fapi_sig_size(mlme_spare_4_req),
+ fapi_sig_size(mlme_spare_5_req),
+ fapi_sig_size(mlme_spare_6_req),
+ fapi_sig_size(mlme_install_apf_req),
+ fapi_sig_size(mlme_read_apf_req),
+ fapi_sig_size(mlme_set_nss_req),
+ fapi_sig_size(mlme_arp_detect_req),
fapi_sig_size(mlme_spare_signal_1_req),
fapi_sig_size(mlme_spare_signal_2_req),
fapi_sig_size(mlme_spare_signal_3_req),
};
static const u16 fapi_debug_req_size_table[] = {
+ fapi_sig_size(debug_spare_1_req),
+ fapi_sig_size(debug_spare_2_req),
+ fapi_sig_size(debug_spare_3_req),
fapi_sig_size(debug_spare_signal_1_req),
fapi_sig_size(debug_spare_signal_2_req),
fapi_sig_size(debug_spare_signal_3_req),
fapi_sig_size(test_hip_tester_set_params_req),
fapi_sig_size(test_hip_tester_report_req),
fapi_sig_size(test_bist_get_tx_gain_req),
+ fapi_sig_size(test_spare_1_req),
+ fapi_sig_size(test_spare_2_req),
+ fapi_sig_size(test_spare_3_req),
fapi_sig_size(test_spare_signal_1_req),
fapi_sig_size(test_spare_signal_2_req),
fapi_sig_size(test_spare_signal_3_req),
static const u16 fapi_ma_cfm_size_table[] = {
fapi_sig_size(ma_unitdata_cfm),
- fapi_sig_size(ma_control_cfm),
+ 0,
+ fapi_sig_size(ma_spare_1_cfm),
+ fapi_sig_size(ma_spare_2_cfm),
+ fapi_sig_size(ma_spare_3_cfm),
fapi_sig_size(ma_spare_signal_1_cfm),
fapi_sig_size(ma_spare_signal_2_cfm),
fapi_sig_size(ma_spare_signal_3_cfm),
fapi_sig_size(mlme_monitor_rssi_cfm),
fapi_sig_size(mlme_start_link_statistics_cfm),
fapi_sig_size(mlme_stop_link_statistics_cfm),
- fapi_sig_size(mlme_set_bssid_hotlist_cfm),
+ 0,
fapi_sig_size(mlme_set_pno_list_cfm),
fapi_sig_size(mlme_host_state_cfm),
fapi_sig_size(mlme_add_range_cfm),
fapi_sig_size(mlme_nan_publish_cfm),
fapi_sig_size(mlme_nan_subscribe_cfm),
fapi_sig_size(mlme_nan_followup_cfm),
+ fapi_sig_size(mlme_unset_channel_cfm),
+ fapi_sig_size(mlme_set_country_cfm),
+ fapi_sig_size(mlme_forward_beacon_cfm),
+ fapi_sig_size(mlme_ndp_setup_cfm),
+ fapi_sig_size(mlme_ndp_setup_response_cfm),
+ fapi_sig_size(mlme_ndp_terminate_cfm),
+ fapi_sig_size(mlme_nan_add_range_cfm),
+ fapi_sig_size(mlme_nan_del_range_cfm),
+ fapi_sig_size(mlme_spare_4_cfm),
+ fapi_sig_size(mlme_spare_5_cfm),
+ fapi_sig_size(mlme_spare_6_cfm),
+ fapi_sig_size(mlme_install_apf_cfm),
+ fapi_sig_size(mlme_read_apf_cfm),
+ fapi_sig_size(mlme_set_nss_cfm),
+ fapi_sig_size(mlme_arp_detect_cfm),
fapi_sig_size(mlme_spare_signal_1_cfm),
fapi_sig_size(mlme_spare_signal_2_cfm),
fapi_sig_size(mlme_spare_signal_3_cfm),
};
static const u16 fapi_debug_cfm_size_table[] = {
+ fapi_sig_size(debug_spare_1_cfm),
+ fapi_sig_size(debug_spare_2_cfm),
+ fapi_sig_size(debug_spare_3_cfm),
fapi_sig_size(debug_spare_signal_1_cfm),
fapi_sig_size(debug_spare_signal_2_cfm),
fapi_sig_size(debug_spare_signal_3_cfm),
fapi_sig_size(test_hip_tester_stop_cfm),
fapi_sig_size(test_hip_tester_set_params_cfm),
fapi_sig_size(test_bist_get_tx_gain_cfm),
+ fapi_sig_size(test_spare_1_cfm),
+ fapi_sig_size(test_spare_2_cfm),
+ fapi_sig_size(test_spare_3_cfm),
fapi_sig_size(test_spare_signal_1_cfm),
fapi_sig_size(test_spare_signal_2_cfm),
fapi_sig_size(test_spare_signal_3_cfm),
static const u16 fapi_ma_ind_size_table[] = {
fapi_sig_size(ma_unitdata_ind),
fapi_sig_size(ma_blockack_ind),
+ fapi_sig_size(ma_spare_1_ind),
+ fapi_sig_size(ma_spare_2_ind),
+ fapi_sig_size(ma_spare_3_ind),
fapi_sig_size(ma_spare_signal_1_ind),
fapi_sig_size(ma_spare_signal_2_ind),
fapi_sig_size(ma_spare_signal_3_ind),
fapi_sig_size(mlme_received_frame_ind),
0,
fapi_sig_size(mlme_tdls_peer_ind),
- fapi_sig_size(mlme_ap_loss_ind),
- fapi_sig_size(mlme_significant_change_ind),
+ 0,
+ 0,
fapi_sig_size(mlme_rssi_report_ind),
fapi_sig_size(mlme_ac_priority_update_ind),
fapi_sig_size(mlme_range_ind),
fapi_sig_size(mlme_nan_service_ind),
fapi_sig_size(mlme_nan_followup_ind),
fapi_sig_size(mlme_channel_switched_ind),
+ fapi_sig_size(mlme_synchronised_ind),
+ fapi_sig_size(mlme_beacon_reporting_event_ind),
+ fapi_sig_size(mlme_spare_3_ind),
+ fapi_sig_size(mlme_spare_4_ind),
+ fapi_sig_size(mlme_ndp_setup_ind),
+ fapi_sig_size(mlme_ndp_requested_ind),
+ fapi_sig_size(mlme_ndp_setup_response_ind),
+ fapi_sig_size(mlme_ndp_terminated_ind),
+ fapi_sig_size(mlme_nan_add_range_ind),
+ fapi_sig_size(mlme_spare_5_ind),
fapi_sig_size(mlme_spare_signal_1_ind),
fapi_sig_size(mlme_spare_signal_2_ind),
fapi_sig_size(mlme_spare_signal_3_ind),
static const u16 fapi_debug_ind_size_table[] = {
fapi_sig_size(debug_word12_ind),
fapi_sig_size(debug_fault_ind),
+ fapi_sig_size(debug_words_ind),
+ fapi_sig_size(debug_spare_2_ind),
+ fapi_sig_size(debug_spare_3_ind),
+ fapi_sig_size(debug_spare_4_ind),
fapi_sig_size(debug_spare_signal_1_ind),
fapi_sig_size(debug_spare_signal_2_ind),
fapi_sig_size(debug_spare_signal_3_ind),
fapi_sig_size(debug_pkt_sink_report_ind),
fapi_sig_size(debug_pkt_gen_report_ind),
fapi_sig_size(test_hip_tester_report_ind),
+ fapi_sig_size(test_spare_1_ind),
+ fapi_sig_size(test_spare_2_ind),
+ fapi_sig_size(test_spare_3_ind),
fapi_sig_size(test_spare_signal_1_ind),
fapi_sig_size(test_spare_signal_2_ind),
fapi_sig_size(test_spare_signal_3_ind),
fapi_sig_size(mlme_reassociate_res),
fapi_sig_size(mlme_roamed_res),
fapi_sig_size(mlme_tdls_peer_res),
+ fapi_sig_size(mlme_synchronised_res),
+ fapi_sig_size(mlme_spare_2_res),
+ fapi_sig_size(mlme_spare_3_res),
+ fapi_sig_size(mlme_spare_4_res),
fapi_sig_size(mlme_spare_signal_1_res),
fapi_sig_size(mlme_spare_signal_2_res),
fapi_sig_size(mlme_spare_signal_3_res),
};
static const u16 fapi_ma_res_size_table[] = {
+ fapi_sig_size(ma_spare_1_res),
+ fapi_sig_size(ma_spare_2_res),
+ fapi_sig_size(ma_spare_3_res),
fapi_sig_size(ma_spare_signal_1_res),
fapi_sig_size(ma_spare_signal_2_res),
fapi_sig_size(ma_spare_signal_3_res),
};
static const u16 fapi_debug_res_size_table[] = {
+ fapi_sig_size(debug_spare_1_res),
+ fapi_sig_size(debug_spare_2_res),
+ fapi_sig_size(debug_spare_3_res),
fapi_sig_size(debug_spare_signal_1_res),
fapi_sig_size(debug_spare_signal_2_res),
fapi_sig_size(debug_spare_signal_3_res),
};
static const u16 fapi_test_res_size_table[] = {
+ fapi_sig_size(test_spare_1_res),
+ fapi_sig_size(test_spare_2_res),
+ fapi_sig_size(test_spare_3_res),
fapi_sig_size(test_spare_signal_1_res),
fapi_sig_size(test_spare_signal_2_res),
fapi_sig_size(test_spare_signal_3_res),
#define SLSI_SCAN_CHANNEL_DESCRIPTOR_SIZE 3
#define SLSI_CHANN_INFO_HT_SCB 0x0100
-#ifdef CONFIG_SCSC_WLAN_GSCAN_ENABLE
-#define SLSI_FW_MAX_BSSID_PER_TRACKING_IE (20)
-#define SLSI_FW_BSSID_DESCRIPTOR_BSS_SIZE (10)
-#endif
-
#define SLSI_NOA_CONFIG_REQUEST_ID (1)
#define SLSI_MLME_ARP_DROP_FREE_SLOTS_COUNT 16
return r;
}
-int slsi_mlme_spare_signal_1(struct slsi_dev *sdev, struct net_device *dev)
+int slsi_mlme_unset_channel_req(struct slsi_dev *sdev, struct net_device *dev)
{
struct netdev_vif *ndev_vif = netdev_priv(dev);
struct sk_buff *req;
struct sk_buff *cfm;
int r = 0;
- SLSI_NET_DBG3(dev, SLSI_MLME, "slsi_mlme_spare_signal_1\n");
+ SLSI_NET_DBG3(dev, SLSI_MLME, "slsi_mlme_unset_channel_req\n");
- req = fapi_alloc(mlme_spare_signal_1_req, MLME_SPARE_SIGNAL_1_REQ, ndev_vif->ifnum, 0);
+ req = fapi_alloc(mlme_unset_channel_req, MLME_UNSET_CHANNEL_REQ, ndev_vif->ifnum, 0);
if (!req)
return -ENOMEM;
- cfm = slsi_mlme_req_cfm(sdev, dev, req, MLME_SPARE_SIGNAL_1_CFM);
+ cfm = slsi_mlme_req_cfm(sdev, dev, req, MLME_UNSET_CHANNEL_CFM);
if (!cfm)
return -EIO;
- if (fapi_get_u16(cfm, u.mlme_set_channel_cfm.result_code) != FAPI_RESULTCODE_SUCCESS) {
- SLSI_NET_ERR(dev, "mlme_spare_channel_cfm(result:0x%04x) ERROR\n",
- fapi_get_u16(cfm, u.mlme_set_channel_cfm.result_code));
+ if (fapi_get_u16(cfm, u.mlme_unset_channel_cfm.result_code) != FAPI_RESULTCODE_SUCCESS) {
+ SLSI_NET_ERR(dev, "mlme_unset_channel_cfm(result:0x%04x) ERROR\n",
+ fapi_get_u16(cfm, u.mlme_unset_channel_cfm.result_code));
r = -EINVAL;
}
}
#ifdef CONFIG_SCSC_WLAN_GSCAN_ENABLE
-int slsi_mlme_set_bssid_hotlist_req(struct slsi_dev *sdev, struct net_device *dev, struct slsi_nl_hotlist_param *nl_hotlist_param)
-{
- struct sk_buff *req;
- struct sk_buff *cfm;
- int i;
- int num_desc;
- int alloc_data_size;
- int remaining_ap;
- u8 bssid_desc[] = { 0xdd, /* Element ID */
- 0x00, /* Length */
- 0x00, 0x16, 0x32, /* Samsung OUI */
- 0x01, /* OUI Type: Scan Parameters */
- 0x05, /* OUI Subtype: BSSID Descriptor */
- 0x00, /* AP Lost Threshold */
- };
-
- if (nl_hotlist_param) {
- /* One BSSID descriptor can contain SLSI_GSCAN_MAX_BSSID_PER_IE AP information */
- num_desc = (nl_hotlist_param->num_bssid / SLSI_GSCAN_MAX_BSSID_PER_IE);
- if (nl_hotlist_param->num_bssid % SLSI_GSCAN_MAX_BSSID_PER_IE)
- num_desc++;
-
- alloc_data_size = (num_desc * sizeof(bssid_desc)) + (nl_hotlist_param->num_bssid * SLSI_FW_BSSID_DESCRIPTOR_BSS_SIZE);
- req = fapi_alloc(mlme_set_bssid_hotlist_req, MLME_SET_BSSID_HOTLIST_REQ, 0, alloc_data_size);
- if (!req) {
- SLSI_NET_ERR(dev, "Failed to allocate memory\n");
- return -ENOMEM;
- }
-
- remaining_ap = nl_hotlist_param->num_bssid;
- bssid_desc[7] = nl_hotlist_param->lost_ap_sample_size;
- for (i = 0; i < nl_hotlist_param->num_bssid; i++) {
- if ((i % SLSI_GSCAN_MAX_BSSID_PER_IE) == 0) {
- if (remaining_ap > SLSI_GSCAN_MAX_BSSID_PER_IE) {
- bssid_desc[1] = sizeof(bssid_desc) - 2 + (SLSI_GSCAN_MAX_BSSID_PER_IE * SLSI_FW_BSSID_DESCRIPTOR_BSS_SIZE); /* Length */
- remaining_ap -= SLSI_GSCAN_MAX_BSSID_PER_IE;
- } else {
- bssid_desc[1] = sizeof(bssid_desc) - 2 + (remaining_ap * SLSI_FW_BSSID_DESCRIPTOR_BSS_SIZE); /* Length */
- }
-
- fapi_append_data(req, bssid_desc, sizeof(bssid_desc));
- }
-
- fapi_append_data(req, (u8 *)&nl_hotlist_param->ap[i].bssid[0], ETH_ALEN);
-
- nl_hotlist_param->ap[i].low = cpu_to_le16(nl_hotlist_param->ap[i].low);
- fapi_append_data(req, (u8 *)&nl_hotlist_param->ap[i].low, 2);
-
- nl_hotlist_param->ap[i].high = cpu_to_le16(nl_hotlist_param->ap[i].high);
- fapi_append_data(req, (u8 *)&nl_hotlist_param->ap[i].high, 2);
- }
- } else {
- req = fapi_alloc(mlme_set_bssid_hotlist_req, MLME_SET_BSSID_HOTLIST_REQ, 0, 0);
- if (!req) {
- SLSI_NET_ERR(dev, "Failed to allocate memory\n");
- return -ENOMEM;
- }
- }
-
- cfm = slsi_mlme_req_cfm(sdev, NULL, req, MLME_SET_BSSID_HOTLIST_CFM);
- if (!cfm)
- return -EIO;
-
- SLSI_DBG2(sdev, SLSI_GSCAN, "mlme_set_bssid_hotlist_cfm(datalen:%u)\n", fapi_get_datalen(cfm));
- if (fapi_get_u16(cfm, u.mlme_set_bssid_hotlist_cfm.result_code) != FAPI_RESULTCODE_SUCCESS) {
- SLSI_NET_ERR(dev, "mlme_set_bssid_hotlist_cfm(result:0x%04x) ERROR\n",
- fapi_get_u16(cfm, u.mlme_set_bssid_hotlist_cfm.result_code));
- slsi_kfree_skb(cfm);
- return -EINVAL;
- }
-
- slsi_kfree_skb(cfm);
- return 0;
-}
-
int slsi_mlme_append_gscan_channel_list(struct slsi_dev *sdev,
struct net_device *dev,
struct sk_buff *req,
struct sk_buff *req;
struct sk_buff *cfm;
if (ndev_vif->activated) {
- SLSI_NET_DBG3(dev, SLSI_MLME, "MLME_SPARE_SIGNAL_1_RES\n");
+ SLSI_NET_DBG3(dev, SLSI_MLME, "MLME_SYNCHRONISED_RES\n");
- req = fapi_alloc(mlme_spare_signal_1_res, MLME_SPARE_SIGNAL_1_RES, ndev_vif->ifnum, 0);
+ req = fapi_alloc(mlme_synchronised_res, MLME_SYNCHRONISED_RES, ndev_vif->ifnum, 0);
if (!req)
return -ENOMEM;
- fapi_set_low16_u32(req, u.mlme_spare_signal_1_res.spare_1, params->status);
- fapi_set_high16_u32(req, u.mlme_spare_signal_1_res.spare_1, *(u16 *)(¶ms->bssid[0]));
- fapi_set_u32(req, u.mlme_spare_signal_1_res.spare_2, *(u32 *)(¶ms->bssid[2]));
+ fapi_set_u16(req, u.mlme_synchronised_res.result_code, params->status);
+ fapi_set_memcpy(req, u.mlme_synchronised_res.bssid, params->bssid);
SLSI_NET_DBG2(dev, SLSI_MLME, "mlme_synchronised_response(vif:%d) status:%d\n",
ndev_vif->ifnum, params->status);
cfm = slsi_mlme_req_no_cfm(sdev, dev, req);
if (cfm)
- SLSI_NET_ERR(dev, "Received cfm for MLME_SPARE_SIGNAL_1_RES\n");
+ SLSI_NET_ERR(dev, "Received cfm for MLME_SYNCHRONISED_RES\n");
} else
SLSI_NET_DBG1(dev, SLSI_MLME, "vif is not active");
WARN_ON(cfm);
}
-#ifdef CONFIG_SCSC_WLAN_GSCAN_ENABLE
-int slsi_mlme_gscan_append_tracking_channels(struct slsi_dev *sdev,
- struct net_device *dev,
- struct sk_buff *skb,
- struct slsi_gscan *gscan)
-{
- u32 n_channels = 0;
- int len = 0;
-
- if (gscan->nl_bucket.band == WIFI_BAND_UNSPECIFIED)
- n_channels = gscan->nl_bucket.num_channels;
- else
- n_channels = 1;
-
- SLSI_DBG3(sdev, SLSI_GSCAN, "num chan: %d", n_channels);
- if (skb) {
- int r = slsi_mlme_append_gscan_channel_list(sdev, dev, skb, &gscan->nl_bucket);
-
- if (r) {
- SLSI_ERR(sdev, "Error appending channel list [%d]\n", r);
- return r;
- }
- } else {
- len = SLSI_SCAN_PRIVATE_IE_CHANNEL_LIST_HEADER_LEN + (n_channels * SLSI_SCAN_CHANNEL_DESCRIPTOR_SIZE);
- }
- return len;
-}
-
-int slsi_mlme_significant_change_set(struct slsi_dev *sdev, struct net_device *dev,
- struct slsi_nl_significant_change_params *significant_param_ptr)
-{
- struct sk_buff *req;
- struct sk_buff *rx;
- int r = 0;
- size_t alloc_data_size;
- u32 i, j;
- u32 num_bssid_descriptor_ies;
- struct slsi_gscan *gscan = sdev->gscan;
-
- u8 scan_timing_ie[] = {
- 0xdd, /* Element ID: Vendor Specific */
- 0x11, /* Length */
- 0x00, 0x16, 0x32, /* OUI: Samsung Electronics Co. */
- 0x01, /* OUI Type: Scan parameters */
- 0x01, /* OUI Subtype: Scan timing */
- 0x00, 0x00, 0x00, 0x00, /* Min_Period: filled later in the function */
- 0x00, 0x00, 0x00, 0x00, /* Max_Period: filled later in the function */
- 0x00, /* Exponent */
- 0x00, /* Step count */
- 0x00, 0x00 /* Skip first period: false */
- };
-
- u8 change_tracking_ie[] = { /* wifi change tracking ie*/
- 0xdd, 0x07, /* VENDOR_SPECIFIC, LEN */
- 0x00, 0x16, 0x32, /* OUI */
- 0x01, 0x06, /* OUI Type, OUI sub-type */
- 0x00, /* The number of samples needed for averaging RSSI */
- 0x00 /* Min num of APs breaching low_RSSI_Threshold that are needed before informing the host */
- };
-
- u8 bssid_descriptor_ie[] = { /* Bssid descriptor list ie*/
- 0xdd, 6 + (SLSI_FW_MAX_BSSID_PER_TRACKING_IE * SLSI_FW_BSSID_DESCRIPTOR_BSS_SIZE), /* VENDOR_SPECIFIC, LEN(update later) */
- 0x00, 0x16, 0x32, /* OUI */
- 0x01, 0x05, /* OUI Type, OUI sub-type */
- 0x00, /* ap lost threshold */
- };
-
- if (slsi_is_test_mode_enabled()) {
- SLSI_NET_INFO(dev, "Skip sending signal, WlanLite FW does not support MLME_ADD_SCAN.request\n");
- return -EOPNOTSUPP;
- }
-
- if (WARN_ON(!(dev->dev_addr)))
- return -EINVAL;
-
- change_tracking_ie[7] = (u8)significant_param_ptr->rssi_sample_size;
- change_tracking_ie[8] = (u8)significant_param_ptr->min_breaching;
- num_bssid_descriptor_ies = significant_param_ptr->num_bssid / SLSI_FW_MAX_BSSID_PER_TRACKING_IE;
- if (significant_param_ptr->num_bssid % SLSI_FW_MAX_BSSID_PER_TRACKING_IE)
- num_bssid_descriptor_ies++;
-
- alloc_data_size = sizeof(scan_timing_ie) + sizeof(change_tracking_ie)
- + sizeof(bssid_descriptor_ie) * num_bssid_descriptor_ies
- + SLSI_FW_BSSID_DESCRIPTOR_BSS_SIZE * significant_param_ptr->num_bssid
- + slsi_mlme_gscan_append_tracking_channels(sdev, dev, NULL, gscan);
-
- req = fapi_alloc(mlme_add_scan_req, MLME_ADD_SCAN_REQ, 0, alloc_data_size);
- if (!req)
- return -ENOMEM;
-
- fapi_set_u16(req, u.mlme_add_scan_req.scan_id, gscan->bucket[0]->scan_id);
- fapi_set_u16(req, u.mlme_add_scan_req.scan_type, FAPI_SCANTYPE_GSCAN);
- fapi_set_memcpy(req, u.mlme_add_scan_req.device_address, dev->dev_addr);
- fapi_set_u16(req, u.mlme_add_scan_req.report_mode_bitmap, FAPI_REPORTMODE_REAL_TIME);
-
- r = slsi_mlme_gscan_append_tracking_channels(sdev, dev, req, gscan);
- if (r != 0) {
- slsi_kfree_skb(req);
- return r;
- }
-
- SLSI_U32_TO_BUFF_LE((gscan->nl_bucket.period * 1000), &scan_timing_ie[7]);
- fapi_append_data(req, scan_timing_ie, sizeof(scan_timing_ie));
- fapi_append_data(req, change_tracking_ie, sizeof(change_tracking_ie));
-
- bssid_descriptor_ie[7] = significant_param_ptr->lost_ap_sample_size;
- for (i = 0; i < num_bssid_descriptor_ies; i++) {
- u8 bss_num = significant_param_ptr->num_bssid - (i * SLSI_FW_MAX_BSSID_PER_TRACKING_IE);
-
- if (bss_num < SLSI_FW_MAX_BSSID_PER_TRACKING_IE)
- bssid_descriptor_ie[1] = 6 + (SLSI_FW_BSSID_DESCRIPTOR_BSS_SIZE * bss_num);
- else
- bss_num = SLSI_FW_MAX_BSSID_PER_TRACKING_IE;
-
- fapi_append_data(req, bssid_descriptor_ie, sizeof(bssid_descriptor_ie));
- for (j = i * SLSI_FW_MAX_BSSID_PER_TRACKING_IE; j < (i * SLSI_FW_MAX_BSSID_PER_TRACKING_IE + bss_num); j++) {
- fapi_append_data(req, significant_param_ptr->ap[j].bssid, ETH_ALEN);
- fapi_append_data(req, (u8 *)&significant_param_ptr->ap[j].low, 2);
- fapi_append_data(req, (u8 *)&significant_param_ptr->ap[j].high, 2);
- }
- }
-
- /* Use the Global sig_wait not the Interface specific for Scan Req */
- rx = slsi_mlme_req_cfm(sdev, NULL, req, MLME_ADD_SCAN_CFM);
- if (!rx) {
- gscan->bucket[0]->for_change_tracking = false;
- return -EIO;
- } else if (fapi_get_u16(rx, u.mlme_add_scan_cfm.result_code) != FAPI_RESULTCODE_SUCCESS) {
- gscan->bucket[0]->for_change_tracking = false;
- SLSI_NET_ERR(dev, "mlme_add_scan_cfm(ERROR:0x%04x)", fapi_get_u16(rx, u.mlme_add_scan_cfm.result_code));
- r = -EINVAL;
- } else {
- gscan->bucket[0]->for_change_tracking = true;
- }
- slsi_kfree_skb(rx);
-
- return r;
-}
-
int slsi_mlme_add_range_req(struct slsi_dev *sdev, u8 count,
- struct slsi_rtt_config *nl_rtt_params, u16 rtt_id, u16 vif_idx)
+ struct slsi_rtt_config *nl_rtt_params, u16 rtt_id, u16 vif_idx, u8 *source_addr)
{
struct sk_buff *req;
struct sk_buff *rx;
int r = 0, i;
size_t alloc_data_size = 0;
- u8 fapi_ie_generic[] = { 0xdd, 0x24, 0x00, 0x16, 0x32, 0x0a, 0x01 };
+ u8 fapi_ie_generic[] = { 0xdd, 0x1c, 0x00, 0x16, 0x32, 0x0a, 0x01 };
/* calculate data size */
alloc_data_size += count * (fapi_ie_generic[1] + 2);
SLSI_ERR(sdev, "failed to alloc %zd\n", alloc_data_size);
return -ENOMEM;
}
- SLSI_DBG2(sdev, SLSI_MLME, "count-->%d allocated data size: %d\n", count, alloc_data_size);
+ SLSI_DBG2(sdev, SLSI_MLME, "count:%d allocated data size: %d, source_addr:%pM\n",
+ count, alloc_data_size, source_addr);
/*fill the data */
fapi_set_u16(req, u.mlme_add_range_req.vif, vif_idx);
fapi_set_u16(req, u.mlme_add_range_req.rtt_id, rtt_id);
+ fapi_set_memcpy(req, u.mlme_add_range_req.device_address, source_addr);
for (i = 0; i < count; i++) {
fapi_append_data(req, fapi_ie_generic, sizeof(fapi_ie_generic));
- fapi_append_data(req, nl_rtt_params[i].source_addr, ETH_ALEN);
fapi_append_data(req, nl_rtt_params[i].peer_addr, ETH_ALEN);
fapi_append_data(req, (u8 *)&nl_rtt_params[i].type, 2);
fapi_append_data(req, (u8 *)&nl_rtt_params[i].channel_freq, 2);
- fapi_append_data(req, (u8 *)&nl_rtt_params[i].channel_info, 2);
fapi_append_data(req, (u8 *)&nl_rtt_params[i].burst_period, 1);
fapi_append_data(req, (u8 *)&nl_rtt_params[i].num_burst, 1);
fapi_append_data(req, (u8 *)&nl_rtt_params[i].num_frames_per_burst, 1);
return r;
}
+#ifdef CONFIG_SCSC_WLAN_GSCAN_ENABLE
#define SLSI_FAPI_EPNO_NETWORK_MIN_SIZE (3)
int slsi_mlme_set_pno_list(struct slsi_dev *sdev, int count,
struct slsi_epno_param *epno_param, struct slsi_epno_hs2_param *epno_hs2_param)
char *slsi_print_event_name(int event_id)
{
switch (event_id) {
- case SLSI_NL80211_SIGNIFICANT_CHANGE_EVENT:
- return "SIGNIFICANT_CHANGE_EVENT";
- case SLSI_NL80211_HOTLIST_AP_FOUND_EVENT:
- return "HOTLIST_AP_FOUND_EVENT";
case SLSI_NL80211_SCAN_RESULTS_AVAILABLE_EVENT:
return "SCAN_RESULTS_AVAILABLE_EVENT";
case SLSI_NL80211_FULL_SCAN_RESULT_EVENT:
return "FULL_SCAN_RESULT_EVENT";
case SLSI_NL80211_SCAN_EVENT:
return "BUCKET_SCAN_DONE_EVENT";
- case SLSI_NL80211_HOTLIST_AP_LOST_EVENT:
- return "HOTLIST_AP_LOST_EVENT";
#ifdef CONFIG_SCSC_WLAN_KEY_MGMT_OFFLOAD
case SLSI_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH:
return "KEY_MGMT_ROAM_AUTH";
}
}
-static void slsi_gscan_set_hotlist_dump_params(struct slsi_nl_hotlist_param *nl_hotlist_param)
-{
- int i;
-
- SLSI_DBG2_NODEV(SLSI_GSCAN, "Parameters for SUBCMD_SET_BSSID_HOTLIST sub-command:\n");
- SLSI_DBG2_NODEV(SLSI_GSCAN, "lost_ap_sample_size: %d, num_bssid: %d\n",
- nl_hotlist_param->lost_ap_sample_size, nl_hotlist_param->num_bssid);
-
- for (i = 0; i < nl_hotlist_param->num_bssid; i++) {
- SLSI_DBG2_NODEV(SLSI_GSCAN, "AP[%d]\n", i);
- SLSI_DBG2_NODEV(SLSI_GSCAN, "\tBSSID:%pM rssi_low:%d rssi_high:%d\n",
- nl_hotlist_param->ap[i].bssid, nl_hotlist_param->ap[i].low, nl_hotlist_param->ap[i].high);
- }
-}
-
void slsi_gscan_scan_res_dump(struct slsi_gscan_result *scan_data)
{
struct slsi_nl_scan_result_param *nl_scan_res = &scan_data->nl_scan_res;
return scan_res;
}
-void slsi_hotlist_ap_lost_indication(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb)
-{
- struct slsi_nl_scan_result_param *nl_scan_res;
- struct slsi_hotlist_result *hotlist, *temp;
- struct netdev_vif *ndev_vif = netdev_priv(dev);
- u8 *mac_addr;
- u16 num_entries;
- int mem_reqd;
- bool found = false;
- int offset = 0;
- int i;
-
- if (!ndev_vif) {
- SLSI_WARN_NODEV("ndev_vif is NULL\n");
- slsi_kfree_skb(skb);
- return;
- }
-
- SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
-
- num_entries = fapi_get_s16(skb, u.mlme_ap_loss_ind.entries);
- mac_addr = fapi_get_data(skb);
-
- SLSI_NET_DBG1(dev, SLSI_GSCAN, "Hotlist AP Lost Indication: num_entries %d\n", num_entries);
-
- mem_reqd = num_entries * sizeof(struct slsi_nl_scan_result_param);
- nl_scan_res = kmalloc(mem_reqd, GFP_KERNEL);
- if (nl_scan_res == NULL) {
- SLSI_NET_ERR(dev, "Failed to allocate memory for hotlist lost\n");
- goto out;
- }
-
- for (i = 0; i < num_entries; i++) {
- SLSI_NET_DBG3(dev, SLSI_GSCAN,
- "Remove the GSCAN results for the lost AP: %pM\n", &mac_addr[ETH_ALEN * i]);
- slsi_gscan_hash_remove(sdev, &mac_addr[ETH_ALEN * i]);
-
- list_for_each_entry_safe(hotlist, temp, &sdev->hotlist_results, list) {
- if (memcmp(hotlist->nl_scan_res.bssid, &mac_addr[ETH_ALEN * i], ETH_ALEN) == 0) {
- SLSI_NET_DBG2(dev, SLSI_GSCAN, "Lost AP [%d]: %pM\n", i, &mac_addr[ETH_ALEN * i]);
- list_del(&hotlist->list);
-
- hotlist->nl_scan_res.ie_length = 0; /* Not sending the IE for hotlist lost event */
- memcpy(&nl_scan_res[offset], &hotlist->nl_scan_res, sizeof(struct slsi_nl_scan_result_param));
- offset++;
-
- kfree(hotlist);
- found = true;
- break;
- }
- }
-
- if (!found)
- SLSI_NET_ERR(dev, "Hostlist record is not available in scan result\n");
-
- found = false;
- }
-
- slsi_vendor_event(sdev, SLSI_NL80211_HOTLIST_AP_LOST_EVENT,
- nl_scan_res, (offset * sizeof(struct slsi_nl_scan_result_param)));
-
- kfree(nl_scan_res);
-out:
- slsi_kfree_skb(skb);
- SLSI_MUTEX_UNLOCK(ndev_vif->scan_mutex);
-}
-
-void slsi_hotlist_ap_found_indication(struct slsi_dev *sdev, struct net_device *dev, struct slsi_gscan_result *scan_res)
-{
- struct slsi_hotlist_result *hotlist, *temp;
- int num_hotlist_results = 0;
- struct netdev_vif *ndev_vif = netdev_priv(dev);
- int mem_reqd;
- u8 *event_buffer;
- int offset;
-
- if (!ndev_vif) {
- SLSI_WARN_NODEV("ndev_vif is NULL\n");
- return;
- }
-
- if (!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex))
- SLSI_WARN_NODEV("ndev_vif->scan_mutex is not locked\n");
-
- SLSI_NET_DBG1(dev, SLSI_GSCAN, "Hotlist AP Found Indication: %pM\n", scan_res->nl_scan_res.bssid);
-
- /* Check if the hotlist result is already available */
- list_for_each_entry_safe(hotlist, temp, &sdev->hotlist_results, list) {
- if (memcmp(hotlist->nl_scan_res.bssid, scan_res->nl_scan_res.bssid, ETH_ALEN) == 0) {
- SLSI_DBG3(sdev, SLSI_GSCAN, "Hotlist result already available for: %pM\n", scan_res->nl_scan_res.bssid);
- /* Delete the old result - store the new result */
- list_del(&hotlist->list);
- kfree(hotlist);
- break;
- }
- }
-
- /* Allocating memory for storing the hostlist result */
- mem_reqd = scan_res->scan_res_len + (sizeof(struct slsi_hotlist_result) - sizeof(struct slsi_nl_scan_result_param));
- SLSI_DBG3(sdev, SLSI_GSCAN, "hotlist result alloc size: %d\n", mem_reqd);
- hotlist = kmalloc(mem_reqd, GFP_KERNEL);
- if (hotlist == NULL) {
- SLSI_ERR(sdev, "Failed to allocate memory for hotlist\n");
- return;
- }
-
- hotlist->scan_res_len = scan_res->scan_res_len;
- memcpy(&hotlist->nl_scan_res, &scan_res->nl_scan_res, scan_res->scan_res_len);
-
- INIT_LIST_HEAD(&hotlist->list);
- list_add(&hotlist->list, &sdev->hotlist_results);
-
- /* Calculate the number of hostlist results and mem required */
- mem_reqd = 0;
- offset = 0;
- list_for_each_entry_safe(hotlist, temp, &sdev->hotlist_results, list) {
- mem_reqd += sizeof(struct slsi_nl_scan_result_param); /* If IE required use: hotlist->scan_res_len */
- num_hotlist_results++;
- }
- SLSI_DBG3(sdev, SLSI_GSCAN, "num_hotlist_results = %d, mem_reqd = %d\n", num_hotlist_results, mem_reqd);
-
- /* Allocate event buffer */
- event_buffer = kmalloc(mem_reqd, GFP_KERNEL);
- if (event_buffer == NULL) {
- SLSI_ERR_NODEV("Failed to allocate memory for event_buffer\n");
- return;
- }
-
- /* Prepare the event buffer */
- list_for_each_entry_safe(hotlist, temp, &sdev->hotlist_results, list) {
- memcpy(&event_buffer[offset], &hotlist->nl_scan_res, sizeof(struct slsi_nl_scan_result_param));
- offset += sizeof(struct slsi_nl_scan_result_param); /* If IE required use: hotlist->scan_res_len */
- }
-
- slsi_vendor_event(sdev, SLSI_NL80211_HOTLIST_AP_FOUND_EVENT, event_buffer, offset);
-
- kfree(event_buffer);
-}
-
static void slsi_gscan_hash_add(struct slsi_dev *sdev, struct slsi_gscan_result *scan_res)
{
u8 key = SLSI_GSCAN_GET_HASH_KEY(scan_res->nl_scan_res.bssid[5]);
goto out;
}
- /* Check for hotlist AP or ePNO networks */
- if (fapi_get_u16(skb, u.mlme_scan_ind.hotlisted_ap)) {
- slsi_hotlist_ap_found_indication(sdev, dev, scan_res);
- } else if (fapi_get_u16(skb, u.mlme_scan_ind.preferrednetwork_ap)) {
+ /* Check for ePNO networks */
+ if (fapi_get_u16(skb, u.mlme_scan_ind.preferrednetwork_ap)) {
if (anqp_length == 0)
slsi_vendor_event(sdev, SLSI_NL80211_EPNO_EVENT,
&scan_res->nl_scan_res, scan_res->scan_res_len);
SLSI_MUTEX_UNLOCK(ndev_vif->scan_mutex);
}
-void slsi_gscan_flush_hotlist_results(struct slsi_dev *sdev)
-{
- struct slsi_hotlist_result *hotlist, *temp;
- struct netdev_vif *ndev_vif;
-
- ndev_vif = slsi_gscan_get_vif(sdev);
- if (!ndev_vif) {
- SLSI_WARN_NODEV("ndev_vif is NULL\n");
- return;
- }
-
- SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
-
- list_for_each_entry_safe(hotlist, temp, &sdev->hotlist_results, list) {
- list_del(&hotlist->list);
- kfree(hotlist);
- }
-
- INIT_LIST_HEAD(&sdev->hotlist_results);
-
- SLSI_MUTEX_UNLOCK(ndev_vif->scan_mutex);
-}
-
static int slsi_gscan_add_mlme(struct slsi_dev *sdev, struct slsi_nl_gscan_param *nl_gscan_param, struct slsi_gscan *gscan)
{
struct slsi_gscan_param gscan_param;
if (gscan_param.bucket->report_events & SLSI_REPORT_EVENTS_NO_BATCH)
report_mode |= FAPI_REPORTMODE_NO_BATCH;
} else {
- report_mode = FAPI_REPORTMODE_BUFFER_FULL;
+ report_mode = FAPI_REPORTMODE_RESERVED;
}
if (report_mode == 0) {
return ret;
}
-static int slsi_gscan_set_hotlist_read_params(struct slsi_nl_hotlist_param *nl_hotlist_param, const void *data, int len)
-{
- int tmp, tmp1, tmp2, type, j = 0;
- const struct nlattr *outer, *inner, *iter;
- struct slsi_nl_ap_threshold_param *nl_ap;
- int flush;
-
- nla_for_each_attr(iter, data, len, tmp2) {
- type = nla_type(iter);
- switch (type) {
- case GSCAN_ATTRIBUTE_HOTLIST_BSSIDS:
- nla_for_each_nested(outer, iter, tmp) {
- nl_ap = &nl_hotlist_param->ap[j];
- nla_for_each_nested(inner, outer, tmp1) {
- type = nla_type(inner);
- switch (type) {
- case GSCAN_ATTRIBUTE_BSSID:
- SLSI_ETHER_COPY(&nl_ap->bssid[0], nla_data(inner));
- break;
- case GSCAN_ATTRIBUTE_RSSI_LOW:
- nl_ap->low = nla_get_s8(inner);
- break;
- case GSCAN_ATTRIBUTE_RSSI_HIGH:
- nl_ap->high = nla_get_s8(inner);
- break;
- default:
- SLSI_ERR_NODEV("Unknown type %d\n", type);
- break;
- }
- }
- j++;
- }
- nl_hotlist_param->num_bssid = j;
- break;
- case GSCAN_ATTRIBUTE_HOTLIST_FLUSH:
- flush = nla_get_u8(iter);
- break;
- case GSCAN_ATTRIBUTE_LOST_AP_SAMPLE_SIZE:
- nl_hotlist_param->lost_ap_sample_size = nla_get_u32(iter);
- break;
- default:
- SLSI_ERR_NODEV("No ATTRIBUTE_HOTLIST - %d\n", type);
- break;
- }
- }
-
- return 0;
-}
-
-static int slsi_gscan_set_hotlist(struct wiphy *wiphy,
- struct wireless_dev *wdev, const void *data, int len)
-{
- struct slsi_dev *sdev = SDEV_FROM_WIPHY(wiphy);
- struct slsi_nl_hotlist_param *nl_hotlist_param;
- struct net_device *dev;
- struct netdev_vif *ndev_vif;
- int ret = 0;
-
- SLSI_DBG1_NODEV(SLSI_GSCAN, "SUBCMD_SET_BSSID_HOTLIST\n");
-
- dev = slsi_gscan_get_netdev(sdev);
- if (!dev) {
- SLSI_WARN_NODEV("dev is NULL\n");
- return -EINVAL;
- }
-
- ndev_vif = netdev_priv(dev);
-
- SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
- /* Allocate memory for the received scan params */
- nl_hotlist_param = kzalloc(sizeof(*nl_hotlist_param), GFP_KERNEL);
- if (nl_hotlist_param == NULL) {
- SLSI_ERR_NODEV("Failed for allocate memory for gscan hotlist_param\n");
- ret = -ENOMEM;
- goto exit;
- }
-
- slsi_gscan_set_hotlist_read_params(nl_hotlist_param, data, len);
-
-#ifdef CONFIG_SCSC_WLAN_DEBUG
- slsi_gscan_set_hotlist_dump_params(nl_hotlist_param);
-#endif
- ret = slsi_mlme_set_bssid_hotlist_req(sdev, dev, nl_hotlist_param);
- if (ret)
- SLSI_ERR_NODEV("Failed to set hostlist\n");
-
- kfree(nl_hotlist_param);
- SLSI_MUTEX_UNLOCK(ndev_vif->scan_mutex);
-exit:
- return ret;
-}
-
-static int slsi_gscan_reset_hotlist(struct wiphy *wiphy,
- struct wireless_dev *wdev, const void *data, int len)
-{
- struct slsi_dev *sdev = SDEV_FROM_WIPHY(wiphy);
- struct net_device *dev;
- int ret = 0;
- struct netdev_vif *ndev_vif;
-
- SLSI_DBG1_NODEV(SLSI_GSCAN, "SUBCMD_RESET_BSSID_HOTLIST\n");
-
- dev = slsi_gscan_get_netdev(sdev);
- if (!dev) {
- SLSI_WARN_NODEV("dev is NULL\n");
- return -EINVAL;
- }
- ndev_vif = netdev_priv(dev);
-
- SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
- ret = slsi_mlme_set_bssid_hotlist_req(sdev, dev, NULL);
- if (ret)
- SLSI_ERR_NODEV("Failed to reset hostlist\n");
-
- SLSI_MUTEX_UNLOCK(ndev_vif->scan_mutex);
-
- slsi_gscan_flush_hotlist_results(sdev);
-
- return ret;
-}
-
-static struct slsi_gscan *slsi_mlme_get_tracking_scan_id(struct slsi_dev *sdev,
- struct slsi_nl_significant_change_params *significant_param_ptr)
-{
- /* If channel hint is not in significant change req, link to previous gscan, else new gscan */
- struct slsi_gscan *ret_gscan;
-
- if (sdev->gscan != NULL) {
- ret_gscan = sdev->gscan;
- SLSI_DBG3(sdev, SLSI_GSCAN, "Existing Scan for tracking\n");
- } else {
- struct slsi_gscan *gscan;
- /* Allocate Memory for the new gscan */
- gscan = kzalloc(sizeof(*gscan), GFP_KERNEL);
- if (gscan == NULL) {
- SLSI_ERR(sdev, "Failed to allocate memory for gscan\n");
- return NULL;
- }
- gscan->num_buckets = 1;
- if (slsi_gscan_alloc_buckets(sdev, gscan, gscan->num_buckets) != 0) {
- SLSI_ERR(sdev, "NO free buckets. Abort tracking\n");
- kfree(gscan);
- return NULL;
- }
- /*Build nl_bucket based on channels in significant_param_ptr->ap array*/
- gscan->nl_bucket.band = WIFI_BAND_UNSPECIFIED;
- gscan->nl_bucket.num_channels = 0;
- gscan->nl_bucket.period = 5 * 1000; /* Default */
- slsi_gscan_add_to_list(&sdev->gscan, gscan);
- ret_gscan = gscan;
- SLSI_DBG3(sdev, SLSI_GSCAN, "New Scan for tracking\n");
- }
- SLSI_DBG3(sdev, SLSI_GSCAN, "tracking channel num:%d\n", ret_gscan->nl_bucket.num_channels);
- return ret_gscan;
-}
-
-static int slsi_gscan_set_significant_change(struct wiphy *wiphy,
- struct wireless_dev *wdev, const void *data, int len)
-{
- int ret = 0;
- struct slsi_dev *sdev = SDEV_FROM_WIPHY(wiphy);
- struct slsi_nl_significant_change_params *significant_change_param;
- u8 bss_count = 0;
- struct slsi_nl_ap_threshold_param *bss_param_ptr;
- int tmp, tmp1, tmp2, type;
- const struct nlattr *outer, *inner, *iter;
- struct net_device *net_dev;
- struct slsi_gscan *gscan;
- struct netdev_vif *ndev_vif;
-
- SLSI_DBG3(sdev, SLSI_GSCAN, "SUBCMD_SET_SIGNIFICANT_CHANGE Received\n");
-
- significant_change_param = kmalloc(sizeof(*significant_change_param), GFP_KERNEL);
- if (!significant_change_param) {
- SLSI_ERR(sdev, "NO mem for significant_change_param\n");
- return -ENOMEM;
- }
- memset(significant_change_param, 0, sizeof(struct slsi_nl_significant_change_params));
- nla_for_each_attr(iter, data, len, tmp2) {
- type = nla_type(iter);
- switch (type) {
- case GSCAN_ATTRIBUTE_RSSI_SAMPLE_SIZE:
- significant_change_param->rssi_sample_size = nla_get_u16(iter);
- SLSI_DBG3(sdev, SLSI_GSCAN, "rssi_sample_size %d\n", significant_change_param->rssi_sample_size);
- break;
- case GSCAN_ATTRIBUTE_LOST_AP_SAMPLE_SIZE:
- significant_change_param->lost_ap_sample_size = nla_get_u16(iter);
- SLSI_DBG3(sdev, SLSI_GSCAN, "lost_ap_sample_size %d\n", significant_change_param->lost_ap_sample_size);
- break;
- case GSCAN_ATTRIBUTE_MIN_BREACHING:
- significant_change_param->min_breaching = nla_get_u16(iter);
- SLSI_DBG3(sdev, SLSI_GSCAN, "min_breaching %d\n", significant_change_param->min_breaching);
- break;
- case GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_BSSIDS:
- nla_for_each_nested(outer, iter, tmp) {
- bss_param_ptr = &significant_change_param->ap[bss_count];
- bss_count++;
- SLSI_DBG3(sdev, SLSI_GSCAN, "bssids[%d]:\n", bss_count);
- if (bss_count == SLSI_GSCAN_MAX_SIGNIFICANT_CHANGE_APS) {
- SLSI_ERR(sdev, "Can support max:%d aps. Skipping excess\n", SLSI_GSCAN_MAX_SIGNIFICANT_CHANGE_APS);
- break;
- }
- nla_for_each_nested(inner, outer, tmp1) {
- switch (nla_type(inner)) {
- case GSCAN_ATTRIBUTE_BSSID:
- SLSI_ETHER_COPY(&bss_param_ptr->bssid[0], nla_data(inner));
- SLSI_DBG3(sdev, SLSI_GSCAN, "\tbssid %pM\n", bss_param_ptr->bssid);
- break;
- case GSCAN_ATTRIBUTE_RSSI_HIGH:
- bss_param_ptr->high = nla_get_s8(inner);
- SLSI_DBG3(sdev, SLSI_GSCAN, "\thigh %d\n", bss_param_ptr->high);
- break;
- case GSCAN_ATTRIBUTE_RSSI_LOW:
- bss_param_ptr->low = nla_get_s8(inner);
- SLSI_DBG3(sdev, SLSI_GSCAN, "\tlow %d\n", bss_param_ptr->low);
- break;
- default:
- SLSI_ERR(sdev, "unknown attribute:%d\n", type);
- break;
- }
- }
- }
- break;
- default:
- SLSI_ERR(sdev, "Unknown type:%d\n", type);
- break;
- }
- }
- significant_change_param->num_bssid = bss_count;
- net_dev = slsi_get_netdev(sdev, SLSI_NET_INDEX_WLAN);
- ndev_vif = netdev_priv(net_dev);
-
- SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
- gscan = slsi_mlme_get_tracking_scan_id(sdev, significant_change_param);
- if (gscan) {
- if (slsi_mlme_significant_change_set(sdev, net_dev, significant_change_param)) {
- SLSI_ERR(sdev, "Could not set GSCAN significant cfg\n");
- ret = -EINVAL;
- }
- } else {
- ret = -ENOMEM;
- }
- SLSI_MUTEX_UNLOCK(ndev_vif->scan_mutex);
- kfree(significant_change_param);
- return ret;
-}
-
-void slsi_rx_significant_change_ind(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb)
-{
- struct netdev_vif *ndev_vif = netdev_priv(dev);
- u32 eventdata_len;
- u16 bssid_count = fapi_get_buff(skb, u.mlme_significant_change_ind.number_of_results);
- u16 rssi_entry_count = fapi_get_buff(skb, u.mlme_significant_change_ind.number_of_rssi_entries);
- u32 i, j;
- u8 *eventdata = NULL;
- u8 *op_ptr, *ip_ptr;
- u16 *le16_ptr;
-
- /* convert fapi buffer to wifi-hal structure
- * fapi buffer: [mac address 6 bytes] [chan_freq 2 bytes]
- * [riis history N*2 bytes]
- * wifi-hal structure
- * typedef struct {
- * uint16_t channel;
- * mac_addr bssid;
- * short rssi_history[8];
- * } ChangeInfo;
- */
-
- SLSI_DBG3(sdev, SLSI_GSCAN, "No BSSIDs:%d\n", bssid_count);
-
- eventdata_len = (8 + (8 * 2)) * bssid_count; /* see wifi-hal structure in above comments */
- eventdata = kmalloc(eventdata_len, GFP_KERNEL);
- if (!eventdata) {
- SLSI_ERR(sdev, "no mem for event data\n");
- slsi_kfree_skb(skb);
- return;
- }
-
- SLSI_MUTEX_LOCK(ndev_vif->vif_mutex);
- op_ptr = eventdata;
- ip_ptr = fapi_get_data(skb);
- for (i = 0; i < bssid_count; i++) {
- le16_ptr = (u16 *)&ip_ptr[6]; /* channel: required unit MHz. received unit 512KHz */
- *(u16 *)op_ptr = le16_to_cpu(*le16_ptr) / 2;
- SLSI_DBG3(sdev, SLSI_GSCAN, "[%d] channel:%d\n", i, *(u16 *)op_ptr);
- op_ptr += 2;
-
- SLSI_ETHER_COPY(op_ptr, ip_ptr); /* mac_addr */
- SLSI_DBG3(sdev, SLSI_GSCAN, "[%d] mac:%pM\n", i, op_ptr);
- op_ptr += ETH_ALEN;
-
- for (j = 0; j < 8; j++) {
- if (j < rssi_entry_count) {
- *op_ptr = ip_ptr[8 + j * 2];
- *(op_ptr + 1) = ip_ptr[9 + j * 2];
- } else {
- s16 invalid_rssi = SLSI_GSCAN_INVALID_RSSI;
- *(u16 *)op_ptr = invalid_rssi;
- }
- op_ptr += 2;
- }
- ip_ptr += 8 + (rssi_entry_count * 2);
- }
- SLSI_DBG_HEX(sdev, SLSI_GSCAN, eventdata, eventdata_len, "significant change event buffer:\n");
- SLSI_DBG_HEX(sdev, SLSI_GSCAN, fapi_get_data(skb), fapi_get_datalen(skb), "significant change skb buffer:\n");
- slsi_vendor_event(sdev, SLSI_NL80211_SIGNIFICANT_CHANGE_EVENT, eventdata, eventdata_len);
- kfree(eventdata);
- slsi_kfree_skb(skb);
- SLSI_MUTEX_UNLOCK(ndev_vif->vif_mutex);
-}
-
void slsi_rx_rssi_report_ind(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb)
{
struct netdev_vif *ndev_vif = netdev_priv(dev);
SLSI_MUTEX_UNLOCK(ndev_vif->vif_mutex);
}
-static int slsi_gscan_reset_significant_change(struct wiphy *wiphy,
- struct wireless_dev *wdev, const void *data, int len)
-{
- struct slsi_dev *sdev = SDEV_FROM_WIPHY(wiphy);
- struct net_device *net_dev;
- struct netdev_vif *ndev_vif;
- struct slsi_bucket *bucket = NULL;
- u32 i;
-
- SLSI_DBG3(sdev, SLSI_GSCAN, "SUBCMD_RESET_SIGNIFICANT_CHANGE Received\n");
-
- net_dev = slsi_get_netdev(sdev, SLSI_NET_INDEX_WLAN);
- ndev_vif = netdev_priv(net_dev);
-
- SLSI_MUTEX_LOCK(ndev_vif->vif_mutex);
- for (i = 0; i < SLSI_GSCAN_MAX_BUCKETS; i++) {
- bucket = &sdev->bucket[i];
- if (!bucket->used || !bucket->for_change_tracking)
- continue;
-
- (void)slsi_mlme_del_scan(sdev, net_dev, bucket->scan_id, false);
- bucket->for_change_tracking = false;
- bucket->used = false;
- SLSI_MUTEX_UNLOCK(ndev_vif->vif_mutex);
- return 0;
- }
- SLSI_DBG3(sdev, SLSI_GSCAN, "Significant change scan not found\n");
- SLSI_MUTEX_UNLOCK(ndev_vif->vif_mutex);
-
- return 0;
-}
-
#ifdef CONFIG_SCSC_WLAN_KEY_MGMT_OFFLOAD
static int slsi_key_mgmt_set_pmk(struct wiphy *wiphy,
struct wireless_dev *wdev, const void *pmk, int pmklen)
*/
slsi_mlme_send_frame_mgmt(sdev, net_dev, NULL, 0,
FAPI_DATAUNITDESCRIPTOR_IEEE802_3_FRAME,
- FAPI_MESSAGETYPE_PERIODIC_OFFLOAD,
+ FAPI_MESSAGETYPE_ANY_OTHER,
ndev_vif->sta.keepalive_host_tag[index - 1], 0, 0, 0);
skb = slsi_alloc_skb_headroom(sizeof(struct ethhdr) + ip_pkt_len, GFP_KERNEL);
ip_send_check(ip_hdr(skb));
host_tag = slsi_tx_mgmt_host_tag(sdev);
- r = slsi_mlme_send_frame_data(sdev, net_dev, skb, FAPI_MESSAGETYPE_PERIODIC_OFFLOAD, host_tag,
+ r = slsi_mlme_send_frame_data(sdev, net_dev, skb, FAPI_MESSAGETYPE_ANY_OTHER, host_tag,
0, (period * 1000));
if (r == 0)
ndev_vif->sta.keepalive_host_tag[index - 1] = host_tag;
}
r = slsi_mlme_send_frame_mgmt(sdev, net_dev, NULL, 0, FAPI_DATAUNITDESCRIPTOR_IEEE802_3_FRAME,
- FAPI_MESSAGETYPE_PERIODIC_OFFLOAD, ndev_vif->sta.keepalive_host_tag[index - 1], 0, 0, 0);
+ FAPI_MESSAGETYPE_ANY_OTHER, ndev_vif->sta.keepalive_host_tag[index - 1], 0, 0, 0);
ndev_vif->sta.keepalive_host_tag[index - 1] = 0;
exit:
#endif
struct slsi_rtt_config *nl_rtt_params;
const struct nlattr *iter, *outer, *inner;
+ u8 source_addr[ETH_ALEN];
int tmp, tmp1, tmp2;
u16 rtt_id = 0;
u8 num_devices = 0;
u16 rtt_peer = SLSI_RTT_PEER_AP;
u16 vif_idx = 0;
- u16 center_freq0 = 0, center_freq1 = 0, channel_freq = 0, width = 0;
+ u16 channel_freq = 0;
SLSI_DBG1_NODEV(SLSI_GSCAN, "SUBCMD_RTT_RANGE_START\n");
if (!slsi_dev_rtt_supported()) {
channel_freq = nla_get_u16(inner);
nl_rtt_params[j].channel_freq = channel_freq * 2;
break;
- case SLSI_RTT_ATTRIBUTE_TARGET_CHAN_WIDTH:
- width = nla_get_u16(inner);
- break;
- case SLSI_RTT_ATTRIBUTE_TARGET_CHAN_FREQ0:
- center_freq0 = nla_get_u16(inner);
- break;
- case SLSI_RTT_ATTRIBUTE_TARGET_CHAN_FREQ1:
- center_freq1 = nla_get_u16(inner);
- break;
case SLSI_RTT_ATTRIBUTE_TARGET_PERIOD:
nl_rtt_params[j].burst_period = nla_get_u8(inner);
break;
SLSI_ERR_NODEV("Unknown RTT INFO ATTRIBUTE type: %d\n", type);
break;
}
- if (rtt_peer == SLSI_RTT_PEER_NAN) {
-#if CONFIG_SCSC_WLAN_MAX_INTERFACES >= 4
- SLSI_ETHER_COPY(nl_rtt_params[j].source_addr,
- sdev->netdev_addresses[SLSI_NET_INDEX_NAN]);
-#else
- SLSI_ERR(sdev, "NAN not supported(mib:%d)\n", sdev->nan_enabled);
-#endif
- } else {
- SLSI_ETHER_COPY(nl_rtt_params[j].source_addr,
- sdev->netdev_addresses[SLSI_NET_INDEX_WLAN]);
- }
}
- /* width+1:to match RTT width enum value with NL enums */
- nl_rtt_params[j].channel_info = slsi_compute_chann_info(sdev, width + 1, center_freq0,
- channel_freq);
j++;
}
break;
break;
}
}
+ if (rtt_peer == SLSI_RTT_PEER_NAN) {
+#if CONFIG_SCSC_WLAN_MAX_INTERFACES >= 4
+ SLSI_ETHER_COPY(source_addr, sdev->netdev_addresses[SLSI_NET_INDEX_NAN]);
+#else
+ SLSI_ERR(sdev, "NAN not supported(mib:%d)\n", sdev->nan_enabled);
+#endif
+ } else {
+ SLSI_ETHER_COPY(source_addr, sdev->netdev_addresses[SLSI_NET_INDEX_WLAN]);
+ }
if (rtt_peer == SLSI_RTT_PEER_AP) {
vif_idx = 0;
} else if (rtt_peer == SLSI_RTT_PEER_NAN) {
return -ENOTSUPP;
#endif
}
- r = slsi_mlme_add_range_req(sdev, num_devices, nl_rtt_params, rtt_id, vif_idx);
+ r = slsi_mlme_add_range_req(sdev, num_devices, nl_rtt_params, rtt_id, vif_idx, source_addr);
if (r) {
r = -EINVAL;
SLSI_ERR_NODEV("Failed to set rtt config\n");
tm = *ip_ptr;
res |= nla_put_u32(nl_skb, SLSI_RTT_EVENT_ATTR_TIMESTAMP_US, tkernel - (tmac - tm));
ip_ptr += 4;
- res |= nla_put_u16(nl_skb, SLSI_RTT_EVENT_ATTR_BURST_DURATION_MSN, *ip_ptr);
- ip_ptr += 2;
+ res |= nla_put_u32(nl_skb, SLSI_RTT_EVENT_ATTR_DISTANCE_MM, *ip_ptr);
+ ip_ptr += 4;
+ res |= nla_put_u32(nl_skb, SLSI_RTT_EVENT_ATTR_DISTANCE_SD_MM, *ip_ptr);
+ ip_ptr += 4;
+ res |= nla_put_u8(nl_skb, SLSI_RTT_EVENT_ATTR_BURST_DURATION_MSN, *ip_ptr++);
res |= nla_put_u8(nl_skb, SLSI_RTT_EVENT_ATTR_NEGOTIATED_BURST_NUM, *ip_ptr++);
for (rep_cnt = 0; rep_cnt < 2; rep_cnt++) {
if (ip_ptr - start_ptr < data_len && ip_ptr[0] == WLAN_EID_MEASURE_REPORT) {
}
static const struct nl80211_vendor_cmd_info slsi_vendor_events[] = {
- { OUI_GOOGLE, SLSI_NL80211_SIGNIFICANT_CHANGE_EVENT },
- { OUI_GOOGLE, SLSI_NL80211_HOTLIST_AP_FOUND_EVENT },
{ OUI_GOOGLE, SLSI_NL80211_SCAN_RESULTS_AVAILABLE_EVENT },
{ OUI_GOOGLE, SLSI_NL80211_FULL_SCAN_RESULT_EVENT },
{ OUI_GOOGLE, SLSI_NL80211_SCAN_EVENT },
- { OUI_GOOGLE, SLSI_NL80211_HOTLIST_AP_LOST_EVENT },
#ifdef CONFIG_SCSC_WLAN_KEY_MGMT_OFFLOAD
{ OUI_SAMSUNG, SLSI_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH },
#endif
.flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
.doit = slsi_gscan_get_scan_results
},
- {
- {
- .vendor_id = OUI_GOOGLE,
- .subcmd = SLSI_NL80211_VENDOR_SUBCMD_SET_BSSID_HOTLIST
- },
- .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
- .doit = slsi_gscan_set_hotlist
- },
- {
- {
- .vendor_id = OUI_GOOGLE,
- .subcmd = SLSI_NL80211_VENDOR_SUBCMD_RESET_BSSID_HOTLIST
- },
- .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
- .doit = slsi_gscan_reset_hotlist
- },
- {
- {
- .vendor_id = OUI_GOOGLE,
- .subcmd = SLSI_NL80211_VENDOR_SUBCMD_SET_SIGNIFICANT_CHANGE
- },
- .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
- .doit = slsi_gscan_set_significant_change
- },
- {
- {
- .vendor_id = OUI_GOOGLE,
- .subcmd = SLSI_NL80211_VENDOR_SUBCMD_RESET_SIGNIFICANT_CHANGE
- },
- .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
- .doit = slsi_gscan_reset_significant_change
- },
{
{
.vendor_id = OUI_GOOGLE,
SLSI_DBG2(sdev, SLSI_GSCAN, "Gscan cleanup\n");
slsi_gscan_flush_scan_results(sdev);
- SLSI_DBG2(sdev, SLSI_GSCAN, "Hotlist cleanup\n");
- slsi_gscan_flush_hotlist_results(sdev);
}
void slsi_nl80211_vendor_init(struct slsi_dev *sdev)