xref: /dpdk/drivers/raw/ifpga/afu_pmd_he_hssi.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
18b594728SWei Huang /* SPDX-License-Identifier: BSD-3-Clause
28b594728SWei Huang  * Copyright(c) 2022 Intel Corporation
38b594728SWei Huang  */
48b594728SWei Huang 
58b594728SWei Huang #ifndef AFU_PMD_HE_HSSI_H
68b594728SWei Huang #define AFU_PMD_HE_HSSI_H
78b594728SWei Huang 
8*719834a6SMattias Rönnblom #include "afu_pmd_core.h"
9*719834a6SMattias Rönnblom #include "rte_pmd_afu.h"
10*719834a6SMattias Rönnblom 
118b594728SWei Huang #ifdef __cplusplus
128b594728SWei Huang extern "C" {
138b594728SWei Huang #endif
148b594728SWei Huang 
158b594728SWei Huang #define HE_HSSI_UUID_L    0xbb370242ac130002
168b594728SWei Huang #define HE_HSSI_UUID_H    0x823c334c98bf11ea
178b594728SWei Huang #define NUM_HE_HSSI_PORTS 8
188b594728SWei Huang 
198b594728SWei Huang /* HE-HSSI registers definition */
208b594728SWei Huang #define TRAFFIC_CTRL_CMD    0x30
218b594728SWei Huang #define TRAFFIC_CTRL_DATA   0x38
228b594728SWei Huang #define TRAFFIC_CTRL_CH_SEL 0x40
238b594728SWei Huang #define AFU_SCRATCHPAD      0x48
248b594728SWei Huang 
258b594728SWei Huang #define TG_NUM_PKT        0x3c00
268b594728SWei Huang #define TG_PKT_LEN_TYPE   0x3c01
278b594728SWei Huang #define TG_DATA_PATTERN   0x3c02
288b594728SWei Huang #define TG_START_XFR      0x3c03
298b594728SWei Huang #define TG_STOP_XFR       0x3c04
308b594728SWei Huang #define TG_SRC_MAC_L      0x3c05
318b594728SWei Huang #define TG_SRC_MAC_H      0x3c06
328b594728SWei Huang #define TG_DST_MAC_L      0x3c07
338b594728SWei Huang #define TG_DST_MAC_H      0x3c08
348b594728SWei Huang #define TG_PKT_XFRD       0x3c09
358b594728SWei Huang #define TG_NUM_RND_SEEDS  3
368b594728SWei Huang #define TG_RANDOM_SEED(n) (0x3c0a + (n))
378b594728SWei Huang #define TG_PKT_LEN        0x3c0d
388b594728SWei Huang 
398b594728SWei Huang #define TM_NUM_PKT        0x3d00
408b594728SWei Huang #define TM_PKT_GOOD       0x3d01
418b594728SWei Huang #define TM_PKT_BAD        0x3d02
428b594728SWei Huang #define TM_BYTE_CNT0      0x3d03
438b594728SWei Huang #define TM_BYTE_CNT1      0x3d04
448b594728SWei Huang #define TM_AVST_RX_ERR    0x3d07
458b594728SWei Huang #define   OVERFLOW_ERR    (1 << 9)
468b594728SWei Huang #define   LENGTH_ERR      (1 << 8)
478b594728SWei Huang #define   OVERSIZE_ERR    (1 << 7)
488b594728SWei Huang #define   UNDERSIZE_ERR   (1 << 6)
498b594728SWei Huang #define   MAC_CRC_ERR     (1 << 5)
508b594728SWei Huang #define   PHY_ERR         (1 << 4)
518b594728SWei Huang #define   ERR_VALID       (1 << 3)
528b594728SWei Huang 
538b594728SWei Huang #define LOOPBACK_EN          0x3e00
548b594728SWei Huang #define LOOPBACK_FIFO_STATUS 0x3e01
558b594728SWei Huang #define   ALMOST_EMPTY    (1 << 1)
568b594728SWei Huang #define   ALMOST_FULL     (1 << 0)
578b594728SWei Huang 
588b594728SWei Huang #define MAILBOX_TIMEOUT_MS       100
598b594728SWei Huang #define MAILBOX_POLL_INTERVAL_MS 10
608b594728SWei Huang 
618b594728SWei Huang struct traffic_ctrl_cmd {
628b594728SWei Huang 	union {
638b594728SWei Huang 		uint64_t csr;
648b594728SWei Huang 		struct {
658b594728SWei Huang 			uint32_t read_cmd:1;
668b594728SWei Huang 			uint32_t write_cmd:1;
678b594728SWei Huang 			uint32_t ack_trans:1;
688b594728SWei Huang 			uint32_t rsvd1:29;
698b594728SWei Huang 			uint32_t afu_cmd_addr:16;
708b594728SWei Huang 			uint32_t rsvd2:16;
718b594728SWei Huang 		};
728b594728SWei Huang 	};
738b594728SWei Huang };
748b594728SWei Huang 
758b594728SWei Huang struct traffic_ctrl_data {
768b594728SWei Huang 	union {
778b594728SWei Huang 		uint64_t csr;
788b594728SWei Huang 		struct {
798b594728SWei Huang 			uint32_t read_data;
808b594728SWei Huang 			uint32_t write_data;
818b594728SWei Huang 		};
828b594728SWei Huang 	};
838b594728SWei Huang };
848b594728SWei Huang 
858b594728SWei Huang struct traffic_ctrl_ch_sel {
868b594728SWei Huang 	union {
878b594728SWei Huang 		uint64_t csr;
888b594728SWei Huang 		struct {
898b594728SWei Huang 			uint32_t channel_sel:3;
908b594728SWei Huang 			uint32_t rsvd1:29;
918b594728SWei Huang 			uint32_t rsvd2;
928b594728SWei Huang 		};
938b594728SWei Huang 	};
948b594728SWei Huang };
958b594728SWei Huang 
968b594728SWei Huang struct he_hssi_ctx {
978b594728SWei Huang 	uint8_t *addr;
988b594728SWei Huang };
998b594728SWei Huang 
1008b594728SWei Huang struct he_hssi_priv {
1018b594728SWei Huang 	struct rte_pmd_afu_he_hssi_cfg he_hssi_cfg;
1028b594728SWei Huang 	struct he_hssi_ctx he_hssi_ctx;
1038b594728SWei Huang };
1048b594728SWei Huang 
1058b594728SWei Huang #ifdef __cplusplus
1068b594728SWei Huang }
1078b594728SWei Huang #endif
1088b594728SWei Huang 
1098b594728SWei Huang #endif /* AFU_PMD_HE_HSSI_H */
110