tlv_hdr.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. /*
  2. * Copyright (c) 2021 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. uint16_t tlv_cflg_reserved : 1,
  38. tlv_tag : _TLV_16_TAG_WIDTH_,
  39. tlv_len : _TLV_16_LEN_WIDTH_,
  40. tlv_usrid : _TLV_USERID_WIDTH_;
  41. };
  42. struct tlv_16_tlword_t {
  43. uint16_t tlv_cflg_reserved : 1,
  44. tlv_len : _TLV_16_LEN_WIDTH_,
  45. tlv_tag : _TLV_16_TAG_WIDTH_,
  46. tlv_reserved : 6;
  47. };
  48. struct tlv_mlo_usr_32_tlword_t {
  49. uint32_t tlv_cflg_reserved : 1,
  50. tlv_tag : _TLV_TAG_WIDTH_,
  51. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  52. tlv_dst_linkid : 3,
  53. tlv_src_linkid : 3,
  54. tlv_mrv : 1,
  55. tlv_usrid : _TLV_USERID_WIDTH_;
  56. };
  57. struct tlv_mlo_32_tlword_t {
  58. uint32_t tlv_cflg_reserved : 1,
  59. tlv_tag : _TLV_TAG_WIDTH_,
  60. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  61. tlv_dst_linkid : 3,
  62. tlv_src_linkid : 3,
  63. tlv_mrv : 1,
  64. tlv_reserved : 6;
  65. };
  66. struct tlv_mlo_usr_64_tlword_t {
  67. uint64_t tlv_cflg_reserved : 1,
  68. tlv_tag : _TLV_TAG_WIDTH_,
  69. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  70. tlv_dst_linkid : 3,
  71. tlv_src_linkid : 3,
  72. tlv_mrv : 1,
  73. tlv_usrid : _TLV_USERID_WIDTH_,
  74. tlv_reserved : 32;
  75. };
  76. struct tlv_mlo_64_tlword_t {
  77. uint64_t tlv_cflg_reserved : 1,
  78. tlv_tag : _TLV_TAG_WIDTH_,
  79. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  80. tlv_dst_linkid : 3,
  81. tlv_src_linkid : 3,
  82. tlv_mrv : 1,
  83. tlv_reserved : 38;
  84. };
  85. struct tlv_mlo_usr_44_tlword_t {
  86. uint64_t tlv_compression : 1,
  87. tlv_tag : _TLV_TAG_WIDTH_,
  88. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  89. tlv_dst_linkid : 3,
  90. tlv_src_linkid : 3,
  91. tlv_mrv : 1,
  92. tlv_usrid : _TLV_USERID_WIDTH_,
  93. tlv_reserved : 10,
  94. pad_44to64_bit : 22;
  95. };
  96. struct tlv_mlo_44_tlword_t {
  97. uint64_t tlv_compression : 1,
  98. tlv_tag : _TLV_TAG_WIDTH_,
  99. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  100. tlv_dst_linkid : 3,
  101. tlv_src_linkid : 3,
  102. tlv_mrv : 1,
  103. tlv_reserved : 16,
  104. pad_44to64_bit : 22;
  105. };
  106. struct tlv_mlo_usr_76_tlword_t {
  107. uint64_t tlv_compression : 1,
  108. tlv_tag : _TLV_TAG_WIDTH_,
  109. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  110. tlv_dst_linkid : 3,
  111. tlv_src_linkid : 3,
  112. tlv_mrv : 1,
  113. tlv_usrid : _TLV_USERID_WIDTH_,
  114. tlv_reserved : 32;
  115. uint64_t pad_64to128_bit : 64;
  116. };
  117. struct tlv_mlo_76_tlword_t {
  118. uint64_t tlv_compression : 1,
  119. tlv_tag : _TLV_TAG_WIDTH_,
  120. tlv_len : _TLV_MRV_EN_LEN_WIDTH_,
  121. tlv_dst_linkid : 3,
  122. tlv_src_linkid : 3,
  123. tlv_mrv : 1,
  124. tlv_reserved : 38;
  125. uint64_t pad_64to128_bit : 64;
  126. };
  127. struct tlv_mac_usr_32_tlword_t {
  128. uint32_t tlv_cflg_reserved : 1,
  129. tlv_tag : _TLV_TAG_WIDTH_,
  130. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  131. tlv_src_linkid : 3,
  132. tlv_mrv : 1,
  133. tlv_usrid : _TLV_USERID_WIDTH_;
  134. };
  135. struct tlv_mac_32_tlword_t {
  136. uint32_t tlv_cflg_reserved : 1,
  137. tlv_tag : _TLV_TAG_WIDTH_,
  138. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  139. tlv_src_linkid : 3,
  140. tlv_mrv : 1,
  141. tlv_reserved : 6;
  142. };
  143. struct tlv_mac_usr_64_tlword_t {
  144. uint64_t tlv_cflg_reserved : 1,
  145. tlv_tag : _TLV_TAG_WIDTH_,
  146. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  147. tlv_src_linkid : 3,
  148. tlv_mrv : 1,
  149. tlv_usrid : _TLV_USERID_WIDTH_,
  150. tlv_reserved : 32;
  151. };
  152. struct tlv_mac_64_tlword_t {
  153. uint64_t tlv_cflg_reserved : 1,
  154. tlv_tag : _TLV_TAG_WIDTH_,
  155. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  156. tlv_src_linkid : 3,
  157. tlv_mrv : 1,
  158. tlv_reserved : 38;
  159. };
  160. struct tlv_mac_usr_44_tlword_t {
  161. uint64_t tlv_compression : 1,
  162. tlv_tag : _TLV_TAG_WIDTH_,
  163. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  164. tlv_src_linkid : 3,
  165. tlv_mrv : 1,
  166. tlv_usrid : _TLV_USERID_WIDTH_,
  167. tlv_reserved : 10,
  168. pad_44to64_bit : 22;
  169. };
  170. struct tlv_mac_44_tlword_t {
  171. uint64_t tlv_compression : 1,
  172. tlv_tag : _TLV_TAG_WIDTH_,
  173. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  174. tlv_src_linkid : 3,
  175. tlv_mrv : 1,
  176. tlv_reserved : 16,
  177. pad_44to64_bit : 22;
  178. };
  179. struct tlv_mac_usr_76_tlword_t {
  180. uint64_t tlv_compression : 1,
  181. tlv_tag : _TLV_TAG_WIDTH_,
  182. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  183. tlv_src_linkid : 3,
  184. tlv_mrv : 1,
  185. tlv_usrid : _TLV_USERID_WIDTH_,
  186. tlv_reserved : 32;
  187. uint64_t pad_64to128_bit : 64;
  188. };
  189. struct tlv_mac_76_tlword_t {
  190. uint64_t tlv_compression : 1,
  191. tlv_tag : _TLV_TAG_WIDTH_,
  192. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  193. tlv_src_linkid : 3,
  194. tlv_mrv : 1,
  195. tlv_reserved : 38;
  196. uint64_t pad_64to128_bit : 64;
  197. };
  198. struct tlv_usr_c_44_tlword_t {
  199. uint64_t tlv_compression : 1,
  200. tlv_ctag : _TLV_CTAG_WIDTH_,
  201. tlv_usrid : _TLV_USERID_WIDTH_,
  202. tlv_cdata : _TLV_CDATA_WIDTH_,
  203. pad_44to64_bit : 20;
  204. };
  205. struct tlv_usr_c_76_tlword_t {
  206. uint64_t tlv_compression : 1,
  207. tlv_ctag : _TLV_CTAG_WIDTH_,
  208. tlv_usrid : _TLV_USERID_WIDTH_,
  209. tlv_cdata_lower_52 : 52;
  210. uint64_t tlv_cdata_upper_12 : 12,
  211. pad_76to128_bit : 52;
  212. };
  213. struct tlv_usr_32_hdr {
  214. uint64_t tlv_cflg_reserved : 1,
  215. tlv_tag : _TLV_TAG_WIDTH_,
  216. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  217. tlv_src_linkid : 3,
  218. tlv_mrv : 1,
  219. tlv_usrid : _TLV_USERID_WIDTH_,
  220. tlv_reserved : 32;
  221. };
  222. struct tlv_32_hdr {
  223. uint64_t tlv_cflg_reserved : 1,
  224. tlv_tag : _TLV_TAG_WIDTH_,
  225. tlv_len : _TLV_MRV_DIS_LEN_WIDTH_,
  226. tlv_src_linkid : 3,
  227. tlv_mrv : 1,
  228. tlv_reserved : 38;
  229. };
  230. #endif