405c525ec14102168a39a80f76019e4a513f1996
[deb_dpdk.git] / drivers / net / qede / qede_if.h
1 /*
2  * Copyright (c) 2016 QLogic Corporation.
3  * All rights reserved.
4  * www.qlogic.com
5  *
6  * See LICENSE.qede_pmd for copyright and licensing details.
7  */
8
9 #ifndef _QEDE_IF_H
10 #define _QEDE_IF_H
11
12 #include "qede_ethdev.h"
13
14 /* forward */
15 struct ecore_dev;
16 struct qed_sb_info;
17 struct qed_pf_params;
18 enum ecore_int_mode;
19
20 struct qed_dev_info {
21         uint8_t num_hwfns;
22         uint8_t hw_mac[ETHER_ADDR_LEN];
23         bool is_mf_default;
24
25         /* FW version */
26         uint16_t fw_major;
27         uint16_t fw_minor;
28         uint16_t fw_rev;
29         uint16_t fw_eng;
30
31         /* MFW version */
32         uint32_t mfw_rev;
33 #define QED_MFW_VERSION_0_MASK          0x000000FF
34 #define QED_MFW_VERSION_0_OFFSET        0
35 #define QED_MFW_VERSION_1_MASK          0x0000FF00
36 #define QED_MFW_VERSION_1_OFFSET        8
37 #define QED_MFW_VERSION_2_MASK          0x00FF0000
38 #define QED_MFW_VERSION_2_OFFSET        16
39 #define QED_MFW_VERSION_3_MASK          0xFF000000
40 #define QED_MFW_VERSION_3_OFFSET        24
41
42         uint32_t flash_size;
43         uint8_t mf_mode;
44         bool tx_switching;
45         u16 mtu;
46
47         /* Out param for qede */
48         bool vxlan_enable;
49         bool gre_enable;
50         bool geneve_enable;
51 };
52
53 enum qed_sb_type {
54         QED_SB_TYPE_L2_QUEUE,
55         QED_SB_TYPE_STORAGE,
56         QED_SB_TYPE_CNQ,
57 };
58
59 enum qed_protocol {
60         QED_PROTOCOL_ETH,
61 };
62
63 struct qed_link_params {
64         bool link_up;
65
66 #define QED_LINK_OVERRIDE_SPEED_AUTONEG         (1 << 0)
67 #define QED_LINK_OVERRIDE_SPEED_ADV_SPEEDS      (1 << 1)
68 #define QED_LINK_OVERRIDE_SPEED_FORCED_SPEED    (1 << 2)
69 #define QED_LINK_OVERRIDE_PAUSE_CONFIG          (1 << 3)
70         uint32_t override_flags;
71         bool autoneg;
72         uint32_t adv_speeds;
73         uint32_t forced_speed;
74 #define QED_LINK_PAUSE_AUTONEG_ENABLE           (1 << 0)
75 #define QED_LINK_PAUSE_RX_ENABLE                (1 << 1)
76 #define QED_LINK_PAUSE_TX_ENABLE                (1 << 2)
77         uint32_t pause_config;
78 };
79
80 struct qed_link_output {
81         bool link_up;
82         uint32_t supported_caps;        /* In SUPPORTED defs */
83         uint32_t advertised_caps;       /* In ADVERTISED defs */
84         uint32_t lp_caps;       /* In ADVERTISED defs */
85         uint32_t speed;         /* In Mb/s */
86         uint32_t adv_speed;     /* Speed mask */
87         uint8_t duplex;         /* In DUPLEX defs */
88         uint8_t port;           /* In PORT defs */
89         bool autoneg;
90         uint32_t pause_config;
91 };
92
93 struct qed_slowpath_params {
94         uint32_t int_mode;
95         uint8_t drv_major;
96         uint8_t drv_minor;
97         uint8_t drv_rev;
98         uint8_t drv_eng;
99         uint8_t name[NAME_SIZE];
100 };
101
102 #define ILT_PAGE_SIZE_TCFC 0x8000       /* 32KB */
103
104 struct qed_eth_tlvs {
105         u16 feat_flags;
106         u8 mac[3][ETH_ALEN];
107         u16 lso_maxoff;
108         u16 lso_minseg;
109         bool prom_mode;
110         u16 num_txqs;
111         u16 num_rxqs;
112         u16 num_netqs;
113         u16 flex_vlan;
114         u32 tcp4_offloads;
115         u32 tcp6_offloads;
116         u16 tx_avg_qdepth;
117         u16 rx_avg_qdepth;
118         u8 txqs_empty;
119         u8 rxqs_empty;
120         u8 num_txqs_full;
121         u8 num_rxqs_full;
122 };
123
124 struct qed_tunn_update_params {
125         unsigned long   tunn_mode_update_mask;
126         unsigned long   tunn_mode;
127         u16             vxlan_udp_port;
128         u16             geneve_udp_port;
129         u8              update_rx_pf_clss;
130         u8              update_tx_pf_clss;
131         u8              update_vxlan_udp_port;
132         u8              update_geneve_udp_port;
133         u8              tunn_clss_vxlan;
134         u8              tunn_clss_l2geneve;
135         u8              tunn_clss_ipgeneve;
136         u8              tunn_clss_l2gre;
137         u8              tunn_clss_ipgre;
138 };
139
140 struct qed_common_cb_ops {
141         void (*link_update)(void *dev, struct qed_link_output *link);
142         void (*get_tlv_data)(void *dev, struct qed_eth_tlvs *data);
143 };
144
145 struct qed_selftest_ops {
146 /**
147  * @brief registers - Perform register tests
148  *
149  * @param edev
150  *
151  * @return 0 on success, error otherwise.
152  */
153         int (*registers)(struct ecore_dev *edev);
154 };
155
156 struct qed_common_ops {
157         int (*probe)(struct ecore_dev *edev,
158                      struct rte_pci_device *pci_dev,
159                      enum qed_protocol protocol,
160                      uint32_t dp_module, uint8_t dp_level, bool is_vf);
161         void (*set_name)(struct ecore_dev *edev, char name[]);
162         enum _ecore_status_t
163                 (*chain_alloc)(struct ecore_dev *edev,
164                                enum ecore_chain_use_mode
165                                intended_use,
166                                enum ecore_chain_mode mode,
167                                enum ecore_chain_cnt_type cnt_type,
168                                uint32_t num_elems,
169                                osal_size_t elem_size,
170                                struct ecore_chain *p_chain,
171                                struct ecore_chain_ext_pbl *ext_pbl);
172
173         void (*chain_free)(struct ecore_dev *edev,
174                            struct ecore_chain *p_chain);
175
176         void (*get_link)(struct ecore_dev *edev,
177                          struct qed_link_output *if_link);
178         int (*set_link)(struct ecore_dev *edev,
179                         struct qed_link_params *params);
180
181         int (*drain)(struct ecore_dev *edev);
182
183         void (*remove)(struct ecore_dev *edev);
184
185         int (*slowpath_stop)(struct ecore_dev *edev);
186
187         void (*update_pf_params)(struct ecore_dev *edev,
188                                  struct ecore_pf_params *params);
189
190         int (*slowpath_start)(struct ecore_dev *edev,
191                               struct qed_slowpath_params *params);
192
193         int (*set_fp_int)(struct ecore_dev *edev, uint16_t cnt);
194
195         uint32_t (*sb_init)(struct ecore_dev *edev,
196                             struct ecore_sb_info *sb_info,
197                             void *sb_virt_addr,
198                             dma_addr_t sb_phy_addr,
199                             uint16_t sb_id, enum qed_sb_type type);
200
201         int (*get_sb_info)(struct ecore_dev *edev,
202                            struct ecore_sb_info *sb, u16 qid,
203                            struct ecore_sb_info_dbg *sb_dbg);
204
205         bool (*can_link_change)(struct ecore_dev *edev);
206
207         void (*update_msglvl)(struct ecore_dev *edev,
208                               uint32_t dp_module, uint8_t dp_level);
209
210         int (*send_drv_state)(struct ecore_dev *edev, bool active);
211 };
212
213 #endif /* _QEDE_IF_H */