/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __SPRDWL_NAN_H__ #define __SPRDWL_NAN_H__ /* macro */ enum nan_msg_id { NAN_MSG_ID_ERROR_RSP = 0, NAN_MSG_ID_CONFIGURATION_REQ = 1, NAN_MSG_ID_CONFIGURATION_RSP = 2, NAN_MSG_ID_PUBLISH_SERVICE_REQ = 3, NAN_MSG_ID_PUBLISH_SERVICE_RSP = 4, NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_REQ = 5, NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_RSP = 6, NAN_MSG_ID_PUBLISH_REPLIED_IND = 7, NAN_MSG_ID_PUBLISH_TERMINATED_IND = 8, NAN_MSG_ID_SUBSCRIBE_SERVICE_REQ = 9, NAN_MSG_ID_SUBSCRIBE_SERVICE_RSP = 10, NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_REQ = 11, NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_RSP = 12, NAN_MSG_ID_MATCH_IND = 13, NAN_MSG_ID_MATCH_EXPIRED_IND = 14, NAN_MSG_ID_SUBSCRIBE_TERMINATED_IND = 15, NAN_MSG_ID_DE_EVENT_IND = 16, NAN_MSG_ID_TRANSMIT_FOLLOWUP_REQ = 17, NAN_MSG_ID_TRANSMIT_FOLLOWUP_RSP = 18, NAN_MSG_ID_FOLLOWUP_IND = 19, NAN_MSG_ID_STATS_REQ = 20, NAN_MSG_ID_STATS_RSP = 21, NAN_MSG_ID_ENABLE_REQ = 22, NAN_MSG_ID_ENABLE_RSP = 23, NAN_MSG_ID_DISABLE_REQ = 24, NAN_MSG_ID_DISABLE_RSP = 25, NAN_MSG_ID_DISABLE_IND = 26, NAN_MSG_ID_TCA_REQ = 27, NAN_MSG_ID_TCA_RSP = 28, NAN_MSG_ID_TCA_IND = 29, NAN_MSG_ID_BEACON_SDF_REQ = 30, NAN_MSG_ID_BEACON_SDF_RSP = 31, NAN_MSG_ID_BEACON_SDF_IND = 32, NAN_MSG_ID_CAPABILITIES_REQ = 33, NAN_MSG_ID_CAPABILITIES_RSP = 34 }; enum nan_tlv_type { NAN_TLV_TYPE_FIRST = 0, /* Service Discovery Frame types */ NAN_TLV_TYPE_SDF_FIRST = NAN_TLV_TYPE_FIRST, NAN_TLV_TYPE_SERVICE_NAME = NAN_TLV_TYPE_SDF_FIRST, NAN_TLV_TYPE_SDF_MATCH_FILTER, NAN_TLV_TYPE_TX_MATCH_FILTER, NAN_TLV_TYPE_RX_MATCH_FILTER, NAN_TLV_TYPE_SERVICE_SPECIFIC_INFO, NAN_TLV_TYPE_EXT_SERVICE_SPECIFIC_INFO = 5, NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_TRANSMIT = 6, NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_RECEIVE = 7, NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_RECEIVE = 8, NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_RECEIVE = 9, NAN_TLV_TYPE_BEACON_SDF_PAYLOAD_RECEIVE = 10, NAN_TLV_TYPE_SDF_LAST = 4095, /* Configuration types */ NAN_TLV_TYPE_CONFIG_FIRST = 4096, NAN_TLV_TYPE_24G_SUPPORT = NAN_TLV_TYPE_CONFIG_FIRST, NAN_TLV_TYPE_24G_BEACON, NAN_TLV_TYPE_24G_SDF, NAN_TLV_TYPE_24G_RSSI_CLOSE, NAN_TLV_TYPE_24G_RSSI_MIDDLE = 4100, NAN_TLV_TYPE_24G_RSSI_CLOSE_PROXIMITY, NAN_TLV_TYPE_5G_SUPPORT, NAN_TLV_TYPE_5G_BEACON, NAN_TLV_TYPE_5G_SDF, NAN_TLV_TYPE_5G_RSSI_CLOSE, NAN_TLV_TYPE_5G_RSSI_MIDDLE, NAN_TLV_TYPE_5G_RSSI_CLOSE_PROXIMITY, NAN_TLV_TYPE_SID_BEACON, NAN_TLV_TYPE_HOP_COUNT_LIMIT, NAN_TLV_TYPE_MASTER_PREFERENCE = 4110, NAN_TLV_TYPE_CLUSTER_ID_LOW, NAN_TLV_TYPE_CLUSTER_ID_HIGH, NAN_TLV_TYPE_RSSI_AVERAGING_WINDOW_SIZE, NAN_TLV_TYPE_CLUSTER_OUI_NETWORK_ID, NAN_TLV_TYPE_SOURCE_MAC_ADDRESS, NAN_TLV_TYPE_CLUSTER_ATTRIBUTE_IN_SDF, NAN_TLV_TYPE_SOCIAL_CHANNEL_SCAN_PARAMS, NAN_TLV_TYPE_DEBUGGING_FLAGS, NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_TRANSMIT, NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_TRANSMIT = 4120, NAN_TLV_TYPE_FURTHER_AVAILABILITY_MAP, NAN_TLV_TYPE_HOP_COUNT_FORCE, NAN_TLV_TYPE_RANDOM_FACTOR_FORCE, NAN_TLV_TYPE_RANDOM_UPDATE_TIME = 4124, NAN_TLV_TYPE_EARLY_WAKEUP, NAN_TLV_TYPE_PERIODIC_SCAN_INTERVAL, NAN_TLV_TYPE_DW_INTERVAL = 4128, NAN_TLV_TYPE_DB_INTERVAL, NAN_TLV_TYPE_FURTHER_AVAILABILITY, NAN_TLV_TYPE_24G_CHANNEL, NAN_TLV_TYPE_5G_CHANNEL, NAN_TLV_TYPE_CONFIG_LAST = 8191, /* Attributes types */ NAN_TLV_TYPE_ATTRS_FIRST = 8192, NAN_TLV_TYPE_AVAILABILITY_INTERVALS_MAP = NAN_TLV_TYPE_ATTRS_FIRST, NAN_TLV_TYPE_WLAN_MESH_ID, NAN_TLV_TYPE_MAC_ADDRESS, NAN_TLV_TYPE_RECEIVED_RSSI_VALUE, NAN_TLV_TYPE_CLUSTER_ATTRIBUTE, NAN_TLV_TYPE_WLAN_INFRA_SSID, NAN_TLV_TYPE_ATTRS_LAST = 12287, /* Events Type */ NAN_TLV_TYPE_EVENTS_FIRST = 12288, NAN_TLV_TYPE_EVENT_SELF_STATION_MAC_ADDRESS = NAN_TLV_TYPE_EVENTS_FIRST, NAN_TLV_TYPE_EVENT_STARTED_CLUSTER, NAN_TLV_TYPE_EVENT_JOINED_CLUSTER, NAN_TLV_TYPE_EVENT_CLUSTER_SCAN_RESULTS, NAN_TLV_TYPE_FAW_MEM_AVAIL, NAN_TLV_TYPE_EVENTS_LAST = 16383, /* TCA types */ NAN_TLV_TYPE_TCA_FIRST = 16384, NAN_TLV_TYPE_CLUSTER_SIZE_REQ = NAN_TLV_TYPE_TCA_FIRST, NAN_TLV_TYPE_CLUSTER_SIZE_RSP, NAN_TLV_TYPE_TCA_LAST = 32767, /* Statistics types */ NAN_TLV_TYPE_STATS_FIRST = 32768, NAN_TLV_TYPE_DE_PUBLISH_STATS = NAN_TLV_TYPE_STATS_FIRST, NAN_TLV_TYPE_DE_SUBSCRIBE_STATS, NAN_TLV_TYPE_DE_MAC_STATS, NAN_TLV_TYPE_DE_TIMING_SYNC_STATS, NAN_TLV_TYPE_DE_DW_STATS, NAN_TLV_TYPE_DE_STATS, NAN_TLV_TYPE_STATS_LAST = 36863, NAN_TLV_TYPE_LAST = 65535 }; /* structure */ struct nan_msg_header { u16 msg_ver:4; /* NAN_MSG_VERSION 1 */ u16 msg_id:12; u16 msg_len; u16 handle; /* publish_id or subscribe_id */ u16 transaction_id; } __packed; struct nan_tlv { u16 type; u16 length; u8 *value; } __packed; struct nan_enable_req { struct nan_msg_header header; /* TLVs: * * Required: Cluster Low, Cluster High, Master Preference, * Optional: 5G Support, SID, 5G Sync Disc, RSSI Close, RSSI Medium, * Hop Count Limit, Random Time, Master Preference, * WLAN Intra Attr, P2P Operation Attr, WLAN IBSS Attr, * WLAN Mesh Attr */ u8 nan_tlv[]; } __packed; struct nan_disable_req { struct nan_msg_header header; } __packed; struct nan_disable_rsp { struct nan_msg_header header; /* status of the request */ u16 status; u16 value; } __packed; struct publish_config_params { u16 ttl; u16 period; u32 reserved:1; u32 publish_type:2; u32 tx_type:1; u32 rssi_threshold_flag:1; u32 ota_flag:1; u32 publish_match_indicator:2; u32 publish_count:8; u32 connmap:8; u32 disable_pub_terminated_ind:1; u32 disable_pub_match_expired_ind:1; u32 disable_followup_rx_ind:1; u32 reserved2:5; } __packed; struct nan_publish_req { struct nan_msg_header header; struct publish_config_params pub_params; /* TLVs: * * Required: Service Name, * Optional: Tx Match Filter, Rx Match Filter, Service Specific Info, */ u8 nan_tlv[]; } __packed; struct nan_cancel_pub_req { struct nan_msg_header header; } __packed; struct subscribe_config_parames { u16 ttl; u16 period; u32 subscribe_type:1; u32 srf_type:1; u32 srf_include_type:1; u32 srf_state:1; u32 ssi_required:1; u32 subscribe_match_indicator:2; u32 xbit:1; u32 subscribe_count:8; u32 rssi_threshold_flag:1; u32 ota_flag:1; u32 disable_sub_terminated_ind:1; u32 disable_sub_match_expired_ind:1; u32 disable_followup_rx_ind:1; u32 reserved:3; u32 connmap:8; } __packed; struct nan_subscribe_req { struct nan_msg_header header; struct subscribe_config_parames sub_params; /* TLVs: * * Required: Service Name * Optional: Rx Match Filter, Tx Match Filter, Service Specific Info, */ u8 nan_tlv[]; } __packed; struct nan_cancel_sub_req { struct nan_msg_header header; } __packed; struct followup_config_params { u32 requestor_instance_id; u32 priority:4; u32 dw_or_faw:1; u32 recv_indication_cfg:1; u32 reserved:26; } __packed; struct nan_followup_req { struct nan_msg_header header; struct followup_config_params followup_params; /* TLVs: * * Required: Service Specific Info or Extended Service Specific Info */ u8 nan_tlv[]; } __packed; struct nan_capabilities_req { struct nan_msg_header header; } __packed; struct sprdwl_event_nan { struct nan_msg_header header; /* status of the request */ u16 status; u16 value; } __packed; struct nan_capa { struct nan_msg_header header; u32 status; u32 value; u32 max_concurrent_nan_clusters; u32 max_publishes; u32 max_subscribes; u32 max_service_name_len; u32 max_match_filter_len; u32 max_total_match_filter_len; u32 max_service_specific_info_len; u32 max_vsa_data_len; u32 max_mesh_data_len; u32 max_ndi_interfaces; u32 max_ndp_sessions; u32 max_app_info_len; } __packed; struct nan_cmd_header { u16 data_len; u8 data[0]; } __packed; /* cmd handler*/ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) int sprdwl_vendor_nan_cmds(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int len); /* event handler*/ int sprdwl_event_nan(struct sprdwl_vif *vif, u8 *data, u16 len); #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) */ #endif /* __SPRDWL_NAN_H__ */