Imported Upstream version 16.11
[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
34         uint32_t flash_size;
35         uint8_t mf_mode;
36         bool tx_switching;
37         /* To be added... */
38 };
39
40 enum qed_sb_type {
41         QED_SB_TYPE_L2_QUEUE,
42         QED_SB_TYPE_STORAGE,
43         QED_SB_TYPE_CNQ,
44 };
45
46 enum qed_protocol {
47         QED_PROTOCOL_ETH,
48 };
49
50 struct qed_link_params {
51         bool link_up;
52
53 #define QED_LINK_OVERRIDE_SPEED_AUTONEG         (1 << 0)
54 #define QED_LINK_OVERRIDE_SPEED_ADV_SPEEDS      (1 << 1)
55 #define QED_LINK_OVERRIDE_SPEED_FORCED_SPEED    (1 << 2)
56 #define QED_LINK_OVERRIDE_PAUSE_CONFIG          (1 << 3)
57         uint32_t override_flags;
58         bool autoneg;
59         uint32_t adv_speeds;
60         uint32_t forced_speed;
61 #define QED_LINK_PAUSE_AUTONEG_ENABLE           (1 << 0)
62 #define QED_LINK_PAUSE_RX_ENABLE                (1 << 1)
63 #define QED_LINK_PAUSE_TX_ENABLE                (1 << 2)
64         uint32_t pause_config;
65 };
66
67 struct qed_link_output {
68         bool link_up;
69         uint32_t supported_caps;        /* In SUPPORTED defs */
70         uint32_t advertised_caps;       /* In ADVERTISED defs */
71         uint32_t lp_caps;       /* In ADVERTISED defs */
72         uint32_t speed;         /* In Mb/s */
73         uint32_t adv_speed;     /* Speed mask */
74         uint8_t duplex;         /* In DUPLEX defs */
75         uint8_t port;           /* In PORT defs */
76         bool autoneg;
77         uint32_t pause_config;
78 };
79
80 struct qed_slowpath_params {
81         uint32_t int_mode;
82         uint8_t drv_major;
83         uint8_t drv_minor;
84         uint8_t drv_rev;
85         uint8_t drv_eng;
86         uint8_t name[NAME_SIZE];
87 };
88
89 #define ILT_PAGE_SIZE_TCFC 0x8000       /* 32KB */
90
91 struct qed_common_cb_ops {
92         void (*link_update)(void *dev, struct qed_link_output *link);
93 };
94
95 struct qed_selftest_ops {
96 /**
97  * @brief registers - Perform register tests
98  *
99  * @param edev
100  *
101  * @return 0 on success, error otherwise.
102  */
103         int (*registers)(struct ecore_dev *edev);
104 };
105
106 struct qed_common_ops {
107         int (*probe)(struct ecore_dev *edev,
108                      struct rte_pci_device *pci_dev,
109                      enum qed_protocol protocol,
110                      uint32_t dp_module, uint8_t dp_level, bool is_vf);
111         void (*set_id)(struct ecore_dev *edev,
112                 char name[], const char ver_str[]);
113         enum _ecore_status_t (*chain_alloc)(struct ecore_dev *edev,
114                                             enum ecore_chain_use_mode
115                                             intended_use,
116                                             enum ecore_chain_mode mode,
117                                             enum ecore_chain_cnt_type cnt_type,
118                                             uint32_t num_elems,
119                                             osal_size_t elem_size,
120                                             struct ecore_chain *p_chain);
121
122         void (*chain_free)(struct ecore_dev *edev,
123                            struct ecore_chain *p_chain);
124
125         void (*get_link)(struct ecore_dev *edev,
126                          struct qed_link_output *if_link);
127         int (*set_link)(struct ecore_dev *edev,
128                         struct qed_link_params *params);
129
130         int (*drain)(struct ecore_dev *edev);
131
132         void (*remove)(struct ecore_dev *edev);
133
134         int (*slowpath_stop)(struct ecore_dev *edev);
135
136         void (*update_pf_params)(struct ecore_dev *edev,
137                                  struct ecore_pf_params *params);
138
139         int (*slowpath_start)(struct ecore_dev *edev,
140                               struct qed_slowpath_params *params);
141
142         int (*set_fp_int)(struct ecore_dev *edev, uint16_t cnt);
143
144         uint32_t (*sb_init)(struct ecore_dev *edev,
145                             struct ecore_sb_info *sb_info,
146                             void *sb_virt_addr,
147                             dma_addr_t sb_phy_addr,
148                             uint16_t sb_id, enum qed_sb_type type);
149
150         bool (*can_link_change)(struct ecore_dev *edev);
151         void (*update_msglvl)(struct ecore_dev *edev,
152                               uint32_t dp_module, uint8_t dp_level);
153 };
154
155 #endif /* _QEDE_IF_H */