net/hns3: fix timing in mailbox
[dpdk.git] / drivers / net / liquidio / lio_ethdev.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Cavium, Inc
3  */
4
5 #ifndef _LIO_ETHDEV_H_
6 #define _LIO_ETHDEV_H_
7
8 #include <stdint.h>
9
10 #include "lio_struct.h"
11
12 /* timeout to check link state updates from firmware in us */
13 #define LIO_LSC_TIMEOUT         100000 /* 100000us (100ms) */
14 #define LIO_MAX_CMD_TIMEOUT     10000 /* 10000ms (10s) */
15
16 /* The max frame size with default MTU */
17 #define LIO_ETH_MAX_LEN (RTE_ETHER_MTU + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN)
18
19 #define LIO_DEV(_eth_dev)               ((_eth_dev)->data->dev_private)
20
21 /* LIO Response condition variable */
22 struct lio_dev_ctrl_cmd {
23         struct rte_eth_dev *eth_dev;
24         uint64_t cond;
25 };
26
27 enum lio_bus_speed {
28         LIO_LINK_SPEED_UNKNOWN  = 0,
29         LIO_LINK_SPEED_10000    = 10000,
30         LIO_LINK_SPEED_25000    = 25000
31 };
32
33 struct octeon_if_cfg_info {
34         uint64_t iqmask;        /** mask for IQs enabled for the port */
35         uint64_t oqmask;        /** mask for OQs enabled for the port */
36         struct octeon_link_info linfo; /** initial link information */
37         char lio_firmware_version[LIO_FW_VERSION_LENGTH];
38 };
39
40 /** Stats for each NIC port in RX direction. */
41 struct octeon_rx_stats {
42         /* link-level stats */
43         uint64_t total_rcvd;
44         uint64_t bytes_rcvd;
45         uint64_t total_bcst;
46         uint64_t total_mcst;
47         uint64_t runts;
48         uint64_t ctl_rcvd;
49         uint64_t fifo_err; /* Accounts for over/under-run of buffers */
50         uint64_t dmac_drop;
51         uint64_t fcs_err;
52         uint64_t jabber_err;
53         uint64_t l2_err;
54         uint64_t frame_err;
55
56         /* firmware stats */
57         uint64_t fw_total_rcvd;
58         uint64_t fw_total_fwd;
59         uint64_t fw_total_fwd_bytes;
60         uint64_t fw_err_pko;
61         uint64_t fw_err_link;
62         uint64_t fw_err_drop;
63         uint64_t fw_rx_vxlan;
64         uint64_t fw_rx_vxlan_err;
65
66         /* LRO */
67         uint64_t fw_lro_pkts;   /* Number of packets that are LROed */
68         uint64_t fw_lro_octs;   /* Number of octets that are LROed */
69         uint64_t fw_total_lro;  /* Number of LRO packets formed */
70         uint64_t fw_lro_aborts; /* Number of times lRO of packet aborted */
71         uint64_t fw_lro_aborts_port;
72         uint64_t fw_lro_aborts_seq;
73         uint64_t fw_lro_aborts_tsval;
74         uint64_t fw_lro_aborts_timer;
75         /* intrmod: packet forward rate */
76         uint64_t fwd_rate;
77 };
78
79 /** Stats for each NIC port in RX direction. */
80 struct octeon_tx_stats {
81         /* link-level stats */
82         uint64_t total_pkts_sent;
83         uint64_t total_bytes_sent;
84         uint64_t mcast_pkts_sent;
85         uint64_t bcast_pkts_sent;
86         uint64_t ctl_sent;
87         uint64_t one_collision_sent;    /* Packets sent after one collision */
88         /* Packets sent after multiple collision */
89         uint64_t multi_collision_sent;
90         /* Packets not sent due to max collisions */
91         uint64_t max_collision_fail;
92         /* Packets not sent due to max deferrals */
93         uint64_t max_deferral_fail;
94         /* Accounts for over/under-run of buffers */
95         uint64_t fifo_err;
96         uint64_t runts;
97         uint64_t total_collisions; /* Total number of collisions detected */
98
99         /* firmware stats */
100         uint64_t fw_total_sent;
101         uint64_t fw_total_fwd;
102         uint64_t fw_total_fwd_bytes;
103         uint64_t fw_err_pko;
104         uint64_t fw_err_link;
105         uint64_t fw_err_drop;
106         uint64_t fw_err_tso;
107         uint64_t fw_tso;     /* number of tso requests */
108         uint64_t fw_tso_fwd; /* number of packets segmented in tso */
109         uint64_t fw_tx_vxlan;
110 };
111
112 struct octeon_link_stats {
113         struct octeon_rx_stats fromwire;
114         struct octeon_tx_stats fromhost;
115 };
116
117 union lio_if_cfg {
118         uint64_t if_cfg64;
119         struct {
120 #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
121                 uint64_t base_queue : 16;
122                 uint64_t num_iqueues : 16;
123                 uint64_t num_oqueues : 16;
124                 uint64_t gmx_port_id : 8;
125                 uint64_t vf_id : 8;
126 #else
127                 uint64_t vf_id : 8;
128                 uint64_t gmx_port_id : 8;
129                 uint64_t num_oqueues : 16;
130                 uint64_t num_iqueues : 16;
131                 uint64_t base_queue : 16;
132 #endif
133         } s;
134 };
135
136 struct lio_if_cfg_resp {
137         uint64_t rh;
138         struct octeon_if_cfg_info cfg_info;
139         uint64_t status;
140 };
141
142 struct lio_link_stats_resp {
143         uint64_t rh;
144         struct octeon_link_stats link_stats;
145         uint64_t status;
146 };
147
148 struct lio_link_status_resp {
149         uint64_t rh;
150         struct octeon_link_info link_info;
151         uint64_t status;
152 };
153
154 struct lio_rss_set {
155         struct param {
156 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
157                 uint64_t flags : 16;
158                 uint64_t hashinfo : 32;
159                 uint64_t itablesize : 16;
160                 uint64_t hashkeysize : 16;
161                 uint64_t reserved : 48;
162 #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
163                 uint64_t itablesize : 16;
164                 uint64_t hashinfo : 32;
165                 uint64_t flags : 16;
166                 uint64_t reserved : 48;
167                 uint64_t hashkeysize : 16;
168 #endif
169         } param;
170
171         uint8_t itable[LIO_RSS_MAX_TABLE_SZ];
172         uint8_t key[LIO_RSS_MAX_KEY_SZ];
173 };
174
175 void lio_dev_rx_queue_release(void *rxq);
176
177 void lio_dev_tx_queue_release(void *txq);
178
179 #endif  /* _LIO_ETHDEV_H_ */