common_hsi.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. /* QLogic qed NIC Driver
  2. * Copyright (c) 2015 QLogic Corporation
  3. *
  4. * This software is available under the terms of the GNU General Public License
  5. * (GPL) Version 2, available from the file COPYING in the main directory of
  6. * this source tree.
  7. */
  8. #ifndef __COMMON_HSI__
  9. #define __COMMON_HSI__
  10. #define CORE_SPQE_PAGE_SIZE_BYTES 4096
  11. #define FW_MAJOR_VERSION 8
  12. #define FW_MINOR_VERSION 4
  13. #define FW_REVISION_VERSION 2
  14. #define FW_ENGINEERING_VERSION 0
  15. /***********************/
  16. /* COMMON HW CONSTANTS */
  17. /***********************/
  18. /* PCI functions */
  19. #define MAX_NUM_PORTS_K2 (4)
  20. #define MAX_NUM_PORTS_BB (2)
  21. #define MAX_NUM_PORTS (MAX_NUM_PORTS_K2)
  22. #define MAX_NUM_PFS_K2 (16)
  23. #define MAX_NUM_PFS_BB (8)
  24. #define MAX_NUM_PFS (MAX_NUM_PFS_K2)
  25. #define MAX_NUM_OF_PFS_IN_CHIP (16) /* On both engines */
  26. #define MAX_NUM_VFS_K2 (192)
  27. #define MAX_NUM_VFS_BB (120)
  28. #define MAX_NUM_VFS (MAX_NUM_VFS_K2)
  29. #define MAX_NUM_FUNCTIONS_BB (MAX_NUM_PFS_BB + MAX_NUM_VFS_BB)
  30. #define MAX_NUM_FUNCTIONS (MAX_NUM_PFS + MAX_NUM_VFS)
  31. #define MAX_FUNCTION_NUMBER_BB (MAX_NUM_PFS + MAX_NUM_VFS_BB)
  32. #define MAX_FUNCTION_NUMBER (MAX_NUM_PFS + MAX_NUM_VFS)
  33. #define MAX_NUM_VPORTS_K2 (208)
  34. #define MAX_NUM_VPORTS_BB (160)
  35. #define MAX_NUM_VPORTS (MAX_NUM_VPORTS_K2)
  36. #define MAX_NUM_L2_QUEUES_K2 (320)
  37. #define MAX_NUM_L2_QUEUES_BB (256)
  38. #define MAX_NUM_L2_QUEUES (MAX_NUM_L2_QUEUES_K2)
  39. /* Traffic classes in network-facing blocks (PBF, BTB, NIG, BRB, PRS and QM) */
  40. #define NUM_PHYS_TCS_4PORT_K2 (4)
  41. #define NUM_OF_PHYS_TCS (8)
  42. #define NUM_TCS_4PORT_K2 (NUM_PHYS_TCS_4PORT_K2 + 1)
  43. #define NUM_OF_TCS (NUM_OF_PHYS_TCS + 1)
  44. #define LB_TC (NUM_OF_PHYS_TCS)
  45. /* Num of possible traffic priority values */
  46. #define NUM_OF_PRIO (8)
  47. #define MAX_NUM_VOQS_K2 (NUM_TCS_4PORT_K2 * MAX_NUM_PORTS_K2)
  48. #define MAX_NUM_VOQS_BB (NUM_OF_TCS * MAX_NUM_PORTS_BB)
  49. #define MAX_NUM_VOQS (MAX_NUM_VOQS_K2)
  50. #define MAX_PHYS_VOQS (NUM_OF_PHYS_TCS * MAX_NUM_PORTS_BB)
  51. /* CIDs */
  52. #define NUM_OF_CONNECTION_TYPES (8)
  53. #define NUM_OF_LCIDS (320)
  54. #define NUM_OF_LTIDS (320)
  55. /*****************/
  56. /* CDU CONSTANTS */
  57. /*****************/
  58. #define CDU_SEG_TYPE_OFFSET_REG_TYPE_SHIFT (17)
  59. #define CDU_SEG_TYPE_OFFSET_REG_OFFSET_MASK (0x1ffff)
  60. /*****************/
  61. /* DQ CONSTANTS */
  62. /*****************/
  63. /* DEMS */
  64. #define DQ_DEMS_LEGACY 0
  65. /* XCM agg val selection */
  66. #define DQ_XCM_AGG_VAL_SEL_WORD2 0
  67. #define DQ_XCM_AGG_VAL_SEL_WORD3 1
  68. #define DQ_XCM_AGG_VAL_SEL_WORD4 2
  69. #define DQ_XCM_AGG_VAL_SEL_WORD5 3
  70. #define DQ_XCM_AGG_VAL_SEL_REG3 4
  71. #define DQ_XCM_AGG_VAL_SEL_REG4 5
  72. #define DQ_XCM_AGG_VAL_SEL_REG5 6
  73. #define DQ_XCM_AGG_VAL_SEL_REG6 7
  74. /* XCM agg val selection */
  75. #define DQ_XCM_ETH_EDPM_NUM_BDS_CMD \
  76. DQ_XCM_AGG_VAL_SEL_WORD2
  77. #define DQ_XCM_ETH_TX_BD_CONS_CMD \
  78. DQ_XCM_AGG_VAL_SEL_WORD3
  79. #define DQ_XCM_CORE_TX_BD_CONS_CMD \
  80. DQ_XCM_AGG_VAL_SEL_WORD3
  81. #define DQ_XCM_ETH_TX_BD_PROD_CMD \
  82. DQ_XCM_AGG_VAL_SEL_WORD4
  83. #define DQ_XCM_CORE_TX_BD_PROD_CMD \
  84. DQ_XCM_AGG_VAL_SEL_WORD4
  85. #define DQ_XCM_CORE_SPQ_PROD_CMD \
  86. DQ_XCM_AGG_VAL_SEL_WORD4
  87. #define DQ_XCM_ETH_GO_TO_BD_CONS_CMD DQ_XCM_AGG_VAL_SEL_WORD5
  88. /* XCM agg counter flag selection */
  89. #define DQ_XCM_AGG_FLG_SHIFT_BIT14 0
  90. #define DQ_XCM_AGG_FLG_SHIFT_BIT15 1
  91. #define DQ_XCM_AGG_FLG_SHIFT_CF12 2
  92. #define DQ_XCM_AGG_FLG_SHIFT_CF13 3
  93. #define DQ_XCM_AGG_FLG_SHIFT_CF18 4
  94. #define DQ_XCM_AGG_FLG_SHIFT_CF19 5
  95. #define DQ_XCM_AGG_FLG_SHIFT_CF22 6
  96. #define DQ_XCM_AGG_FLG_SHIFT_CF23 7
  97. /* XCM agg counter flag selection */
  98. #define DQ_XCM_ETH_DQ_CF_CMD (1 << \
  99. DQ_XCM_AGG_FLG_SHIFT_CF18)
  100. #define DQ_XCM_CORE_DQ_CF_CMD (1 << \
  101. DQ_XCM_AGG_FLG_SHIFT_CF18)
  102. #define DQ_XCM_ETH_TERMINATE_CMD (1 << \
  103. DQ_XCM_AGG_FLG_SHIFT_CF19)
  104. #define DQ_XCM_CORE_TERMINATE_CMD (1 << \
  105. DQ_XCM_AGG_FLG_SHIFT_CF19)
  106. #define DQ_XCM_ETH_SLOW_PATH_CMD (1 << \
  107. DQ_XCM_AGG_FLG_SHIFT_CF22)
  108. #define DQ_XCM_CORE_SLOW_PATH_CMD (1 << \
  109. DQ_XCM_AGG_FLG_SHIFT_CF22)
  110. #define DQ_XCM_ETH_TPH_EN_CMD (1 << \
  111. DQ_XCM_AGG_FLG_SHIFT_CF23)
  112. /*****************/
  113. /* QM CONSTANTS */
  114. /*****************/
  115. /* number of TX queues in the QM */
  116. #define MAX_QM_TX_QUEUES_K2 512
  117. #define MAX_QM_TX_QUEUES_BB 448
  118. #define MAX_QM_TX_QUEUES MAX_QM_TX_QUEUES_K2
  119. /* number of Other queues in the QM */
  120. #define MAX_QM_OTHER_QUEUES_BB 64
  121. #define MAX_QM_OTHER_QUEUES_K2 128
  122. #define MAX_QM_OTHER_QUEUES MAX_QM_OTHER_QUEUES_K2
  123. /* number of queues in a PF queue group */
  124. #define QM_PF_QUEUE_GROUP_SIZE 8
  125. /* base number of Tx PQs in the CM PQ representation.
  126. * should be used when storing PQ IDs in CM PQ registers and context
  127. */
  128. #define CM_TX_PQ_BASE 0x200
  129. /* QM registers data */
  130. #define QM_LINE_CRD_REG_WIDTH 16
  131. #define QM_LINE_CRD_REG_SIGN_BIT (1 << (QM_LINE_CRD_REG_WIDTH - 1))
  132. #define QM_BYTE_CRD_REG_WIDTH 24
  133. #define QM_BYTE_CRD_REG_SIGN_BIT (1 << (QM_BYTE_CRD_REG_WIDTH - 1))
  134. #define QM_WFQ_CRD_REG_WIDTH 32
  135. #define QM_WFQ_CRD_REG_SIGN_BIT (1 << (QM_WFQ_CRD_REG_WIDTH - 1))
  136. #define QM_RL_CRD_REG_WIDTH 32
  137. #define QM_RL_CRD_REG_SIGN_BIT (1 << (QM_RL_CRD_REG_WIDTH - 1))
  138. /*****************/
  139. /* CAU CONSTANTS */
  140. /*****************/
  141. #define CAU_FSM_ETH_RX 0
  142. #define CAU_FSM_ETH_TX 1
  143. /* Number of Protocol Indices per Status Block */
  144. #define PIS_PER_SB 12
  145. #define CAU_HC_STOPPED_STATE 3
  146. #define CAU_HC_DISABLE_STATE 4
  147. #define CAU_HC_ENABLE_STATE 0
  148. /*****************/
  149. /* IGU CONSTANTS */
  150. /*****************/
  151. #define MAX_SB_PER_PATH_K2 (368)
  152. #define MAX_SB_PER_PATH_BB (288)
  153. #define MAX_TOT_SB_PER_PATH \
  154. MAX_SB_PER_PATH_K2
  155. #define MAX_SB_PER_PF_MIMD 129
  156. #define MAX_SB_PER_PF_SIMD 64
  157. #define MAX_SB_PER_VF 64
  158. /* Memory addresses on the BAR for the IGU Sub Block */
  159. #define IGU_MEM_BASE 0x0000
  160. #define IGU_MEM_MSIX_BASE 0x0000
  161. #define IGU_MEM_MSIX_UPPER 0x0101
  162. #define IGU_MEM_MSIX_RESERVED_UPPER 0x01ff
  163. #define IGU_MEM_PBA_MSIX_BASE 0x0200
  164. #define IGU_MEM_PBA_MSIX_UPPER 0x0202
  165. #define IGU_MEM_PBA_MSIX_RESERVED_UPPER 0x03ff
  166. #define IGU_CMD_INT_ACK_BASE 0x0400
  167. #define IGU_CMD_INT_ACK_UPPER (IGU_CMD_INT_ACK_BASE + \
  168. MAX_TOT_SB_PER_PATH - \
  169. 1)
  170. #define IGU_CMD_INT_ACK_RESERVED_UPPER 0x05ff
  171. #define IGU_CMD_ATTN_BIT_UPD_UPPER 0x05f0
  172. #define IGU_CMD_ATTN_BIT_SET_UPPER 0x05f1
  173. #define IGU_CMD_ATTN_BIT_CLR_UPPER 0x05f2
  174. #define IGU_REG_SISR_MDPC_WMASK_UPPER 0x05f3
  175. #define IGU_REG_SISR_MDPC_WMASK_LSB_UPPER 0x05f4
  176. #define IGU_REG_SISR_MDPC_WMASK_MSB_UPPER 0x05f5
  177. #define IGU_REG_SISR_MDPC_WOMASK_UPPER 0x05f6
  178. #define IGU_CMD_PROD_UPD_BASE 0x0600
  179. #define IGU_CMD_PROD_UPD_UPPER (IGU_CMD_PROD_UPD_BASE +\
  180. MAX_TOT_SB_PER_PATH - \
  181. 1)
  182. #define IGU_CMD_PROD_UPD_RESERVED_UPPER 0x07ff
  183. /*****************/
  184. /* PXP CONSTANTS */
  185. /*****************/
  186. /* PTT and GTT */
  187. #define PXP_NUM_PF_WINDOWS 12
  188. #define PXP_PER_PF_ENTRY_SIZE 8
  189. #define PXP_NUM_GLOBAL_WINDOWS 243
  190. #define PXP_GLOBAL_ENTRY_SIZE 4
  191. #define PXP_ADMIN_WINDOW_ALLOWED_LENGTH 4
  192. #define PXP_PF_WINDOW_ADMIN_START 0
  193. #define PXP_PF_WINDOW_ADMIN_LENGTH 0x1000
  194. #define PXP_PF_WINDOW_ADMIN_END (PXP_PF_WINDOW_ADMIN_START + \
  195. PXP_PF_WINDOW_ADMIN_LENGTH - 1)
  196. #define PXP_PF_WINDOW_ADMIN_PER_PF_START 0
  197. #define PXP_PF_WINDOW_ADMIN_PER_PF_LENGTH (PXP_NUM_PF_WINDOWS * \
  198. PXP_PER_PF_ENTRY_SIZE)
  199. #define PXP_PF_WINDOW_ADMIN_PER_PF_END (PXP_PF_WINDOW_ADMIN_PER_PF_START + \
  200. PXP_PF_WINDOW_ADMIN_PER_PF_LENGTH - 1)
  201. #define PXP_PF_WINDOW_ADMIN_GLOBAL_START 0x200
  202. #define PXP_PF_WINDOW_ADMIN_GLOBAL_LENGTH (PXP_NUM_GLOBAL_WINDOWS * \
  203. PXP_GLOBAL_ENTRY_SIZE)
  204. #define PXP_PF_WINDOW_ADMIN_GLOBAL_END \
  205. (PXP_PF_WINDOW_ADMIN_GLOBAL_START + \
  206. PXP_PF_WINDOW_ADMIN_GLOBAL_LENGTH - 1)
  207. #define PXP_PF_GLOBAL_PRETEND_ADDR 0x1f0
  208. #define PXP_PF_ME_OPAQUE_MASK_ADDR 0xf4
  209. #define PXP_PF_ME_OPAQUE_ADDR 0x1f8
  210. #define PXP_PF_ME_CONCRETE_ADDR 0x1fc
  211. #define PXP_EXTERNAL_BAR_PF_WINDOW_START 0x1000
  212. #define PXP_EXTERNAL_BAR_PF_WINDOW_NUM PXP_NUM_PF_WINDOWS
  213. #define PXP_EXTERNAL_BAR_PF_WINDOW_SINGLE_SIZE 0x1000
  214. #define PXP_EXTERNAL_BAR_PF_WINDOW_LENGTH \
  215. (PXP_EXTERNAL_BAR_PF_WINDOW_NUM * \
  216. PXP_EXTERNAL_BAR_PF_WINDOW_SINGLE_SIZE)
  217. #define PXP_EXTERNAL_BAR_PF_WINDOW_END \
  218. (PXP_EXTERNAL_BAR_PF_WINDOW_START + \
  219. PXP_EXTERNAL_BAR_PF_WINDOW_LENGTH - 1)
  220. #define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_START \
  221. (PXP_EXTERNAL_BAR_PF_WINDOW_END + 1)
  222. #define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_NUM PXP_NUM_GLOBAL_WINDOWS
  223. #define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_SINGLE_SIZE 0x1000
  224. #define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_LENGTH \
  225. (PXP_EXTERNAL_BAR_GLOBAL_WINDOW_NUM * \
  226. PXP_EXTERNAL_BAR_GLOBAL_WINDOW_SINGLE_SIZE)
  227. #define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_END \
  228. (PXP_EXTERNAL_BAR_GLOBAL_WINDOW_START + \
  229. PXP_EXTERNAL_BAR_GLOBAL_WINDOW_LENGTH - 1)
  230. #define PXP_ILT_PAGE_SIZE_NUM_BITS_MIN 12
  231. #define PXP_ILT_BLOCK_FACTOR_MULTIPLIER 1024
  232. /* ILT Records */
  233. #define PXP_NUM_ILT_RECORDS_BB 7600
  234. #define PXP_NUM_ILT_RECORDS_K2 11000
  235. #define MAX_NUM_ILT_RECORDS MAX(PXP_NUM_ILT_RECORDS_BB, PXP_NUM_ILT_RECORDS_K2)
  236. /******************/
  237. /* PBF CONSTANTS */
  238. /******************/
  239. /* Number of PBF command queue lines. Each line is 32B. */
  240. #define PBF_MAX_CMD_LINES 3328
  241. /* Number of BTB blocks. Each block is 256B. */
  242. #define BTB_MAX_BLOCKS 1440
  243. /*****************/
  244. /* PRS CONSTANTS */
  245. /*****************/
  246. /* Async data KCQ CQE */
  247. struct async_data {
  248. __le32 cid;
  249. __le16 itid;
  250. u8 error_code;
  251. u8 fw_debug_param;
  252. };
  253. struct regpair {
  254. __le32 lo;
  255. __le32 hi;
  256. };
  257. /* Event Data Union */
  258. union event_ring_data {
  259. u8 bytes[8];
  260. struct async_data async_info;
  261. };
  262. /* Event Ring Entry */
  263. struct event_ring_entry {
  264. u8 protocol_id;
  265. u8 opcode;
  266. __le16 reserved0;
  267. __le16 echo;
  268. u8 fw_return_code;
  269. u8 flags;
  270. #define EVENT_RING_ENTRY_ASYNC_MASK 0x1
  271. #define EVENT_RING_ENTRY_ASYNC_SHIFT 0
  272. #define EVENT_RING_ENTRY_RESERVED1_MASK 0x7F
  273. #define EVENT_RING_ENTRY_RESERVED1_SHIFT 1
  274. union event_ring_data data;
  275. };
  276. /* Multi function mode */
  277. enum mf_mode {
  278. SF,
  279. MF_OVLAN,
  280. MF_NPAR,
  281. MAX_MF_MODE
  282. };
  283. /* Per-protocol connection types */
  284. enum protocol_type {
  285. PROTOCOLID_RESERVED1,
  286. PROTOCOLID_RESERVED2,
  287. PROTOCOLID_RESERVED3,
  288. PROTOCOLID_CORE,
  289. PROTOCOLID_ETH,
  290. PROTOCOLID_RESERVED4,
  291. PROTOCOLID_RESERVED5,
  292. PROTOCOLID_PREROCE,
  293. PROTOCOLID_COMMON,
  294. PROTOCOLID_RESERVED6,
  295. MAX_PROTOCOL_TYPE
  296. };
  297. /* status block structure */
  298. struct cau_pi_entry {
  299. u32 prod;
  300. #define CAU_PI_ENTRY_PROD_VAL_MASK 0xFFFF
  301. #define CAU_PI_ENTRY_PROD_VAL_SHIFT 0
  302. #define CAU_PI_ENTRY_PI_TIMESET_MASK 0x7F
  303. #define CAU_PI_ENTRY_PI_TIMESET_SHIFT 16
  304. #define CAU_PI_ENTRY_FSM_SEL_MASK 0x1
  305. #define CAU_PI_ENTRY_FSM_SEL_SHIFT 23
  306. #define CAU_PI_ENTRY_RESERVED_MASK 0xFF
  307. #define CAU_PI_ENTRY_RESERVED_SHIFT 24
  308. };
  309. /* status block structure */
  310. struct cau_sb_entry {
  311. u32 data;
  312. #define CAU_SB_ENTRY_SB_PROD_MASK 0xFFFFFF
  313. #define CAU_SB_ENTRY_SB_PROD_SHIFT 0
  314. #define CAU_SB_ENTRY_STATE0_MASK 0xF
  315. #define CAU_SB_ENTRY_STATE0_SHIFT 24
  316. #define CAU_SB_ENTRY_STATE1_MASK 0xF
  317. #define CAU_SB_ENTRY_STATE1_SHIFT 28
  318. u32 params;
  319. #define CAU_SB_ENTRY_SB_TIMESET0_MASK 0x7F
  320. #define CAU_SB_ENTRY_SB_TIMESET0_SHIFT 0
  321. #define CAU_SB_ENTRY_SB_TIMESET1_MASK 0x7F
  322. #define CAU_SB_ENTRY_SB_TIMESET1_SHIFT 7
  323. #define CAU_SB_ENTRY_TIMER_RES0_MASK 0x3
  324. #define CAU_SB_ENTRY_TIMER_RES0_SHIFT 14
  325. #define CAU_SB_ENTRY_TIMER_RES1_MASK 0x3
  326. #define CAU_SB_ENTRY_TIMER_RES1_SHIFT 16
  327. #define CAU_SB_ENTRY_VF_NUMBER_MASK 0xFF
  328. #define CAU_SB_ENTRY_VF_NUMBER_SHIFT 18
  329. #define CAU_SB_ENTRY_VF_VALID_MASK 0x1
  330. #define CAU_SB_ENTRY_VF_VALID_SHIFT 26
  331. #define CAU_SB_ENTRY_PF_NUMBER_MASK 0xF
  332. #define CAU_SB_ENTRY_PF_NUMBER_SHIFT 27
  333. #define CAU_SB_ENTRY_TPH_MASK 0x1
  334. #define CAU_SB_ENTRY_TPH_SHIFT 31
  335. };
  336. /* core doorbell data */
  337. struct core_db_data {
  338. u8 params;
  339. #define CORE_DB_DATA_DEST_MASK 0x3
  340. #define CORE_DB_DATA_DEST_SHIFT 0
  341. #define CORE_DB_DATA_AGG_CMD_MASK 0x3
  342. #define CORE_DB_DATA_AGG_CMD_SHIFT 2
  343. #define CORE_DB_DATA_BYPASS_EN_MASK 0x1
  344. #define CORE_DB_DATA_BYPASS_EN_SHIFT 4
  345. #define CORE_DB_DATA_RESERVED_MASK 0x1
  346. #define CORE_DB_DATA_RESERVED_SHIFT 5
  347. #define CORE_DB_DATA_AGG_VAL_SEL_MASK 0x3
  348. #define CORE_DB_DATA_AGG_VAL_SEL_SHIFT 6
  349. u8 agg_flags;
  350. __le16 spq_prod;
  351. };
  352. /* Enum of doorbell aggregative command selection */
  353. enum db_agg_cmd_sel {
  354. DB_AGG_CMD_NOP,
  355. DB_AGG_CMD_SET,
  356. DB_AGG_CMD_ADD,
  357. DB_AGG_CMD_MAX,
  358. MAX_DB_AGG_CMD_SEL
  359. };
  360. /* Enum of doorbell destination */
  361. enum db_dest {
  362. DB_DEST_XCM,
  363. DB_DEST_UCM,
  364. DB_DEST_TCM,
  365. DB_NUM_DESTINATIONS,
  366. MAX_DB_DEST
  367. };
  368. /* Structure for doorbell address, in legacy mode */
  369. struct db_legacy_addr {
  370. __le32 addr;
  371. #define DB_LEGACY_ADDR_RESERVED0_MASK 0x3
  372. #define DB_LEGACY_ADDR_RESERVED0_SHIFT 0
  373. #define DB_LEGACY_ADDR_DEMS_MASK 0x7
  374. #define DB_LEGACY_ADDR_DEMS_SHIFT 2
  375. #define DB_LEGACY_ADDR_ICID_MASK 0x7FFFFFF
  376. #define DB_LEGACY_ADDR_ICID_SHIFT 5
  377. };
  378. /* Igu interrupt command */
  379. enum igu_int_cmd {
  380. IGU_INT_ENABLE = 0,
  381. IGU_INT_DISABLE = 1,
  382. IGU_INT_NOP = 2,
  383. IGU_INT_NOP2 = 3,
  384. MAX_IGU_INT_CMD
  385. };
  386. /* IGU producer or consumer update command */
  387. struct igu_prod_cons_update {
  388. u32 sb_id_and_flags;
  389. #define IGU_PROD_CONS_UPDATE_SB_INDEX_MASK 0xFFFFFF
  390. #define IGU_PROD_CONS_UPDATE_SB_INDEX_SHIFT 0
  391. #define IGU_PROD_CONS_UPDATE_UPDATE_FLAG_MASK 0x1
  392. #define IGU_PROD_CONS_UPDATE_UPDATE_FLAG_SHIFT 24
  393. #define IGU_PROD_CONS_UPDATE_ENABLE_INT_MASK 0x3
  394. #define IGU_PROD_CONS_UPDATE_ENABLE_INT_SHIFT 25
  395. #define IGU_PROD_CONS_UPDATE_SEGMENT_ACCESS_MASK 0x1
  396. #define IGU_PROD_CONS_UPDATE_SEGMENT_ACCESS_SHIFT 27
  397. #define IGU_PROD_CONS_UPDATE_TIMER_MASK_MASK 0x1
  398. #define IGU_PROD_CONS_UPDATE_TIMER_MASK_SHIFT 28
  399. #define IGU_PROD_CONS_UPDATE_RESERVED0_MASK 0x3
  400. #define IGU_PROD_CONS_UPDATE_RESERVED0_SHIFT 29
  401. #define IGU_PROD_CONS_UPDATE_COMMAND_TYPE_MASK 0x1
  402. #define IGU_PROD_CONS_UPDATE_COMMAND_TYPE_SHIFT 31
  403. u32 reserved1;
  404. };
  405. /* Igu segments access for default status block only */
  406. enum igu_seg_access {
  407. IGU_SEG_ACCESS_REG = 0,
  408. IGU_SEG_ACCESS_ATTN = 1,
  409. MAX_IGU_SEG_ACCESS
  410. };
  411. struct parsing_and_err_flags {
  412. __le16 flags;
  413. #define PARSING_AND_ERR_FLAGS_L3TYPE_MASK 0x3
  414. #define PARSING_AND_ERR_FLAGS_L3TYPE_SHIFT 0
  415. #define PARSING_AND_ERR_FLAGS_L4PROTOCOL_MASK 0x3
  416. #define PARSING_AND_ERR_FLAGS_L4PROTOCOL_SHIFT 2
  417. #define PARSING_AND_ERR_FLAGS_IPV4FRAG_MASK 0x1
  418. #define PARSING_AND_ERR_FLAGS_IPV4FRAG_SHIFT 4
  419. #define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK 0x1
  420. #define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_SHIFT 5
  421. #define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_MASK 0x1
  422. #define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_SHIFT 6
  423. #define PARSING_AND_ERR_FLAGS_TIMESYNCPKT_MASK 0x1
  424. #define PARSING_AND_ERR_FLAGS_TIMESYNCPKT_SHIFT 7
  425. #define PARSING_AND_ERR_FLAGS_TIMESTAMPRECORDED_MASK 0x1
  426. #define PARSING_AND_ERR_FLAGS_TIMESTAMPRECORDED_SHIFT 8
  427. #define PARSING_AND_ERR_FLAGS_IPHDRERROR_MASK 0x1
  428. #define PARSING_AND_ERR_FLAGS_IPHDRERROR_SHIFT 9
  429. #define PARSING_AND_ERR_FLAGS_L4CHKSMERROR_MASK 0x1
  430. #define PARSING_AND_ERR_FLAGS_L4CHKSMERROR_SHIFT 10
  431. #define PARSING_AND_ERR_FLAGS_TUNNELEXIST_MASK 0x1
  432. #define PARSING_AND_ERR_FLAGS_TUNNELEXIST_SHIFT 11
  433. #define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_MASK 0x1
  434. #define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_SHIFT 12
  435. #define PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_MASK 0x1
  436. #define PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_SHIFT 13
  437. #define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_MASK 0x1
  438. #define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_SHIFT 14
  439. #define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_MASK 0x1
  440. #define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_SHIFT 15
  441. };
  442. /* Concrete Function ID. */
  443. struct pxp_concrete_fid {
  444. __le16 fid;
  445. #define PXP_CONCRETE_FID_PFID_MASK 0xF
  446. #define PXP_CONCRETE_FID_PFID_SHIFT 0
  447. #define PXP_CONCRETE_FID_PORT_MASK 0x3
  448. #define PXP_CONCRETE_FID_PORT_SHIFT 4
  449. #define PXP_CONCRETE_FID_PATH_MASK 0x1
  450. #define PXP_CONCRETE_FID_PATH_SHIFT 6
  451. #define PXP_CONCRETE_FID_VFVALID_MASK 0x1
  452. #define PXP_CONCRETE_FID_VFVALID_SHIFT 7
  453. #define PXP_CONCRETE_FID_VFID_MASK 0xFF
  454. #define PXP_CONCRETE_FID_VFID_SHIFT 8
  455. };
  456. struct pxp_pretend_concrete_fid {
  457. __le16 fid;
  458. #define PXP_PRETEND_CONCRETE_FID_PFID_MASK 0xF
  459. #define PXP_PRETEND_CONCRETE_FID_PFID_SHIFT 0
  460. #define PXP_PRETEND_CONCRETE_FID_RESERVED_MASK 0x7
  461. #define PXP_PRETEND_CONCRETE_FID_RESERVED_SHIFT 4
  462. #define PXP_PRETEND_CONCRETE_FID_VFVALID_MASK 0x1
  463. #define PXP_PRETEND_CONCRETE_FID_VFVALID_SHIFT 7
  464. #define PXP_PRETEND_CONCRETE_FID_VFID_MASK 0xFF
  465. #define PXP_PRETEND_CONCRETE_FID_VFID_SHIFT 8
  466. };
  467. union pxp_pretend_fid {
  468. struct pxp_pretend_concrete_fid concrete_fid;
  469. __le16 opaque_fid;
  470. };
  471. /* Pxp Pretend Command Register. */
  472. struct pxp_pretend_cmd {
  473. union pxp_pretend_fid fid;
  474. __le16 control;
  475. #define PXP_PRETEND_CMD_PATH_MASK 0x1
  476. #define PXP_PRETEND_CMD_PATH_SHIFT 0
  477. #define PXP_PRETEND_CMD_USE_PORT_MASK 0x1
  478. #define PXP_PRETEND_CMD_USE_PORT_SHIFT 1
  479. #define PXP_PRETEND_CMD_PORT_MASK 0x3
  480. #define PXP_PRETEND_CMD_PORT_SHIFT 2
  481. #define PXP_PRETEND_CMD_RESERVED0_MASK 0xF
  482. #define PXP_PRETEND_CMD_RESERVED0_SHIFT 4
  483. #define PXP_PRETEND_CMD_RESERVED1_MASK 0xF
  484. #define PXP_PRETEND_CMD_RESERVED1_SHIFT 8
  485. #define PXP_PRETEND_CMD_PRETEND_PATH_MASK 0x1
  486. #define PXP_PRETEND_CMD_PRETEND_PATH_SHIFT 12
  487. #define PXP_PRETEND_CMD_PRETEND_PORT_MASK 0x1
  488. #define PXP_PRETEND_CMD_PRETEND_PORT_SHIFT 13
  489. #define PXP_PRETEND_CMD_PRETEND_FUNCTION_MASK 0x1
  490. #define PXP_PRETEND_CMD_PRETEND_FUNCTION_SHIFT 14
  491. #define PXP_PRETEND_CMD_IS_CONCRETE_MASK 0x1
  492. #define PXP_PRETEND_CMD_IS_CONCRETE_SHIFT 15
  493. };
  494. /* PTT Record in PXP Admin Window. */
  495. struct pxp_ptt_entry {
  496. __le32 offset;
  497. #define PXP_PTT_ENTRY_OFFSET_MASK 0x7FFFFF
  498. #define PXP_PTT_ENTRY_OFFSET_SHIFT 0
  499. #define PXP_PTT_ENTRY_RESERVED0_MASK 0x1FF
  500. #define PXP_PTT_ENTRY_RESERVED0_SHIFT 23
  501. struct pxp_pretend_cmd pretend;
  502. };
  503. /* RSS hash type */
  504. enum rss_hash_type {
  505. RSS_HASH_TYPE_DEFAULT = 0,
  506. RSS_HASH_TYPE_IPV4 = 1,
  507. RSS_HASH_TYPE_TCP_IPV4 = 2,
  508. RSS_HASH_TYPE_IPV6 = 3,
  509. RSS_HASH_TYPE_TCP_IPV6 = 4,
  510. RSS_HASH_TYPE_UDP_IPV4 = 5,
  511. RSS_HASH_TYPE_UDP_IPV6 = 6,
  512. MAX_RSS_HASH_TYPE
  513. };
  514. /* status block structure */
  515. struct status_block {
  516. __le16 pi_array[PIS_PER_SB];
  517. __le32 sb_num;
  518. #define STATUS_BLOCK_SB_NUM_MASK 0x1FF
  519. #define STATUS_BLOCK_SB_NUM_SHIFT 0
  520. #define STATUS_BLOCK_ZERO_PAD_MASK 0x7F
  521. #define STATUS_BLOCK_ZERO_PAD_SHIFT 9
  522. #define STATUS_BLOCK_ZERO_PAD2_MASK 0xFFFF
  523. #define STATUS_BLOCK_ZERO_PAD2_SHIFT 16
  524. __le32 prod_index;
  525. #define STATUS_BLOCK_PROD_INDEX_MASK 0xFFFFFF
  526. #define STATUS_BLOCK_PROD_INDEX_SHIFT 0
  527. #define STATUS_BLOCK_ZERO_PAD3_MASK 0xFF
  528. #define STATUS_BLOCK_ZERO_PAD3_SHIFT 24
  529. };
  530. #endif /* __COMMON_HSI__ */