11a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 21a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#include "wifi_hal.h" 31a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 41a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#ifndef __WIFI_HAL_COMMON_H__ 51a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#define __WIFI_HAL_COMMON_H__ 61a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 71a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#define LOG_TAG "WifiHAL" 81a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 91a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#include <utils/Log.h> 101a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#include "nl80211_copy.h" 11bb8a4d506769d7dc8b33445c6725a40b7523063cVinit Deshpande#include "sync.h" 121a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 131a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#define SOCKET_BUFFER_SIZE (32768U) 141a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#define RECV_BUF_SIZE (4096) 151a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#define DEFAULT_EVENT_CB_SIZE (64) 161a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#define DEFAULT_CMD_SIZE (64) 17f0d5070a931327e6356d765478069b9e66452a5bAshwin#define DOT11_OUI_LEN 3 182b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin#define DOT11_MAX_SSID_LEN 32 191a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 202b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin#define MAX_PROBE_RESP_IE_LEN 2048 211a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde/* 221a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde Vendor OUI - This is a unique identifier that identifies organization. Lets 231a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde code Android specific functions with Google OUI; although vendors can do more 241a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde with their own OUI's as well. 251a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde */ 261a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 271a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndeconst uint32_t GOOGLE_OUI = 0x001A11; 281a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde/* TODO: define vendor OUI here */ 291a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 301a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 311a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde/* 321a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde This enum defines ranges for various commands; commands themselves 331a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde can be defined in respective feature headers; i.e. find gscan command 341a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde definitions in gscan.cpp 351a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde */ 361a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 371a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndetypedef enum { 381a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde /* don't use 0 as a valid subcommand */ 391a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde VENDOR_NL80211_SUBCMD_UNSPECIFIED, 401a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 411a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde /* define all vendor startup commands between 0x0 and 0x0FFF */ 421a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde VENDOR_NL80211_SUBCMD_RANGE_START = 0x0001, 431a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde VENDOR_NL80211_SUBCMD_RANGE_END = 0x0FFF, 441a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 451a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde /* define all GScan related commands between 0x1000 and 0x10FF */ 461a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START = 0x1000, 471a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde ANDROID_NL80211_SUBCMD_GSCAN_RANGE_END = 0x10FF, 481a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 491a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde /* define all NearbyDiscovery related commands between 0x1100 and 0x11FF */ 501a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde ANDROID_NL80211_SUBCMD_NBD_RANGE_START = 0x1100, 511a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde ANDROID_NL80211_SUBCMD_NBD_RANGE_END = 0x11FF, 521a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 531a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde /* define all RTT related commands between 0x1100 and 0x11FF */ 541a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde ANDROID_NL80211_SUBCMD_RTT_RANGE_START = 0x1100, 551a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde ANDROID_NL80211_SUBCMD_RTT_RANGE_END = 0x11FF, 561a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 5771cd80b3a0a1d019090f0dc022fce785ded3883eChilam Ng ANDROID_NL80211_SUBCMD_LSTATS_RANGE_START = 0x1200, 5871cd80b3a0a1d019090f0dc022fce785ded3883eChilam Ng ANDROID_NL80211_SUBCMD_LSTATS_RANGE_END = 0x12FF, 5971cd80b3a0a1d019090f0dc022fce785ded3883eChilam Ng 60aa306e5f46b3e0e72d7917760b8af6aaebc35b1eJerry Lee /* define all Logger related commands between 0x1400 and 0x14FF */ 61aa306e5f46b3e0e72d7917760b8af6aaebc35b1eJerry Lee ANDROID_NL80211_SUBCMD_DEBUG_RANGE_START = 0x1400, 62aa306e5f46b3e0e72d7917760b8af6aaebc35b1eJerry Lee ANDROID_NL80211_SUBCMD_DEBUG_RANGE_END = 0x14FF, 63aa306e5f46b3e0e72d7917760b8af6aaebc35b1eJerry Lee 648f1ec7e8e43ec37e94806764b2873c93368cf137Ecco Park /* define all wifi offload related commands between 0x1600 and 0x16FF */ 658f1ec7e8e43ec37e94806764b2873c93368cf137Ecco Park ANDROID_NL80211_SUBCMD_WIFI_OFFLOAD_RANGE_START = 0x1600, 668f1ec7e8e43ec37e94806764b2873c93368cf137Ecco Park ANDROID_NL80211_SUBCMD_WIFI_OFFLOAD_RANGE_END = 0x16FF, 678f1ec7e8e43ec37e94806764b2873c93368cf137Ecco Park 68dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma /* define all NAN related commands between 0x1700 and 0x17FF */ 69dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma ANDROID_NL80211_SUBCMD_NAN_RANGE_START = 0x1700, 70dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma ANDROID_NL80211_SUBCMD_NAN_RANGE_END = 0x17FF, 71dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma 72dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma /* define all Android Packet Filter related commands between 0x1800 and 0x18FF */ 73dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_START = 0x1800, 74dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_END = 0x18FF, 75dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma 761a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde /* This is reserved for future usage */ 771a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 781a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde} ANDROID_VENDOR_SUB_COMMAND; 791a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 80115bcffc16c53e9552c09a6792666c52a633b4f2Ashwintypedef enum { 819a23388d5a9f58f106169700bb179de0a4af7840Ashwin 829a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START, 839a23388d5a9f58f106169700bb179de0a4af7840Ashwin 849a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_SET_CONFIG, /* 0x1001 */ 859a23388d5a9f58f106169700bb179de0a4af7840Ashwin 869a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_SET_SCAN_CONFIG, /* 0x1002 */ 879a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_ENABLE_GSCAN, /* 0x1003 */ 889a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_GET_SCAN_RESULTS, /* 0x1004 */ 899a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_SCAN_RESULTS, /* 0x1005 */ 909a23388d5a9f58f106169700bb179de0a4af7840Ashwin 919a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_SET_HOTLIST, /* 0x1006 */ 929a23388d5a9f58f106169700bb179de0a4af7840Ashwin 939a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG, /* 0x1007 */ 949a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_ENABLE_FULL_SCAN_RESULTS, /* 0x1008 */ 959a23388d5a9f58f106169700bb179de0a4af7840Ashwin GSCAN_SUBCMD_GET_CHANNEL_LIST, /* 0x1009 */ 969a23388d5a9f58f106169700bb179de0a4af7840Ashwin 979a23388d5a9f58f106169700bb179de0a4af7840Ashwin WIFI_SUBCMD_GET_FEATURE_SET, /* 0x100A */ 989a23388d5a9f58f106169700bb179de0a4af7840Ashwin WIFI_SUBCMD_GET_FEATURE_SET_MATRIX, /* 0x100B */ 99f0d5070a931327e6356d765478069b9e66452a5bAshwin WIFI_SUBCMD_SET_PNO_RANDOM_MAC_OUI, /* 0x100C */ 100b4ac10a4e1eddf00ddad32f3307cc050bb4e0963Dmitry Shmidt WIFI_SUBCMD_NODFS_SET, /* 0x100D */ 101c02e00563882d87ab29822c43097cbb1ce04b55dxinhe WIFI_SUBCMD_SET_COUNTRY_CODE, /* 0x100E */ 1029a23388d5a9f58f106169700bb179de0a4af7840Ashwin /* Add more sub commands here */ 10389a9a4cffbcee6af504c61ff575a008194070c82Ashwin GSCAN_SUBCMD_SET_EPNO_SSID, /* 0x100F */ 104410ad0bbd246404e61de42ea62266f4cc55f9a5aAshwin 105410ad0bbd246404e61de42ea62266f4cc55f9a5aAshwin WIFI_SUBCMD_SET_SSID_WHITE_LIST, /* 0x1010 */ 106410ad0bbd246404e61de42ea62266f4cc55f9a5aAshwin WIFI_SUBCMD_SET_ROAM_PARAMS, /* 0x1011 */ 107410ad0bbd246404e61de42ea62266f4cc55f9a5aAshwin WIFI_SUBCMD_ENABLE_LAZY_ROAM, /* 0x1012 */ 108410ad0bbd246404e61de42ea62266f4cc55f9a5aAshwin WIFI_SUBCMD_SET_BSSID_PREF, /* 0x1013 */ 109410ad0bbd246404e61de42ea62266f4cc55f9a5aAshwin WIFI_SUBCMD_SET_BSSID_BLACKLIST, /* 0x1014 */ 110f02e958d58bc49a8f228927dfb261fe57d080560Chilam Ng 111f02e958d58bc49a8f228927dfb261fe57d080560Chilam Ng GSCAN_SUBCMD_ANQPO_CONFIG, /* 0x1015 */ 112fef13c11034313585be68c32322b9a53c43a37b2Ashwin WIFI_SUBCMD_SET_RSSI_MONITOR, /* 0x1016 */ 11365f9c6fbd929be309642cdaf255e8394aad2b0caJun Lim WIFI_SUBCMD_CONFIG_ND_OFFLOAD, /* 0x1017 */ 114410ad0bbd246404e61de42ea62266f4cc55f9a5aAshwin /* Add more sub commands here */ 115410ad0bbd246404e61de42ea62266f4cc55f9a5aAshwin 116dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma GSCAN_SUBCMD_MAX, 1179a23388d5a9f58f106169700bb179de0a4af7840Ashwin 118dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma APF_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_START, 119dfe5b594561312993f587dc29e524d400e8fbc77Sreenath Sharma APF_SUBCMD_SET_FILTER, 1209a23388d5a9f58f106169700bb179de0a4af7840Ashwin} WIFI_SUB_COMMAND; 1219a23388d5a9f58f106169700bb179de0a4af7840Ashwin 1229a23388d5a9f58f106169700bb179de0a4af7840Ashwintypedef enum { 123115bcffc16c53e9552c09a6792666c52a633b4f2Ashwin BRCM_RESERVED1, 124115bcffc16c53e9552c09a6792666c52a633b4f2Ashwin BRCM_RESERVED2, 125115bcffc16c53e9552c09a6792666c52a633b4f2Ashwin GSCAN_EVENT_SIGNIFICANT_CHANGE_RESULTS , 126f0d5070a931327e6356d765478069b9e66452a5bAshwin GSCAN_EVENT_HOTLIST_RESULTS_FOUND, 127115bcffc16c53e9552c09a6792666c52a633b4f2Ashwin GSCAN_EVENT_SCAN_RESULTS_AVAILABLE, 128115bcffc16c53e9552c09a6792666c52a633b4f2Ashwin GSCAN_EVENT_FULL_SCAN_RESULTS, 1299a23388d5a9f58f106169700bb179de0a4af7840Ashwin RTT_EVENT_COMPLETE, 130f0d5070a931327e6356d765478069b9e66452a5bAshwin GSCAN_EVENT_COMPLETE_SCAN, 13189a9a4cffbcee6af504c61ff575a008194070c82Ashwin GSCAN_EVENT_HOTLIST_RESULTS_LOST, 132aa306e5f46b3e0e72d7917760b8af6aaebc35b1eJerry Lee GSCAN_EVENT_EPNO_EVENT, 133aa306e5f46b3e0e72d7917760b8af6aaebc35b1eJerry Lee GOOGLE_DEBUG_RING_EVENT, 134b3b31174c61e38a970b956cb50cb66cd1903ca9bJerry Lee GOOGLE_DEBUG_MEM_DUMP_EVENT, 135fef13c11034313585be68c32322b9a53c43a37b2Ashwin GSCAN_EVENT_ANQPO_HOTSPOT_MATCH, 136fef13c11034313585be68c32322b9a53c43a37b2Ashwin GOOGLE_RSSI_MONITOR_EVENT 137115bcffc16c53e9552c09a6792666c52a633b4f2Ashwin} WIFI_EVENT; 138115bcffc16c53e9552c09a6792666c52a633b4f2Ashwin 1391a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndetypedef void (*wifi_internal_event_handler) (wifi_handle handle, int events); 1401a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1411a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndeclass WifiCommand; 1421a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1431a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndetypedef struct { 1441a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int nl_cmd; 1451a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde uint32_t vendor_id; 1461a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int vendor_subcmd; 1471a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde nl_recvmsg_msg_cb_t cb_func; 1481a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde void *cb_arg; 1491a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde} cb_info; 1501a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1511a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndetypedef struct { 1521a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde wifi_request_id id; 1531a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde WifiCommand *cmd; 1541a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde} cmd_info; 1551a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1561a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndetypedef struct { 1571a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde wifi_handle handle; // handle to wifi data 15814563c48353feaae11cce3017f038fb5cff54c5dSreenath Sharma char name[IFNAMSIZ+1]; // interface name + trailing null 1591a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int id; // id to use when talking to driver 1601a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde} interface_info; 1611a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1621a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndetypedef struct { 1631a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1641a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde struct nl_sock *cmd_sock; // command socket object 1651a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde struct nl_sock *event_sock; // event socket object 1661a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int nl80211_family_id; // family id for 80211 driver 16705e31d445f52da4746ff0cc0703d83814cea98d0Vinit Deshpande int cleanup_socks[2]; // sockets used to implement wifi_cleanup 1681a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1691a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde bool in_event_loop; // Indicates that event loop is active 17056c89ca266b11be506192f3a13a1dba3f109c2cfAshwin bool clean_up; // Indication to exit since cleanup has started 1711a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1721a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde wifi_internal_event_handler event_handler; // default event handler 1731a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde wifi_cleaned_up_handler cleaned_up_handler; // socket cleaned up handler 1741a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1751a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde cb_info *event_cb; // event callbacks 1761a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int num_event_cb; // number of event callbacks 1771a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int alloc_event_cb; // number of allocated callback objects 178bb8a4d506769d7dc8b33445c6725a40b7523063cVinit Deshpande pthread_mutex_t cb_lock; // mutex for the event_cb access 1791a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1801a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde cmd_info *cmd; // Outstanding commands 1811a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int num_cmd; // number of commands 1821a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int alloc_cmd; // number of commands allocated 1831a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 1841a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde interface_info **interfaces; // array of interfaces 1851a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde int num_interfaces; // number of interfaces 1861a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 187bb8a4d506769d7dc8b33445c6725a40b7523063cVinit Deshpande 1881a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde // add other details 1891a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde} hal_info; 1901a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 19189a9a4cffbcee6af504c61ff575a008194070c82Ashwin#define PNO_SSID_FOUND 0x1 19289a9a4cffbcee6af504c61ff575a008194070c82Ashwin#define PNO_SSID_LOST 0x2 19389a9a4cffbcee6af504c61ff575a008194070c82Ashwin 19489a9a4cffbcee6af504c61ff575a008194070c82Ashwintypedef struct wifi_pno_result { 1952b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin unsigned char ssid[DOT11_MAX_SSID_LEN]; 19689a9a4cffbcee6af504c61ff575a008194070c82Ashwin unsigned char ssid_len; 197ee8188b877f4aac2c09ee68ec5cfc60b1869a512Pierre Vandwalle signed char rssi; 19889a9a4cffbcee6af504c61ff575a008194070c82Ashwin u16 channel; 19989a9a4cffbcee6af504c61ff575a008194070c82Ashwin u16 flags; 20025a0fb843d8b6d9141ccb435f1f9ee9a29d3afc6Ashwin mac_addr bssid; 20189a9a4cffbcee6af504c61ff575a008194070c82Ashwin} wifi_pno_result_t; 20289a9a4cffbcee6af504c61ff575a008194070c82Ashwin 2032b31c56930bc154d639da4ff2f56c34ef61688e5Ashwintypedef struct wifi_gscan_result { 2042b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u64 ts; // Time of discovery 2052b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u8 ssid[DOT11_MAX_SSID_LEN+1]; // null terminated 2062b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin mac_addr bssid; // BSSID 2072b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u32 channel; // channel frequency in MHz 2082b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin s32 rssi; // in db 2092b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u64 rtt; // in nanoseconds 2102b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u64 rtt_sd; // standard deviation in rtt 2112b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u16 beacon_period; // units are Kusec 2122b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u16 capability; // Capability information 2132b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u32 pad; 2142b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin} wifi_gscan_result_t; 2152b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin 2162b31c56930bc154d639da4ff2f56c34ef61688e5Ashwintypedef struct wifi_gscan_full_result { 2172b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin wifi_gscan_result_t fixed; 2182b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u32 scan_ch_bucket; // scan chbucket bitmask 2192b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u32 ie_length; // byte length of Information Elements 2202b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin u8 ie_data[1]; // IE data to follow 2212b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin} wifi_gscan_full_result_t; 2222b31c56930bc154d639da4ff2f56c34ef61688e5Ashwin 2231a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndewifi_error wifi_register_handler(wifi_handle handle, int cmd, nl_recvmsg_msg_cb_t func, void *arg); 2241a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndewifi_error wifi_register_vendor_handler(wifi_handle handle, 2251a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde uint32_t id, int subcmd, nl_recvmsg_msg_cb_t func, void *arg); 2261a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 2271a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndevoid wifi_unregister_handler(wifi_handle handle, int cmd); 2281a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndevoid wifi_unregister_vendor_handler(wifi_handle handle, uint32_t id, int subcmd); 2291a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 2301a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndewifi_error wifi_register_cmd(wifi_handle handle, int id, WifiCommand *cmd); 2311a526434ae215b48970501ccb463d4e77af39c9eVinit DeshapndeWifiCommand *wifi_unregister_cmd(wifi_handle handle, int id); 232115bcffc16c53e9552c09a6792666c52a633b4f2AshwinWifiCommand *wifi_get_cmd(wifi_handle handle, int id); 2331a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndevoid wifi_unregister_cmd(wifi_handle handle, WifiCommand *cmd); 2341a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 2351a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndeinterface_info *getIfaceInfo(wifi_interface_handle); 2361a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndewifi_handle getWifiHandle(wifi_interface_handle handle); 2371a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndehal_info *getHalInfo(wifi_handle handle); 2381a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndehal_info *getHalInfo(wifi_interface_handle handle); 2391a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndewifi_handle getWifiHandle(hal_info *info); 2401a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapndewifi_interface_handle getIfaceHandle(interface_info *info); 241fef13c11034313585be68c32322b9a53c43a37b2Ashwinwifi_error wifi_cancel_cmd(wifi_request_id id, wifi_interface_handle iface); 2421a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 2431a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde// some common macros 2441a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 2451a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#define min(x, y) ((x) < (y) ? (x) : (y)) 2461a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#define max(x, y) ((x) > (y) ? (x) : (y)) 2471a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 2486af064b77bfdc84a6f425a7c9d0941fad11f4489Sreenath Sharma#define NULL_CHECK_RETURN(ptr, str, ret) \ 2496af064b77bfdc84a6f425a7c9d0941fad11f4489Sreenath Sharma do { \ 2506af064b77bfdc84a6f425a7c9d0941fad11f4489Sreenath Sharma if (!(ptr)) { \ 2516af064b77bfdc84a6f425a7c9d0941fad11f4489Sreenath Sharma ALOGE("%s(): null pointer - #ptr (%s)\n", __FUNCTION__, str); \ 2526af064b77bfdc84a6f425a7c9d0941fad11f4489Sreenath Sharma return ret; \ 2536af064b77bfdc84a6f425a7c9d0941fad11f4489Sreenath Sharma } \ 2546af064b77bfdc84a6f425a7c9d0941fad11f4489Sreenath Sharma } while (0) 2556af064b77bfdc84a6f425a7c9d0941fad11f4489Sreenath Sharma 2561a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde#endif 2571a526434ae215b48970501ccb463d4e77af39c9eVinit Deshapnde 258