wlan_mlo_t2lm.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792
  1. /*
  2. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. /**
  17. * DOC: contains T2LM APIs
  18. */
  19. #ifndef _WLAN_MLO_T2LM_H_
  20. #define _WLAN_MLO_T2LM_H_
  21. #include <wlan_cmn_ieee80211.h>
  22. #include <wlan_mlo_mgr_public_structs.h>
  23. #ifdef WMI_AP_SUPPORT
  24. #include <wlan_cmn.h>
  25. #endif
  26. struct mlo_vdev_host_tid_to_link_map_resp;
  27. struct wlan_mlo_dev_context;
  28. /* Max T2LM TIDS count */
  29. #define T2LM_MAX_NUM_TIDS 8
  30. #ifdef WMI_AP_SUPPORT
  31. /* Max no. of Preferred links */
  32. #define MAX_PREFERRED_LINKS 4
  33. #endif
  34. /* Max T2LM callback handlers */
  35. #define MAX_T2LM_HANDLERS 50
  36. #define T2LM_EXPECTED_DURATION_MAX_VALUE 0xFFFFFF
  37. /* Mapping switch time represented as bits 10 to 25 of the TSF value */
  38. #define WLAN_T2LM_MAPPING_SWITCH_TSF_BITS 0x3FFFC00
  39. /* There is a delay involved to receive and process the beacon/probe response
  40. * T2LM IE from AP. To match mapping switch timer expiry in both AP and STA,
  41. * advance timer expiry in STA by 100ms (= 98 * 1024 / 1000 = 100).
  42. */
  43. #define WLAN_T2LM_MAPPING_SWITCH_TIME_DELAY 98
  44. /**
  45. * enum wlan_t2lm_direction - Indicates the direction for which TID-to-link
  46. * mapping is available.
  47. *
  48. * @WLAN_T2LM_DL_DIRECTION: Downlink
  49. * @WLAN_T2LM_UL_DIRECTION: Uplink
  50. * @WLAN_T2LM_BIDI_DIRECTION: Both downlink and uplink
  51. * @WLAN_T2LM_MAX_DIRECTION: Max direction, this is used only internally
  52. * @WLAN_T2LM_INVALID_DIRECTION: Invalid, this is used only internally to check
  53. * if the mapping present in wlan_t2lm_info
  54. * structure is valid or not.
  55. */
  56. enum wlan_t2lm_direction {
  57. WLAN_T2LM_DL_DIRECTION,
  58. WLAN_T2LM_UL_DIRECTION,
  59. WLAN_T2LM_BIDI_DIRECTION,
  60. WLAN_T2LM_MAX_DIRECTION,
  61. WLAN_T2LM_INVALID_DIRECTION,
  62. };
  63. #ifdef WMI_AP_SUPPORT
  64. /**
  65. * enum wlan_link_band_caps - Represents the band capability of
  66. * a link.
  67. *
  68. * @WLAN_LINK_BAND_INVALID: Invalid band
  69. * @WLAN_LINK_BAND_2GHZ: 2GHz link
  70. * @WLAN_LINK_BAND_5GHZ: 5GHz link
  71. * @WLAN_LINK_BAND_5GHZ_LOW: 5GHz Low band link
  72. * @WLAN_LINK_BAND_5GHZ_HIGH: 5GHz High band link
  73. * @WLAN_LINK_BAND_6GHZ: 6GHz link
  74. * @WLAN_LINK_BAND_6GHZ_LOW: 6GHz Low band link
  75. * @WLAN_LINK_BAND_6GHZ_HIGH: 6GHz High band link
  76. */
  77. enum wlan_link_band_caps {
  78. WLAN_LINK_BAND_INVALID = 0,
  79. WLAN_LINK_BAND_2GHZ = 1,
  80. WLAN_LINK_BAND_5GHZ = 2,
  81. WLAN_LINK_BAND_5GHZ_LOW = 3,
  82. WLAN_LINK_BAND_5GHZ_HIGH = 4,
  83. WLAN_LINK_BAND_6GHZ = 5,
  84. WLAN_LINK_BAND_6GHZ_LOW = 6,
  85. WLAN_LINK_BAND_6GHZ_HIGH = 7,
  86. };
  87. /**
  88. * struct wlan_link_preference - Preferred link structure
  89. * @num_pref_links: non-zero values indicate that preferred link order
  90. * is present.
  91. * @pref_order: Preferred links in order.it is in form of hardware link id.
  92. * @timeout: timeout values for all the access categories.
  93. */
  94. struct wlan_link_preference {
  95. uint8_t num_pref_links;
  96. uint8_t pref_order[MAX_PREFERRED_LINKS];
  97. uint32_t timeout[WIFI_AC_MAX];
  98. };
  99. #endif
  100. /**
  101. * struct wlan_t2lm_info - TID-to-Link mapping information for the frames
  102. * transmitted on the uplink, downlink and bidirectional.
  103. *
  104. * @direction: 0 - Downlink, 1 - uplink 2 - Both uplink and downlink
  105. * @default_link_mapping: value 1 indicates the default T2LM, where all the TIDs
  106. * are mapped to all the links.
  107. * value 0 indicates the preferred T2LM mapping
  108. * @mapping_switch_time_present: Indicates if mapping switch time field present
  109. * in the T2LM IE
  110. * @expected_duration_present: Indicates if expected duration present in the
  111. * T2LM IE
  112. * @mapping_switch_time: Mapping switch time of this T2LM IE
  113. * @expected_duration: Expected duration of this T2LM IE
  114. * @ieee_link_map_tid: Indicates ieee link id mapping of all the TIDS
  115. * @hw_link_map_tid: Indicates hw link id mapping of all the TIDS
  116. * @timer_started: flag to check if T2LM timer is started for this T2LM IE
  117. */
  118. struct wlan_t2lm_info {
  119. enum wlan_t2lm_direction direction;
  120. bool default_link_mapping;
  121. bool mapping_switch_time_present;
  122. bool expected_duration_present;
  123. uint16_t mapping_switch_time;
  124. uint32_t expected_duration;
  125. uint16_t ieee_link_map_tid[T2LM_MAX_NUM_TIDS];
  126. uint16_t hw_link_map_tid[T2LM_MAX_NUM_TIDS];
  127. bool timer_started;
  128. };
  129. /**
  130. * enum wlan_t2lm_category - T2LM category
  131. *
  132. * @WLAN_T2LM_CATEGORY_NONE: none
  133. * @WLAN_T2LM_CATEGORY_REQUEST: T2LM request
  134. * @WLAN_T2LM_CATEGORY_RESPONSE: T2LM response
  135. * @WLAN_T2LM_CATEGORY_TEARDOWN: T2LM teardown
  136. * @WLAN_T2LM_CATEGORY_INVALID: Invalid
  137. */
  138. enum wlan_t2lm_category {
  139. WLAN_T2LM_CATEGORY_NONE = 0,
  140. WLAN_T2LM_CATEGORY_REQUEST = 1,
  141. WLAN_T2LM_CATEGORY_RESPONSE = 2,
  142. WLAN_T2LM_CATEGORY_TEARDOWN = 3,
  143. WLAN_T2LM_CATEGORY_INVALID,
  144. };
  145. /**
  146. * enum wlan_t2lm_tx_status - Status code applicable for the T2LM frames
  147. * transmitted by the current peer.
  148. *
  149. * @WLAN_T2LM_TX_STATUS_NONE: Status code is not applicable
  150. * @WLAN_T2LM_TX_STATUS_SUCCESS: AP/STA successfully transmitted the T2LM frame
  151. * @WLAN_T2LM_TX_STATUS_FAILURE: Tx failure received from the FW.
  152. * @WLAN_T2LM_TX_STATUS_RX_TIMEOUT: T2LM response frame not received from the
  153. * peer for the transmitted T2LM request frame.
  154. * @WLAN_T2LM_TX_STATUS_INVALID: Invalid status code
  155. */
  156. enum wlan_t2lm_tx_status {
  157. WLAN_T2LM_TX_STATUS_NONE = 0,
  158. WLAN_T2LM_TX_STATUS_SUCCESS = 1,
  159. WLAN_T2LM_TX_STATUS_FAILURE = 2,
  160. WLAN_T2LM_TX_STATUS_RX_TIMEOUT = 3,
  161. WLAN_T2LM_TX_STATUS_INVALID,
  162. };
  163. /**
  164. * enum wlan_t2lm_resp_frm_type - T2LM status corresponds to T2LM response frame
  165. *
  166. * @WLAN_T2LM_RESP_TYPE_SUCCESS: T2LM mapping provided in the T2LM request is
  167. * accepted either by the AP or STA
  168. * @WLAN_T2LM_RESP_TYPE_DENIED_TID_TO_LINK_MAPPING: T2LM Request denied because
  169. * the requested TID-to-link mapping is unacceptable.
  170. * @WLAN_T2LM_RESP_TYPE_PREFERRED_TID_TO_LINK_MAPPING: T2LM Request rejected and
  171. * preferred TID-to-link mapping is suggested.
  172. * @WLAN_T2LM_RESP_TYPE_INVALID: Status code is not applicable.
  173. */
  174. enum wlan_t2lm_resp_frm_type {
  175. WLAN_T2LM_RESP_TYPE_SUCCESS = 0,
  176. WLAN_T2LM_RESP_TYPE_DENIED_TID_TO_LINK_MAPPING = 133,
  177. WLAN_T2LM_RESP_TYPE_PREFERRED_TID_TO_LINK_MAPPING = 134,
  178. WLAN_T2LM_RESP_TYPE_INVALID,
  179. };
  180. /**
  181. * enum wlan_t2lm_enable - TID-to-link negotiation supported by the mlo peer
  182. *
  183. * @WLAN_T2LM_NOT_SUPPORTED: T2LM is not supported by the MLD
  184. * @WLAN_T2LM_MAP_ALL_TIDS_TO_SAME_LINK_SET: MLD only supports the mapping of
  185. * all TIDs to the same link set.
  186. * @WLAN_T2LM_MAP_RESERVED: reserved value
  187. * @WLAN_T2LM_MAP_EACH_TID_TO_SAME_OR_DIFFERENET_LINK_SET: MLD supports the
  188. * mapping of each TID to the same or different link set (Disjoint mapping).
  189. * @WLAN_T2LM_ENABLE_INVALID: invalid
  190. */
  191. enum wlan_t2lm_enable {
  192. WLAN_T2LM_NOT_SUPPORTED = 0,
  193. WLAN_T2LM_MAP_ALL_TIDS_TO_SAME_LINK_SET = 1,
  194. WLAN_T2LM_MAP_RESERVED = 2,
  195. WLAN_T2LM_MAP_EACH_TID_TO_SAME_OR_DIFFERENET_LINK_SET = 3,
  196. WLAN_T2LM_ENABLE_INVALID,
  197. };
  198. /**
  199. * struct wlan_prev_t2lm_negotiated_info - Previous successful T2LM negotiation
  200. * is saved here.
  201. *
  202. * @dialog_token: Save the dialog token used in T2LM request and response frame.
  203. * @t2lm_info: Provides the TID to LINK mapping information
  204. * @link_preference: Provides the preferred link information
  205. */
  206. struct wlan_prev_t2lm_negotiated_info {
  207. uint16_t dialog_token;
  208. struct wlan_t2lm_info t2lm_info[WLAN_T2LM_MAX_DIRECTION];
  209. #ifdef WMI_AP_SUPPORT
  210. struct wlan_link_preference link_preference;
  211. #endif
  212. };
  213. /**
  214. * struct wlan_t2lm_onging_negotiation_info - Current ongoing T2LM negotiation
  215. * (information about transmitted T2LM request/response frame)
  216. *
  217. * @category: T2LM category as T2LM request frame
  218. * @dialog_token: Save the dialog token used in T2LM request and response frame.
  219. * @t2lm_info: Provides the TID-to-link mapping info for UL/DL/BiDi
  220. * @t2lm_tx_status: Status code corresponds to the transmitted T2LM frames
  221. * @t2lm_resp_type: T2LM status corresponds to T2LM response frame.
  222. * @link_preference: Provides the preferred link information
  223. * @t2lm_info_present: It will show the t2lm_info present or not
  224. * @pref_link_present: It will show the preference link is present or not
  225. * @ml_grp_id: MLO Group id which it belongs to
  226. */
  227. struct wlan_t2lm_onging_negotiation_info {
  228. enum wlan_t2lm_category category;
  229. uint8_t dialog_token;
  230. struct wlan_t2lm_info t2lm_info[WLAN_T2LM_MAX_DIRECTION];
  231. enum wlan_t2lm_tx_status t2lm_tx_status;
  232. enum wlan_t2lm_resp_frm_type t2lm_resp_type;
  233. #ifdef WMI_AP_SUPPORT
  234. struct wlan_link_preference link_preference;
  235. bool t2lm_info_present;
  236. bool pref_link_present;
  237. uint8_t ml_grp_id;
  238. #endif
  239. };
  240. /**
  241. * struct wlan_mlo_peer_t2lm_policy - TID-to-link mapping information
  242. *
  243. * @self_gen_dialog_token: self generated dialog token used to send T2LM request
  244. * frame;
  245. * @t2lm_enable_val: TID-to-link enable value supported by this peer.
  246. * @t2lm_negotiated_info: Previous successful T2LM negotiation is saved here.
  247. * @ongoing_tid_to_link_mapping: This has the ongoing TID-to-link mapping info
  248. * transmitted by this peer to the connected peer.
  249. */
  250. struct wlan_mlo_peer_t2lm_policy {
  251. uint8_t self_gen_dialog_token;
  252. enum wlan_t2lm_enable t2lm_enable_val;
  253. struct wlan_prev_t2lm_negotiated_info t2lm_negotiated_info;
  254. struct wlan_t2lm_onging_negotiation_info ongoing_tid_to_link_mapping;
  255. };
  256. /**
  257. * struct wlan_mlo_t2lm_ie - T2LM information
  258. *
  259. * @disabled_link_bitmap: Bitmap of disabled links. This is used to update the
  260. * disabled link field of RNR IE
  261. * @t2lm: T2LM info structure
  262. */
  263. struct wlan_mlo_t2lm_ie {
  264. uint16_t disabled_link_bitmap;
  265. struct wlan_t2lm_info t2lm;
  266. };
  267. /*
  268. * In a beacon or probe response frame, at max two T2LM IEs can be present
  269. * first one to represent the already existing mapping and the other one
  270. * represents the new T2LM mapping that is yet to establish.
  271. */
  272. #define WLAN_MAX_T2LM_IE 2
  273. /**
  274. * struct wlan_t2lm_timer - T2LM timer information
  275. *
  276. * @t2lm_timer: T2LM timer
  277. * @timer_interval: T2LM Timer value
  278. * @timer_started: T2LM timer started or not
  279. * @timer_out_time: T2LM timer target out time
  280. * @t2lm_dev_lock: lock to access struct
  281. */
  282. struct wlan_t2lm_timer {
  283. qdf_timer_t t2lm_timer;
  284. uint32_t timer_interval;
  285. uint32_t timer_out_time;
  286. bool timer_started;
  287. #ifdef WLAN_MLO_USE_SPINLOCK
  288. qdf_spinlock_t t2lm_dev_lock;
  289. #else
  290. qdf_mutex_t t2lm_dev_lock;
  291. #endif
  292. };
  293. struct wlan_mlo_dev_context;
  294. /**
  295. * typedef wlan_mlo_t2lm_link_update_handler - T2LM handler API to notify the
  296. * link update.
  297. * @mldev: Pointer to mlo_dev_context
  298. * @arg: ieee_link_map
  299. *
  300. * Return: QDF_STATUS
  301. */
  302. typedef QDF_STATUS (*wlan_mlo_t2lm_link_update_handler)(
  303. struct wlan_mlo_dev_context *mldev, void *arg);
  304. /**
  305. * struct wlan_t2lm_context - T2LM IE information
  306. *
  307. * @established_t2lm: Indicates the already established broadcast T2LM IE
  308. * advertised by the AP in beacon/probe response frames.
  309. * In this T2LM IE, expected duration flag is set to 1 and
  310. * mapping switch time present flag is set to 0 when the
  311. * mapping is non-default.
  312. * @upcoming_t2lm: Indicates the new broadcast T2LM IE advertised by the AP in
  313. * beacon/probe response frames. STA needs to use this mapping
  314. * when expected duration in the established T2LM is expires.
  315. * @t2lm_timer: T2LM timer information
  316. * @t2lm_dev_lock: t2lm dev context lock
  317. * @tsf: time sync func value received via beacon
  318. * @link_update_handler: handler to update T2LM link
  319. * @is_valid_handler: T2LM handler is valid or not
  320. */
  321. struct wlan_t2lm_context {
  322. struct wlan_mlo_t2lm_ie established_t2lm;
  323. struct wlan_mlo_t2lm_ie upcoming_t2lm;
  324. struct wlan_t2lm_timer t2lm_timer;
  325. #ifdef WLAN_MLO_USE_SPINLOCK
  326. qdf_spinlock_t t2lm_dev_lock;
  327. #else
  328. qdf_mutex_t t2lm_dev_lock;
  329. #endif
  330. uint64_t tsf;
  331. wlan_mlo_t2lm_link_update_handler
  332. link_update_handler[MAX_T2LM_HANDLERS];
  333. bool is_valid_handler[MAX_T2LM_HANDLERS];
  334. };
  335. #ifdef WLAN_FEATURE_11BE
  336. #define t2lm_alert(format, args...) \
  337. QDF_TRACE_FATAL(QDF_MODULE_ID_T2LM, format, ## args)
  338. #define t2lm_err(format, args...) \
  339. QDF_TRACE_ERROR(QDF_MODULE_ID_T2LM, format, ## args)
  340. #define t2lm_warn(format, args...) \
  341. QDF_TRACE_WARN(QDF_MODULE_ID_T2LM, format, ## args)
  342. #define t2lm_info(format, args...) \
  343. QDF_TRACE_INFO(QDF_MODULE_ID_T2LM, format, ## args)
  344. #define t2lm_debug(format, args...) \
  345. QDF_TRACE_DEBUG(QDF_MODULE_ID_T2LM, format, ## args)
  346. #define t2lm_rl_debug(format, args...) \
  347. QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_T2LM, format, ## args)
  348. #define WLAN_T2LM_MAX_NUM_LINKS 16
  349. #ifdef WLAN_MLO_USE_SPINLOCK
  350. /**
  351. * t2lm_dev_lock_create - Create T2LM device mutex/spinlock
  352. * @t2lm_ctx: T2LM context
  353. *
  354. * Creates mutex/spinlock
  355. *
  356. * Return: void
  357. */
  358. static inline void
  359. t2lm_dev_lock_create(struct wlan_t2lm_context *t2lm_ctx)
  360. {
  361. qdf_spinlock_create(&t2lm_ctx->t2lm_dev_lock);
  362. }
  363. /**
  364. * t2lm_dev_lock_destroy - Destroy T2LM mutex/spinlock
  365. * @t2lm_ctx: T2LM context
  366. *
  367. * Destroy mutex/spinlock
  368. *
  369. * Return: void
  370. */
  371. static inline void
  372. t2lm_dev_lock_destroy(struct wlan_t2lm_context *t2lm_ctx)
  373. {
  374. qdf_spinlock_destroy(&t2lm_ctx->t2lm_dev_lock);
  375. }
  376. /**
  377. * t2lm_dev_lock_acquire - acquire T2LM mutex/spinlock
  378. * @t2lm_ctx: T2LM context
  379. *
  380. * acquire mutex/spinlock
  381. *
  382. * return: void
  383. */
  384. static inline
  385. void t2lm_dev_lock_acquire(struct wlan_t2lm_context *t2lm_ctx)
  386. {
  387. qdf_spin_lock_bh(&t2lm_ctx->t2lm_dev_lock);
  388. }
  389. /**
  390. * t2lm_dev_lock_release - release T2LM dev mutex/spinlock
  391. * @t2lm_ctx: T2LM context
  392. *
  393. * release mutex/spinlock
  394. *
  395. * return: void
  396. */
  397. static inline
  398. void t2lm_dev_lock_release(struct wlan_t2lm_context *t2lm_ctx)
  399. {
  400. qdf_spin_unlock_bh(&t2lm_ctx->t2lm_dev_lock);
  401. }
  402. #else /* WLAN_MLO_USE_SPINLOCK */
  403. static inline
  404. void t2lm_dev_lock_create(struct wlan_t2lm_context *t2lm_ctx)
  405. {
  406. qdf_mutex_create(&t2lm_ctx->t2lm_dev_lock);
  407. }
  408. static inline
  409. void t2lm_dev_lock_destroy(struct wlan_t2lm_context *t2lm_ctx)
  410. {
  411. qdf_mutex_destroy(&t2lm_ctx->t2lm_dev_lock);
  412. }
  413. static inline void t2lm_dev_lock_acquire(struct wlan_t2lm_context *t2lm_ctx)
  414. {
  415. qdf_mutex_acquire(&t2lm_ctx->t2lm_dev_lock);
  416. }
  417. static inline void t2lm_dev_lock_release(struct wlan_t2lm_context *t2lm_ctx)
  418. {
  419. qdf_mutex_release(&t2lm_ctx->t2lm_dev_lock);
  420. }
  421. #endif
  422. /**
  423. * wlan_register_t2lm_link_update_notify_handler() - API to register the
  424. * handlers to receive link update notification
  425. * @handler: handler for T2LM link update
  426. * @mldev: Pointer to mlo context
  427. *
  428. * Return: Index on which handler is registered
  429. */
  430. int wlan_register_t2lm_link_update_notify_handler(
  431. wlan_mlo_t2lm_link_update_handler handler,
  432. struct wlan_mlo_dev_context *mldev);
  433. /**
  434. * wlan_unregister_t2lm_link_update_notify_handler() - API to unregister the
  435. * T2LM related handlers
  436. * @mldev: Pointer to mlo context
  437. * @index: Index on which the handler was registered
  438. *
  439. * Return: None
  440. */
  441. void wlan_unregister_t2lm_link_update_notify_handler(
  442. struct wlan_mlo_dev_context *mldev, uint8_t index);
  443. /**
  444. * wlan_mlo_dev_t2lm_notify_link_update() - API to call the registered handlers
  445. * when there is a link update happens using T2LM
  446. * @mldev: Pointer to mlo context
  447. *
  448. * Return: QDF_STATUS
  449. */
  450. QDF_STATUS wlan_mlo_dev_t2lm_notify_link_update(
  451. struct wlan_mlo_dev_context *mldev);
  452. /**
  453. * wlan_mlo_parse_t2lm_ie() - API to parse the T2LM IE
  454. * @t2lm: Pointer to T2LM structure
  455. * @ie: Pointer to T2LM IE
  456. *
  457. * Return: QDF_STATUS
  458. */
  459. QDF_STATUS wlan_mlo_parse_t2lm_ie(
  460. struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie);
  461. /**
  462. * wlan_mlo_add_t2lm_ie() - API to add TID-to-link mapping IE
  463. * @frm: Pointer to buffer
  464. * @t2lm: Pointer to t2lm mapping structure
  465. * @vdev: Pointer to vdev structure
  466. *
  467. * Return: Updated frame pointer
  468. */
  469. uint8_t *wlan_mlo_add_t2lm_ie(uint8_t *frm,
  470. struct wlan_t2lm_onging_negotiation_info *t2lm,
  471. struct wlan_objmgr_vdev *vdev);
  472. /**
  473. * wlan_mlo_vdev_tid_to_link_map_event() - API to process the revceived T2LM
  474. * event.
  475. * @psoc: psoc object
  476. * @event: Pointer to received T2LM info
  477. *
  478. * Return: QDF_STATUS
  479. */
  480. QDF_STATUS wlan_mlo_vdev_tid_to_link_map_event(
  481. struct wlan_objmgr_psoc *psoc,
  482. struct mlo_vdev_host_tid_to_link_map_resp *event);
  483. /**
  484. * wlan_mlo_parse_t2lm_action_frame() - API to parse T2LM action frame
  485. * @t2lm: Pointer to T2LM structure
  486. * @action_frm: Pointer to action frame
  487. * @category: T2LM action frame category
  488. *
  489. * Return: 0 - success, else failure
  490. */
  491. int wlan_mlo_parse_t2lm_action_frame(
  492. struct wlan_t2lm_onging_negotiation_info *t2lm,
  493. struct wlan_action_frame *action_frm,
  494. enum wlan_t2lm_category category);
  495. /**
  496. * wlan_mlo_add_t2lm_action_frame() - API to add T2LM action frame
  497. * @frm: Pointer to a frame to add T2LM IE
  498. * @args: T2LM action frame related info
  499. * @buf: Pointer to T2LM IE values
  500. * @category: T2LM action frame category
  501. *
  502. * Return: Pointer to the updated frame buffer
  503. */
  504. uint8_t *wlan_mlo_add_t2lm_action_frame(
  505. uint8_t *frm, struct wlan_action_frame_args *args,
  506. uint8_t *buf, enum wlan_t2lm_category category);
  507. /**
  508. * wlan_mlo_parse_bcn_prbresp_t2lm_ie() - API to parse the T2LM IE from beacon/
  509. * probe response frame
  510. * @t2lm_ctx: T2LM context
  511. * @ie: Pointer to T2LM IE
  512. *
  513. * Return: QDF_STATUS
  514. */
  515. QDF_STATUS wlan_mlo_parse_bcn_prbresp_t2lm_ie(
  516. struct wlan_t2lm_context *t2lm_ctx, uint8_t *ie);
  517. /**
  518. * wlan_mlo_parse_t2lm_info() - Parse T2LM IE fields
  519. * @ie: Pointer to T2LM IE
  520. * @t2lm: Pointer to T2LM structure
  521. *
  522. * Return: QDF_STATUS
  523. */
  524. QDF_STATUS wlan_mlo_parse_t2lm_info(uint8_t *ie,
  525. struct wlan_t2lm_info *t2lm);
  526. /**
  527. * wlan_mlo_add_t2lm_info_ie() - Add T2LM IE for UL/DL/Bidirection
  528. * @frm: Pointer to buffer
  529. * @t2lm: Pointer to t2lm mapping structure
  530. * @vdev: Pointer to vdev structure
  531. *
  532. * Return: Updated frame pointer
  533. */
  534. uint8_t *wlan_mlo_add_t2lm_info_ie(uint8_t *frm, struct wlan_t2lm_info *t2lm,
  535. struct wlan_objmgr_vdev *vdev);
  536. /**
  537. * wlan_mlo_t2lm_timer_init() - API to initialize t2lm timer
  538. * @vdev: Pointer to vdev
  539. *
  540. * Return: qdf status
  541. */
  542. QDF_STATUS
  543. wlan_mlo_t2lm_timer_init(struct wlan_objmgr_vdev *vdev);
  544. /**
  545. * wlan_mlo_t2lm_timer_deinit() - API to deinit t2lm timer
  546. * @vdev: Pointer to vdev
  547. *
  548. * Return: qdf status
  549. */
  550. QDF_STATUS
  551. wlan_mlo_t2lm_timer_deinit(struct wlan_objmgr_vdev *vdev);
  552. /**
  553. * wlan_mlo_t2lm_timer_start() - API to start T2LM timer
  554. * @vdev: Pointer to vdev
  555. * @interval: T2LM timer interval
  556. *
  557. * Return: qdf status
  558. */
  559. QDF_STATUS
  560. wlan_mlo_t2lm_timer_start(struct wlan_objmgr_vdev *vdev,
  561. uint32_t interval);
  562. /**
  563. * wlan_mlo_t2lm_timer_stop() - API to stop TID-to-link mapping timer
  564. * @vdev: Pointer to vdev
  565. *
  566. * Return: qdf status
  567. */
  568. QDF_STATUS
  569. wlan_mlo_t2lm_timer_stop(struct wlan_objmgr_vdev *vdev);
  570. /**
  571. * wlan_mlo_t2lm_timer_expiry_handler() - API to handle t2lm timer expiry
  572. * @vdev: Pointer to vdev structure
  573. *
  574. * Return: none
  575. */
  576. void
  577. wlan_mlo_t2lm_timer_expiry_handler(void *vdev);
  578. /**
  579. * wlan_handle_t2lm_timer() - API to handle TID-to-link mapping timer
  580. * @vdev: Pointer to vdev
  581. *
  582. * Return: qdf status
  583. */
  584. QDF_STATUS
  585. wlan_handle_t2lm_timer(struct wlan_objmgr_vdev *vdev);
  586. /**
  587. * wlan_process_bcn_prbrsp_t2lm_ie() - API to process the received T2LM IE from
  588. * beacon/probe response.
  589. * @vdev: Pointer to vdev
  590. * @rx_t2lm_ie: Received T2LM IE
  591. * @tsf: Local TSF value
  592. *
  593. * Return QDF_STATUS
  594. */
  595. QDF_STATUS wlan_process_bcn_prbrsp_t2lm_ie(struct wlan_objmgr_vdev *vdev,
  596. struct wlan_t2lm_context *rx_t2lm_ie,
  597. uint64_t tsf);
  598. /**
  599. * wlan_send_tid_to_link_mapping() - API to send T2LM info received from beacon,
  600. * probe response or action frame to FW.
  601. *
  602. * @vdev: Pointer to vdev
  603. * @t2lm: T2LM info
  604. *
  605. * Return QDF_STATUS
  606. */
  607. QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
  608. struct wlan_t2lm_info *t2lm);
  609. #else
  610. static inline QDF_STATUS wlan_mlo_parse_t2lm_ie(
  611. struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie)
  612. {
  613. return QDF_STATUS_E_FAILURE;
  614. }
  615. static inline
  616. int8_t *wlan_mlo_add_t2lm_ie(uint8_t *frm,
  617. struct wlan_t2lm_onging_negotiation_info *t2lm,
  618. struct wlan_objmgr_vdev *vdev)
  619. {
  620. return frm;
  621. }
  622. static inline
  623. int wlan_mlo_parse_t2lm_action_frame(
  624. struct wlan_t2lm_onging_negotiation_info *t2lm,
  625. struct wlan_action_frame *action_frm,
  626. enum wlan_t2lm_category category)
  627. {
  628. return 0;
  629. }
  630. static inline
  631. uint8_t *wlan_mlo_add_t2lm_action_frame(
  632. uint8_t *frm, struct wlan_action_frame_args *args,
  633. uint8_t *buf, enum wlan_t2lm_category category)
  634. {
  635. return frm;
  636. }
  637. static inline
  638. QDF_STATUS wlan_mlo_parse_bcn_prbresp_t2lm_ie(
  639. struct wlan_t2lm_context *t2lm_ctx, uint8_t *ie)
  640. {
  641. return QDF_STATUS_E_FAILURE;
  642. }
  643. static inline
  644. QDF_STATUS wlan_mlo_parse_t2lm_info(uint8_t *ie,
  645. struct wlan_t2lm_info *t2lm)
  646. {
  647. return QDF_STATUS_E_FAILURE;
  648. }
  649. static inline
  650. uint8_t *wlan_mlo_add_t2lm_info_ie(uint8_t *frm, struct wlan_t2lm_info *t2lm,
  651. struct wlan_objmgr_vdev *vdev)
  652. {
  653. return frm;
  654. }
  655. static inline QDF_STATUS
  656. wlan_mlo_t2lm_timer_init(struct wlan_objmgr_vdev *vdev)
  657. {
  658. return QDF_STATUS_E_NOSUPPORT;
  659. }
  660. static inline QDF_STATUS
  661. wlan_mlo_t2lm_timer_deinit(struct wlan_objmgr_vdev *vdev)
  662. {
  663. return QDF_STATUS_E_NOSUPPORT;
  664. }
  665. static inline QDF_STATUS
  666. wlan_mlo_t2lm_timer_start(struct wlan_objmgr_vdev *vdev,
  667. uint32_t interval)
  668. {
  669. return QDF_STATUS_E_NOSUPPORT;
  670. }
  671. static inline QDF_STATUS
  672. wlan_mlo_t2lm_timer_stop(struct wlan_objmgr_vdev *vdev)
  673. {
  674. return QDF_STATUS_E_NOSUPPORT;
  675. }
  676. static inline void
  677. wlan_mlo_t2lm_timer_expiry_handler(void *vdev)
  678. {}
  679. static inline QDF_STATUS
  680. wlan_handle_t2lm_timer(struct wlan_objmgr_vdev *vdev)
  681. {
  682. return QDF_STATUS_E_NOSUPPORT;
  683. }
  684. static inline QDF_STATUS
  685. wlan_process_bcn_prbrsp_t2lm_ie(struct wlan_objmgr_vdev *vdev,
  686. struct wlan_t2lm_context *rx_t2lm_ie,
  687. uint64_t tsf)
  688. {
  689. return QDF_STATUS_SUCCESS;
  690. }
  691. static inline
  692. int wlan_register_t2lm_link_update_notify_handler(
  693. wlan_mlo_t2lm_link_update_handler handler,
  694. struct wlan_mlo_dev_context *mldev)
  695. {
  696. return 0;
  697. }
  698. static inline
  699. void wlan_unregister_t2lm_link_update_notify_handler(
  700. struct wlan_mlo_dev_context *mldev, uint8_t index)
  701. {
  702. }
  703. static inline QDF_STATUS wlan_mlo_dev_t2lm_notify_link_update(
  704. struct wlan_mlo_dev_context *mldev)
  705. {
  706. return QDF_STATUS_SUCCESS;
  707. }
  708. static inline
  709. QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
  710. struct wlan_t2lm_info *t2lm)
  711. {
  712. return QDF_STATUS_SUCCESS;
  713. }
  714. #endif /* WLAN_FEATURE_11BE */
  715. #endif /* _WLAN_MLO_T2LM_H_ */