/* SPDX-License-Identifier: GPL-2.0 */ /****************************************************************************** * * Copyright (C) 2020 SeekWave Technology Co.,Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation; * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * ******************************************************************************/ #ifndef __SKW_VENDOR_H__ #define __SKW_VENDOR_H__ #define OUI_GOOGLE 0x001A11 /* Vendor Command ID */ #define SKW_VID_GET_VALID_CHANNELS 0x1009 #define SKW_VID_GET_FEATURE_SET 0x100A #define SKW_VID_SET_COUNTRY 0x100E #define SKW_VID_SET_LATENCY_MODE 0x101B #define SKW_VID_START_LOGGING 0x1400 #define SKW_VID_GET_FIRMWARE_DUMP 0x1401 #define SKW_VID_GET_VERSION 0x1403 #define SKW_VID_GET_RING_BUFFERS_STATUS 0x1404 #define SKW_VID_GET_RING_BUFFER_DATA 0x1405 #define SKW_VID_GET_LOGGER_FEATURE 0x1406 #define SKW_VID_GET_WAKE_REASON_STATS 0x140D #define SKW_VID_GET_APF_CAPABILITIES 0x1800 #define SKW_VID_SELECT_TX_POWER_SCENARIO 0x1900 #define SKW_VID_GET_USABLE_CHANS 0x2000 /* ATTR IE Start */ /* ATTR GET_VALID_CHANNELS */ #define SKW_ATTR_GET_VALID_CHANNELS 20 #define SKW_ATTR_VALID_CHANNELS_COUNT 36 #define SKW_ATTR_VALID_CHANNELS_LIST 37 #define SKW_GET_VALID_CHANNELS_RULES 38 /* ATTR GET_VALID_CHANNELS */ /* ATTR SET_COUNTRY */ #define SKW_ATTR_SET_COUNTRY 5 #define SKW_SET_COUNTRY_RULES 6 /* ATTR SET_COUNTRY */ /* ATTR GET_APF_CAPABILITIES */ #define SKW_ATTR_APF_VERSION 0 #define SKW_ATTR_APF_MAX_LEN 1 /* ATTR GET_APF_CAPABILITIES */ /* ATTR GET_VERSION */ #define SKW_ATTR_VERSION_DRIVER 1 #define SKW_ATTR_VERSION_FIRMWARE 2 #define SKW_GET_VERSION_RULES 3 /* ATTR GET_VERSION */ /* ATTR RING_BUFFERS_STATUS */ #define SKW_ATTR_RING_BUFFERS_STATUS 13 #define SKW_ATTR_RING_BUFFERS_COUNT 14 /* ATTR RING_BUFFERS_STATUS */ /* END OF ATTR IE */ /* Feature enums */ #define WIFI_FEATURE_INFRA 0x1 // Basic infrastructure mode #define WIFI_FEATURE_INFRA_5G 0x2 // Support for 5 GHz Band #define WIFI_FEATURE_HOTSPOT 0x4 // Support for GAS/ANQP #define WIFI_FEATURE_P2P 0x8 // Wifi-Direct #define WIFI_FEATURE_SOFT_AP 0x10 // Soft AP #define WIFI_FEATURE_GSCAN 0x20 // Google-Scan APIs #define WIFI_FEATURE_NAN 0x40 // Neighbor Awareness Networking #define WIFI_FEATURE_D2D_RTT 0x80 // Device-to-device RTT #define WIFI_FEATURE_D2AP_RTT 0x100 // Device-to-AP RTT #define WIFI_FEATURE_BATCH_SCAN 0x200 // Batched Scan (legacy) #define WIFI_FEATURE_PNO 0x400 // Preferred network offload #define WIFI_FEATURE_ADDITIONAL_STA 0x800 // Support for two STAs #define WIFI_FEATURE_TDLS 0x1000 // Tunnel directed link setup #define WIFI_FEATURE_TDLS_OFFCHANNEL 0x2000 // Support for TDLS off channel #define WIFI_FEATURE_EPR 0x4000 // Enhanced power reporting #define WIFI_FEATURE_AP_STA 0x8000 // Support for AP STA Concurrency #define WIFI_FEATURE_LINK_LAYER_STATS 0x10000 // Link layer stats collection #define WIFI_FEATURE_LOGGER 0x20000 // WiFi Logger #define WIFI_FEATURE_HAL_EPNO 0x40000 // WiFi PNO enhanced #define WIFI_FEATURE_RSSI_MONITOR 0x80000 // RSSI Monitor #define WIFI_FEATURE_MKEEP_ALIVE 0x100000 // WiFi mkeep_alive #define WIFI_FEATURE_CONFIG_NDO 0x200000 // ND offload configure #define WIFI_FEATURE_TX_TRANSMIT_POWER 0x400000 // Capture Tx transmit power levels #define WIFI_FEATURE_CONTROL_ROAMING 0x800000 // Enable/Disable firmware roaming #define WIFI_FEATURE_IE_WHITELIST 0x1000000 // Support Probe IE white listing #define WIFI_FEATURE_SCAN_RAND 0x2000000 // Support MAC & Probe Sequence Number randomization #define WIFI_FEATURE_SET_TX_POWER_LIMIT 0x4000000 // Support Tx Power Limit setting #define WIFI_FEATURE_USE_BODY_HEAD_SAR 0x8000000 // Support Using Body/Head Proximity for SAR #define WIFI_FEATURE_DYNAMIC_SET_MAC 0x10000000 // Support changing MAC address without iface reset(down and up) #define WIFI_FEATURE_SET_LATENCY_MODE 0x40000000 // Support Latency mode setting #define WIFI_FEATURE_P2P_RAND_MAC 0x80000000 // Support P2P MAC randomization #define WIFI_FEATURE_INFRA_60G 0x100000000 // Support for 60GHz Band /* Vendor Event ID */ #define SKW_NL80211_VENDOR_SUBCMD_MONITOR_RSSI 80 #define EXT_VENDOR_EVENT_BUF_SIZE 4096 enum skw_wlan_vendor_attr_rssi_monitoring { SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_INVALID = 0, /* Takes valid value from the enum * skw_wlan_rssi_monitoring_control * Unsigned 32-bit value enum skw_wlan_rssi_monitoring_control */ SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_CONTROL, /* Unsigned 32-bit value */ SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_REQUEST_ID, /* Signed 8-bit value in dBm */ SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_MAX_RSSI, /* Signed 8-bit value in dBm */ SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_MIN_RSSI, /* attributes to be used/received in callback */ /* 6-byte MAC address used to represent current BSSID MAC address */ SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_CUR_BSSID, /* Signed 8-bit value indicating the current RSSI */ SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_CUR_RSSI, /* keep last */ SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_AFTER_LAST, SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_MAX = SKW_WLAN_VENDOR_ATTR_RSSI_MONITORING_AFTER_LAST - 1, }; struct skw_ring_buff_status { u8 name[32]; u32 flags; int ring_id; // unique integer representing the ring u32 ring_buffer_byte_size; // total memory size allocated for the buffer u32 verbose_level; // verbose level for ring buffer u32 written_bytes; // number of bytes that was written to the buffer by driver u32 read_bytes; // number of bytes that was read from the buffer by user land u32 written_records; // number of records that was written to the buffer by driver }; struct skw_usable_chan { u16 center_freq; u16 band_width; u16 iface_mode_mask; u16 flags; u32 resvd; }; struct skw_usable_chan_req { u32 band_mask; u32 filter_mask; u32 iface_mode_mask; u32 flags; u32 resvd; }; void skw_vendor_init(struct wiphy *wiphy); void skw_vendor_deinit(struct wiphy *wiphy); #endif