tlv_hdr.h 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
  2. *
  3. * Permission to use, copy, modify, and/or distribute this software for any
  4. * purpose with or without fee is hereby granted, provided that the above
  5. * copyright notice and this permission notice appear in all copies.
  6. *
  7. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. */
  15. #ifndef _TLV_HDR_H_
  16. #define _TLV_HDR_H_
  17. #if !defined(__ASSEMBLER__)
  18. #endif
  19. #define _TLV_USERID_WIDTH_ 6
  20. #define _TLV_DATA_WIDTH_ 32
  21. #define _TLV_TAG_WIDTH_ 9
  22. #define _TLV_MRV_EN_LEN_WIDTH_ 9
  23. #define _TLV_MRV_DIS_LEN_WIDTH_ 12
  24. #define _TLV_16_DATA_WIDTH_ 16
  25. #define _TLV_16_TAG_WIDTH_ 5
  26. #define _TLV_16_LEN_WIDTH_ 4
  27. #define _TLV_CTAG_WIDTH_ 5
  28. #define _TLV_44_DATA_WIDTH_ 44
  29. #define _TLV_64_DATA_WIDTH_ 64
  30. #define _TLV_76_DATA_WIDTH_ 64
  31. #define _TLV_CDATA_WIDTH_ 32
  32. #define _TLV_CDATA_76_WIDTH_ 64
  33. struct tlv_usr_16_tlword_t {
  34. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  35. uint16_t tlv_cflg_reserved : 1,
  36. tlv_tag : _TLV_16_TAG_WIDTH_,
  37. tlv_len : _TLV_16_LEN_WIDTH_,
  38. tlv_usrid : _TLV_USERID_WIDTH_;
  39. #else
  40. uint16_t tlv_usrid : _TLV_USERID_WIDTH_,
  41. tlv_len : _TLV_16_LEN_WIDTH_,
  42. tlv_tag : _TLV_16_TAG_WIDTH_,
  43. tlv_cflg_reserved : 1;
  44. #endif
  45. };
  46. struct tlv_16_tlword_t {
  47. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  48. uint16_t tlv_cflg_reserved : 1,
  49. tlv_len : _TLV_16_LEN_WIDTH_,
  50. tlv_tag : _TLV_16_TAG_WIDTH_,
  51. tlv_reserved : 6;
  52. #else
  53. uint16_t tlv_reserved : 6,
  54. tlv_tag : _TLV_16_TAG_WIDTH_,
  55. tlv_len : _TLV_16_LEN_WIDTH_,
  56. tlv_cflg_reserved : 1;
  57. #endif
  58. };
  59. // -----------------------------------------------------------------
  60. // TLV 32 onwards support two formats,
  61. // link id based where some bits of length have been re-purposed
  62. // non link id based where legacy length width is available
  63. // -----------------------------------------------------------------
  64. struct tlv_mlo_usr_32_tlword_t {
  65. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  66. uint32_t tlv_cflg_reserved : 1,
  67. tlv_tag : _TLV_TAG_WIDTH_,
  68. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  69. tlv_dst_linkid : 3,
  70. tlv_src_linkid : 3,
  71. tlv_mrv : 1,
  72. tlv_usrid : _TLV_USERID_WIDTH_;
  73. #else
  74. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  75. tlv_mrv : 1,
  76. tlv_src_linkid : 3,
  77. tlv_dst_linkid : 3,
  78. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  79. tlv_tag : _TLV_TAG_WIDTH_,
  80. tlv_cflg_reserved : 1;
  81. #endif
  82. };
  83. struct tlv_mlo_32_tlword_t {
  84. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  85. uint32_t tlv_cflg_reserved : 1,
  86. tlv_tag : _TLV_TAG_WIDTH_,
  87. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  88. tlv_dst_linkid : 3,
  89. tlv_src_linkid : 3,
  90. tlv_mrv : 1,
  91. tlv_reserved : 6;
  92. #else
  93. uint32_t tlv_reserved : 6,
  94. tlv_mrv : 1,
  95. tlv_src_linkid : 3,
  96. tlv_dst_linkid : 3,
  97. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  98. tlv_tag : _TLV_TAG_WIDTH_,
  99. tlv_cflg_reserved : 1;
  100. #endif
  101. };
  102. struct tlv_mlo_usr_64_tlword_t {
  103. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  104. uint64_t tlv_cflg_reserved : 1,
  105. tlv_tag : _TLV_TAG_WIDTH_,
  106. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  107. tlv_dst_linkid : 3,
  108. tlv_src_linkid : 3,
  109. tlv_mrv : 1,
  110. tlv_usrid : _TLV_USERID_WIDTH_,
  111. #else
  112. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  113. tlv_mrv : 1,
  114. tlv_src_linkid : 3,
  115. tlv_dst_linkid : 3,
  116. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  117. tlv_tag : _TLV_TAG_WIDTH_,
  118. tlv_cflg_reserved : 1,
  119. #endif
  120. tlv_reserved : 32;
  121. };
  122. struct tlv_mlo_64_tlword_t {
  123. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  124. uint64_t tlv_cflg_reserved : 1,
  125. tlv_tag : _TLV_TAG_WIDTH_,
  126. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  127. tlv_dst_linkid : 3,
  128. tlv_src_linkid : 3,
  129. tlv_mrv : 1,
  130. tlv_reserved : 38;
  131. #else
  132. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  133. tlv_mrv : 1,
  134. tlv_src_linkid : 3,
  135. tlv_dst_linkid : 3,
  136. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  137. tlv_tag : _TLV_TAG_WIDTH_,
  138. tlv_cflg_reserved : 1,
  139. tlv_reserved : 32;
  140. #endif
  141. };
  142. struct tlv_mlo_usr_44_tlword_t {
  143. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  144. uint64_t tlv_compression : 1,
  145. tlv_tag : _TLV_TAG_WIDTH_,
  146. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  147. tlv_dst_linkid : 3,
  148. tlv_src_linkid : 3,
  149. tlv_mrv : 1,
  150. tlv_usrid : _TLV_USERID_WIDTH_,
  151. tlv_reserved : 10,
  152. pad_44to64_bit : 22;
  153. #else
  154. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  155. tlv_mrv : 1,
  156. tlv_src_linkid : 3,
  157. tlv_dst_linkid : 3,
  158. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  159. tlv_tag : _TLV_TAG_WIDTH_,
  160. tlv_compression : 1,
  161. pad_44to64_bit : 22,
  162. tlv_reserved : 10;
  163. #endif
  164. };
  165. struct tlv_mlo_44_tlword_t {
  166. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  167. uint64_t tlv_compression : 1,
  168. tlv_tag : _TLV_TAG_WIDTH_,
  169. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  170. tlv_dst_linkid : 3,
  171. tlv_src_linkid : 3,
  172. tlv_mrv : 1,
  173. tlv_reserved : 16,
  174. pad_44to64_bit : 22;
  175. #else
  176. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  177. tlv_mrv : 1,
  178. tlv_src_linkid : 3,
  179. tlv_dst_linkid : 3,
  180. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  181. tlv_tag : _TLV_TAG_WIDTH_,
  182. tlv_compression : 1,
  183. pad_44to64_bit : 22,
  184. tlv_reserved : 10;
  185. #endif
  186. };
  187. struct tlv_mlo_usr_76_tlword_t {
  188. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  189. uint64_t tlv_compression : 1,
  190. tlv_tag : _TLV_TAG_WIDTH_,
  191. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  192. tlv_dst_linkid : 3,
  193. tlv_src_linkid : 3,
  194. tlv_mrv : 1,
  195. tlv_usrid : _TLV_USERID_WIDTH_,
  196. #else
  197. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  198. tlv_mrv : 1,
  199. tlv_src_linkid : 3,
  200. tlv_dst_linkid : 3,
  201. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  202. tlv_tag : _TLV_TAG_WIDTH_,
  203. tlv_compression : 1,
  204. #endif
  205. tlv_reserved : 32;
  206. uint64_t pad_64to128_bit : 64;
  207. };
  208. struct tlv_mlo_76_tlword_t {
  209. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  210. uint64_t tlv_compression : 1,
  211. tlv_tag : _TLV_TAG_WIDTH_,
  212. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  213. tlv_dst_linkid : 3,
  214. tlv_src_linkid : 3,
  215. tlv_mrv : 1,
  216. tlv_reserved : 38;
  217. #else
  218. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  219. tlv_mrv : 1,
  220. tlv_src_linkid : 3,
  221. tlv_dst_linkid : 3,
  222. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  223. tlv_tag : _TLV_TAG_WIDTH_,
  224. tlv_compression : 1,
  225. tlv_reserved : 32;
  226. #endif
  227. uint64_t pad_64to128_bit : 64;
  228. };
  229. struct tlv_mac_usr_32_tlword_t {
  230. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  231. uint32_t tlv_cflg_reserved : 1,
  232. tlv_tag : _TLV_TAG_WIDTH_,
  233. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  234. tlv_src_linkid : 3,
  235. tlv_mrv : 1,
  236. tlv_usrid : _TLV_USERID_WIDTH_;
  237. #else
  238. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  239. tlv_mrv : 1,
  240. tlv_src_linkid : 3,
  241. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  242. tlv_tag : _TLV_TAG_WIDTH_,
  243. tlv_cflg_reserved : 1;
  244. #endif
  245. };
  246. struct tlv_mac_32_tlword_t {
  247. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  248. uint32_t tlv_cflg_reserved : 1,
  249. tlv_tag : _TLV_TAG_WIDTH_,
  250. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  251. tlv_src_linkid : 3,
  252. tlv_mrv : 1,
  253. tlv_reserved : 6;
  254. #else
  255. uint32_t tlv_reserved : 6,
  256. tlv_mrv : 1,
  257. tlv_src_linkid : 3,
  258. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  259. tlv_tag : _TLV_TAG_WIDTH_,
  260. tlv_cflg_reserved : 1;
  261. #endif
  262. };
  263. struct tlv_mac_usr_64_tlword_t {
  264. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  265. uint64_t tlv_cflg_reserved : 1,
  266. tlv_tag : _TLV_TAG_WIDTH_,
  267. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  268. tlv_src_linkid : 3,
  269. tlv_mrv : 1,
  270. tlv_usrid : _TLV_USERID_WIDTH_,
  271. #else
  272. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  273. tlv_mrv : 1,
  274. tlv_src_linkid : 3,
  275. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  276. tlv_tag : _TLV_TAG_WIDTH_,
  277. tlv_cflg_reserved : 1,
  278. #endif
  279. tlv_reserved : 32;
  280. };
  281. struct tlv_mac_64_tlword_t {
  282. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  283. uint64_t tlv_cflg_reserved : 1,
  284. tlv_tag : _TLV_TAG_WIDTH_,
  285. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  286. tlv_src_linkid : 3,
  287. tlv_mrv : 1,
  288. tlv_reserved : 38;
  289. #else
  290. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  291. tlv_mrv : 1,
  292. tlv_src_linkid : 3,
  293. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  294. tlv_tag : _TLV_TAG_WIDTH_,
  295. tlv_cflg_reserved : 1,
  296. tlv_reserved : 32;
  297. #endif
  298. };
  299. struct tlv_mac_usr_44_tlword_t {
  300. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  301. uint64_t tlv_compression : 1,
  302. tlv_tag : _TLV_TAG_WIDTH_,
  303. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  304. tlv_src_linkid : 3,
  305. tlv_mrv : 1,
  306. tlv_usrid : _TLV_USERID_WIDTH_,
  307. tlv_reserved : 10,
  308. pad_44to64_bit : 22;
  309. #else
  310. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  311. tlv_mrv : 1,
  312. tlv_src_linkid : 3,
  313. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  314. tlv_tag : _TLV_TAG_WIDTH_,
  315. tlv_compression : 1,
  316. pad_44to64_bit : 22,
  317. tlv_reserved : 10;
  318. #endif
  319. };
  320. struct tlv_mac_44_tlword_t {
  321. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  322. uint64_t tlv_compression : 1,
  323. tlv_tag : _TLV_TAG_WIDTH_,
  324. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  325. tlv_src_linkid : 3,
  326. tlv_mrv : 1,
  327. tlv_reserved : 16,
  328. pad_44to64_bit : 22;
  329. #else
  330. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  331. tlv_mrv : 1,
  332. tlv_src_linkid : 3,
  333. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  334. tlv_tag : _TLV_TAG_WIDTH_,
  335. tlv_compression : 1,
  336. pad_44to64_bit : 22,
  337. tlv_reserved : 10;
  338. #endif
  339. };
  340. struct tlv_mac_usr_76_tlword_t {
  341. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  342. uint64_t tlv_compression : 1,
  343. tlv_tag : _TLV_TAG_WIDTH_,
  344. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  345. tlv_src_linkid : 3,
  346. tlv_mrv : 1,
  347. tlv_usrid : _TLV_USERID_WIDTH_,
  348. #else
  349. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  350. tlv_mrv : 1,
  351. tlv_src_linkid : 3,
  352. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  353. tlv_tag : _TLV_TAG_WIDTH_,
  354. tlv_compression : 1,
  355. #endif
  356. tlv_reserved : 32;
  357. uint64_t pad_64to128_bit : 64;
  358. };
  359. struct tlv_mac_76_tlword_t {
  360. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  361. uint64_t tlv_compression : 1,
  362. tlv_tag : _TLV_TAG_WIDTH_,
  363. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  364. tlv_src_linkid : 3,
  365. tlv_mrv : 1,
  366. tlv_reserved : 38;
  367. #else
  368. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  369. tlv_mrv : 1,
  370. tlv_src_linkid : 3,
  371. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  372. tlv_tag : _TLV_TAG_WIDTH_,
  373. tlv_compression : 1,
  374. tlv_reserved : 32;
  375. #endif
  376. uint64_t pad_64to128_bit : 64;
  377. };
  378. // -----------------------------------------------------------------
  379. // Compressed TLVs do not support the MLO variant
  380. // -----------------------------------------------------------------
  381. struct tlv_usr_c_44_tlword_t {
  382. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  383. uint64_t tlv_compression : 1,
  384. tlv_ctag : _TLV_CTAG_WIDTH_,
  385. tlv_usrid : _TLV_USERID_WIDTH_,
  386. tlv_cdata : _TLV_CDATA_WIDTH_,
  387. pad_44to64_bit : 20;
  388. #else
  389. uint64_t tlv_cdata_lower_20 : 20,
  390. tlv_usrid : _TLV_USERID_WIDTH_,
  391. tlv_ctag : _TLV_CTAG_WIDTH_,
  392. tlv_compression : 1,
  393. pad_44to64_bit : 20,
  394. tlv_cdata_upper_12 : 12;
  395. #endif
  396. };
  397. struct tlv_usr_c_76_tlword_t {
  398. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  399. uint64_t tlv_compression : 1,
  400. tlv_ctag : _TLV_CTAG_WIDTH_,
  401. tlv_usrid : _TLV_USERID_WIDTH_,
  402. tlv_cdata_lower_52 : 52;
  403. uint64_t tlv_cdata_upper_12 : 12,
  404. pad_76to128_bit : 52;
  405. #else
  406. uint64_t tlv_cdata_lower_20 : 20,
  407. tlv_usrid : _TLV_USERID_WIDTH_,
  408. tlv_ctag : _TLV_CTAG_WIDTH_,
  409. tlv_compression : 1,
  410. tlv_cdata_middle_32 : 32;
  411. uint64_t pad_76to96_bit : 20,
  412. tlv_cdata_upper_12 : 12,
  413. pad_96to128_bit : 32;
  414. #endif
  415. };
  416. // -----------------------------------------------------------------
  417. // !!! For backward compatibility ONLY. !!!
  418. // !!! As per SW request, legacy tlv_32_hdr and tlv_usr_32_hdr !!!
  419. // !!! types are mapped to new 64 bit headers. !!!
  420. // -----------------------------------------------------------------
  421. struct tlv_usr_32_hdr {
  422. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  423. uint64_t tlv_cflg_reserved : 1,
  424. tlv_tag : _TLV_TAG_WIDTH_,
  425. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  426. tlv_src_linkid : 3,
  427. tlv_mrv : 1,
  428. tlv_usrid : _TLV_USERID_WIDTH_,
  429. #else
  430. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  431. tlv_mrv : 1,
  432. tlv_src_linkid : 3,
  433. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  434. tlv_tag : _TLV_TAG_WIDTH_,
  435. tlv_cflg_reserved : 1,
  436. #endif
  437. tlv_reserved : 32;
  438. };
  439. struct tlv_32_hdr {
  440. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  441. uint64_t tlv_cflg_reserved : 1,
  442. tlv_tag : _TLV_TAG_WIDTH_,
  443. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  444. tlv_src_linkid : 3,
  445. tlv_mrv : 1,
  446. tlv_reserved : 38;
  447. #else
  448. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  449. tlv_mrv : 1,
  450. tlv_src_linkid : 3,
  451. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  452. tlv_tag : _TLV_TAG_WIDTH_,
  453. tlv_cflg_reserved : 1,
  454. tlv_reserved : 32;
  455. #endif
  456. };
  457. // -----------------------------------------------------------------
  458. // -----------------------------------------------------------------
  459. // !!! Tag-length word structures using uint32_t !!!
  460. // !!! For endianness considerations !!!
  461. // !!! 'tlword' is replaced with 'tlw32' !!!
  462. // -----------------------------------------------------------------
  463. struct tlv_mlo_usr_64_tlw32_t {
  464. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  465. uint32_t tlv_cflg_reserved : 1,
  466. tlv_tag : _TLV_TAG_WIDTH_,
  467. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  468. tlv_dst_linkid : 3,
  469. tlv_src_linkid : 3,
  470. tlv_mrv : 1,
  471. tlv_usrid : _TLV_USERID_WIDTH_;
  472. #else
  473. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  474. tlv_mrv : 1,
  475. tlv_src_linkid : 3,
  476. tlv_dst_linkid : 3,
  477. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  478. tlv_tag : _TLV_TAG_WIDTH_,
  479. tlv_cflg_reserved : 1;
  480. #endif
  481. uint32_t pad_32to64_bit : 32;
  482. };
  483. struct tlv_mlo_64_tlw32_t {
  484. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  485. uint32_t tlv_cflg_reserved : 1,
  486. tlv_tag : _TLV_TAG_WIDTH_,
  487. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  488. tlv_dst_linkid : 3,
  489. tlv_src_linkid : 3,
  490. tlv_mrv : 1,
  491. tlv_reserved : _TLV_USERID_WIDTH_;
  492. #else
  493. uint32_t tlv_reserved : _TLV_USERID_WIDTH_,
  494. tlv_mrv : 1,
  495. tlv_src_linkid : 3,
  496. tlv_dst_linkid : 3,
  497. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  498. tlv_tag : _TLV_TAG_WIDTH_,
  499. tlv_cflg_reserved : 1;
  500. #endif
  501. uint32_t pad_32to64_bit : 32;
  502. };
  503. struct tlv_mac_usr_64_tlw32_t {
  504. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  505. uint32_t tlv_cflg_reserved : 1,
  506. tlv_tag : _TLV_TAG_WIDTH_,
  507. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  508. tlv_src_linkid : 3,
  509. tlv_mrv : 1,
  510. tlv_usrid : _TLV_USERID_WIDTH_;
  511. #else
  512. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  513. tlv_mrv : 1,
  514. tlv_src_linkid : 3,
  515. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  516. tlv_tag : _TLV_TAG_WIDTH_,
  517. tlv_cflg_reserved : 1;
  518. #endif
  519. uint32_t pad_32to64_bit : 32;
  520. };
  521. struct tlv_mac_64_tlw32_t {
  522. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  523. uint32_t tlv_cflg_reserved : 1,
  524. tlv_tag : _TLV_TAG_WIDTH_,
  525. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  526. tlv_src_linkid : 3,
  527. tlv_mrv : 1,
  528. tlv_reserved : _TLV_USERID_WIDTH_;
  529. #else
  530. uint32_t tlv_reserved : _TLV_USERID_WIDTH_,
  531. tlv_mrv : 1,
  532. tlv_src_linkid : 3,
  533. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  534. tlv_tag : _TLV_TAG_WIDTH_,
  535. tlv_cflg_reserved : 1;
  536. #endif
  537. uint32_t pad_32to64_bit : 32;
  538. };
  539. // -----------------------------------------------------------------
  540. // Compressed TLVs do not support the MLO variant
  541. // -----------------------------------------------------------------
  542. struct tlv_usr_c_44_tlw32_t {
  543. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  544. uint32_t tlv_compression : 1,
  545. tlv_ctag : _TLV_CTAG_WIDTH_,
  546. tlv_usrid : _TLV_USERID_WIDTH_,
  547. tlv_cdata_lower_20 : 20;
  548. uint32_t tlv_cdata_upper_12 : 12,
  549. pad_44to64_bit : 20;
  550. #else
  551. uint32_t tlv_cdata_lower_20 : 20,
  552. tlv_usrid : _TLV_USERID_WIDTH_,
  553. tlv_ctag : _TLV_CTAG_WIDTH_,
  554. tlv_compression : 1;
  555. uint32_t pad_44to64_bit : 20,
  556. tlv_cdata_upper_12 : 12;
  557. #endif
  558. };
  559. struct tlv_usr_c_76_tlw32_t {
  560. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  561. uint32_t tlv_compression : 1,
  562. tlv_ctag : _TLV_CTAG_WIDTH_,
  563. tlv_usrid : _TLV_USERID_WIDTH_,
  564. tlv_cdata_lower_20 : 20;
  565. uint32_t tlv_cdata_middle_32 : 32;
  566. uint32_t tlv_cdata_upper_12 : 12,
  567. pad_76to96_bit : 20;
  568. uint32_t pad_96to128_bit : 32;
  569. #else
  570. uint32_t tlv_cdata_lower_20 : 20,
  571. tlv_usrid : _TLV_USERID_WIDTH_,
  572. tlv_ctag : _TLV_CTAG_WIDTH_,
  573. tlv_compression : 1;
  574. uint32_t tlv_cdata_middle_32 : 32;
  575. uint32_t pad_76to96_bit : 20,
  576. tlv_cdata_upper_12 : 12;
  577. uint32_t pad_96to128_bit : 32;
  578. #endif
  579. };
  580. // -----------------------------------------------------------------
  581. #endif // _TLV_HDR_H_