xref: /f-stack/dpdk/drivers/net/liquidio/lio_ethdev.h (revision d30ea906)
1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*d30ea906Sjfb8856606  * Copyright(c) 2017 Cavium, Inc
32bfe3f2eSlogwang  */
42bfe3f2eSlogwang 
52bfe3f2eSlogwang #ifndef _LIO_ETHDEV_H_
62bfe3f2eSlogwang #define _LIO_ETHDEV_H_
72bfe3f2eSlogwang 
82bfe3f2eSlogwang #include <stdint.h>
92bfe3f2eSlogwang 
102bfe3f2eSlogwang #include "lio_struct.h"
112bfe3f2eSlogwang 
122bfe3f2eSlogwang /* timeout to check link state updates from firmware in us */
132bfe3f2eSlogwang #define LIO_LSC_TIMEOUT		100000 /* 100000us (100ms) */
142bfe3f2eSlogwang #define LIO_MAX_CMD_TIMEOUT     10000 /* 10000ms (10s) */
152bfe3f2eSlogwang 
162bfe3f2eSlogwang #define LIO_DEV(_eth_dev)		((_eth_dev)->data->dev_private)
172bfe3f2eSlogwang 
182bfe3f2eSlogwang /* LIO Response condition variable */
192bfe3f2eSlogwang struct lio_dev_ctrl_cmd {
202bfe3f2eSlogwang 	struct rte_eth_dev *eth_dev;
212bfe3f2eSlogwang 	uint64_t cond;
222bfe3f2eSlogwang };
232bfe3f2eSlogwang 
242bfe3f2eSlogwang enum lio_bus_speed {
252bfe3f2eSlogwang 	LIO_LINK_SPEED_UNKNOWN  = 0,
262bfe3f2eSlogwang 	LIO_LINK_SPEED_10000    = 10000,
272bfe3f2eSlogwang 	LIO_LINK_SPEED_25000    = 25000
282bfe3f2eSlogwang };
292bfe3f2eSlogwang 
302bfe3f2eSlogwang struct octeon_if_cfg_info {
312bfe3f2eSlogwang 	uint64_t iqmask;	/** mask for IQs enabled for the port */
322bfe3f2eSlogwang 	uint64_t oqmask;	/** mask for OQs enabled for the port */
332bfe3f2eSlogwang 	struct octeon_link_info linfo; /** initial link information */
342bfe3f2eSlogwang 	char lio_firmware_version[LIO_FW_VERSION_LENGTH];
352bfe3f2eSlogwang };
362bfe3f2eSlogwang 
372bfe3f2eSlogwang /** Stats for each NIC port in RX direction. */
382bfe3f2eSlogwang struct octeon_rx_stats {
392bfe3f2eSlogwang 	/* link-level stats */
402bfe3f2eSlogwang 	uint64_t total_rcvd;
412bfe3f2eSlogwang 	uint64_t bytes_rcvd;
422bfe3f2eSlogwang 	uint64_t total_bcst;
432bfe3f2eSlogwang 	uint64_t total_mcst;
442bfe3f2eSlogwang 	uint64_t runts;
452bfe3f2eSlogwang 	uint64_t ctl_rcvd;
462bfe3f2eSlogwang 	uint64_t fifo_err; /* Accounts for over/under-run of buffers */
472bfe3f2eSlogwang 	uint64_t dmac_drop;
482bfe3f2eSlogwang 	uint64_t fcs_err;
492bfe3f2eSlogwang 	uint64_t jabber_err;
502bfe3f2eSlogwang 	uint64_t l2_err;
512bfe3f2eSlogwang 	uint64_t frame_err;
522bfe3f2eSlogwang 
532bfe3f2eSlogwang 	/* firmware stats */
542bfe3f2eSlogwang 	uint64_t fw_total_rcvd;
552bfe3f2eSlogwang 	uint64_t fw_total_fwd;
562bfe3f2eSlogwang 	uint64_t fw_total_fwd_bytes;
572bfe3f2eSlogwang 	uint64_t fw_err_pko;
582bfe3f2eSlogwang 	uint64_t fw_err_link;
592bfe3f2eSlogwang 	uint64_t fw_err_drop;
602bfe3f2eSlogwang 	uint64_t fw_rx_vxlan;
612bfe3f2eSlogwang 	uint64_t fw_rx_vxlan_err;
622bfe3f2eSlogwang 
632bfe3f2eSlogwang 	/* LRO */
642bfe3f2eSlogwang 	uint64_t fw_lro_pkts;   /* Number of packets that are LROed */
652bfe3f2eSlogwang 	uint64_t fw_lro_octs;   /* Number of octets that are LROed */
662bfe3f2eSlogwang 	uint64_t fw_total_lro;  /* Number of LRO packets formed */
672bfe3f2eSlogwang 	uint64_t fw_lro_aborts; /* Number of times lRO of packet aborted */
682bfe3f2eSlogwang 	uint64_t fw_lro_aborts_port;
692bfe3f2eSlogwang 	uint64_t fw_lro_aborts_seq;
702bfe3f2eSlogwang 	uint64_t fw_lro_aborts_tsval;
712bfe3f2eSlogwang 	uint64_t fw_lro_aborts_timer;
722bfe3f2eSlogwang 	/* intrmod: packet forward rate */
732bfe3f2eSlogwang 	uint64_t fwd_rate;
742bfe3f2eSlogwang };
752bfe3f2eSlogwang 
762bfe3f2eSlogwang /** Stats for each NIC port in RX direction. */
772bfe3f2eSlogwang struct octeon_tx_stats {
782bfe3f2eSlogwang 	/* link-level stats */
792bfe3f2eSlogwang 	uint64_t total_pkts_sent;
802bfe3f2eSlogwang 	uint64_t total_bytes_sent;
812bfe3f2eSlogwang 	uint64_t mcast_pkts_sent;
822bfe3f2eSlogwang 	uint64_t bcast_pkts_sent;
832bfe3f2eSlogwang 	uint64_t ctl_sent;
842bfe3f2eSlogwang 	uint64_t one_collision_sent;	/* Packets sent after one collision */
852bfe3f2eSlogwang 	/* Packets sent after multiple collision */
862bfe3f2eSlogwang 	uint64_t multi_collision_sent;
872bfe3f2eSlogwang 	/* Packets not sent due to max collisions */
882bfe3f2eSlogwang 	uint64_t max_collision_fail;
892bfe3f2eSlogwang 	/* Packets not sent due to max deferrals */
902bfe3f2eSlogwang 	uint64_t max_deferral_fail;
912bfe3f2eSlogwang 	/* Accounts for over/under-run of buffers */
922bfe3f2eSlogwang 	uint64_t fifo_err;
932bfe3f2eSlogwang 	uint64_t runts;
942bfe3f2eSlogwang 	uint64_t total_collisions; /* Total number of collisions detected */
952bfe3f2eSlogwang 
962bfe3f2eSlogwang 	/* firmware stats */
972bfe3f2eSlogwang 	uint64_t fw_total_sent;
982bfe3f2eSlogwang 	uint64_t fw_total_fwd;
992bfe3f2eSlogwang 	uint64_t fw_total_fwd_bytes;
1002bfe3f2eSlogwang 	uint64_t fw_err_pko;
1012bfe3f2eSlogwang 	uint64_t fw_err_link;
1022bfe3f2eSlogwang 	uint64_t fw_err_drop;
1032bfe3f2eSlogwang 	uint64_t fw_err_tso;
1042bfe3f2eSlogwang 	uint64_t fw_tso;     /* number of tso requests */
1052bfe3f2eSlogwang 	uint64_t fw_tso_fwd; /* number of packets segmented in tso */
1062bfe3f2eSlogwang 	uint64_t fw_tx_vxlan;
1072bfe3f2eSlogwang };
1082bfe3f2eSlogwang 
1092bfe3f2eSlogwang struct octeon_link_stats {
1102bfe3f2eSlogwang 	struct octeon_rx_stats fromwire;
1112bfe3f2eSlogwang 	struct octeon_tx_stats fromhost;
1122bfe3f2eSlogwang };
1132bfe3f2eSlogwang 
1142bfe3f2eSlogwang union lio_if_cfg {
1152bfe3f2eSlogwang 	uint64_t if_cfg64;
1162bfe3f2eSlogwang 	struct {
1172bfe3f2eSlogwang #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
1182bfe3f2eSlogwang 		uint64_t base_queue : 16;
1192bfe3f2eSlogwang 		uint64_t num_iqueues : 16;
1202bfe3f2eSlogwang 		uint64_t num_oqueues : 16;
1212bfe3f2eSlogwang 		uint64_t gmx_port_id : 8;
1222bfe3f2eSlogwang 		uint64_t vf_id : 8;
1232bfe3f2eSlogwang #else
1242bfe3f2eSlogwang 		uint64_t vf_id : 8;
1252bfe3f2eSlogwang 		uint64_t gmx_port_id : 8;
1262bfe3f2eSlogwang 		uint64_t num_oqueues : 16;
1272bfe3f2eSlogwang 		uint64_t num_iqueues : 16;
1282bfe3f2eSlogwang 		uint64_t base_queue : 16;
1292bfe3f2eSlogwang #endif
1302bfe3f2eSlogwang 	} s;
1312bfe3f2eSlogwang };
1322bfe3f2eSlogwang 
1332bfe3f2eSlogwang struct lio_if_cfg_resp {
1342bfe3f2eSlogwang 	uint64_t rh;
1352bfe3f2eSlogwang 	struct octeon_if_cfg_info cfg_info;
1362bfe3f2eSlogwang 	uint64_t status;
1372bfe3f2eSlogwang };
1382bfe3f2eSlogwang 
1392bfe3f2eSlogwang struct lio_link_stats_resp {
1402bfe3f2eSlogwang 	uint64_t rh;
1412bfe3f2eSlogwang 	struct octeon_link_stats link_stats;
1422bfe3f2eSlogwang 	uint64_t status;
1432bfe3f2eSlogwang };
1442bfe3f2eSlogwang 
1452bfe3f2eSlogwang struct lio_link_status_resp {
1462bfe3f2eSlogwang 	uint64_t rh;
1472bfe3f2eSlogwang 	struct octeon_link_info link_info;
1482bfe3f2eSlogwang 	uint64_t status;
1492bfe3f2eSlogwang };
1502bfe3f2eSlogwang 
1512bfe3f2eSlogwang struct lio_rss_set {
1522bfe3f2eSlogwang 	struct param {
1532bfe3f2eSlogwang #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
1542bfe3f2eSlogwang 		uint64_t flags : 16;
1552bfe3f2eSlogwang 		uint64_t hashinfo : 32;
1562bfe3f2eSlogwang 		uint64_t itablesize : 16;
1572bfe3f2eSlogwang 		uint64_t hashkeysize : 16;
1582bfe3f2eSlogwang 		uint64_t reserved : 48;
1592bfe3f2eSlogwang #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
1602bfe3f2eSlogwang 		uint64_t itablesize : 16;
1612bfe3f2eSlogwang 		uint64_t hashinfo : 32;
1622bfe3f2eSlogwang 		uint64_t flags : 16;
1632bfe3f2eSlogwang 		uint64_t reserved : 48;
1642bfe3f2eSlogwang 		uint64_t hashkeysize : 16;
1652bfe3f2eSlogwang #endif
1662bfe3f2eSlogwang 	} param;
1672bfe3f2eSlogwang 
1682bfe3f2eSlogwang 	uint8_t itable[LIO_RSS_MAX_TABLE_SZ];
1692bfe3f2eSlogwang 	uint8_t key[LIO_RSS_MAX_KEY_SZ];
1702bfe3f2eSlogwang };
1712bfe3f2eSlogwang 
1722bfe3f2eSlogwang void lio_dev_rx_queue_release(void *rxq);
1732bfe3f2eSlogwang 
1742bfe3f2eSlogwang void lio_dev_tx_queue_release(void *txq);
1752bfe3f2eSlogwang 
1762bfe3f2eSlogwang #endif	/* _LIO_ETHDEV_H_ */
177