wlan_tdls_public_structs.h 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331
  1. /*
  2. * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for
  5. * any purpose with or without fee is hereby granted, provided that the
  6. * above copyright notice and this permission notice appear in all
  7. * copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  10. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  11. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  12. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  13. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  14. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  15. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  16. * PERFORMANCE OF THIS SOFTWARE.
  17. */
  18. /**
  19. * DOC: wlan_tdls_public_structs.h
  20. *
  21. * TDLS public structure definations
  22. */
  23. #ifndef _WLAN_TDLS_STRUCTS_H_
  24. #define _WLAN_TDLS_STRUCTS_H_
  25. #include <qdf_timer.h>
  26. #include <qdf_list.h>
  27. #include <qdf_mc_timer.h>
  28. #include <wlan_cmn.h>
  29. #include <wlan_cmn_ieee80211.h>
  30. #ifdef FEATURE_RUNTIME_PM
  31. #include <wlan_pmo_common_public_struct.h>
  32. #endif
  33. #define WLAN_TDLS_STA_MAX_NUM 8
  34. #define WLAN_TDLS_STA_P_UAPSD_OFFCHAN_MAX_NUM 1
  35. #define WLAN_TDLS_PEER_LIST_SIZE 16
  36. #define WLAN_TDLS_CT_TABLE_SIZE 8
  37. #define WLAN_TDLS_PEER_SUB_LIST_SIZE 10
  38. #define WLAN_MAC_MAX_EXTN_CAP 8
  39. #define WLAN_MAC_MAX_SUPP_CHANNELS 100
  40. #define WLAN_MAC_WMI_MAX_SUPP_CHANNELS 128
  41. #define WLAN_MAX_SUPP_OPER_CLASSES 32
  42. #define WLAN_MAC_MAX_SUPP_RATES 32
  43. #define WLAN_CHANNEL_14 14
  44. #define ENABLE_CHANSWITCH 1
  45. #define DISABLE_CHANSWITCH 2
  46. #define WLAN_TDLS_PREFERRED_OFF_CHANNEL_NUM_MIN 1
  47. #define WLAN_TDLS_PREFERRED_OFF_CHANNEL_NUM_MAX 165
  48. #define WLAN_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEF 36
  49. #define AC_PRIORITY_NUM 4
  50. /* Default tdls serialize timeout is set to 4 (peer delete) + 1 secs */
  51. #ifdef FEATURE_RUNTIME_PM
  52. /* Add extra PMO_RESUME_TIMEOUT for runtime PM resume timeout */
  53. #define TDLS_DELETE_PEER_CMD_TIMEOUT (4000 + 1000 + PMO_RESUME_TIMEOUT)
  54. #else
  55. #define TDLS_DELETE_PEER_CMD_TIMEOUT (4000 + 1000)
  56. #endif
  57. /** Maximum time(ms) to wait for tdls del sta to complete **/
  58. #define WAIT_TIME_TDLS_DEL_STA (TDLS_DELETE_PEER_CMD_TIMEOUT + 1000)
  59. #define TDLS_DEFAULT_SERIALIZE_CMD_TIMEOUT (4000)
  60. /** Maximum time(ms) to wait for tdls add sta to complete **/
  61. #define WAIT_TIME_TDLS_ADD_STA (TDLS_DEFAULT_SERIALIZE_CMD_TIMEOUT + 1000)
  62. /** Maximum time(ms) to wait for Link Establish Req to complete **/
  63. #define WAIT_TIME_TDLS_LINK_ESTABLISH_REQ 1500
  64. /** Maximum time(ms) to wait for tdls mgmt to complete **/
  65. #define WAIT_TIME_FOR_TDLS_MGMT 11000
  66. /** Maximum time(ms) to wait for tdls mgmt to complete **/
  67. #define WAIT_TIME_FOR_TDLS_USER_CMD 11000
  68. /** Maximum waittime for TDLS teardown links **/
  69. #define WAIT_TIME_FOR_TDLS_TEARDOWN_LINKS 10000
  70. /** Maximum waittime for TDLS antenna switch **/
  71. #define WAIT_TIME_FOR_TDLS_ANTENNA_SWITCH 1000
  72. #define TDLS_TEARDOWN_PEER_UNREACHABLE 25
  73. #define TDLS_TEARDOWN_PEER_UNSPEC_REASON 26
  74. #define INVALID_TDLS_PEER_INDEX 0xFF
  75. /**
  76. * enum tdls_add_oper - add peer type
  77. * @TDLS_OPER_NONE: none
  78. * @TDLS_OPER_ADD: add new peer
  79. * @TDLS_OPER_UPDATE: used to update peer
  80. */
  81. enum tdls_add_oper {
  82. TDLS_OPER_NONE,
  83. TDLS_OPER_ADD,
  84. TDLS_OPER_UPDATE
  85. };
  86. /**
  87. * enum tdls_conc_cap - tdls concurrency support
  88. * @TDLS_SUPPORTED_ONLY_ON_STA: only support sta tdls
  89. * @TDLS_SUPPORTED_ONLY_ON_P2P_CLIENT: only support p2p client tdls
  90. */
  91. enum tdls_conc_cap {
  92. TDLS_SUPPORTED_ONLY_ON_STA = 0,
  93. TDLS_SUPPORTED_ONLY_ON_P2P_CLIENT,
  94. };
  95. /**
  96. * enum tdls_peer_capab - tdls capability type
  97. * @TDLS_CAP_NOT_SUPPORTED: tdls not supported
  98. * @TDLS_CAP_UNKNOWN: unknown capability
  99. * @TDLS_CAP_SUPPORTED: tdls capability supported
  100. */
  101. enum tdls_peer_capab {
  102. TDLS_CAP_NOT_SUPPORTED = -1,
  103. TDLS_CAP_UNKNOWN = 0,
  104. TDLS_CAP_SUPPORTED = 1,
  105. };
  106. /**
  107. * enum tdls_peer_state - tdls peer state
  108. * @TDLS_PEER_STATE_PEERING: tdls connection in progress
  109. * @TDLS_PEER_STATE_CONNECTED: tdls peer is connected
  110. * @TDLS_PEER_STATE_TEARDOWN: tdls peer is tear down
  111. * @TDLS_PEER_ADD_MAC_ADDR: add peer mac into connection table
  112. * @TDLS_PEER_REMOVE_MAC_ADDR: remove peer mac from connection table
  113. */
  114. enum tdls_peer_state {
  115. TDLS_PEER_STATE_PEERING,
  116. TDLS_PEER_STATE_CONNECTED,
  117. TDLS_PEER_STATE_TEARDOWN,
  118. TDLS_PEER_ADD_MAC_ADDR,
  119. TDLS_PEER_REMOVE_MAC_ADDR
  120. };
  121. /**
  122. * enum tdls_link_state - tdls link state
  123. * @TDLS_LINK_IDLE: tdls link idle
  124. * @TDLS_LINK_DISCOVERING: tdls link discovering
  125. * @TDLS_LINK_DISCOVERED: tdls link discovered
  126. * @TDLS_LINK_CONNECTING: tdls link connecting
  127. * @TDLS_LINK_CONNECTED: tdls link connected
  128. * @TDLS_LINK_TEARING: tdls link tearing
  129. */
  130. enum tdls_link_state {
  131. TDLS_LINK_IDLE = 0,
  132. TDLS_LINK_DISCOVERING,
  133. TDLS_LINK_DISCOVERED,
  134. TDLS_LINK_CONNECTING,
  135. TDLS_LINK_CONNECTED,
  136. TDLS_LINK_TEARING,
  137. };
  138. /**
  139. * enum tdls_link_state_reason - tdls link reason
  140. * @TDLS_LINK_SUCCESS: Success
  141. * @TDLS_LINK_UNSPECIFIED: Unspecified reason
  142. * @TDLS_LINK_NOT_SUPPORTED: Remote side doesn't support TDLS
  143. * @TDLS_LINK_UNSUPPORTED_BAND: Remote side doesn't support this band
  144. * @TDLS_LINK_NOT_BENEFICIAL: Going to AP is better than direct
  145. * @TDLS_LINK_DROPPED_BY_REMOTE: Remote side doesn't want it anymore
  146. */
  147. enum tdls_link_state_reason {
  148. TDLS_LINK_SUCCESS,
  149. TDLS_LINK_UNSPECIFIED = -1,
  150. TDLS_LINK_NOT_SUPPORTED = -2,
  151. TDLS_LINK_UNSUPPORTED_BAND = -3,
  152. TDLS_LINK_NOT_BENEFICIAL = -4,
  153. TDLS_LINK_DROPPED_BY_REMOTE = -5,
  154. };
  155. /**
  156. * enum tdls_feature_mode - TDLS support mode
  157. * @TDLS_SUPPORT_DISABLED: Disabled in ini or FW
  158. * @TDLS_SUPPORT_SUSPENDED: TDLS supported by ini and FW, but disabled
  159. * temporarily due to off-channel operations or due to other reasons
  160. * @TDLS_SUPPORT_EXP_TRIG_ONLY: Explicit trigger mode
  161. * @TDLS_SUPPORT_IMP_MODE: Implicit mode
  162. * @TDLS_SUPPORT_EXT_CONTROL: External control mode
  163. */
  164. enum tdls_feature_mode {
  165. TDLS_SUPPORT_DISABLED = 0,
  166. TDLS_SUPPORT_SUSPENDED,
  167. TDLS_SUPPORT_EXP_TRIG_ONLY,
  168. TDLS_SUPPORT_IMP_MODE,
  169. TDLS_SUPPORT_EXT_CONTROL,
  170. };
  171. /**
  172. * enum tdls_command_type - TDLS command type
  173. * @TDLS_CMD_TX_ACTION: send tdls action frame
  174. * @TDLS_CMD_ADD_STA: add tdls peer
  175. * @TDLS_CMD_CHANGE_STA: change tdls peer
  176. * @TDLS_CMD_ENABLE_LINK: enable tdls link
  177. * @TDLS_CMD_DISABLE_LINK: disable tdls link
  178. * @TDLS_CMD_CONFIG_FORCE_PEER: config external peer
  179. * @TDLS_CMD_REMOVE_FORCE_PEER: remove external peer
  180. * @TDLS_CMD_STATS_UPDATE: update tdls stats
  181. * @TDLS_CMD_CONFIG_UPDATE: config tdls
  182. * @TDLS_CMD_SCAN_DONE: scon done event
  183. * @TDLS_CMD_SET_RESPONDER: responder event
  184. * @TDLS_NOTIFY_STA_CONNECTION: notify sta connection
  185. * @TDLS_NOTIFY_STA_DISCONNECTION: notify sta disconnection
  186. * @TDLS_CMD_SET_TDLS_MODE: set the tdls mode
  187. * @TDLS_CMD_SESSION_INCREMENT: notify session increment
  188. * @TDLS_CMD_SESSION_DECREMENT: notify session decrement
  189. * @TDLS_CMD_TEARDOWN_LINKS: notify teardown
  190. * @TDLS_NOTIFY_RESET_ADAPTERS: notify adapter reset
  191. * @TDLS_CMD_GET_ALL_PEERS: get all the tdls peers from the list
  192. * @TDLS_CMD_ANTENNA_SWITCH: dynamic tdls antenna switch
  193. * @TDLS_CMD_SET_OFFCHANNEL: tdls offchannel
  194. * @TDLS_CMD_SET_OFFCHANMODE: tdls offchannel mode
  195. * @TDLS_CMD_SET_SECOFFCHANOFFSET: tdls secondary offchannel offset
  196. * @TDLS_DELETE_ALL_PEERS_INDICATION: tdls delete all peers indication
  197. */
  198. enum tdls_command_type {
  199. TDLS_CMD_TX_ACTION = 1,
  200. TDLS_CMD_ADD_STA,
  201. TDLS_CMD_CHANGE_STA,
  202. TDLS_CMD_ENABLE_LINK,
  203. TDLS_CMD_DISABLE_LINK,
  204. TDLS_CMD_CONFIG_FORCE_PEER,
  205. TDLS_CMD_REMOVE_FORCE_PEER,
  206. TDLS_CMD_STATS_UPDATE,
  207. TDLS_CMD_CONFIG_UPDATE,
  208. TDLS_CMD_SCAN_DONE,
  209. TDLS_CMD_SET_RESPONDER,
  210. TDLS_NOTIFY_STA_CONNECTION,
  211. TDLS_NOTIFY_STA_DISCONNECTION,
  212. TDLS_CMD_SET_TDLS_MODE,
  213. TDLS_CMD_SESSION_INCREMENT,
  214. TDLS_CMD_SESSION_DECREMENT,
  215. TDLS_CMD_TEARDOWN_LINKS,
  216. TDLS_NOTIFY_RESET_ADAPTERS,
  217. TDLS_CMD_GET_ALL_PEERS,
  218. TDLS_CMD_ANTENNA_SWITCH,
  219. TDLS_CMD_SET_OFFCHANNEL,
  220. TDLS_CMD_SET_OFFCHANMODE,
  221. TDLS_CMD_SET_SECOFFCHANOFFSET,
  222. TDLS_DELETE_ALL_PEERS_INDICATION
  223. };
  224. /**
  225. * enum tdls_event_type - TDLS event type
  226. * @TDLS_EVENT_VDEV_STATE_CHANGE: umac connect/disconnect event
  227. * @TDLS_EVENT_MGMT_TX_ACK_CNF: tx tdls frame ack event
  228. * @TDLS_EVENT_RX_MGMT: rx discovery response frame
  229. * @TDLS_EVENT_ADD_PEER: add peer or update peer
  230. * @TDLS_EVENT_DEL_PEER: delete peer
  231. * @TDLS_EVENT_DISCOVERY_REQ: dicovery request
  232. * @TDLS_EVENT_TEARDOWN_REQ: teardown request
  233. * @TDLS_EVENT_SETUP_REQ: setup request
  234. * @TDLS_EVENT_TEARDOWN_LINKS_DONE: teardown completion event
  235. * @TDLS_EVENT_USER_CMD: tdls user command
  236. * @TDLS_EVENT_ANTENNA_SWITCH: antenna switch event
  237. */
  238. enum tdls_event_type {
  239. TDLS_EVENT_VDEV_STATE_CHANGE = 0,
  240. TDLS_EVENT_MGMT_TX_ACK_CNF,
  241. TDLS_EVENT_RX_MGMT,
  242. TDLS_EVENT_ADD_PEER,
  243. TDLS_EVENT_DEL_PEER,
  244. TDLS_EVENT_DISCOVERY_REQ,
  245. TDLS_EVENT_TEARDOWN_REQ,
  246. TDLS_EVENT_SETUP_REQ,
  247. TDLS_EVENT_TEARDOWN_LINKS_DONE,
  248. TDLS_EVENT_USER_CMD,
  249. TDLS_EVENT_ANTENNA_SWITCH,
  250. };
  251. /**
  252. * enum tdls_state_t - tdls state
  253. * @QCA_WIFI_HAL_TDLS_DISABLED: TDLS is not enabled, or is disabled now
  254. * @QCA_WIFI_HAL_TDLS_ENABLED: TDLS is enabled, but not yet tried
  255. * @QCA_WIFI_HAL_TDLS_ESTABLISHED: Direct link is established
  256. * @QCA_WIFI_HAL_TDLS_ESTABLISHED_OFF_CHANNEL: Direct link established using MCC
  257. * @QCA_WIFI_HAL_TDLS_DROPPED: Direct link was established, but is now dropped
  258. * @QCA_WIFI_HAL_TDLS_FAILED: Direct link failed
  259. */
  260. enum tdls_state_t {
  261. QCA_WIFI_HAL_TDLS_S_DISABLED = 1,
  262. QCA_WIFI_HAL_TDLS_S_ENABLED,
  263. QCA_WIFI_HAL_TDLS_S_ESTABLISHED,
  264. QCA_WIFI_HAL_TDLS_S_ESTABLISHED_OFF_CHANNEL,
  265. QCA_WIFI_HAL_TDLS_S_DROPPED,
  266. QCA_WIFI_HAL_TDLS_S_FAILED,
  267. };
  268. /**
  269. * enum tdls_off_chan_mode - mode for WMI_TDLS_SET_OFFCHAN_MODE_CMDID
  270. * @TDLS_ENABLE_OFFCHANNEL: enable off channel
  271. * @TDLS_DISABLE_OFFCHANNEL: disable off channel
  272. */
  273. enum tdls_off_chan_mode {
  274. TDLS_ENABLE_OFFCHANNEL,
  275. TDLS_DISABLE_OFFCHANNEL
  276. };
  277. /**
  278. * enum tdls_event_msg_type - TDLS event message type
  279. * @TDLS_SHOULD_DISCOVER: should do discover for peer (based on tx bytes per
  280. * second > tx_discover threshold)
  281. * @TDLS_SHOULD_TEARDOWN: recommend teardown the link for peer due to tx bytes
  282. * per second below tx_teardown_threshold
  283. * @TDLS_PEER_DISCONNECTED: tdls peer disconnected
  284. * @TDLS_CONNECTION_TRACKER_NOTIFY: TDLS/BT role change notification for
  285. * connection tracker
  286. */
  287. enum tdls_event_msg_type {
  288. TDLS_SHOULD_DISCOVER = 0,
  289. TDLS_SHOULD_TEARDOWN,
  290. TDLS_PEER_DISCONNECTED,
  291. TDLS_CONNECTION_TRACKER_NOTIFY
  292. };
  293. /**
  294. * enum tdls_event_reason - TDLS event reason
  295. * @TDLS_TEARDOWN_TX: tdls teardown recommended due to low transmits
  296. * @TDLS_TEARDOWN_RSSI: tdls link tear down recommended due to poor RSSI
  297. * @TDLS_TEARDOWN_SCAN: tdls link tear down recommended due to offchannel scan
  298. * @TDLS_TEARDOWN_PTR_TIMEOUT: tdls peer disconnected due to PTR timeout
  299. * @TDLS_TEARDOWN_BAD_PTR: tdls peer disconnected due wrong PTR format
  300. * @TDLS_TEARDOWN_NO_RSP: tdls peer not responding
  301. * @TDLS_DISCONNECTED_PEER_DELETE: tdls peer disconnected due to peer deletion
  302. * @TDLS_PEER_ENTER_BUF_STA: tdls entered buffer STA role, TDLS connection
  303. * tracker needs to handle this
  304. * @TDLS_PEER_EXIT_BUF_STA: tdls exited buffer STA role, TDLS connection tracker
  305. * needs to handle this
  306. * @TDLS_ENTER_BT_BUSY: BT entered busy mode, TDLS connection tracker needs to
  307. * handle this
  308. * @TDLS_EXIT_BT_BUSY: BT exited busy mode, TDLS connection tracker needs to
  309. * handle this
  310. * @DLS_SCAN_STARTED: TDLS module received a scan start event, TDLS connection
  311. * tracker needs to handle this
  312. * @TDLS_SCAN_COMPLETED: TDLS module received a scan complete event, TDLS
  313. * connection tracker needs to handle this
  314. */
  315. enum tdls_event_reason {
  316. TDLS_TEARDOWN_TX,
  317. TDLS_TEARDOWN_RSSI,
  318. TDLS_TEARDOWN_SCAN,
  319. TDLS_TEARDOWN_PTR_TIMEOUT,
  320. TDLS_TEARDOWN_BAD_PTR,
  321. TDLS_TEARDOWN_NO_RSP,
  322. TDLS_DISCONNECTED_PEER_DELETE,
  323. TDLS_PEER_ENTER_BUF_STA,
  324. TDLS_PEER_EXIT_BUF_STA,
  325. TDLS_ENTER_BT_BUSY,
  326. TDLS_EXIT_BT_BUSY,
  327. TDLS_SCAN_STARTED,
  328. TDLS_SCAN_COMPLETED,
  329. };
  330. /**
  331. * enum tdls_disable_sources - TDLS disable sources
  332. * @TDLS_SET_MODE_SOURCE_USER: disable from user
  333. * @TDLS_SET_MODE_SOURCE_SCAN: disable during scan
  334. * @TDLS_SET_MODE_SOURCE_OFFCHANNEL: disable during offchannel
  335. * @TDLS_SET_MODE_SOURCE_BTC: disable during bluetooth
  336. * @TDLS_SET_MODE_SOURCE_P2P: disable during p2p
  337. */
  338. enum tdls_disable_sources {
  339. TDLS_SET_MODE_SOURCE_USER = 0,
  340. TDLS_SET_MODE_SOURCE_SCAN,
  341. TDLS_SET_MODE_SOURCE_OFFCHANNEL,
  342. TDLS_SET_MODE_SOURCE_BTC,
  343. TDLS_SET_MODE_SOURCE_P2P,
  344. };
  345. /**
  346. * struct tdls_osif_indication - tdls indication to os if layer
  347. * @vdev: vdev object
  348. * @reason: used with teardown indication
  349. * @peer_mac: MAC address of the TDLS peer
  350. */
  351. struct tdls_osif_indication {
  352. struct wlan_objmgr_vdev *vdev;
  353. uint16_t reason;
  354. uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
  355. QDF_STATUS status;
  356. };
  357. /**
  358. * struct tx_frame - tx frame
  359. * @buf: frame buffer
  360. * @buf_len: buffer length
  361. * @tx_timer: tx send timer
  362. */
  363. struct tx_frame {
  364. uint8_t *buf;
  365. size_t buf_len;
  366. qdf_timer_t tx_timer;
  367. };
  368. /**
  369. * enum tdls_feature_bit
  370. * @TDLS_FEATURE_OFF_CHANNEL: tdls off channel
  371. * @TDLS_FEATURE_WMM: tdls wmm
  372. * @TDLS_FEATURE_BUFFER_STA: tdls buffer sta
  373. * @TDLS_FEATURE_SLEEP_STA: tdls sleep sta feature
  374. * @TDLS_FEATURE_SCAN: tdls scan
  375. * @TDLS_FEATURE_ENABLE: tdls enabled
  376. * @TDLS_FEAUTRE_IMPLICIT_TRIGGER: tdls implicit trigger
  377. * @TDLS_FEATURE_EXTERNAL_CONTROL: tdls external control
  378. */
  379. enum tdls_feature_bit {
  380. TDLS_FEATURE_OFF_CHANNEL,
  381. TDLS_FEATURE_WMM,
  382. TDLS_FEATURE_BUFFER_STA,
  383. TDLS_FEATURE_SLEEP_STA,
  384. TDLS_FEATURE_SCAN,
  385. TDLS_FEATURE_ENABLE,
  386. TDLS_FEAUTRE_IMPLICIT_TRIGGER,
  387. TDLS_FEATURE_EXTERNAL_CONTROL
  388. };
  389. #define TDLS_IS_OFF_CHANNEL_ENABLED(flags) \
  390. CHECK_BIT(flags, TDLS_FEATURE_OFF_CHANNEL)
  391. #define TDLS_IS_WMM_ENABLED(flags) \
  392. CHECK_BIT(flags, TDLS_FEATURE_WMM)
  393. #define TDLS_IS_BUFFER_STA_ENABLED(flags) \
  394. CHECK_BIT(flags, TDLS_FEATURE_BUFFER_STA)
  395. #define TDLS_IS_SLEEP_STA_ENABLED(flags) \
  396. CHECK_BIT(flags, TDLS_FEATURE_SLEEP_STA)
  397. #define TDLS_IS_SCAN_ENABLED(flags) \
  398. CHECK_BIT(flags, TDLS_FEATURE_SCAN)
  399. #define TDLS_IS_ENABLED(flags) \
  400. CHECK_BIT(flags, TDLS_FEATURE_ENABLE)
  401. #define TDLS_IS_IMPLICIT_TRIG_ENABLED(flags) \
  402. CHECK_BIT(flags, TDLS_FEAUTRE_IMPLICIT_TRIGGER)
  403. #define TDLS_IS_EXTERNAL_CONTROL_ENABLED(flags) \
  404. CHECK_BIT(flags, TDLS_FEATURE_EXTERNAL_CONTROL)
  405. /**
  406. * struct tdls_user_config - TDLS user configuration
  407. * @tdls_tx_states_period: tdls tx states period
  408. * @tdls_tx_pkt_threshold: tdls tx packets threshold
  409. * @tdls_rx_pkt_threshold: tdls rx packets threshold
  410. * @tdls_max_discovery_attempt: tdls discovery max times
  411. * @tdls_idle_timeout: tdls idle timeout
  412. * @tdls_idle_pkt_threshold: tdls idle packets threshold
  413. * @tdls_rssi_trigger_threshold: tdls rssi trigger threshold
  414. * @tdls_rssi_teardown_threshold: tdls rssi tear down threshold
  415. * @tdls_rssi_delta: tdls rssi delta
  416. * @tdls_uapsd_mask: tdls uapsd mask
  417. * @tdls_uapsd_inactivity_time: tdls uapsd inactivity time
  418. * @tdls_uapsd_pti_window: tdls peer traffic indication window
  419. * @tdls_uapsd_ptr_timeout: tdls peer response timeout
  420. * @tdls_feature_flags: tdls feature flags
  421. * @tdls_pre_off_chan_num: tdls off channel number
  422. * @tdls_pre_off_chan_bw: tdls off channel bandwidth
  423. * @tdls_peer_kickout_threshold: sta kickout threshold for tdls peer
  424. * @tdls_discovery_wake_timeout: tdls discovery wake timeout
  425. * @delayed_trig_framint: delayed trigger frame interval
  426. * @tdls_vdev_nss_2g: tdls NSS setting for 2G band
  427. * @tdls_vdev_nss_5g: tdls NSS setting for 5G band
  428. * @tdls_buffer_sta_enable: tdls buffer station enable
  429. * @tdls_off_chan_enable: tdls off channel enable
  430. * @tdls_wmm_mode_enable: tdls wmm mode enable
  431. * @tdls_external_control: tdls external control enable
  432. * @tdls_implicit_trigger_enable: tdls implicit trigger enable
  433. * @tdls_scan_enable: tdls scan enable
  434. * @tdls_sleep_sta_enable: tdls sleep sta enable
  435. * @tdls_support_enable: tdls support enable
  436. */
  437. struct tdls_user_config {
  438. uint32_t tdls_tx_states_period;
  439. uint32_t tdls_tx_pkt_threshold;
  440. uint32_t tdls_rx_pkt_threshold;
  441. uint32_t tdls_max_discovery_attempt;
  442. uint32_t tdls_idle_timeout;
  443. uint32_t tdls_idle_pkt_threshold;
  444. int32_t tdls_rssi_trigger_threshold;
  445. int32_t tdls_rssi_teardown_threshold;
  446. uint32_t tdls_rssi_delta;
  447. uint32_t tdls_uapsd_mask;
  448. uint32_t tdls_uapsd_inactivity_time;
  449. uint32_t tdls_uapsd_pti_window;
  450. uint32_t tdls_uapsd_ptr_timeout;
  451. uint32_t tdls_feature_flags;
  452. uint32_t tdls_pre_off_chan_num;
  453. uint32_t tdls_pre_off_chan_bw;
  454. uint32_t tdls_peer_kickout_threshold;
  455. uint32_t tdls_discovery_wake_timeout;
  456. uint32_t delayed_trig_framint;
  457. uint8_t tdls_vdev_nss_2g;
  458. uint8_t tdls_vdev_nss_5g;
  459. bool tdls_buffer_sta_enable;
  460. bool tdls_off_chan_enable;
  461. bool tdls_wmm_mode_enable;
  462. bool tdls_external_control;
  463. bool tdls_implicit_trigger_enable;
  464. bool tdls_scan_enable;
  465. bool tdls_sleep_sta_enable;
  466. bool tdls_support_enable;
  467. };
  468. /**
  469. * struct tdls_config_params - tdls configure paramets
  470. * @tdls: tdls support mode
  471. * @tx_period_t: tdls tx stats period
  472. * @tx_packet_n: tdls tx packets number threshold
  473. * @discovery_tries_n: tdls max discovery attempt count
  474. * @idle_timeout_t: tdls idle time timeout
  475. * @idle_packet_n: tdls idle pkt threshold
  476. * @rssi_trigger_threshold: tdls rssi trigger threshold, checked before setup
  477. * @rssi_teardown_threshold: tdls rssi teardown threshold
  478. * @rssi_delta: rssi delta
  479. */
  480. struct tdls_config_params {
  481. uint32_t tdls;
  482. uint32_t tx_period_t;
  483. uint32_t tx_packet_n;
  484. uint32_t discovery_tries_n;
  485. uint32_t idle_timeout_t;
  486. uint32_t idle_packet_n;
  487. int32_t rssi_trigger_threshold;
  488. int32_t rssi_teardown_threshold;
  489. int32_t rssi_delta;
  490. };
  491. /**
  492. * struct tdls_tx_cnf: tdls tx ack
  493. * @vdev_id: vdev id
  494. * @action_cookie: frame cookie
  495. * @buf: frame buf
  496. * @buf_len: buffer length
  497. * @status: tx send status
  498. */
  499. struct tdls_tx_cnf {
  500. int vdev_id;
  501. uint64_t action_cookie;
  502. void *buf;
  503. size_t buf_len;
  504. int status;
  505. };
  506. /**
  507. * struct tdls_rx_mgmt_frame - rx mgmt frame structure
  508. * @frame_len: frame length
  509. * @rx_freq: rx freq
  510. * @vdev_id: vdev id
  511. * @frm_type: frame type
  512. * @rx_rssi: rx rssi
  513. * @buf: buffer address
  514. */
  515. struct tdls_rx_mgmt_frame {
  516. uint32_t frame_len;
  517. uint32_t rx_freq;
  518. uint32_t vdev_id;
  519. uint32_t frm_type;
  520. uint32_t rx_rssi;
  521. uint8_t buf[1];
  522. };
  523. /**
  524. * tdls_rx_callback() - Callback for rx mgmt frame
  525. * @user_data: user data associated to this rx mgmt frame.
  526. * @rx_frame: RX mgmt frame
  527. *
  528. * This callback will be used to give rx frames to hdd.
  529. *
  530. * Return: None
  531. */
  532. typedef void (*tdls_rx_callback)(void *user_data,
  533. struct tdls_rx_mgmt_frame *rx_frame);
  534. /**
  535. * tdls_wmm_check() - Callback for wmm info
  536. * @psoc: psoc object
  537. *
  538. * This callback will be used to check wmm information
  539. *
  540. * Return: true or false
  541. */
  542. typedef bool (*tdls_wmm_check)(uint8_t vdev_id);
  543. /* This callback is used to report state change of peer to wpa_supplicant */
  544. typedef int (*tdls_state_change_callback)(const uint8_t *mac,
  545. uint32_t opclass,
  546. uint32_t channel,
  547. uint32_t state,
  548. int32_t reason, void *ctx);
  549. /* This callback is used to report events to os_if layer */
  550. typedef void (*tdls_evt_callback) (void *data,
  551. enum tdls_event_type ev_type,
  552. struct tdls_osif_indication *event);
  553. /* This callback is used to register TDLS peer with the datapath */
  554. typedef QDF_STATUS (*tdls_register_peer_callback)(void *userdata,
  555. uint32_t vdev_id,
  556. const uint8_t *mac,
  557. uint8_t qos);
  558. /* This callback is used to deregister TDLS peer from the datapath */
  559. typedef QDF_STATUS
  560. (*tdls_deregister_peer_callback)(void *userdata,
  561. uint32_t vdev_id,
  562. struct qdf_mac_addr *peer_mac);
  563. /* This callback is used to update datapath vdev flags */
  564. typedef QDF_STATUS
  565. (*tdls_dp_vdev_update_flags_callback)(void *cbk_data,
  566. struct qdf_mac_addr *peer_mac,
  567. uint32_t vdev_param,
  568. bool is_link_up);
  569. /* This callback is to release vdev ref for tdls offchan param related msg */
  570. typedef void (*tdls_offchan_parms_callback)(struct wlan_objmgr_vdev *vdev);
  571. /**
  572. * tdls_vdev_init_cb() - Callback for initializing the tdls private structure
  573. * @vdev: vdev object
  574. *
  575. * This callback will be used to create the vdev private object and store
  576. * in os_priv.
  577. *
  578. * Return: QDF_STATUS
  579. */
  580. typedef QDF_STATUS (*tdls_vdev_init_cb)(struct wlan_objmgr_vdev *vdev);
  581. /**
  582. * tdls_vdev_deinit_cb() - Callback for deinitializing the tdls private struct
  583. * @vdev: vdev object
  584. *
  585. * This callback will be used to destroy the vdev private object.
  586. *
  587. * Return: None
  588. */
  589. typedef void (*tdls_vdev_deinit_cb)(struct wlan_objmgr_vdev *vdev);
  590. /**
  591. * struct tdls_start_params - tdls start params
  592. * @config: tdls user config
  593. * @tdls_send_mgmt_req: pass eWNI_SME_TDLS_SEND_MGMT_REQ value
  594. * @tdls_add_sta_req: pass eWNI_SME_TDLS_ADD_STA_REQ value
  595. * @tdls_del_sta_req: pass eWNI_SME_TDLS_DEL_STA_REQ value
  596. * @tdls_update_peer_state: pass WMA_UPDATE_TDLS_PEER_STATE value
  597. * @tdls_del_all_peers: pass eWNI_SME_DEL_ALL_TDLS_PEERS
  598. * @tdls_update_dp_vdev_flags: pass CDP_UPDATE_TDLS_FLAGS
  599. * @tdls_event_cb: tdls event callback
  600. * @tdls_evt_cb_data: tdls event data
  601. * @tdls_peer_context: userdata for register/deregister TDLS peer
  602. * @tdls_reg_peer: register tdls peer with datapath
  603. * @tdls_dereg_peer: deregister tdls peer from datapath
  604. * @tdls_dp_vdev_update: update vdev flags in datapath
  605. * @tdls_osif_init_cb: callback to initialize the tdls priv
  606. * @tdls_osif_deinit_cb: callback to deinitialize the tdls priv
  607. */
  608. struct tdls_start_params {
  609. struct tdls_user_config config;
  610. uint16_t tdls_send_mgmt_req;
  611. uint16_t tdls_add_sta_req;
  612. uint16_t tdls_del_sta_req;
  613. uint16_t tdls_update_peer_state;
  614. uint16_t tdls_del_all_peers;
  615. uint32_t tdls_update_dp_vdev_flags;
  616. tdls_rx_callback tdls_rx_cb;
  617. void *tdls_rx_cb_data;
  618. tdls_wmm_check tdls_wmm_cb;
  619. void *tdls_wmm_cb_data;
  620. tdls_evt_callback tdls_event_cb;
  621. void *tdls_evt_cb_data;
  622. void *tdls_peer_context;
  623. tdls_register_peer_callback tdls_reg_peer;
  624. tdls_deregister_peer_callback tdls_dereg_peer;
  625. tdls_dp_vdev_update_flags_callback tdls_dp_vdev_update;
  626. tdls_vdev_init_cb tdls_osif_init_cb;
  627. tdls_vdev_deinit_cb tdls_osif_deinit_cb;
  628. };
  629. /**
  630. * struct tdls_add_peer_params - add peer request parameter
  631. * @peer_addr: peer mac addr
  632. * @peer_type: peer type
  633. * @vdev_id: vdev id
  634. */
  635. struct tdls_add_peer_params {
  636. uint8_t peer_addr[QDF_MAC_ADDR_SIZE];
  637. uint32_t peer_type;
  638. uint32_t vdev_id;
  639. };
  640. /**
  641. * struct tdls_add_peer_request - peer add request
  642. * @vdev: vdev
  643. * @add_peer_req: add peer request parameters
  644. */
  645. struct tdls_add_peer_request {
  646. struct wlan_objmgr_vdev *vdev;
  647. struct tdls_add_peer_params add_peer_req;
  648. };
  649. /**
  650. * struct tdls_del_peer_params - delete peer request parameter
  651. * @peer_addr: peer mac addr
  652. * @peer_type: peer type
  653. * @vdev_id: vdev id
  654. */
  655. struct tdls_del_peer_params {
  656. const uint8_t *peer_addr;
  657. uint32_t peer_type;
  658. uint32_t vdev_id;
  659. };
  660. /**
  661. * struct tdls_del_peer_request - peer delete request
  662. * @vdev: vdev
  663. * @del_peer_req: delete peer request parameters
  664. */
  665. struct tdls_del_peer_request {
  666. struct wlan_objmgr_vdev *vdev;
  667. struct tdls_del_peer_params del_peer_req;
  668. };
  669. /**
  670. * struct vhgmcsinfo - VHT MCS information
  671. * @rx_mcs_map: RX MCS map 2 bits for each stream, total 8 streams
  672. * @rx_highest: Indicates highest long GI VHT PPDU data rate
  673. * STA can receive. Rate expressed in units of 1 Mbps.
  674. * If this field is 0 this value should not be used to
  675. * consider the highest RX data rate supported.
  676. * @tx_mcs_map: TX MCS map 2 bits for each stream, total 8 streams
  677. * @tx_highest: Indicates highest long GI VHT PPDU data rate
  678. * STA can transmit. Rate expressed in units of 1 Mbps.
  679. * If this field is 0 this value should not be used to
  680. * consider the highest TX data rate supported.
  681. */
  682. struct vhtmcsinfo {
  683. uint16_t rx_mcs_map;
  684. uint16_t rx_highest;
  685. uint16_t tx_mcs_map;
  686. uint16_t tx_highest;
  687. };
  688. /**
  689. * struct vhtcap - VHT capabilities
  690. *
  691. * This structure is the "VHT capabilities element" as
  692. * described in 802.11ac D3.0 8.4.2.160
  693. * @vht_cap_info: VHT capability info
  694. * @supp_mcs: VHT MCS supported rates
  695. */
  696. struct vhtcap {
  697. uint32_t vht_capinfo;
  698. struct vhtmcsinfo supp_mcs;
  699. };
  700. struct tdls_update_peer_params {
  701. uint8_t peer_addr[QDF_MAC_ADDR_SIZE];
  702. uint32_t peer_type;
  703. uint32_t vdev_id;
  704. uint16_t capability;
  705. uint8_t extn_capability[WLAN_MAC_MAX_EXTN_CAP];
  706. uint8_t supported_rates_len;
  707. uint8_t supported_rates[WLAN_MAC_MAX_SUPP_RATES];
  708. uint8_t htcap_present;
  709. struct htcap_cmn_ie ht_cap;
  710. uint8_t vhtcap_present;
  711. struct vhtcap vht_cap;
  712. uint8_t uapsd_queues;
  713. uint8_t max_sp;
  714. uint8_t supported_channels_len;
  715. uint8_t supported_channels[WLAN_MAC_MAX_SUPP_CHANNELS];
  716. uint8_t supported_oper_classes_len;
  717. uint8_t supported_oper_classes[WLAN_MAX_SUPP_OPER_CLASSES];
  718. bool is_qos_wmm_sta;
  719. bool is_pmf;
  720. };
  721. struct tdls_update_peer_request {
  722. struct wlan_objmgr_vdev *vdev;
  723. struct tdls_update_peer_params update_peer_req;
  724. };
  725. /**
  726. * struct tdls_oper_request - tdls operation request
  727. * @vdev: vdev object
  728. * @peer_addr: MAC address of the TDLS peer
  729. */
  730. struct tdls_oper_request {
  731. struct wlan_objmgr_vdev *vdev;
  732. uint8_t peer_addr[QDF_MAC_ADDR_SIZE];
  733. };
  734. /**
  735. * struct tdls_oper_config_force_peer_request - tdls enable force peer request
  736. * @vdev: vdev object
  737. * @peer_addr: MAC address of the TDLS peer
  738. * @chan: channel
  739. * @max_latency: maximum latency
  740. * @op_class: operation class
  741. * @min_bandwidth: minimal bandwidth
  742. * @callback: state change callback
  743. */
  744. struct tdls_oper_config_force_peer_request {
  745. struct wlan_objmgr_vdev *vdev;
  746. uint8_t peer_addr[QDF_MAC_ADDR_SIZE];
  747. uint32_t chan;
  748. uint32_t max_latency;
  749. uint32_t op_class;
  750. uint32_t min_bandwidth;
  751. tdls_state_change_callback callback;
  752. };
  753. /**
  754. * struct tdls_info - tdls info
  755. *
  756. * @vdev_id: vdev id
  757. * @tdls_state: tdls state
  758. * @notification_interval_ms: notification interval in ms
  759. * @tx_discovery_threshold: tx discovery threshold
  760. * @tx_teardown_threshold: tx teardown threshold
  761. * @rssi_teardown_threshold: rx teardown threshold
  762. * @rssi_delta: rssi delta
  763. * @tdls_options: tdls options
  764. * @peer_traffic_ind_window: peer traffic indication window
  765. * @peer_traffic_response_timeout: peer traffic response timeout
  766. * @puapsd_mask: puapsd mask
  767. * @puapsd_inactivity_time: puapsd inactivity time
  768. * @puapsd_rx_frame_threshold: puapsd rx frame threshold
  769. * @teardown_notification_ms: tdls teardown notification interval
  770. * @tdls_peer_kickout_threshold: tdls packets threshold
  771. * for peer kickout operation
  772. * @tdls_discovery_wake_timeout: tdls discovery wake timeout
  773. */
  774. struct tdls_info {
  775. uint32_t vdev_id;
  776. uint32_t tdls_state;
  777. uint32_t notification_interval_ms;
  778. uint32_t tx_discovery_threshold;
  779. uint32_t tx_teardown_threshold;
  780. int32_t rssi_teardown_threshold;
  781. int32_t rssi_delta;
  782. uint32_t tdls_options;
  783. uint32_t peer_traffic_ind_window;
  784. uint32_t peer_traffic_response_timeout;
  785. uint32_t puapsd_mask;
  786. uint32_t puapsd_inactivity_time;
  787. uint32_t puapsd_rx_frame_threshold;
  788. uint32_t teardown_notification_ms;
  789. uint32_t tdls_peer_kickout_threshold;
  790. uint32_t tdls_discovery_wake_timeout;
  791. };
  792. /**
  793. * struct tdls_ch_params - channel parameters
  794. * @chan_id: ID of the channel
  795. * @pwr: power level
  796. * @dfs_set: is dfs supported or not
  797. * @half_rate: is the channel operating at 10MHz
  798. * @quarter_rate: is the channel operating at 5MHz
  799. */
  800. struct tdls_ch_params {
  801. uint8_t chan_id;
  802. uint8_t pwr;
  803. bool dfs_set;
  804. bool half_rate;
  805. bool quarter_rate;
  806. };
  807. /**
  808. * struct tdls_peer_params - TDLS peer capablities parameters
  809. * @is_peer_responder: is peer responder or not
  810. * @peer_uapsd_queue: peer uapsd queue
  811. * @peer_max_sp: peer max SP value
  812. * @peer_buff_sta_support: peer buffer sta supported or not
  813. * @peer_off_chan_support: peer offchannel support
  814. * @peer_curr_operclass: peer current operating class
  815. * @self_curr_operclass: self current operating class
  816. * @peer_chanlen: peer channel length
  817. * @peer_chan: peer channel list
  818. * @peer_oper_classlen: peer operating class length
  819. * @peer_oper_class: peer operating class
  820. * @pref_off_channum: preferred offchannel number
  821. * @pref_off_chan_bandwidth: peer offchannel bandwidth
  822. * @opclass_for_prefoffchan: operating class for offchannel
  823. * @pref_offchan_freq: preferred offchannel frequency
  824. */
  825. struct tdls_peer_params {
  826. uint8_t is_peer_responder;
  827. uint8_t peer_uapsd_queue;
  828. uint8_t peer_max_sp;
  829. uint8_t peer_buff_sta_support;
  830. uint8_t peer_off_chan_support;
  831. uint8_t peer_curr_operclass;
  832. uint8_t self_curr_operclass;
  833. uint8_t peer_chanlen;
  834. struct tdls_ch_params peer_chan[WLAN_MAC_WMI_MAX_SUPP_CHANNELS];
  835. uint8_t peer_oper_classlen;
  836. uint8_t peer_oper_class[WLAN_MAX_SUPP_OPER_CLASSES];
  837. uint8_t pref_off_channum;
  838. uint8_t pref_off_chan_bandwidth;
  839. uint8_t opclass_for_prefoffchan;
  840. uint32_t pref_offchan_freq;
  841. };
  842. /**
  843. * struct tdls_peer_update_state - TDLS peer state parameters
  844. * @vdev_id: vdev id
  845. * @peer_macaddr: peer mac address
  846. * @peer_cap: peer capabality
  847. * @resp_reqd: response needed
  848. */
  849. struct tdls_peer_update_state {
  850. uint32_t vdev_id;
  851. uint8_t peer_macaddr[QDF_MAC_ADDR_SIZE];
  852. uint32_t peer_state;
  853. struct tdls_peer_params peer_cap;
  854. bool resp_reqd;
  855. };
  856. /**
  857. * struct tdls_channel_switch_params - channel switch parameter structure
  858. * @vdev_id: vdev ID
  859. * @peer_mac_addr: Peer mac address
  860. * @tdls_off_ch_bw_offset: Target off-channel bandwitdh offset
  861. * @tdls_off_ch: Target Off Channel
  862. * @oper_class: Operating class for target channel
  863. * @is_responder: Responder or initiator
  864. * @tdls_off_chan_freq: Target Off Channel frequency
  865. */
  866. struct tdls_channel_switch_params {
  867. uint32_t vdev_id;
  868. uint8_t peer_mac_addr[QDF_MAC_ADDR_SIZE];
  869. uint16_t tdls_off_ch_bw_offset;
  870. uint8_t tdls_off_ch;
  871. uint8_t tdls_sw_mode;
  872. uint8_t oper_class;
  873. uint8_t is_responder;
  874. uint32_t tdls_off_chan_freq;
  875. };
  876. /**
  877. * enum uapsd_access_cat - U-APSD Access Categories
  878. * @UAPSD_AC_BE: best effort
  879. * @UAPSD_AC_BK: back ground
  880. * @UAPSD_AC_VI: video
  881. * @UAPSD_AC_VO: voice
  882. */
  883. enum uapsd_access_cat {
  884. UAPSD_AC_BE,
  885. UAPSD_AC_BK,
  886. UAPSD_AC_VI,
  887. UAPSD_AC_VO
  888. };
  889. /**
  890. * enum tspec_dir_type - TSPEC Direction type
  891. * @TX_DIR: uplink
  892. * @RX_DIR: downlink
  893. * @BI_DIR: bidirectional
  894. */
  895. enum tspec_dir_type {
  896. TX_DIR = 0,
  897. RX_DIR = 1,
  898. BI_DIR = 2,
  899. };
  900. /**
  901. * struct tdls_event_info - firmware tdls event
  902. * @vdev_id: vdev id
  903. * @peermac: peer mac address
  904. * @message_type: message type
  905. * @peer_reason: reason
  906. */
  907. struct tdls_event_info {
  908. uint8_t vdev_id;
  909. struct qdf_mac_addr peermac;
  910. uint16_t message_type;
  911. uint32_t peer_reason;
  912. };
  913. /**
  914. * struct tdls_event_notify - tdls event notify
  915. * @vdev: vdev object
  916. * @event: tdls event
  917. */
  918. struct tdls_event_notify {
  919. struct wlan_objmgr_vdev *vdev;
  920. struct tdls_event_info event;
  921. };
  922. /**
  923. * struct tdls_event_notify - tdls event notify
  924. * @peer_mac: peer's mac address
  925. * @frame_type: Type of TDLS mgmt frame to be sent
  926. * @dialog: dialog token used in the frame.
  927. * @status_code: status to be incuded in the frame
  928. * @responder: Tdls request type
  929. * @peer_capability: peer cpabilities
  930. * @len: length of additional Ies
  931. * @buf: additional IEs to be included
  932. */
  933. struct tdls_send_mgmt {
  934. struct qdf_mac_addr peer_mac;
  935. uint8_t frame_type;
  936. uint8_t dialog;
  937. uint16_t status_code;
  938. uint8_t responder;
  939. uint32_t peer_capability;
  940. uint8_t len;
  941. /* Variable length, do not add anything after this */
  942. uint8_t buf[];
  943. };
  944. /**
  945. * struct tdls_validate_action_req - tdls validate mgmt request
  946. * @action_code: action code
  947. * @peer_mac: peer mac address
  948. * @dialog_token: dialog code
  949. * @status_code: status code to add
  950. * @len: len of the frame
  951. * @responder: whether to respond or not
  952. */
  953. struct tdls_validate_action_req {
  954. uint8_t action_code;
  955. uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
  956. uint8_t dialog_token;
  957. uint8_t status_code;
  958. size_t len;
  959. int responder;
  960. };
  961. /**
  962. * struct tdls_get_all_peers - get all peers from the list
  963. * @vdev: vdev object
  964. * @buf: output string buffer to hold the peer info
  965. * @buf_len: the size of output string buffer
  966. */
  967. struct tdls_get_all_peers {
  968. struct wlan_objmgr_vdev *vdev;
  969. char *buf;
  970. int buf_len;
  971. };
  972. /**
  973. * struct tdls_send_action_frame_request - tdls send mgmt request
  974. * @vdev: vdev object
  975. * @chk_frame: This struct used to validate mgmt frame
  976. * @session_id: session id
  977. * @vdev_id: vdev id
  978. * @cmd_buf: cmd buffer
  979. * @len: length of the frame
  980. * @use_default_ac: access category
  981. * @tdls_mgmt: tdls management
  982. */
  983. struct tdls_action_frame_request {
  984. struct wlan_objmgr_vdev *vdev;
  985. struct tdls_validate_action_req chk_frame;
  986. uint8_t session_id;
  987. uint8_t vdev_id;
  988. const uint8_t *cmd_buf;
  989. uint8_t len;
  990. bool use_default_ac;
  991. /* Variable length, do not add anything after this */
  992. struct tdls_send_mgmt tdls_mgmt;
  993. };
  994. /**
  995. * struct tdls_set_responder_req - tdls set responder in peer
  996. * @vdev: vdev object
  997. * @peer_mac: peer mac address
  998. * @responder: whether to respond or not
  999. */
  1000. struct tdls_set_responder_req {
  1001. struct wlan_objmgr_vdev *vdev;
  1002. uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
  1003. uint8_t responder;
  1004. };
  1005. /**
  1006. * struct tdls_sta_notify_params - STA connection notify info
  1007. * @vdev: vdev object
  1008. * @tdls_prohibited: peer mac addr
  1009. * @tdls_chan_swit_prohibited: peer type
  1010. * @lfr_roam: is trigger due to lfr
  1011. * @session_id: session id
  1012. */
  1013. struct tdls_sta_notify_params {
  1014. struct wlan_objmgr_vdev *vdev;
  1015. bool tdls_prohibited;
  1016. bool tdls_chan_swit_prohibited;
  1017. bool lfr_roam;
  1018. bool user_disconnect;
  1019. uint8_t session_id;
  1020. };
  1021. /**
  1022. * struct tdls_delete_all_peers_params - TDLS set mode params
  1023. * @vdev: vdev object
  1024. */
  1025. struct tdls_delete_all_peers_params {
  1026. struct wlan_objmgr_vdev *vdev;
  1027. };
  1028. /**
  1029. * struct tdls_set_mode_params - TDLS set mode params
  1030. * @vdev: vdev object
  1031. * @tdls_mode: tdls mode to set
  1032. * @update_last: inform to update last tdls mode
  1033. * @source: mode change requester
  1034. */
  1035. struct tdls_set_mode_params {
  1036. struct wlan_objmgr_vdev *vdev;
  1037. enum tdls_feature_mode tdls_mode;
  1038. bool update_last;
  1039. enum tdls_disable_sources source;
  1040. };
  1041. /**
  1042. * struct tdls_del_all_tdls_peers - delete all tdls peers
  1043. * @msg_type: type of message
  1044. * @msg_len: length of message
  1045. * @bssid: bssid of peer device
  1046. */
  1047. struct tdls_del_all_tdls_peers {
  1048. uint16_t msg_type;
  1049. uint16_t msg_len;
  1050. struct qdf_mac_addr bssid;
  1051. };
  1052. /**
  1053. * struct tdls_antenna_switch_request - TDLS antenna switch request
  1054. * @vdev: vdev object
  1055. * @mode: antenna mode, 1x1 or 2x2
  1056. */
  1057. struct tdls_antenna_switch_request {
  1058. struct wlan_objmgr_vdev *vdev;
  1059. uint32_t mode;
  1060. };
  1061. /**
  1062. * struct tdls_set_offchannel - TDLS set offchannel
  1063. * @vdev: vdev object
  1064. * @offchannel: Updated tdls offchannel value.
  1065. * @callback: callback to release vdev ref.
  1066. */
  1067. struct tdls_set_offchannel {
  1068. struct wlan_objmgr_vdev *vdev;
  1069. uint16_t offchannel;
  1070. tdls_offchan_parms_callback callback;
  1071. };
  1072. /**
  1073. * struct tdls_set_offchan_mode - TDLS set offchannel mode
  1074. * @vdev: vdev object
  1075. * @offchan_mode: Updated tdls offchannel mode value.
  1076. * @callback: callback to release vdev ref.
  1077. */
  1078. struct tdls_set_offchanmode {
  1079. struct wlan_objmgr_vdev *vdev;
  1080. uint8_t offchan_mode;
  1081. tdls_offchan_parms_callback callback;
  1082. };
  1083. /**
  1084. * struct tdls_set_offchan_offset - TDLS set offchannel mode
  1085. * @vdev: vdev object
  1086. * @offchan_offset: Offchan offset value.
  1087. * @callback: callback to release vdev ref.
  1088. */
  1089. struct tdls_set_secoffchanneloffset {
  1090. struct wlan_objmgr_vdev *vdev;
  1091. int offchan_offset;
  1092. tdls_offchan_parms_callback callback;
  1093. };
  1094. /**
  1095. * enum legacy_result_code - defined to comply with tSirResultCodes, need refine
  1096. * when mlme converged.
  1097. * @legacy_result_success: success
  1098. * @legacy_result_max: max result value
  1099. */
  1100. enum legacy_result_code {
  1101. legacy_result_success,
  1102. legacy_result_max = 0x7FFFFFFF
  1103. };
  1104. /**
  1105. * struct tdls_send_mgmt_rsp - TDLS Response struct PE --> TDLS module
  1106. * @session_id: session id
  1107. * @status_code: status code as tSirResultCodes
  1108. * @psoc: soc object
  1109. */
  1110. struct tdls_send_mgmt_rsp {
  1111. uint8_t session_id;
  1112. enum legacy_result_code status_code;
  1113. struct wlan_objmgr_psoc *psoc;
  1114. };
  1115. /**
  1116. * struct tdls_mgmt_tx_completion_ind - TDLS TX completion PE --> TDLS module
  1117. * @session_id: session id
  1118. * @tx_complete_status: tx complete status
  1119. * @psoc: soc object
  1120. */
  1121. struct tdls_mgmt_tx_completion_ind {
  1122. uint8_t session_id; /* Session ID */
  1123. uint32_t tx_complete_status;
  1124. struct wlan_objmgr_psoc *psoc;
  1125. };
  1126. /**
  1127. * struct tdls_add_sta_rsp - TDLS Response struct PE --> TDLS module
  1128. * @status_code: status code as tSirResultCodes
  1129. * @peermac: MAC address of the TDLS peer
  1130. * @session_id: session id
  1131. * @sta_type: sta type
  1132. * @tdls_oper: add peer type
  1133. * @psoc: soc object
  1134. */
  1135. struct tdls_add_sta_rsp {
  1136. QDF_STATUS status_code;
  1137. struct qdf_mac_addr peermac;
  1138. uint8_t session_id;
  1139. uint16_t sta_type;
  1140. enum tdls_add_oper tdls_oper;
  1141. struct wlan_objmgr_psoc *psoc;
  1142. };
  1143. /**
  1144. * struct tdls_del_sta_rsp - TDLS Response struct PE --> TDLS module
  1145. * @session_id: session id
  1146. * @status_code: status code as tSirResultCodes
  1147. * @peermac: MAC address of the TDLS peer
  1148. * @psoc: soc object
  1149. */
  1150. struct tdls_del_sta_rsp {
  1151. uint8_t session_id;
  1152. QDF_STATUS status_code;
  1153. struct qdf_mac_addr peermac;
  1154. struct wlan_objmgr_psoc *psoc;
  1155. };
  1156. /*
  1157. * struct tdls_send_mgmt_request - tdls management request
  1158. * @message_type: type of pe message
  1159. * @length: length of the frame.
  1160. * @session_id: session id
  1161. * @req_type: type of action frame
  1162. * @dialog: dialog token used in the frame.
  1163. * @status_code: status to be incuded in the frame.
  1164. * @responder: tdls request type
  1165. * @peer_capability: peer capability information
  1166. * @bssid: bssid
  1167. * @peer_mac: mac address of the peer
  1168. * @add_ie: additional ie's to be included
  1169. */
  1170. struct tdls_send_mgmt_request {
  1171. uint16_t message_type;
  1172. uint16_t length;
  1173. uint8_t session_id;
  1174. uint8_t req_type;
  1175. uint8_t dialog;
  1176. uint16_t status_code;
  1177. uint8_t responder;
  1178. uint32_t peer_capability;
  1179. struct qdf_mac_addr bssid;
  1180. struct qdf_mac_addr peer_mac;
  1181. enum wifi_traffic_ac ac;
  1182. /* Variable length. Dont add any field after this. */
  1183. uint8_t add_ie[1];
  1184. };
  1185. /**
  1186. * struct tdls_add_sta_req - TDLS request struct TDLS module --> PE
  1187. * @message_type: eWNI_SME_TDLS_ADD_STA_REQ
  1188. * @length: message length
  1189. * @session_id: session id
  1190. * @transaction_id: transaction id for cmd
  1191. * @bssid: bssid
  1192. * @tdls_oper: add peer type
  1193. * @peermac: MAC address for TDLS peer
  1194. * @capability: mac capability as sSirMacCapabilityInfo
  1195. * @extn_capability: extent capability
  1196. * @supported_rates_length: rates length
  1197. * @supported_rates: supported rates
  1198. * @htcap_present: ht capability present
  1199. * @ht_cap: ht capability
  1200. * @vhtcap_present: vht capability present
  1201. * @vht_cap: vht capability
  1202. * @uapsd_queues: uapsd queue as sSirMacQosInfoStation
  1203. * @max_sp: maximum service period
  1204. */
  1205. struct tdls_add_sta_req {
  1206. uint16_t message_type;
  1207. uint16_t length;
  1208. uint8_t session_id;
  1209. uint16_t transaction_id;
  1210. struct qdf_mac_addr bssid;
  1211. enum tdls_add_oper tdls_oper;
  1212. struct qdf_mac_addr peermac;
  1213. uint16_t capability;
  1214. uint8_t extn_capability[WLAN_MAC_MAX_EXTN_CAP];
  1215. uint8_t supported_rates_length;
  1216. uint8_t supported_rates[WLAN_MAC_MAX_SUPP_RATES];
  1217. uint8_t htcap_present;
  1218. struct htcap_cmn_ie ht_cap;
  1219. uint8_t vhtcap_present;
  1220. struct vhtcap vht_cap;
  1221. uint8_t uapsd_queues;
  1222. uint8_t max_sp;
  1223. bool is_pmf;
  1224. };
  1225. /**
  1226. * struct tdls_del_sta_req - TDLS Request struct TDLS module --> PE
  1227. * @message_type: message type eWNI_SME_TDLS_DEL_STA_REQ
  1228. * @length: message length
  1229. * @session_id: session id
  1230. * @transaction_id: transaction id for cmd
  1231. * @bssid: bssid
  1232. * @peermac: MAC address of the TDLS peer
  1233. */
  1234. struct tdls_del_sta_req {
  1235. uint16_t message_type;
  1236. uint16_t length;
  1237. uint8_t session_id;
  1238. uint16_t transaction_id;
  1239. struct qdf_mac_addr bssid;
  1240. struct qdf_mac_addr peermac;
  1241. };
  1242. #endif