#ifndef _AIC_VENDOR_H #define _AIC_VENDOR_H #include #define GOOGLE_OUI 0x001A11 #define BRCM_OUI 0x001018 typedef enum { START_MKEEP_ALIVE, STOP_MKEEP_ALIVE, } GetCmdType; typedef enum { /* don't use 0 as a valid subcommand */ VENDOR_NL80211_SUBCMD_UNSPECIFIED, /* define all vendor startup commands between 0x0 and 0x0FFF */ VENDOR_NL80211_SUBCMD_RANGE_START = 0x0001, VENDOR_NL80211_SUBCMD_RANGE_END = 0x0FFF, /* define all GScan related commands between 0x1000 and 0x10FF */ ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START = 0x1000, ANDROID_NL80211_SUBCMD_GSCAN_RANGE_END = 0x10FF, /* define all NearbyDiscovery related commands between 0x1100 and 0x11FF */ ANDROID_NL80211_SUBCMD_NBD_RANGE_START = 0x1100, ANDROID_NL80211_SUBCMD_NBD_RANGE_END = 0x11FF, /* define all RTT related commands between 0x1100 and 0x11FF */ ANDROID_NL80211_SUBCMD_RTT_RANGE_START = 0x1100, ANDROID_NL80211_SUBCMD_RTT_RANGE_END = 0x11FF, ANDROID_NL80211_SUBCMD_LSTATS_RANGE_START = 0x1200, ANDROID_NL80211_SUBCMD_LSTATS_RANGE_END = 0x12FF, /* define all Logger related commands between 0x1400 and 0x14FF */ ANDROID_NL80211_SUBCMD_DEBUG_RANGE_START = 0x1400, ANDROID_NL80211_SUBCMD_DEBUG_RANGE_END = 0x14FF, /* define all wifi offload related commands between 0x1600 and 0x16FF */ ANDROID_NL80211_SUBCMD_WIFI_OFFLOAD_RANGE_START = 0x1600, ANDROID_NL80211_SUBCMD_WIFI_OFFLOAD_RANGE_END = 0x16FF, /* define all NAN related commands between 0x1700 and 0x17FF */ ANDROID_NL80211_SUBCMD_NAN_RANGE_START = 0x1700, ANDROID_NL80211_SUBCMD_NAN_RANGE_END = 0x17FF, /* define all Android Packet Filter related commands between 0x1800 and 0x18FF */ ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_START = 0x1800, ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_END = 0x18FF, /* This is reserved for future usage */ } ANDROID_VENDOR_SUB_COMMAND; typedef enum { WIFI_OFFLOAD_SUBCMD_START_MKEEP_ALIVE = ANDROID_NL80211_SUBCMD_WIFI_OFFLOAD_RANGE_START, WIFI_OFFLOAD_SUBCMD_STOP_MKEEP_ALIVE, } WIFI_OFFLOAD_SUB_COMMAND; enum mkeep_alive_attributes { MKEEP_ALIVE_ATTRIBUTE_ID = 0x1, MKEEP_ALIVE_ATTRIBUTE_IP_PKT, MKEEP_ALIVE_ATTRIBUTE_IP_PKT_LEN, MKEEP_ALIVE_ATTRIBUTE_SRC_MAC_ADDR, MKEEP_ALIVE_ATTRIBUTE_DST_MAC_ADDR, MKEEP_ALIVE_ATTRIBUTE_PERIOD_MSEC, MKEEP_ALIVE_ATTRIBUTE_AFTER_LAST, MKEEP_ALIVE_ATTRIBUTE_MAX = MKEEP_ALIVE_ATTRIBUTE_AFTER_LAST - 1 }; enum debug_sub_command { LOGGER_START_LOGGING = ANDROID_NL80211_SUBCMD_DEBUG_RANGE_START, LOGGER_TRIGGER_MEM_DUMP, LOGGER_GET_MEM_DUMP, LOGGER_GET_VER, LOGGER_GET_RING_STATUS, LOGGER_GET_RING_DATA, LOGGER_GET_FEATURE, LOGGER_RESET_LOGGING, LOGGER_TRIGGER_DRIVER_MEM_DUMP, LOGGER_GET_DRIVER_MEM_DUMP, LOGGER_START_PKT_FATE_MONITORING, LOGGER_GET_TX_PKT_FATES, LOGGER_GET_RX_PKT_FATES, LOGGER_GET_WAKE_REASON_STATS, LOGGER_DEBUG_GET_DUMP, LOGGER_FILE_DUMP_DONE_IND, LOGGER_SET_HAL_START, LOGGER_HAL_STOP, LOGGER_SET_HAL_PID, }; enum logger_attributes { LOGGER_ATTRIBUTE_INVALID = 0, LOGGER_ATTRIBUTE_DRIVER_VER, LOGGER_ATTRIBUTE_FW_VER, LOGGER_ATTRIBUTE_RING_ID, LOGGER_ATTRIBUTE_RING_NAME, LOGGER_ATTRIBUTE_RING_FLAGS, LOGGER_ATTRIBUTE_LOG_LEVEL, LOGGER_ATTRIBUTE_LOG_TIME_INTVAL, LOGGER_ATTRIBUTE_LOG_MIN_DATA_SIZE, LOGGER_ATTRIBUTE_FW_DUMP_LEN, LOGGER_ATTRIBUTE_FW_DUMP_DATA, // LOGGER_ATTRIBUTE_FW_ERR_CODE, LOGGER_ATTRIBUTE_RING_DATA, LOGGER_ATTRIBUTE_RING_STATUS, LOGGER_ATTRIBUTE_RING_NUM, LOGGER_ATTRIBUTE_DRIVER_DUMP_LEN, LOGGER_ATTRIBUTE_DRIVER_DUMP_DATA, LOGGER_ATTRIBUTE_PKT_FATE_NUM, LOGGER_ATTRIBUTE_PKT_FATE_DATA, LOGGER_ATTRIBUTE_AFTER_LAST, LOGGER_ATTRIBUTE_MAX = LOGGER_ATTRIBUTE_AFTER_LAST - 1, }; enum wifi_sub_command { GSCAN_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START, GSCAN_SUBCMD_SET_CONFIG, /* 0x1001 */ GSCAN_SUBCMD_SET_SCAN_CONFIG, /* 0x1002 */ GSCAN_SUBCMD_ENABLE_GSCAN, /* 0x1003 */ GSCAN_SUBCMD_GET_SCAN_RESULTS, /* 0x1004 */ GSCAN_SUBCMD_SCAN_RESULTS, /* 0x1005 */ GSCAN_SUBCMD_SET_HOTLIST, /* 0x1006 */ GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG, /* 0x1007 */ GSCAN_SUBCMD_ENABLE_FULL_SCAN_RESULTS, /* 0x1008 */ GSCAN_SUBCMD_GET_CHANNEL_LIST, /* 0x1009 */ WIFI_SUBCMD_GET_FEATURE_SET, /* 0x100A */ WIFI_SUBCMD_GET_FEATURE_SET_MATRIX, /* 0x100B */ WIFI_SUBCMD_SET_PNO_RANDOM_MAC_OUI, /* 0x100C */ WIFI_SUBCMD_NODFS_SET, /* 0x100D */ WIFI_SUBCMD_SET_COUNTRY_CODE, /* 0x100E */ /* Add more sub commands here */ GSCAN_SUBCMD_SET_EPNO_SSID, /* 0x100F */ WIFI_SUBCMD_SET_SSID_WHITE_LIST, /* 0x1010 */ WIFI_SUBCMD_SET_ROAM_PARAMS, /* 0x1011 */ WIFI_SUBCMD_ENABLE_LAZY_ROAM, /* 0x1012 */ WIFI_SUBCMD_SET_BSSID_PREF, /* 0x1013 */ WIFI_SUBCMD_SET_BSSID_BLACKLIST, /* 0x1014 */ GSCAN_SUBCMD_ANQPO_CONFIG, /* 0x1015 */ WIFI_SUBCMD_SET_RSSI_MONITOR, /* 0x1016 */ WIFI_SUBCMD_CONFIG_ND_OFFLOAD, /* 0x1017 */ /* Add more sub commands here */ GSCAN_SUBCMD_MAX, APF_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_START, APF_SUBCMD_SET_FILTER, }; enum gscan_attributes { GSCAN_ATTRIBUTE_NUM_BUCKETS = 10, GSCAN_ATTRIBUTE_BASE_PERIOD, GSCAN_ATTRIBUTE_BUCKETS_BAND, GSCAN_ATTRIBUTE_BUCKET_ID, GSCAN_ATTRIBUTE_BUCKET_PERIOD, GSCAN_ATTRIBUTE_BUCKET_NUM_CHANNELS, GSCAN_ATTRIBUTE_BUCKET_CHANNELS, GSCAN_ATTRIBUTE_NUM_AP_PER_SCAN, GSCAN_ATTRIBUTE_REPORT_THRESHOLD, GSCAN_ATTRIBUTE_NUM_SCANS_TO_CACHE, GSCAN_ATTRIBUTE_BAND = GSCAN_ATTRIBUTE_BUCKETS_BAND, GSCAN_ATTRIBUTE_ENABLE_FEATURE = 20, GSCAN_ATTRIBUTE_SCAN_RESULTS_COMPLETE, /* indicates no more results */ GSCAN_ATTRIBUTE_FLUSH_FEATURE, /* Flush all the configs */ GSCAN_ENABLE_FULL_SCAN_RESULTS, GSCAN_ATTRIBUTE_REPORT_EVENTS, /* remaining reserved for additional attributes */ GSCAN_ATTRIBUTE_NUM_OF_RESULTS = 30, GSCAN_ATTRIBUTE_FLUSH_RESULTS, GSCAN_ATTRIBUTE_SCAN_RESULTS, /* flat array of wifi_scan_result */ GSCAN_ATTRIBUTE_SCAN_ID, /* indicates scan number */ GSCAN_ATTRIBUTE_SCAN_FLAGS, /* indicates if scan was aborted */ GSCAN_ATTRIBUTE_AP_FLAGS, /* flags on significant change event */ GSCAN_ATTRIBUTE_NUM_CHANNELS, GSCAN_ATTRIBUTE_CHANNEL_LIST, GSCAN_ATTRIBUTE_CH_BUCKET_BITMASK, GSCAN_ATTRIBUTE_AFTER_LAST, GSCAN_ATTRIBUTE_MAX = GSCAN_ATTRIBUTE_AFTER_LAST - 1, }; enum andr_wifi_attributes { ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET, ANDR_WIFI_ATTRIBUTE_FEATURE_SET, ANDR_WIFI_ATTRIBUTE_PNO_RANDOM_MAC_OUI, ANDR_WIFI_ATTRIBUTE_NODFS_SET, ANDR_WIFI_ATTRIBUTE_COUNTRY, ANDR_WIFI_ATTRIBUTE_ND_OFFLOAD_VALUE, // Add more attribute here ANDR_WIFI_ATTRIBUTE_AFTER_LAST, ANDR_WIFI_ATTRIBUTE_MAX = ANDR_WIFI_ATTRIBUTE_AFTER_LAST - 1, }; enum wifi_support_feature { /* Feature enums */ WIFI_FEATURE_INFRA = 0x0001, /* Basic infrastructure mode */ WIFI_FEATURE_INFRA_5G = 0x0002, /* Support for 5, GHz Band */ WIFI_FEATURE_HOTSPOT = 0x0004, /* Support for GAS/ANQP */ WIFI_FEATURE_P2P = 0x0008, /* Wifi-Direct */ WIFI_FEATURE_SOFT_AP = 0x0010, /* Soft AP */ WIFI_FEATURE_GSCAN = 0x0020, /* Google-Scan APIs */ WIFI_FEATURE_NAN = 0x0040, /* Neighbor Awareness Networking */ WIFI_FEATURE_D2D_RTT = 0x0080, /* Device-to-device RTT */ WIFI_FEATURE_D2AP_RTT = 0x0100, /* Device-to-AP RTT */ WIFI_FEATURE_BATCH_SCAN = 0x0200, /* Batched Scan (legacy) */ WIFI_FEATURE_PNO = 0x0400, /* Preferred network offload */ WIFI_FEATURE_ADDITIONAL_STA = 0x0800, /* Support for two STAs */ WIFI_FEATURE_TDLS = 0x1000, /* Tunnel directed link setup */ WIFI_FEATURE_TDLS_OFFCHANNEL = 0x2000, /* Support for TDLS off channel */ WIFI_FEATURE_EPR = 0x4000, /* Enhanced power reporting */ WIFI_FEATURE_AP_STA = 0x8000, /* Support for AP STA Concurrency */ WIFI_FEATURE_LINK_LAYER_STATS = 0x10000, /* Support for Linkstats */ WIFI_FEATURE_LOGGER = 0x20000, /* WiFi Logger */ WIFI_FEATURE_HAL_EPNO = 0x40000, /* WiFi PNO enhanced */ WIFI_FEATURE_RSSI_MONITOR = 0x80000, /* RSSI Monitor */ WIFI_FEATURE_MKEEP_ALIVE = 0x100000, /* WiFi mkeep_alive */ WIFI_FEATURE_CONFIG_NDO = 0x200000, /* ND offload configure */ WIFI_FEATURE_TX_TRANSMIT_POWER = 0x400000, /* Capture Tx transmit power levels */ WIFI_FEATURE_CONTROL_ROAMING = 0x800000, /* Enable/Disable firmware roaming */ WIFI_FEATURE_IE_WHITELIST = 0x1000000, /* Support Probe IE white listing */ WIFI_FEATURE_SCAN_RAND = 0x2000000, /* Support MAC & Probe Sequence Number randomization */ WIFI_FEATURE_INVALID = 0xFFFFFFFF, /* Invalid Feature */ }; enum wifi_logger_feature { WIFI_LOGGER_MEMORY_DUMP_SUPPORTED = (1 << (0)), // Memory dump of FW WIFI_LOGGER_PER_PACKET_TX_RX_STATUS_SUPPORTED = (1 << (1)), // PKT status WIFI_LOGGER_CONNECT_EVENT_SUPPORTED = (1 << (2)), // Connectivity event WIFI_LOGGER_POWER_EVENT_SUPPORTED = (1 << (3)), // POWER of Driver WIFI_LOGGER_WAKE_LOCK_SUPPORTED = (1 << (4)), // WAKE LOCK of Driver WIFI_LOGGER_VERBOSE_SUPPORTED = (1 << (5)), // verbose log of FW WIFI_LOGGER_WATCHDOG_TIMER_SUPPORTED = (1 << (6)), // monitor the health of FW WIFI_LOGGER_DRIVER_DUMP_SUPPORTED = (1 << (7)), // dumps driver state WIFI_LOGGER_PACKET_FATE_SUPPORTED = (1 << (8)), // tracks connection packets' fate }; enum wake_stats_attributes { WAKE_STAT_ATTRIBUTE_TOTAL_CMD_EVENT, WAKE_STAT_ATTRIBUTE_CMD_EVENT_WAKE, WAKE_STAT_ATTRIBUTE_CMD_EVENT_COUNT, WAKE_STAT_ATTRIBUTE_CMD_COUNT_USED, WAKE_STAT_ATTRIBUTE_TOTAL_DRIVER_FW, WAKE_STAT_ATTRIBUTE_DRIVER_FW_WAKE, WAKE_STAT_ATTRIBUTE_DRIVER_FW_COUNT, WAKE_STAT_ATTRIBUTE_DRIVER_FW_COUNT_USED, WAKE_STAT_ATTRIBUTE_TOTAL_RX_DATA_WAKE, WAKE_STAT_ATTRIBUTE_RX_UNICAST_COUNT, WAKE_STAT_ATTRIBUTE_RX_MULTICAST_COUNT, WAKE_STAT_ATTRIBUTE_RX_BROADCAST_COUNT, WAKE_STAT_ATTRIBUTE_RX_ICMP_PKT, WAKE_STAT_ATTRIBUTE_RX_ICMP6_PKT, WAKE_STAT_ATTRIBUTE_RX_ICMP6_RA, WAKE_STAT_ATTRIBUTE_RX_ICMP6_NA, WAKE_STAT_ATTRIBUTE_RX_ICMP6_NS, WAKE_STAT_ATTRIBUTE_IPV4_RX_MULTICAST_ADD_CNT, WAKE_STAT_ATTRIBUTE_IPV6_RX_MULTICAST_ADD_CNT, WAKE_STAT_ATTRIBUTE_OTHER__RX_MULTICAST_ADD_CNT, WAKE_STAT_ATTRIBUTE_RX_MULTICAST_PKT_INFO, WAKE_STAT_ATTRIBUTE_AFTER_LAST, WAKE_STAT_ATTRIBUTE_MAX = WAKE_STAT_ATTRIBUTE_AFTER_LAST - 1, }; enum vendor_nl80211_subcmd { /* copied from wpa_supplicant brcm definations */ VENDOR_NL80211_SUBCMD_UNSPEC = 0, VENDOR_NL80211_SUBCMD_SET_PMK = 4, VENDOR_NL80211_SUBCMD_SET_MAC = 6, VENDOR_NL80211_SCMD_ACS = 9, VENDOR_NL80211_SCMD_MAX = 10, }; enum nl80211_vendor_subcmd_attributes { WIFI_VENDOR_ATTR_DRIVER_CMD = 0, WIFI_VENDOR_ATTR_DRIVER_KEY_PMK = 1, WIFI_VENDOR_ATTR_DRIVER_MAC_ADDR = 3, WIFI_VENDOR_ATTR_DRIVER_AFTER_LAST = 5, WIFI_VENDOR_ATTR_DRIVER_MAX = WIFI_VENDOR_ATTR_DRIVER_AFTER_LAST - 1, }; typedef int wifi_ring_buffer_id; struct wifi_ring_buffer_status { u8 name[32]; u32 flags; wifi_ring_buffer_id ring_id; u32 ring_buffer_byte_size; u32 verbose_level; u32 written_bytes; u32 read_bytes; u32 written_records; }; struct rx_data_cnt_details_t { int rx_unicast_cnt; /*Total rx unicast packet which woke up host */ int rx_multicast_cnt; /*Total rx multicast packet which woke up host */ int rx_broadcast_cnt; /*Total rx broadcast packet which woke up host */ }; struct rx_wake_pkt_type_classification_t { int icmp_pkt; /*wake icmp packet count */ int icmp6_pkt; /*wake icmp6 packet count */ int icmp6_ra; /*wake icmp6 RA packet count */ int icmp6_na; /*wake icmp6 NA packet count */ int icmp6_ns; /*wake icmp6 NS packet count */ //ToDo: Any more interesting classification to add? }; struct rx_multicast_cnt_t{ int ipv4_rx_multicast_addr_cnt; /*Rx wake packet was ipv4 multicast */ int ipv6_rx_multicast_addr_cnt; /*Rx wake packet was ipv6 multicast */ int other_rx_multicast_addr_cnt;/*Rx wake packet was non-ipv4 and non-ipv6*/ }; struct wlan_driver_wake_reason_cnt_t { int total_cmd_event_wake; /* Total count of cmd event wakes */ int *cmd_event_wake_cnt; /* Individual wake count array, each index a reason */ int cmd_event_wake_cnt_sz; /* Max number of cmd event wake reasons */ int cmd_event_wake_cnt_used; /* Number of cmd event wake reasons specific to the driver */ int total_driver_fw_local_wake; /* Total count of drive/fw wakes, for local reasons */ int *driver_fw_local_wake_cnt; /* Individual wake count array, each index a reason */ int driver_fw_local_wake_cnt_sz; /* Max number of local driver/fw wake reasons */ int driver_fw_local_wake_cnt_used; /* Number of local driver/fw wake reasons specific to the driver */ int total_rx_data_wake; /* total data rx packets, that woke up host */ struct rx_data_cnt_details_t rx_wake_details; struct rx_wake_pkt_type_classification_t rx_wake_pkt_classification_info; struct rx_multicast_cnt_t rx_multicast_wake_pkt_info; }; typedef struct wl_mkeep_alive_pkt { u16 version; /* Version for mkeep_alive */ u16 length; /* length of fixed parameters in the structure */ u32 period_msec; /* high bit on means immediate send */ u16 len_bytes; u8 keep_alive_id; /* 0 - 3 for N = 4 */ u8 data[1]; } wl_mkeep_alive_pkt_t; #endif /* _AIC_VENDOR_H */