tlv_hdr.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. /*
  2. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. 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. #ifndef _TLV_HDR_H_
  19. #define _TLV_HDR_H_
  20. #if !defined(__ASSEMBLER__)
  21. #endif
  22. #define _TLV_USERID_WIDTH_ 6
  23. #define _TLV_DATA_WIDTH_ 32
  24. #define _TLV_TAG_WIDTH_ 9
  25. #define _TLV_MRV_EN_LEN_WIDTH_ 9
  26. #define _TLV_MRV_DIS_LEN_WIDTH_ 12
  27. #define _TLV_16_DATA_WIDTH_ 16
  28. #define _TLV_16_TAG_WIDTH_ 5
  29. #define _TLV_16_LEN_WIDTH_ 4
  30. #define _TLV_CTAG_WIDTH_ 5
  31. #define _TLV_44_DATA_WIDTH_ 44
  32. #define _TLV_64_DATA_WIDTH_ 64
  33. #define _TLV_76_DATA_WIDTH_ 64
  34. #define _TLV_CDATA_WIDTH_ 32
  35. #define _TLV_CDATA_76_WIDTH_ 64
  36. struct tlv_usr_16_tlword_t {
  37. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  38. uint16_t tlv_cflg_reserved : 1,
  39. tlv_tag : _TLV_16_TAG_WIDTH_,
  40. tlv_len : _TLV_16_LEN_WIDTH_,
  41. tlv_usrid : _TLV_USERID_WIDTH_;
  42. #else
  43. uint16_t tlv_usrid : _TLV_USERID_WIDTH_,
  44. tlv_len : _TLV_16_LEN_WIDTH_,
  45. tlv_tag : _TLV_16_TAG_WIDTH_,
  46. tlv_cflg_reserved : 1;
  47. #endif
  48. };
  49. struct tlv_16_tlword_t {
  50. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  51. uint16_t tlv_cflg_reserved : 1,
  52. tlv_len : _TLV_16_LEN_WIDTH_,
  53. tlv_tag : _TLV_16_TAG_WIDTH_,
  54. tlv_reserved : 6;
  55. #else
  56. uint16_t tlv_reserved : 6,
  57. tlv_tag : _TLV_16_TAG_WIDTH_,
  58. tlv_len : _TLV_16_LEN_WIDTH_,
  59. tlv_cflg_reserved : 1;
  60. #endif
  61. };
  62. struct tlv_mac_usr_32_tlword_t {
  63. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  64. uint32_t tlv_cflg_reserved : 1,
  65. tlv_tag : _TLV_TAG_WIDTH_,
  66. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  67. tlv_src_linkid : 3,
  68. tlv_mrv : 1,
  69. tlv_usrid : _TLV_USERID_WIDTH_;
  70. #else
  71. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  72. tlv_mrv : 1,
  73. tlv_src_linkid : 3,
  74. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  75. tlv_tag : _TLV_TAG_WIDTH_,
  76. tlv_cflg_reserved : 1;
  77. #endif
  78. };
  79. struct tlv_mac_32_tlword_t {
  80. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  81. uint32_t tlv_cflg_reserved : 1,
  82. tlv_tag : _TLV_TAG_WIDTH_,
  83. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  84. tlv_src_linkid : 3,
  85. tlv_mrv : 1,
  86. tlv_reserved : 6;
  87. #else
  88. uint32_t tlv_reserved : 6,
  89. tlv_mrv : 1,
  90. tlv_src_linkid : 3,
  91. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  92. tlv_tag : _TLV_TAG_WIDTH_,
  93. tlv_cflg_reserved : 1;
  94. #endif
  95. };
  96. struct tlv_mac_usr_64_tlword_t {
  97. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  98. uint64_t tlv_cflg_reserved : 1,
  99. tlv_tag : _TLV_TAG_WIDTH_,
  100. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  101. tlv_src_linkid : 3,
  102. tlv_mrv : 1,
  103. tlv_usrid : _TLV_USERID_WIDTH_,
  104. #else
  105. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  106. tlv_mrv : 1,
  107. tlv_src_linkid : 3,
  108. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  109. tlv_tag : _TLV_TAG_WIDTH_,
  110. tlv_cflg_reserved : 1,
  111. #endif
  112. tlv_reserved : 32;
  113. };
  114. struct tlv_mac_64_tlword_t {
  115. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  116. uint64_t tlv_cflg_reserved : 1,
  117. tlv_tag : _TLV_TAG_WIDTH_,
  118. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  119. tlv_src_linkid : 3,
  120. tlv_mrv : 1,
  121. tlv_reserved : 38;
  122. #else
  123. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  124. tlv_mrv : 1,
  125. tlv_src_linkid : 3,
  126. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  127. tlv_tag : _TLV_TAG_WIDTH_,
  128. tlv_cflg_reserved : 1,
  129. tlv_reserved : 32;
  130. #endif
  131. };
  132. struct tlv_mac_usr_44_tlword_t {
  133. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  134. uint64_t tlv_compression : 1,
  135. tlv_tag : _TLV_TAG_WIDTH_,
  136. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  137. tlv_src_linkid : 3,
  138. tlv_mrv : 1,
  139. tlv_usrid : _TLV_USERID_WIDTH_,
  140. tlv_reserved : 10,
  141. pad_44to64_bit : 22;
  142. #else
  143. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  144. tlv_mrv : 1,
  145. tlv_src_linkid : 3,
  146. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  147. tlv_tag : _TLV_TAG_WIDTH_,
  148. tlv_compression : 1,
  149. pad_44to64_bit : 22,
  150. tlv_reserved : 10;
  151. #endif
  152. };
  153. struct tlv_mac_44_tlword_t {
  154. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  155. uint64_t tlv_compression : 1,
  156. tlv_tag : _TLV_TAG_WIDTH_,
  157. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  158. tlv_src_linkid : 3,
  159. tlv_mrv : 1,
  160. tlv_reserved : 16,
  161. pad_44to64_bit : 22;
  162. #else
  163. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  164. tlv_mrv : 1,
  165. tlv_src_linkid : 3,
  166. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  167. tlv_tag : _TLV_TAG_WIDTH_,
  168. tlv_compression : 1,
  169. pad_44to64_bit : 22,
  170. tlv_reserved : 10;
  171. #endif
  172. };
  173. struct tlv_mac_usr_76_tlword_t {
  174. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  175. uint64_t tlv_compression : 1,
  176. tlv_tag : _TLV_TAG_WIDTH_,
  177. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  178. tlv_src_linkid : 3,
  179. tlv_mrv : 1,
  180. tlv_usrid : _TLV_USERID_WIDTH_,
  181. #else
  182. uint64_t tlv_usrid : _TLV_USERID_WIDTH_,
  183. tlv_mrv : 1,
  184. tlv_src_linkid : 3,
  185. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  186. tlv_tag : _TLV_TAG_WIDTH_,
  187. tlv_compression : 1,
  188. #endif
  189. tlv_reserved : 32;
  190. uint64_t pad_64to128_bit : 64;
  191. };
  192. struct tlv_mac_76_tlword_t {
  193. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  194. uint64_t tlv_compression : 1,
  195. tlv_tag : _TLV_TAG_WIDTH_,
  196. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  197. tlv_src_linkid : 3,
  198. tlv_mrv : 1,
  199. tlv_reserved : 38;
  200. #else
  201. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  202. tlv_mrv : 1,
  203. tlv_src_linkid : 3,
  204. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  205. tlv_tag : _TLV_TAG_WIDTH_,
  206. tlv_compression : 1,
  207. tlv_reserved : 32;
  208. #endif
  209. uint64_t pad_64to128_bit : 64;
  210. };
  211. struct tlv_usr_c_44_tlword_t {
  212. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  213. uint64_t tlv_compression : 1,
  214. tlv_ctag : _TLV_CTAG_WIDTH_,
  215. tlv_usrid : _TLV_USERID_WIDTH_,
  216. tlv_cdata : _TLV_CDATA_WIDTH_,
  217. pad_44to64_bit : 20;
  218. #else
  219. uint64_t tlv_cdata_lower_20 : 20,
  220. tlv_usrid : _TLV_USERID_WIDTH_,
  221. tlv_ctag : _TLV_CTAG_WIDTH_,
  222. tlv_compression : 1,
  223. pad_44to64_bit : 20,
  224. tlv_cdata_upper_12 : 12;
  225. #endif
  226. };
  227. struct tlv_usr_c_76_tlword_t {
  228. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  229. uint64_t tlv_compression : 1,
  230. tlv_ctag : _TLV_CTAG_WIDTH_,
  231. tlv_usrid : _TLV_USERID_WIDTH_,
  232. tlv_cdata_lower_52 : 52;
  233. uint64_t tlv_cdata_upper_12 : 12,
  234. pad_76to128_bit : 52;
  235. #else
  236. uint64_t tlv_cdata_lower_20 : 20,
  237. tlv_usrid : _TLV_USERID_WIDTH_,
  238. tlv_ctag : _TLV_CTAG_WIDTH_,
  239. tlv_compression : 1,
  240. tlv_cdata_middle_32 : 32;
  241. uint64_t pad_76to96_bit : 20,
  242. tlv_cdata_upper_12 : 12,
  243. pad_96to128_bit : 32;
  244. #endif
  245. };
  246. struct tlv_usr_32_hdr {
  247. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  248. uint64_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_usrid : _TLV_USERID_WIDTH_,
  254. #else
  255. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  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. tlv_reserved : 32;
  263. };
  264. struct tlv_32_hdr {
  265. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  266. uint64_t tlv_cflg_reserved : 1,
  267. tlv_tag : _TLV_TAG_WIDTH_,
  268. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  269. tlv_src_linkid : 3,
  270. tlv_mrv : 1,
  271. tlv_reserved : 38;
  272. #else
  273. uint64_t tlv_usrid_reserved : _TLV_USERID_WIDTH_,
  274. tlv_mrv : 1,
  275. tlv_src_linkid : 3,
  276. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  277. tlv_tag : _TLV_TAG_WIDTH_,
  278. tlv_cflg_reserved : 1,
  279. tlv_reserved : 32;
  280. #endif
  281. };
  282. struct tlv_mlo_usr_64_tlw32_t {
  283. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  284. uint32_t tlv_cflg_reserved : 1,
  285. tlv_tag : _TLV_TAG_WIDTH_,
  286. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  287. tlv_dst_linkid : 3,
  288. tlv_src_linkid : 3,
  289. tlv_mrv : 1,
  290. tlv_usrid : _TLV_USERID_WIDTH_;
  291. #else
  292. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  293. tlv_mrv : 1,
  294. tlv_src_linkid : 3,
  295. tlv_dst_linkid : 3,
  296. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  297. tlv_tag : _TLV_TAG_WIDTH_,
  298. tlv_cflg_reserved : 1;
  299. #endif
  300. uint32_t pad_32to64_bit : 32;
  301. };
  302. struct tlv_mlo_64_tlw32_t {
  303. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  304. uint32_t tlv_cflg_reserved : 1,
  305. tlv_tag : _TLV_TAG_WIDTH_,
  306. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  307. tlv_dst_linkid : 3,
  308. tlv_src_linkid : 3,
  309. tlv_mrv : 1,
  310. tlv_reserved : _TLV_USERID_WIDTH_;
  311. #else
  312. uint32_t tlv_reserved : _TLV_USERID_WIDTH_,
  313. tlv_mrv : 1,
  314. tlv_src_linkid : 3,
  315. tlv_dst_linkid : 3,
  316. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  317. tlv_tag : _TLV_TAG_WIDTH_,
  318. tlv_cflg_reserved : 1;
  319. #endif
  320. uint32_t pad_32to64_bit : 32;
  321. };
  322. struct tlv_mac_usr_64_tlw32_t {
  323. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  324. uint32_t tlv_cflg_reserved : 1,
  325. tlv_tag : _TLV_TAG_WIDTH_,
  326. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  327. tlv_src_linkid : 3,
  328. tlv_mrv : 1,
  329. tlv_usrid : _TLV_USERID_WIDTH_;
  330. #else
  331. uint32_t tlv_usrid : _TLV_USERID_WIDTH_,
  332. tlv_mrv : 1,
  333. tlv_src_linkid : 3,
  334. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  335. tlv_tag : _TLV_TAG_WIDTH_,
  336. tlv_cflg_reserved : 1;
  337. #endif
  338. uint32_t pad_32to64_bit : 32;
  339. };
  340. struct tlv_mac_64_tlw32_t {
  341. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  342. uint32_t tlv_cflg_reserved : 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_reserved : _TLV_USERID_WIDTH_;
  348. #else
  349. uint32_t tlv_reserved : _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_cflg_reserved : 1;
  355. #endif
  356. uint32_t pad_32to64_bit : 32;
  357. };
  358. struct tlv_usr_c_44_tlw32_t {
  359. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  360. uint32_t tlv_compression : 1,
  361. tlv_ctag : _TLV_CTAG_WIDTH_,
  362. tlv_usrid : _TLV_USERID_WIDTH_,
  363. tlv_cdata_lower_20 : 20;
  364. uint32_t tlv_cdata_upper_12 : 12,
  365. pad_44to64_bit : 20;
  366. #else
  367. uint32_t tlv_cdata_lower_20 : 20,
  368. tlv_usrid : _TLV_USERID_WIDTH_,
  369. tlv_ctag : _TLV_CTAG_WIDTH_,
  370. tlv_compression : 1;
  371. uint32_t pad_44to64_bit : 20,
  372. tlv_cdata_upper_12 : 12;
  373. #endif
  374. };
  375. struct tlv_usr_c_76_tlw32_t {
  376. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  377. uint32_t tlv_compression : 1,
  378. tlv_ctag : _TLV_CTAG_WIDTH_,
  379. tlv_usrid : _TLV_USERID_WIDTH_,
  380. tlv_cdata_lower_20 : 20;
  381. uint32_t tlv_cdata_middle_32 : 32;
  382. uint32_t tlv_cdata_upper_12 : 12,
  383. pad_76to96_bit : 20;
  384. uint32_t pad_96to128_bit : 32;
  385. #else
  386. uint32_t tlv_cdata_lower_20 : 20,
  387. tlv_usrid : _TLV_USERID_WIDTH_,
  388. tlv_ctag : _TLV_CTAG_WIDTH_,
  389. tlv_compression : 1;
  390. uint32_t tlv_cdata_middle_32 : 32;
  391. uint32_t pad_76to96_bit : 20,
  392. tlv_cdata_upper_12 : 12;
  393. uint32_t pad_96to128_bit : 32;
  394. #endif
  395. };
  396. #endif