| /****************************************************************************** |
| * |
| * Copyright(c) 2015-2017 Intel Deutschland GmbH |
| * Copyright(c) 2018 Intel Corporation |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name Intel Corporation nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| *****************************************************************************/ |
| |
| #ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_NAN_H_ |
| #define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_NAN_H_ |
| |
| #include <stdint.h> |
| |
| #include "third_party/iwlwifi/fw/api/phy-ctxt.h" |
| #include "third_party/iwlwifi/platform/compiler.h" |
| |
| /* TODO: read it from tlv */ |
| #define NAN_MAX_SUPPORTED_DE_ENTRIES 10 |
| |
| /** |
| * enum iwl_nan_subcmd_ids - Neighbor Awareness Networking (NaN) commands IDS |
| */ |
| enum iwl_nan_subcmd_ids { |
| /** |
| * @NAN_CONFIG_CMD: |
| * &struct iwl_nan_cfg_cmd_v2 or &struct iwl_nan_cfg_cmd |
| */ |
| NAN_CONFIG_CMD = 0, |
| |
| /** |
| * @NAN_DISCOVERY_FUNC_CMD: |
| * &struct iwl_nan_add_func_cmd or &struct iwl_nan_add_func_cmd_v2 |
| */ |
| NAN_DISCOVERY_FUNC_CMD = 0x1, |
| |
| /** |
| * @NAN_FAW_CONFIG_CMD: |
| * &struct iwl_nan_faw_config |
| */ |
| NAN_FAW_CONFIG_CMD = 0x2, |
| |
| /** |
| * @NAN_DISCOVERY_EVENT_NOTIF: |
| * &struct iwl_nan_disc_evt_notify_v1 or |
| * &struct iwl_nan_disc_evt_notify_v2 |
| */ |
| NAN_DISCOVERY_EVENT_NOTIF = 0xFD, |
| |
| /** |
| * @NAN_DISCOVERY_TERMINATE_NOTIF: |
| * &struct iwl_nan_de_term |
| */ |
| NAN_DISCOVERY_TERMINATE_NOTIF = 0xFE, |
| |
| /** |
| * @NAN_FAW_START_NOTIF: |
| * Further availability window started. |
| */ |
| NAN_FAW_START_NOTIF = 0xFF, |
| }; |
| |
| /** |
| * struct iwl_fw_chan_avail - Defines per op. class channel availability |
| * |
| * @op_class: operating class |
| * @chan_bitmap: channel bitmap |
| */ |
| struct iwl_fw_chan_avail { |
| uint8_t op_class; |
| __le16 chan_bitmap; |
| } __packed; |
| |
| /** |
| * struct iwl_nan_umac_cfg - NAN umac config parameters |
| * |
| * @action: one of the FW_CTXT_ACTION_* |
| * @tsf_id: tsf id to use in beacons |
| * @sta_id: STA used for NAN operations. Currently it is AUX STA. |
| * @node_addr: our address |
| * @reserved1: reserved |
| * @master_pref: master preference value |
| * @master_rand: random factor to override fw's decision (DEBUG) |
| * @cluster_id: cluster id, if 0 the fw will choose one for us. |
| * @dual_band: enables dual band operation. |
| * @beacon_template_id: beacon template id for NAN |
| */ |
| struct iwl_nan_umac_cfg { |
| __le32 action; |
| __le32 tsf_id; |
| __le32 sta_id; |
| uint8_t node_addr[6]; |
| __le16 reserved1; |
| uint8_t master_pref; |
| uint8_t master_rand; |
| __le16 cluster_id; |
| __le32 dual_band; |
| __le32 beacon_template_id; |
| } __packed; /* _NAN_UMAC_CONFIG_CMD_API_S_VER_1 */ |
| |
| /** |
| * struct iwl_nan_testbed_cfg - NAN testbed specific config parameters |
| * |
| * @chan24: override default 2.4GHz channel (DEBUG) |
| * @chan52: override default 5.2GHz channel (DEBUG) |
| * @hop_count: fake hop count (DEBUG) |
| * @op_bands: band bit mask (DEBUG) |
| * @warmup_timer: warmup_timer in us (DEBUG) |
| * @custom_tsf: fake tsf value (DEBUG) |
| * @action_delay: usecs to delay SDFs (DEBUG) |
| */ |
| struct iwl_nan_testbed_cfg { |
| uint8_t chan24; |
| uint8_t chan52; |
| uint8_t hop_count; |
| uint8_t op_bands; |
| __le32 warmup_timer; |
| __le64 custom_tsf; |
| __le32 action_delay; |
| } __packed; /* NAN_TEST_BED_SPECIFIC_CONFIG_S_VER_1 */ |
| |
| /* |
| * struct iwl_nan_nan2_cfg - NAN2 specific configuration |
| * |
| * @cdw: committed DW interval as defined in NAN2 spec (NAN2) |
| * @op_mode: operation mode as defined in NAN2 spec (NAN2) |
| * @pot_avail_len: length of pot_avail array (NAN2) |
| * @pot_avail: potential availability per op. class (NAN2) |
| */ |
| struct iwl_nan_nan2_cfg { |
| __le16 cdw; |
| uint8_t op_mode; |
| uint8_t pot_avail_len; |
| struct iwl_fw_chan_avail pot_avail[20]; |
| } __packed; /* NAN_CONFIG_CMD_API_S_VER_1 */ |
| |
| /** |
| * struct iwl_nan_cfg_cmd - NAN configuration command |
| * |
| * This command starts/stops/modifies NAN sync engine. |
| * |
| * @umac_cfg: umac specific configuration |
| * @tb_cfg: testbed specific configuration |
| * @nan2_cfg: nan2 specific configuration |
| */ |
| struct iwl_nan_cfg_cmd { |
| struct iwl_nan_umac_cfg umac_cfg; |
| struct iwl_nan_testbed_cfg tb_cfg; |
| /* NAN 2 specific configuration */ |
| struct iwl_nan_nan2_cfg nan2_cfg; |
| } __packed; /* NAN_CONFIG_CMD_API_S_VER_1 */ |
| |
| /** |
| * struct iwl_nan_cfg_cmd_v2 - NAN configuration command, version 2 |
| * |
| * This command starts/stops/modifies NAN sync engine. |
| * |
| * @umac_cfg: umac specific configuration |
| * @tb_cfg: testbed specific configuration |
| * @unavailable_slots: Force this amount of slots to be unavailable in potential |
| * map |
| * @nan2_cfg: nan2 specific configuration |
| */ |
| struct iwl_nan_cfg_cmd_v2 { |
| struct iwl_nan_umac_cfg umac_cfg; |
| struct iwl_nan_testbed_cfg tb_cfg; |
| __le32 unavailable_slots; |
| /* NAN 2 specific configuration */ |
| struct iwl_nan_nan2_cfg nan2_cfg; |
| } __packed; /* NAN_CONFIG_CMD_API_S_VER_2 */ |
| |
| /* NAN DE function type */ |
| enum iwl_fw_nan_func_type { |
| IWL_NAN_DE_FUNC_PUBLISH = 0, |
| IWL_NAN_DE_FUNC_SUBSCRIBE = 1, |
| IWL_NAN_DE_FUNC_FOLLOW_UP = 2, |
| |
| /* keep last */ |
| IWL_NAN_DE_FUNC_NOT_VALID, |
| }; |
| |
| /* NAN DE function flags */ |
| enum iwl_fw_nan_func_flags { |
| IWL_NAN_DE_FUNC_FLAG_UNSOLICITED_OR_ACTIVE = BIT(0), |
| IWL_NAN_DE_FUNC_FLAG_SOLICITED = BIT(1), |
| IWL_NAN_DE_FUNC_FLAG_UNICAST = BIT(2), |
| IWL_NAN_DE_FUNC_FLAG_CLOSE_RANGE = BIT(3), |
| IWL_NAN_DE_FUNC_FLAG_FAW_PRESENT = BIT(4), |
| IWL_NAN_DE_FUNC_FLAG_FAW_TYPE = BIT(5), |
| IWL_NAN_DE_FUNC_FLAG_FAW_NOTIFY = BIT(6), |
| IWL_NAN_DE_FUNC_FLAG_RAISE_EVENTS = BIT(7), |
| }; |
| |
| /** |
| * struct iwl_nan_add_func_common - NAN add/remove function, common part |
| * |
| * @action: one of the FW_CTXT_ACTION_ADD/REMOVE |
| * @instance_id: instance id of the DE function to remove |
| * @type: enum %iwl_fw_nan_func_type |
| * @service_id: service id |
| * @flags: a combination of &enum iwl_fw_nan_func_flags |
| * @flw_up_id: follow up id |
| * @flw_up_req_id: follow up requestor id |
| * @flw_up_addr: follow up destination address |
| * @reserved1: reserved |
| * @ttl: ttl in DW's or 0 for infinite |
| * @faw_ci: &struct iwl_fw_channel_info for further availability |
| * @faw_attrtype: further availability bitmap |
| * @serv_info_len: length of service specific information |
| * @srf_len: length of the srf |
| * @rx_filter_len: length of rx filter |
| * @tx_filter_len: length of tx filter |
| * @dw_interval: awake dw interval |
| */ |
| struct iwl_nan_add_func_common { |
| __le32 action; |
| uint8_t instance_id; |
| uint8_t type; |
| uint8_t service_id[6]; |
| __le16 flags; |
| uint8_t flw_up_id; |
| uint8_t flw_up_req_id; |
| uint8_t flw_up_addr[6]; |
| __le16 reserved1; |
| __le32 ttl; |
| struct iwl_fw_channel_info faw_ci; |
| uint8_t faw_attrtype; |
| uint8_t serv_info_len; |
| uint8_t srf_len; |
| uint8_t rx_filter_len; |
| uint8_t tx_filter_len; |
| uint8_t dw_interval; |
| } __packed; /* NAN_DISCO_FUNC_FIXED_CMD_API_S_VER_1 */ |
| |
| /** |
| * struct iwl_nan_add_func_cmd_v2 - NAN add/remove function command, version 2 |
| * |
| * @cmn: nan add function common part |
| * @cipher_capa: Cipher suite information capabilities |
| * @cipher_suite_id: Bitmap of the list of cipher suite IDs |
| * @security_ctx_len: length of tx security context attributes |
| * @sdea_ctrl: SDEA control field |
| * @data: dw aligned fields: service_info, srf, rxFilter, txFilter, |
| * security_ctx |
| */ |
| struct iwl_nan_add_func_cmd_v2 { |
| struct iwl_nan_add_func_common cmn; |
| uint8_t cipher_capa; |
| uint8_t cipher_suite_id; |
| __le16 security_ctx_len; |
| __le16 sdea_ctrl; |
| uint8_t data[0]; |
| } __packed; /* NAN_DISCO_FUNC_FIXED_CMD_API_S_VER_2 */ |
| |
| /** |
| * struct iwl_nan_add_func_cmd - NAN add/remove function command |
| * |
| * @cmn: nan add function common part |
| * @reserved: reserved |
| * @data: dw aligned fields -service_info, srf, rxFilter, txFilter |
| */ |
| struct iwl_nan_add_func_cmd { |
| struct iwl_nan_add_func_common cmn; |
| uint8_t reserved[2]; |
| uint8_t data[0]; |
| } __packed; /* NAN_DISCO_FUNC_FIXED_CMD_API_S_VER_1 */ |
| |
| enum iwl_nan_add_func_resp_status { |
| IWL_NAN_DE_FUNC_STATUS_SUCCESSFUL, |
| IWL_NAN_DE_FUNC_STATUS_INSUFFICIENT_ENTRIES, |
| IWL_NAN_DE_FUNC_STATUS_INSUFFICIENT_MEMORY, |
| IWL_NAN_DE_FUNC_STATUS_INVALID_INSTANCE, |
| IWL_NAN_DE_FUNC_STATUS_UNSPECIFIED, |
| }; |
| |
| /** |
| * struct iwl_nan_add_func_res - Add NAN function response |
| * |
| * @instance_id: assigned instance_id (if added) |
| * @status: status of the command (&enum iwl_nan_add_func_resp_status) |
| * @reserved: reserved |
| */ |
| struct iwl_nan_add_func_res { |
| uint8_t instance_id; |
| uint8_t status; |
| __le16 reserved; |
| } __packed; /* NAN_DISCO_FUNC_CMD_API_S_VER_1 */ |
| |
| /* Shared key cipher suite with CCMP with a 128 bit TK */ |
| #define IWL_NAN_DE_FUNC_CS_SK_CCM_128 BIT(0) |
| |
| /* Shared key cipher suite with GCMP with a 256 bit TK */ |
| #define IWL_NAN_DE_FUNC_CS_SK_GCM_256 BIT(1) |
| |
| /** |
| * enum iwl_nan_de_func_sdea_flags - NAN func SDEA flags |
| * @IWL_NAN_DE_FUNC_SDEA_FSD_REQ: Further Service Discovery (FSD) is required |
| * for the service |
| * @IWL_NAN_DE_FUNC_SDEA_FSD_GAS: GAS is used for FSD |
| * @IWL_NAN_DE_FUNC_SDEA_DP_REQ: Data path required for the service |
| * @IWL_NAN_DE_FUNC_SDEA_DP_MCAST: If data path is required, the type is |
| * multicast |
| * @IWL_NAN_DE_FUNC_SDEA_DP_MCAST_M_TO_M:if multicast data path is required then |
| * it is many to many |
| * @IWL_NAN_DE_FUNC_SDEA_QOS_REQ: QoS is required for the service |
| * @IWL_NAN_DE_FUNC_SDEA_SEC_REQ: Security is required for the service |
| * @IWL_NAN_DE_FUNC_SDEA_RANGIGN_REQ: Ranging is required prior to subscription |
| * to the service |
| */ |
| enum iwl_nan_de_func_sdea_flags { |
| IWL_NAN_DE_FUNC_SDEA_FSD_REQ = BIT(0), |
| IWL_NAN_DE_FUNC_SDEA_FSD_GAS = BIT(1), |
| IWL_NAN_DE_FUNC_SDEA_DP_REQ = BIT(2), |
| IWL_NAN_DE_FUNC_SDEA_DP_MCAST = BIT(3), |
| IWL_NAN_DE_FUNC_SDEA_DP_MCAST_M_TO_M = BIT(4), |
| IWL_NAN_DE_FUNC_SDEA_QOS_REQ = BIT(5), |
| IWL_NAN_DE_FUNC_SDEA_SEC_REQ = BIT(6), |
| IWL_NAN_DE_FUNC_SDEA_RANGIGN_REQ = BIT(7), |
| }; |
| |
| /** |
| * struct iwl_nan_disc_evt_notify_v1 - NaN discovery event |
| * |
| * @peer_mac_addr: peer address |
| * @reserved1: reserved |
| * @type: Type of matching function |
| * @instance_id: local matching instance id |
| * @peer_instance: peer matching instance id |
| * @service_info_len: service specific information length |
| * @attrs_len: additional peer attributes length |
| * @buf: service specific information followed by attributes |
| */ |
| struct iwl_nan_disc_evt_notify_v1 { |
| uint8_t peer_mac_addr[6]; |
| __le16 reserved1; |
| uint8_t type; |
| uint8_t instance_id; |
| uint8_t peer_instance; |
| uint8_t service_info_len; |
| __le32 attrs_len; |
| uint8_t buf[0]; |
| } __packed; /* NAN_DISCO_EVENT_NTFY_API_S_VER_1 */ |
| |
| /** |
| * struct iwl_nan_sec_ctxt_info - NaN security context information |
| * |
| * @type: the security context type |
| * @reserved: for alignment |
| * @len: the length of the security context |
| * @buf: security context data |
| */ |
| struct iwl_nan_sec_ctxt_info { |
| uint8_t type; |
| uint8_t reserved; |
| __le16 len; |
| uint8_t buf[0]; |
| } __packed; /* NAN_DISCO_SEC_CTXT_ID_API_S_VER_1 */ |
| |
| /** |
| * struct iwl_nan_disc_info - NaN match information |
| * |
| * @type: Type of matching function |
| * @instance_id: local matching instance id |
| * @peer_instance: peer matching instance id |
| * @service_info_len: service specific information length |
| * @sdea_control: bit mask of &enum iwl_nan_de_func_sdea_flags_ |
| * @sdea_service_info_len: sdea service specific information length |
| * @sec_ctxt_len: security context information length |
| * @cipher_suite_ids: bit mask of cipher suite IDs |
| * @sdea_update_indicator: update indicator from the sdea attribute |
| * @buf: service specific information followed by sdea service specific |
| * information and by security context information which encapsulates 0 or |
| * more iwl_nan_sec_ctxt_info entries. |
| */ |
| struct iwl_nan_disc_info { |
| uint8_t type; |
| uint8_t instance_id; |
| uint8_t peer_instance; |
| uint8_t service_info_len; |
| __le16 sdea_control; |
| __le16 sdea_service_info_len; |
| __le16 sec_ctxt_len; |
| uint8_t cipher_suite_ids; |
| uint8_t sdea_update_indicator; |
| uint8_t buf[0]; |
| } __packed; /* NAN_DISCO_INFO_API_S_VER_1 */ |
| |
| /** |
| * struct iwl_nan_disc_evt_notify_v2 - NaN discovery information |
| * |
| * @peer_mac_addr: peer address |
| * @reserved1: reserved |
| * @match_len: Length of the match data |
| * @avail_attrs_len: Length of the availability attributes associated with the |
| * peer |
| * @buf: aggregation of matches, each starting on a dword aligned address, |
| * followed by the peer availability attributes, which also start on a |
| * dword aligned address. |
| */ |
| struct iwl_nan_disc_evt_notify_v2 { |
| uint8_t peer_mac_addr[6]; |
| __le16 reserved1; |
| __le32 match_len; |
| __le32 avail_attrs_len; |
| uint8_t buf[0]; |
| } __packed; /* NAN_DISCO_EVENT_NTFY_API_S_VER_2 */ |
| |
| /* NAN function termination reasons */ |
| enum iwl_fw_nan_de_term_reason { |
| IWL_NAN_DE_TERM_FAILURE = 0, |
| IWL_NAN_DE_TERM_TTL_REACHED, |
| IWL_NAN_DE_TERM_USER_REQUEST, |
| }; |
| |
| /** |
| * struct iwl_nan_de_term - NAN function termination event |
| * |
| * @type: type of terminated function (&enum iwl_fw_nan_func_type) |
| * @instance_id: instance id |
| * @reason: termination reason (&enum iwl_fw_nan_de_term_reason) |
| * @reserved1: reserved |
| */ |
| struct iwl_nan_de_term { |
| uint8_t type; |
| uint8_t instance_id; |
| uint8_t reason; |
| uint8_t reserved1; |
| } __packed; /* NAN_DISCO_TERM_NTFY_API_S_VER_1 */ |
| |
| enum iwl_fw_post_nan_type { |
| IWL_NAN_POST_NAN_ATTR_WLAN = 0, |
| IWL_NAN_POST_NAN_ATTR_P2P, |
| IWL_NAN_POST_NAN_ATTR_IBSS, |
| IWL_NAN_POST_NAN_ATTR_MESH, |
| IWL_NAN_POST_NAN_ATTR_FURTHER_NAN, |
| }; |
| |
| enum iwl_fw_config_flags { |
| NAN_FAW_FLAG_NOTIFY_HOST = BIT(0), |
| }; |
| |
| /** |
| * struct iwl_nan_faw_config - NAN further availability configuration command |
| * |
| * @id_n_color: id and color of the mac used for further availability |
| * @faw_ci: channel to be available on |
| * @type: type of post NAN availability (enum %iwl_fw_post_nan_type) |
| * @slots: number of 16TU slots to be available on (should be < 32) |
| * @flags: NAN_FAW_FLAG_* |
| * @op_class: operating class which corresponds to faw_ci |
| */ |
| struct iwl_nan_faw_config { |
| __le32 id_n_color; |
| struct iwl_fw_channel_info faw_ci; |
| uint8_t type; |
| uint8_t slots; |
| uint8_t flags; |
| uint8_t op_class; |
| } __packed; /* _NAN_DISCO_FAW_CMD_API_S_VER_1 */ |
| |
| #endif // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_NAN_H_ |