/drivers/net/ethernet/brocade/bna/bfi_enet.h

http://github.com/mirrors/linux · C Header · 847 lines · 572 code · 122 blank · 153 comment · 0 complexity · f025598e63b3c26ec9fd41d1d8002d78 MD5 · raw file

  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Linux network driver for QLogic BR-series Converged Network Adapter.
  4. */
  5. /*
  6. * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
  7. * Copyright (c) 2014-2015 QLogic Corporation
  8. * All rights reserved
  9. * www.qlogic.com
  10. */
  11. /* BNA Hardware and Firmware Interface */
  12. /* Skipping statistics collection to avoid clutter.
  13. * Command is no longer needed:
  14. * MTU
  15. * TxQ Stop
  16. * RxQ Stop
  17. * RxF Enable/Disable
  18. *
  19. * HDS-off request is dynamic
  20. * keep structures as multiple of 32-bit fields for alignment.
  21. * All values must be written in big-endian.
  22. */
  23. #ifndef __BFI_ENET_H__
  24. #define __BFI_ENET_H__
  25. #include "bfa_defs.h"
  26. #include "bfi.h"
  27. #define BFI_ENET_CFG_MAX 32 /* Max resources per PF */
  28. #define BFI_ENET_TXQ_PRIO_MAX 8
  29. #define BFI_ENET_RX_QSET_MAX 16
  30. #define BFI_ENET_TXQ_WI_VECT_MAX 4
  31. #define BFI_ENET_VLAN_ID_MAX 4096
  32. #define BFI_ENET_VLAN_BLOCK_SIZE 512 /* in bits */
  33. #define BFI_ENET_VLAN_BLOCKS_MAX \
  34. (BFI_ENET_VLAN_ID_MAX / BFI_ENET_VLAN_BLOCK_SIZE)
  35. #define BFI_ENET_VLAN_WORD_SIZE 32 /* in bits */
  36. #define BFI_ENET_VLAN_WORDS_MAX \
  37. (BFI_ENET_VLAN_BLOCK_SIZE / BFI_ENET_VLAN_WORD_SIZE)
  38. #define BFI_ENET_RSS_RIT_MAX 64 /* entries */
  39. #define BFI_ENET_RSS_KEY_LEN 10 /* 32-bit words */
  40. union bfi_addr_be_u {
  41. struct {
  42. u32 addr_hi; /* Most Significant 32-bits */
  43. u32 addr_lo; /* Least Significant 32-Bits */
  44. } __packed a32;
  45. } __packed;
  46. /* T X Q U E U E D E F I N E S */
  47. /* TxQ Vector (a.k.a. Tx-Buffer Descriptor) */
  48. /* TxQ Entry Opcodes */
  49. #define BFI_ENET_TXQ_WI_SEND (0x402) /* Single Frame Transmission */
  50. #define BFI_ENET_TXQ_WI_SEND_LSO (0x403) /* Multi-Frame Transmission */
  51. #define BFI_ENET_TXQ_WI_EXTENSION (0x104) /* Extension WI */
  52. /* TxQ Entry Control Flags */
  53. #define BFI_ENET_TXQ_WI_CF_FCOE_CRC BIT(8)
  54. #define BFI_ENET_TXQ_WI_CF_IPID_MODE BIT(5)
  55. #define BFI_ENET_TXQ_WI_CF_INS_PRIO BIT(4)
  56. #define BFI_ENET_TXQ_WI_CF_INS_VLAN BIT(3)
  57. #define BFI_ENET_TXQ_WI_CF_UDP_CKSUM BIT(2)
  58. #define BFI_ENET_TXQ_WI_CF_TCP_CKSUM BIT(1)
  59. #define BFI_ENET_TXQ_WI_CF_IP_CKSUM BIT(0)
  60. struct bfi_enet_txq_wi_base {
  61. u8 reserved;
  62. u8 num_vectors; /* number of vectors present */
  63. u16 opcode;
  64. /* BFI_ENET_TXQ_WI_SEND or BFI_ENET_TXQ_WI_SEND_LSO */
  65. u16 flags; /* OR of all the flags */
  66. u16 l4_hdr_size_n_offset;
  67. u16 vlan_tag;
  68. u16 lso_mss; /* Only 14 LSB are valid */
  69. u32 frame_length; /* Only 24 LSB are valid */
  70. } __packed;
  71. struct bfi_enet_txq_wi_ext {
  72. u16 reserved;
  73. u16 opcode; /* BFI_ENET_TXQ_WI_EXTENSION */
  74. u32 reserved2[3];
  75. } __packed;
  76. struct bfi_enet_txq_wi_vector { /* Tx Buffer Descriptor */
  77. u16 reserved;
  78. u16 length; /* Only 14 LSB are valid */
  79. union bfi_addr_be_u addr;
  80. } __packed;
  81. /* TxQ Entry Structure */
  82. struct bfi_enet_txq_entry {
  83. union {
  84. struct bfi_enet_txq_wi_base base;
  85. struct bfi_enet_txq_wi_ext ext;
  86. } __packed wi;
  87. struct bfi_enet_txq_wi_vector vector[BFI_ENET_TXQ_WI_VECT_MAX];
  88. } __packed;
  89. #define wi_hdr wi.base
  90. #define wi_ext_hdr wi.ext
  91. #define BFI_ENET_TXQ_WI_L4_HDR_N_OFFSET(_hdr_size, _offset) \
  92. (((_hdr_size) << 10) | ((_offset) & 0x3FF))
  93. /* R X Q U E U E D E F I N E S */
  94. struct bfi_enet_rxq_entry {
  95. union bfi_addr_be_u rx_buffer;
  96. } __packed;
  97. /* R X C O M P L E T I O N Q U E U E D E F I N E S */
  98. /* CQ Entry Flags */
  99. #define BFI_ENET_CQ_EF_MAC_ERROR BIT(0)
  100. #define BFI_ENET_CQ_EF_FCS_ERROR BIT(1)
  101. #define BFI_ENET_CQ_EF_TOO_LONG BIT(2)
  102. #define BFI_ENET_CQ_EF_FC_CRC_OK BIT(3)
  103. #define BFI_ENET_CQ_EF_RSVD1 BIT(4)
  104. #define BFI_ENET_CQ_EF_L4_CKSUM_OK BIT(5)
  105. #define BFI_ENET_CQ_EF_L3_CKSUM_OK BIT(6)
  106. #define BFI_ENET_CQ_EF_HDS_HEADER BIT(7)
  107. #define BFI_ENET_CQ_EF_UDP BIT(8)
  108. #define BFI_ENET_CQ_EF_TCP BIT(9)
  109. #define BFI_ENET_CQ_EF_IP_OPTIONS BIT(10)
  110. #define BFI_ENET_CQ_EF_IPV6 BIT(11)
  111. #define BFI_ENET_CQ_EF_IPV4 BIT(12)
  112. #define BFI_ENET_CQ_EF_VLAN BIT(13)
  113. #define BFI_ENET_CQ_EF_RSS BIT(14)
  114. #define BFI_ENET_CQ_EF_RSVD2 BIT(15)
  115. #define BFI_ENET_CQ_EF_MCAST_MATCH BIT(16)
  116. #define BFI_ENET_CQ_EF_MCAST BIT(17)
  117. #define BFI_ENET_CQ_EF_BCAST BIT(18)
  118. #define BFI_ENET_CQ_EF_REMOTE BIT(19)
  119. #define BFI_ENET_CQ_EF_LOCAL BIT(20)
  120. /* CQ Entry Structure */
  121. struct bfi_enet_cq_entry {
  122. u32 flags;
  123. u16 vlan_tag;
  124. u16 length;
  125. u32 rss_hash;
  126. u8 valid;
  127. u8 reserved1;
  128. u8 reserved2;
  129. u8 rxq_id;
  130. } __packed;
  131. /* E N E T C O N T R O L P A T H C O M M A N D S */
  132. struct bfi_enet_q {
  133. union bfi_addr_u pg_tbl;
  134. union bfi_addr_u first_entry;
  135. u16 pages; /* # of pages */
  136. u16 page_sz;
  137. } __packed;
  138. struct bfi_enet_txq {
  139. struct bfi_enet_q q;
  140. u8 priority;
  141. u8 rsvd[3];
  142. } __packed;
  143. struct bfi_enet_rxq {
  144. struct bfi_enet_q q;
  145. u16 rx_buffer_size;
  146. u16 rsvd;
  147. } __packed;
  148. struct bfi_enet_cq {
  149. struct bfi_enet_q q;
  150. } __packed;
  151. struct bfi_enet_ib_cfg {
  152. u8 int_pkt_dma;
  153. u8 int_enabled;
  154. u8 int_pkt_enabled;
  155. u8 continuous_coalescing;
  156. u8 msix;
  157. u8 rsvd[3];
  158. u32 coalescing_timeout;
  159. u32 inter_pkt_timeout;
  160. u8 inter_pkt_count;
  161. u8 rsvd1[3];
  162. } __packed;
  163. struct bfi_enet_ib {
  164. union bfi_addr_u index_addr;
  165. union {
  166. u16 msix_index;
  167. u16 intx_bitmask;
  168. } __packed intr;
  169. u16 rsvd;
  170. } __packed;
  171. /* ENET command messages */
  172. enum bfi_enet_h2i_msgs {
  173. /* Rx Commands */
  174. BFI_ENET_H2I_RX_CFG_SET_REQ = 1,
  175. BFI_ENET_H2I_RX_CFG_CLR_REQ = 2,
  176. BFI_ENET_H2I_RIT_CFG_REQ = 3,
  177. BFI_ENET_H2I_RSS_CFG_REQ = 4,
  178. BFI_ENET_H2I_RSS_ENABLE_REQ = 5,
  179. BFI_ENET_H2I_RX_PROMISCUOUS_REQ = 6,
  180. BFI_ENET_H2I_RX_DEFAULT_REQ = 7,
  181. BFI_ENET_H2I_MAC_UCAST_SET_REQ = 8,
  182. BFI_ENET_H2I_MAC_UCAST_CLR_REQ = 9,
  183. BFI_ENET_H2I_MAC_UCAST_ADD_REQ = 10,
  184. BFI_ENET_H2I_MAC_UCAST_DEL_REQ = 11,
  185. BFI_ENET_H2I_MAC_MCAST_ADD_REQ = 12,
  186. BFI_ENET_H2I_MAC_MCAST_DEL_REQ = 13,
  187. BFI_ENET_H2I_MAC_MCAST_FILTER_REQ = 14,
  188. BFI_ENET_H2I_RX_VLAN_SET_REQ = 15,
  189. BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ = 16,
  190. /* Tx Commands */
  191. BFI_ENET_H2I_TX_CFG_SET_REQ = 17,
  192. BFI_ENET_H2I_TX_CFG_CLR_REQ = 18,
  193. /* Port Commands */
  194. BFI_ENET_H2I_PORT_ADMIN_UP_REQ = 19,
  195. BFI_ENET_H2I_SET_PAUSE_REQ = 20,
  196. BFI_ENET_H2I_DIAG_LOOPBACK_REQ = 21,
  197. /* Get Attributes Command */
  198. BFI_ENET_H2I_GET_ATTR_REQ = 22,
  199. /* Statistics Commands */
  200. BFI_ENET_H2I_STATS_GET_REQ = 23,
  201. BFI_ENET_H2I_STATS_CLR_REQ = 24,
  202. BFI_ENET_H2I_WOL_MAGIC_REQ = 25,
  203. BFI_ENET_H2I_WOL_FRAME_REQ = 26,
  204. BFI_ENET_H2I_MAX = 27,
  205. };
  206. enum bfi_enet_i2h_msgs {
  207. /* Rx Responses */
  208. BFI_ENET_I2H_RX_CFG_SET_RSP =
  209. BFA_I2HM(BFI_ENET_H2I_RX_CFG_SET_REQ),
  210. BFI_ENET_I2H_RX_CFG_CLR_RSP =
  211. BFA_I2HM(BFI_ENET_H2I_RX_CFG_CLR_REQ),
  212. BFI_ENET_I2H_RIT_CFG_RSP =
  213. BFA_I2HM(BFI_ENET_H2I_RIT_CFG_REQ),
  214. BFI_ENET_I2H_RSS_CFG_RSP =
  215. BFA_I2HM(BFI_ENET_H2I_RSS_CFG_REQ),
  216. BFI_ENET_I2H_RSS_ENABLE_RSP =
  217. BFA_I2HM(BFI_ENET_H2I_RSS_ENABLE_REQ),
  218. BFI_ENET_I2H_RX_PROMISCUOUS_RSP =
  219. BFA_I2HM(BFI_ENET_H2I_RX_PROMISCUOUS_REQ),
  220. BFI_ENET_I2H_RX_DEFAULT_RSP =
  221. BFA_I2HM(BFI_ENET_H2I_RX_DEFAULT_REQ),
  222. BFI_ENET_I2H_MAC_UCAST_SET_RSP =
  223. BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_SET_REQ),
  224. BFI_ENET_I2H_MAC_UCAST_CLR_RSP =
  225. BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_CLR_REQ),
  226. BFI_ENET_I2H_MAC_UCAST_ADD_RSP =
  227. BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_ADD_REQ),
  228. BFI_ENET_I2H_MAC_UCAST_DEL_RSP =
  229. BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_DEL_REQ),
  230. BFI_ENET_I2H_MAC_MCAST_ADD_RSP =
  231. BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_ADD_REQ),
  232. BFI_ENET_I2H_MAC_MCAST_DEL_RSP =
  233. BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_DEL_REQ),
  234. BFI_ENET_I2H_MAC_MCAST_FILTER_RSP =
  235. BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_FILTER_REQ),
  236. BFI_ENET_I2H_RX_VLAN_SET_RSP =
  237. BFA_I2HM(BFI_ENET_H2I_RX_VLAN_SET_REQ),
  238. BFI_ENET_I2H_RX_VLAN_STRIP_ENABLE_RSP =
  239. BFA_I2HM(BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ),
  240. /* Tx Responses */
  241. BFI_ENET_I2H_TX_CFG_SET_RSP =
  242. BFA_I2HM(BFI_ENET_H2I_TX_CFG_SET_REQ),
  243. BFI_ENET_I2H_TX_CFG_CLR_RSP =
  244. BFA_I2HM(BFI_ENET_H2I_TX_CFG_CLR_REQ),
  245. /* Port Responses */
  246. BFI_ENET_I2H_PORT_ADMIN_RSP =
  247. BFA_I2HM(BFI_ENET_H2I_PORT_ADMIN_UP_REQ),
  248. BFI_ENET_I2H_SET_PAUSE_RSP =
  249. BFA_I2HM(BFI_ENET_H2I_SET_PAUSE_REQ),
  250. BFI_ENET_I2H_DIAG_LOOPBACK_RSP =
  251. BFA_I2HM(BFI_ENET_H2I_DIAG_LOOPBACK_REQ),
  252. /* Attributes Response */
  253. BFI_ENET_I2H_GET_ATTR_RSP =
  254. BFA_I2HM(BFI_ENET_H2I_GET_ATTR_REQ),
  255. /* Statistics Responses */
  256. BFI_ENET_I2H_STATS_GET_RSP =
  257. BFA_I2HM(BFI_ENET_H2I_STATS_GET_REQ),
  258. BFI_ENET_I2H_STATS_CLR_RSP =
  259. BFA_I2HM(BFI_ENET_H2I_STATS_CLR_REQ),
  260. BFI_ENET_I2H_WOL_MAGIC_RSP =
  261. BFA_I2HM(BFI_ENET_H2I_WOL_MAGIC_REQ),
  262. BFI_ENET_I2H_WOL_FRAME_RSP =
  263. BFA_I2HM(BFI_ENET_H2I_WOL_FRAME_REQ),
  264. /* AENs */
  265. BFI_ENET_I2H_LINK_DOWN_AEN = BFA_I2HM(BFI_ENET_H2I_MAX),
  266. BFI_ENET_I2H_LINK_UP_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 1),
  267. BFI_ENET_I2H_PORT_ENABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 2),
  268. BFI_ENET_I2H_PORT_DISABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 3),
  269. BFI_ENET_I2H_BW_UPDATE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 4),
  270. };
  271. /* The following error codes can be returned by the enet commands */
  272. enum bfi_enet_err {
  273. BFI_ENET_CMD_OK = 0,
  274. BFI_ENET_CMD_FAIL = 1,
  275. BFI_ENET_CMD_DUP_ENTRY = 2, /* !< Duplicate entry in CAM */
  276. BFI_ENET_CMD_CAM_FULL = 3, /* !< CAM is full */
  277. BFI_ENET_CMD_NOT_OWNER = 4, /* !< Not permitted, b'cos not owner */
  278. BFI_ENET_CMD_NOT_EXEC = 5, /* !< Was not sent to f/w at all */
  279. BFI_ENET_CMD_WAITING = 6, /* !< Waiting for completion */
  280. BFI_ENET_CMD_PORT_DISABLED = 7, /* !< port in disabled state */
  281. };
  282. /* Generic Request
  283. *
  284. * bfi_enet_req is used by:
  285. * BFI_ENET_H2I_RX_CFG_CLR_REQ
  286. * BFI_ENET_H2I_TX_CFG_CLR_REQ
  287. */
  288. struct bfi_enet_req {
  289. struct bfi_msgq_mhdr mh;
  290. } __packed;
  291. /* Enable/Disable Request
  292. *
  293. * bfi_enet_enable_req is used by:
  294. * BFI_ENET_H2I_RSS_ENABLE_REQ (enet_id must be zero)
  295. * BFI_ENET_H2I_RX_PROMISCUOUS_REQ (enet_id must be zero)
  296. * BFI_ENET_H2I_RX_DEFAULT_REQ (enet_id must be zero)
  297. * BFI_ENET_H2I_RX_MAC_MCAST_FILTER_REQ
  298. * BFI_ENET_H2I_PORT_ADMIN_UP_REQ (enet_id must be zero)
  299. */
  300. struct bfi_enet_enable_req {
  301. struct bfi_msgq_mhdr mh;
  302. u8 enable; /* 1 = enable; 0 = disable */
  303. u8 rsvd[3];
  304. } __packed;
  305. /* Generic Response */
  306. struct bfi_enet_rsp {
  307. struct bfi_msgq_mhdr mh;
  308. u8 error; /*!< if error see cmd_offset */
  309. u8 rsvd;
  310. u16 cmd_offset; /*!< offset to invalid parameter */
  311. } __packed;
  312. /* GLOBAL CONFIGURATION */
  313. /* bfi_enet_attr_req is used by:
  314. * BFI_ENET_H2I_GET_ATTR_REQ
  315. */
  316. struct bfi_enet_attr_req {
  317. struct bfi_msgq_mhdr mh;
  318. } __packed;
  319. /* bfi_enet_attr_rsp is used by:
  320. * BFI_ENET_I2H_GET_ATTR_RSP
  321. */
  322. struct bfi_enet_attr_rsp {
  323. struct bfi_msgq_mhdr mh;
  324. u8 error; /*!< if error see cmd_offset */
  325. u8 rsvd;
  326. u16 cmd_offset; /*!< offset to invalid parameter */
  327. u32 max_cfg;
  328. u32 max_ucmac;
  329. u32 rit_size;
  330. } __packed;
  331. /* Tx Configuration
  332. *
  333. * bfi_enet_tx_cfg is used by:
  334. * BFI_ENET_H2I_TX_CFG_SET_REQ
  335. */
  336. enum bfi_enet_tx_vlan_mode {
  337. BFI_ENET_TX_VLAN_NOP = 0,
  338. BFI_ENET_TX_VLAN_INS = 1,
  339. BFI_ENET_TX_VLAN_WI = 2,
  340. };
  341. struct bfi_enet_tx_cfg {
  342. u8 vlan_mode; /*!< processing mode */
  343. u8 rsvd;
  344. u16 vlan_id;
  345. u8 admit_tagged_frame;
  346. u8 apply_vlan_filter;
  347. u8 add_to_vswitch;
  348. u8 rsvd1[1];
  349. } __packed;
  350. struct bfi_enet_tx_cfg_req {
  351. struct bfi_msgq_mhdr mh;
  352. u8 num_queues; /* # of Tx Queues */
  353. u8 rsvd[3];
  354. struct {
  355. struct bfi_enet_txq q;
  356. struct bfi_enet_ib ib;
  357. } __packed q_cfg[BFI_ENET_TXQ_PRIO_MAX];
  358. struct bfi_enet_ib_cfg ib_cfg;
  359. struct bfi_enet_tx_cfg tx_cfg;
  360. };
  361. struct bfi_enet_tx_cfg_rsp {
  362. struct bfi_msgq_mhdr mh;
  363. u8 error;
  364. u8 hw_id; /* For debugging */
  365. u8 rsvd[2];
  366. struct {
  367. u32 q_dbell; /* PCI base address offset */
  368. u32 i_dbell; /* PCI base address offset */
  369. u8 hw_qid; /* For debugging */
  370. u8 rsvd[3];
  371. } __packed q_handles[BFI_ENET_TXQ_PRIO_MAX];
  372. };
  373. /* Rx Configuration
  374. *
  375. * bfi_enet_rx_cfg is used by:
  376. * BFI_ENET_H2I_RX_CFG_SET_REQ
  377. */
  378. enum bfi_enet_rxq_type {
  379. BFI_ENET_RXQ_SINGLE = 1,
  380. BFI_ENET_RXQ_LARGE_SMALL = 2,
  381. BFI_ENET_RXQ_HDS = 3,
  382. BFI_ENET_RXQ_HDS_OPT_BASED = 4,
  383. };
  384. enum bfi_enet_hds_type {
  385. BFI_ENET_HDS_FORCED = 0x01,
  386. BFI_ENET_HDS_IPV6_UDP = 0x02,
  387. BFI_ENET_HDS_IPV6_TCP = 0x04,
  388. BFI_ENET_HDS_IPV4_TCP = 0x08,
  389. BFI_ENET_HDS_IPV4_UDP = 0x10,
  390. };
  391. struct bfi_enet_rx_cfg {
  392. u8 rxq_type;
  393. u8 rsvd[1];
  394. u16 frame_size;
  395. struct {
  396. u8 max_header_size;
  397. u8 force_offset;
  398. u8 type;
  399. u8 rsvd1;
  400. } __packed hds;
  401. u8 multi_buffer;
  402. u8 strip_vlan;
  403. u8 drop_untagged;
  404. u8 rsvd2;
  405. } __packed;
  406. /*
  407. * Multicast frames are received on the ql of q-set index zero.
  408. * On the completion queue. RxQ ID = even is for large/data buffer queues
  409. * and RxQ ID = odd is for small/header buffer queues.
  410. */
  411. struct bfi_enet_rx_cfg_req {
  412. struct bfi_msgq_mhdr mh;
  413. u8 num_queue_sets; /* # of Rx Queue Sets */
  414. u8 rsvd[3];
  415. struct {
  416. struct bfi_enet_rxq ql; /* large/data/single buffers */
  417. struct bfi_enet_rxq qs; /* small/header buffers */
  418. struct bfi_enet_cq cq;
  419. struct bfi_enet_ib ib;
  420. } __packed q_cfg[BFI_ENET_RX_QSET_MAX];
  421. struct bfi_enet_ib_cfg ib_cfg;
  422. struct bfi_enet_rx_cfg rx_cfg;
  423. } __packed;
  424. struct bfi_enet_rx_cfg_rsp {
  425. struct bfi_msgq_mhdr mh;
  426. u8 error;
  427. u8 hw_id; /* For debugging */
  428. u8 rsvd[2];
  429. struct {
  430. u32 ql_dbell; /* PCI base address offset */
  431. u32 qs_dbell; /* PCI base address offset */
  432. u32 i_dbell; /* PCI base address offset */
  433. u8 hw_lqid; /* For debugging */
  434. u8 hw_sqid; /* For debugging */
  435. u8 hw_cqid; /* For debugging */
  436. u8 rsvd;
  437. } __packed q_handles[BFI_ENET_RX_QSET_MAX];
  438. } __packed;
  439. /* RIT
  440. *
  441. * bfi_enet_rit_req is used by:
  442. * BFI_ENET_H2I_RIT_CFG_REQ
  443. */
  444. struct bfi_enet_rit_req {
  445. struct bfi_msgq_mhdr mh;
  446. u16 size; /* number of table-entries used */
  447. u8 rsvd[2];
  448. u8 table[BFI_ENET_RSS_RIT_MAX];
  449. } __packed;
  450. /* RSS
  451. *
  452. * bfi_enet_rss_cfg_req is used by:
  453. * BFI_ENET_H2I_RSS_CFG_REQ
  454. */
  455. enum bfi_enet_rss_type {
  456. BFI_ENET_RSS_IPV6 = 0x01,
  457. BFI_ENET_RSS_IPV6_TCP = 0x02,
  458. BFI_ENET_RSS_IPV4 = 0x04,
  459. BFI_ENET_RSS_IPV4_TCP = 0x08
  460. };
  461. struct bfi_enet_rss_cfg {
  462. u8 type;
  463. u8 mask;
  464. u8 rsvd[2];
  465. u32 key[BFI_ENET_RSS_KEY_LEN];
  466. } __packed;
  467. struct bfi_enet_rss_cfg_req {
  468. struct bfi_msgq_mhdr mh;
  469. struct bfi_enet_rss_cfg cfg;
  470. } __packed;
  471. /* MAC Unicast
  472. *
  473. * bfi_enet_rx_vlan_req is used by:
  474. * BFI_ENET_H2I_MAC_UCAST_SET_REQ
  475. * BFI_ENET_H2I_MAC_UCAST_CLR_REQ
  476. * BFI_ENET_H2I_MAC_UCAST_ADD_REQ
  477. * BFI_ENET_H2I_MAC_UCAST_DEL_REQ
  478. */
  479. struct bfi_enet_ucast_req {
  480. struct bfi_msgq_mhdr mh;
  481. u8 mac_addr[ETH_ALEN];
  482. u8 rsvd[2];
  483. } __packed;
  484. /* MAC Unicast + VLAN */
  485. struct bfi_enet_mac_n_vlan_req {
  486. struct bfi_msgq_mhdr mh;
  487. u16 vlan_id;
  488. u8 mac_addr[ETH_ALEN];
  489. } __packed;
  490. /* MAC Multicast
  491. *
  492. * bfi_enet_mac_mfilter_add_req is used by:
  493. * BFI_ENET_H2I_MAC_MCAST_ADD_REQ
  494. */
  495. struct bfi_enet_mcast_add_req {
  496. struct bfi_msgq_mhdr mh;
  497. u8 mac_addr[ETH_ALEN];
  498. u8 rsvd[2];
  499. } __packed;
  500. /* bfi_enet_mac_mfilter_add_rsp is used by:
  501. * BFI_ENET_I2H_MAC_MCAST_ADD_RSP
  502. */
  503. struct bfi_enet_mcast_add_rsp {
  504. struct bfi_msgq_mhdr mh;
  505. u8 error;
  506. u8 rsvd;
  507. u16 cmd_offset;
  508. u16 handle;
  509. u8 rsvd1[2];
  510. } __packed;
  511. /* bfi_enet_mac_mfilter_del_req is used by:
  512. * BFI_ENET_H2I_MAC_MCAST_DEL_REQ
  513. */
  514. struct bfi_enet_mcast_del_req {
  515. struct bfi_msgq_mhdr mh;
  516. u16 handle;
  517. u8 rsvd[2];
  518. } __packed;
  519. /* VLAN
  520. *
  521. * bfi_enet_rx_vlan_req is used by:
  522. * BFI_ENET_H2I_RX_VLAN_SET_REQ
  523. */
  524. struct bfi_enet_rx_vlan_req {
  525. struct bfi_msgq_mhdr mh;
  526. u8 block_idx;
  527. u8 rsvd[3];
  528. u32 bit_mask[BFI_ENET_VLAN_WORDS_MAX];
  529. } __packed;
  530. /* PAUSE
  531. *
  532. * bfi_enet_set_pause_req is used by:
  533. * BFI_ENET_H2I_SET_PAUSE_REQ
  534. */
  535. struct bfi_enet_set_pause_req {
  536. struct bfi_msgq_mhdr mh;
  537. u8 rsvd[2];
  538. u8 tx_pause; /* 1 = enable; 0 = disable */
  539. u8 rx_pause; /* 1 = enable; 0 = disable */
  540. } __packed;
  541. /* DIAGNOSTICS
  542. *
  543. * bfi_enet_diag_lb_req is used by:
  544. * BFI_ENET_H2I_DIAG_LOOPBACK
  545. */
  546. struct bfi_enet_diag_lb_req {
  547. struct bfi_msgq_mhdr mh;
  548. u8 rsvd[2];
  549. u8 mode; /* cable or Serdes */
  550. u8 enable; /* 1 = enable; 0 = disable */
  551. } __packed;
  552. /* enum for Loopback opmodes */
  553. enum {
  554. BFI_ENET_DIAG_LB_OPMODE_EXT = 0,
  555. BFI_ENET_DIAG_LB_OPMODE_CBL = 1,
  556. };
  557. /* STATISTICS
  558. *
  559. * bfi_enet_stats_req is used by:
  560. * BFI_ENET_H2I_STATS_GET_REQ
  561. * BFI_ENET_I2H_STATS_CLR_REQ
  562. */
  563. struct bfi_enet_stats_req {
  564. struct bfi_msgq_mhdr mh;
  565. u16 stats_mask;
  566. u8 rsvd[2];
  567. u32 rx_enet_mask;
  568. u32 tx_enet_mask;
  569. union bfi_addr_u host_buffer;
  570. } __packed;
  571. /* defines for "stats_mask" above. */
  572. #define BFI_ENET_STATS_MAC BIT(0) /* !< MAC Statistics */
  573. #define BFI_ENET_STATS_BPC BIT(1) /* !< Pause Stats from BPC */
  574. #define BFI_ENET_STATS_RAD BIT(2) /* !< Rx Admission Statistics */
  575. #define BFI_ENET_STATS_RX_FC BIT(3) /* !< Rx FC Stats from RxA */
  576. #define BFI_ENET_STATS_TX_FC BIT(4) /* !< Tx FC Stats from TxA */
  577. #define BFI_ENET_STATS_ALL 0x1f
  578. /* TxF Frame Statistics */
  579. struct bfi_enet_stats_txf {
  580. u64 ucast_octets;
  581. u64 ucast;
  582. u64 ucast_vlan;
  583. u64 mcast_octets;
  584. u64 mcast;
  585. u64 mcast_vlan;
  586. u64 bcast_octets;
  587. u64 bcast;
  588. u64 bcast_vlan;
  589. u64 errors;
  590. u64 filter_vlan; /* frames filtered due to VLAN */
  591. u64 filter_mac_sa; /* frames filtered due to SA check */
  592. } __packed;
  593. /* RxF Frame Statistics */
  594. struct bfi_enet_stats_rxf {
  595. u64 ucast_octets;
  596. u64 ucast;
  597. u64 ucast_vlan;
  598. u64 mcast_octets;
  599. u64 mcast;
  600. u64 mcast_vlan;
  601. u64 bcast_octets;
  602. u64 bcast;
  603. u64 bcast_vlan;
  604. u64 frame_drops;
  605. } __packed;
  606. /* FC Tx Frame Statistics */
  607. struct bfi_enet_stats_fc_tx {
  608. u64 txf_ucast_octets;
  609. u64 txf_ucast;
  610. u64 txf_ucast_vlan;
  611. u64 txf_mcast_octets;
  612. u64 txf_mcast;
  613. u64 txf_mcast_vlan;
  614. u64 txf_bcast_octets;
  615. u64 txf_bcast;
  616. u64 txf_bcast_vlan;
  617. u64 txf_parity_errors;
  618. u64 txf_timeout;
  619. u64 txf_fid_parity_errors;
  620. } __packed;
  621. /* FC Rx Frame Statistics */
  622. struct bfi_enet_stats_fc_rx {
  623. u64 rxf_ucast_octets;
  624. u64 rxf_ucast;
  625. u64 rxf_ucast_vlan;
  626. u64 rxf_mcast_octets;
  627. u64 rxf_mcast;
  628. u64 rxf_mcast_vlan;
  629. u64 rxf_bcast_octets;
  630. u64 rxf_bcast;
  631. u64 rxf_bcast_vlan;
  632. } __packed;
  633. /* RAD Frame Statistics */
  634. struct bfi_enet_stats_rad {
  635. u64 rx_frames;
  636. u64 rx_octets;
  637. u64 rx_vlan_frames;
  638. u64 rx_ucast;
  639. u64 rx_ucast_octets;
  640. u64 rx_ucast_vlan;
  641. u64 rx_mcast;
  642. u64 rx_mcast_octets;
  643. u64 rx_mcast_vlan;
  644. u64 rx_bcast;
  645. u64 rx_bcast_octets;
  646. u64 rx_bcast_vlan;
  647. u64 rx_drops;
  648. } __packed;
  649. /* BPC Tx Registers */
  650. struct bfi_enet_stats_bpc {
  651. /* transmit stats */
  652. u64 tx_pause[8];
  653. u64 tx_zero_pause[8]; /*!< Pause cancellation */
  654. /*!<Pause initiation rather than retention */
  655. u64 tx_first_pause[8];
  656. /* receive stats */
  657. u64 rx_pause[8];
  658. u64 rx_zero_pause[8]; /*!< Pause cancellation */
  659. /*!<Pause initiation rather than retention */
  660. u64 rx_first_pause[8];
  661. } __packed;
  662. /* MAC Rx Statistics */
  663. struct bfi_enet_stats_mac {
  664. u64 stats_clr_cnt; /* times this stats cleared */
  665. u64 frame_64; /* both rx and tx counter */
  666. u64 frame_65_127; /* both rx and tx counter */
  667. u64 frame_128_255; /* both rx and tx counter */
  668. u64 frame_256_511; /* both rx and tx counter */
  669. u64 frame_512_1023; /* both rx and tx counter */
  670. u64 frame_1024_1518; /* both rx and tx counter */
  671. u64 frame_1519_1522; /* both rx and tx counter */
  672. /* receive stats */
  673. u64 rx_bytes;
  674. u64 rx_packets;
  675. u64 rx_fcs_error;
  676. u64 rx_multicast;
  677. u64 rx_broadcast;
  678. u64 rx_control_frames;
  679. u64 rx_pause;
  680. u64 rx_unknown_opcode;
  681. u64 rx_alignment_error;
  682. u64 rx_frame_length_error;
  683. u64 rx_code_error;
  684. u64 rx_carrier_sense_error;
  685. u64 rx_undersize;
  686. u64 rx_oversize;
  687. u64 rx_fragments;
  688. u64 rx_jabber;
  689. u64 rx_drop;
  690. /* transmit stats */
  691. u64 tx_bytes;
  692. u64 tx_packets;
  693. u64 tx_multicast;
  694. u64 tx_broadcast;
  695. u64 tx_pause;
  696. u64 tx_deferral;
  697. u64 tx_excessive_deferral;
  698. u64 tx_single_collision;
  699. u64 tx_muliple_collision;
  700. u64 tx_late_collision;
  701. u64 tx_excessive_collision;
  702. u64 tx_total_collision;
  703. u64 tx_pause_honored;
  704. u64 tx_drop;
  705. u64 tx_jabber;
  706. u64 tx_fcs_error;
  707. u64 tx_control_frame;
  708. u64 tx_oversize;
  709. u64 tx_undersize;
  710. u64 tx_fragments;
  711. } __packed;
  712. /* Complete statistics, DMAed from fw to host followed by
  713. * BFI_ENET_I2H_STATS_GET_RSP
  714. */
  715. struct bfi_enet_stats {
  716. struct bfi_enet_stats_mac mac_stats;
  717. struct bfi_enet_stats_bpc bpc_stats;
  718. struct bfi_enet_stats_rad rad_stats;
  719. struct bfi_enet_stats_rad rlb_stats;
  720. struct bfi_enet_stats_fc_rx fc_rx_stats;
  721. struct bfi_enet_stats_fc_tx fc_tx_stats;
  722. struct bfi_enet_stats_rxf rxf_stats[BFI_ENET_CFG_MAX];
  723. struct bfi_enet_stats_txf txf_stats[BFI_ENET_CFG_MAX];
  724. } __packed;
  725. #endif /* __BFI_ENET_H__ */