1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, v.1,  (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://opensource.org/licenses/CDDL-1.0.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 
22 /*
23 * Copyright 2014-2017 Cavium, Inc.
24 * The contents of this file are subject to the terms of the Common Development
25 * and Distribution License, v.1,  (the "License").
26 
27 * You may not use this file except in compliance with the License.
28 
29 * You can obtain a copy of the License at available
30 * at http://opensource.org/licenses/CDDL-1.0
31 
32 * See the License for the specific language governing permissions and
33 * limitations under the License.
34 */
35 
36 #ifndef __ECORE_VF_API_H__
37 #define __ECORE_VF_API_H__
38 
39 #include "ecore_sp_api.h"
40 #include "ecore_mcp_api.h"
41 
42 #ifdef CONFIG_ECORE_SRIOV
43 /**
44  * @brief Read the VF bulletin and act on it if needed
45  *
46  * @param p_hwfn
47  * @param p_change - ecore fills 1 iff bulletin board has changed, 0 otherwise.
48  *
49  * @return enum _ecore_status
50  */
51 enum _ecore_status_t ecore_vf_read_bulletin(struct ecore_hwfn *p_hwfn,
52 					    u8 *p_change);
53 
54 /**
55  * @brief Get link paramters for VF from ecore
56  *
57  * @param p_hwfn
58  * @param params - the link params structure to be filled for the VF
59  */
60 void ecore_vf_get_link_params(struct ecore_hwfn *p_hwfn,
61 			      struct ecore_mcp_link_params *params);
62 
63 /**
64  * @brief Get link state for VF from ecore
65  *
66  * @param p_hwfn
67  * @param link - the link state structure to be filled for the VF
68  */
69 void ecore_vf_get_link_state(struct ecore_hwfn *p_hwfn,
70 			     struct ecore_mcp_link_state *link);
71 
72 /**
73  * @brief Get link capabilities for VF from ecore
74  *
75  * @param p_hwfn
76  * @param p_link_caps - the link capabilities structure to be filled for the VF
77  */
78 void ecore_vf_get_link_caps(struct ecore_hwfn *p_hwfn,
79 			    struct ecore_mcp_link_capabilities *p_link_caps);
80 
81 /**
82  * @brief Get number of Rx queues allocated for VF by ecore
83  *
84  *  @param p_hwfn
85  *  @param num_rxqs - allocated RX queues
86  */
87 void ecore_vf_get_num_rxqs(struct ecore_hwfn *p_hwfn,
88 			   u8 *num_rxqs);
89 
90 /**
91  * @brief Get number of Rx queues allocated for VF by ecore
92  *
93  *  @param p_hwfn
94  *  @param num_txqs - allocated RX queues
95  */
96 void ecore_vf_get_num_txqs(struct ecore_hwfn *p_hwfn,
97 			   u8 *num_txqs);
98 
99 /**
100  * @brief Get port mac address for VF
101  *
102  * @param p_hwfn
103  * @param port_mac - destination location for port mac
104  */
105 void ecore_vf_get_port_mac(struct ecore_hwfn *p_hwfn,
106 			   u8 *port_mac);
107 
108 /**
109  * @brief Get number of VLAN filters allocated for VF by ecore
110  *
111  *  @param p_hwfn
112  *  @param num_rxqs - allocated VLAN filters
113  */
114 void ecore_vf_get_num_vlan_filters(struct ecore_hwfn *p_hwfn,
115 				   u8 *num_vlan_filters);
116 
117 /**
118  * @brief Get number of MAC filters allocated for VF by ecore
119  *
120  *  @param p_hwfn
121  *  @param num_rxqs - allocated MAC filters
122  */
123 void ecore_vf_get_num_mac_filters(struct ecore_hwfn *p_hwfn,
124 				  u8 *num_mac_filters);
125 
126 /**
127  * @brief Check if VF can set a MAC address
128  *
129  * @param p_hwfn
130  * @param mac
131  *
132  * @return bool
133  */
134 bool ecore_vf_check_mac(struct ecore_hwfn *p_hwfn, u8 *mac);
135 
136 #ifndef LINUX_REMOVE
137 /**
138  * @brief Copy forced MAC address from bulletin board
139  *
140  * @param hwfn
141  * @param dst_mac
142  * @param p_is_forced - out param which indicate in case mac
143  *      	        exist if it forced or not.
144  *
145  * @return bool       - return true if mac exist and false if
146  *                      not.
147  */
148 bool ecore_vf_bulletin_get_forced_mac(struct ecore_hwfn *hwfn, u8 *dst_mac,
149 				      u8 *p_is_forced);
150 
151 /**
152  * @brief Check if force vlan is set and copy the forced vlan
153  *        from bulletin board
154  *
155  * @param hwfn
156  * @param dst_pvid
157  * @return bool
158  */
159 bool ecore_vf_bulletin_get_forced_vlan(struct ecore_hwfn *hwfn, u16 *dst_pvid);
160 
161 /**
162  * @brief Check if VF is based on PF whose driver is pre-fp-hsi version;
163  *        This affects the fastpath implementation of the driver.
164  *
165  * @param p_hwfn
166  *
167  * @return bool - true iff PF is pre-fp-hsi version.
168  */
169 bool ecore_vf_get_pre_fp_hsi(struct ecore_hwfn *p_hwfn);
170 
171 #endif
172 
173 /**
174  * @brief Set firmware version information in dev_info from VFs acquire response tlv
175  *
176  * @param p_hwfn
177  * @param fw_major
178  * @param fw_minor
179  * @param fw_rev
180  * @param fw_eng
181  */
182 void ecore_vf_get_fw_version(struct ecore_hwfn *p_hwfn,
183 			     u16 *fw_major,
184 			     u16 *fw_minor,
185 			     u16 *fw_rev,
186 			     u16 *fw_eng);
187 void ecore_vf_bulletin_get_udp_ports(struct ecore_hwfn *p_hwfn,
188 				     u16 *p_vxlan_port, u16 *p_geneve_port);
189 #else
ecore_vf_read_bulletin(struct ecore_hwfn * p_hwfn,u8 * p_change)190 static OSAL_INLINE enum _ecore_status_t ecore_vf_read_bulletin(struct ecore_hwfn *p_hwfn, u8 *p_change) {return ECORE_INVAL;}
ecore_vf_get_link_params(struct ecore_hwfn * p_hwfn,struct ecore_mcp_link_params * params)191 static OSAL_INLINE void ecore_vf_get_link_params(struct ecore_hwfn *p_hwfn, struct ecore_mcp_link_params *params) {}
ecore_vf_get_link_state(struct ecore_hwfn * p_hwfn,struct ecore_mcp_link_state * link)192 static OSAL_INLINE void ecore_vf_get_link_state(struct ecore_hwfn *p_hwfn, struct ecore_mcp_link_state *link) {}
ecore_vf_get_link_caps(struct ecore_hwfn * p_hwfn,struct ecore_mcp_link_capabilities * p_link_caps)193 static OSAL_INLINE void ecore_vf_get_link_caps(struct ecore_hwfn *p_hwfn, struct ecore_mcp_link_capabilities *p_link_caps) {}
ecore_vf_get_num_rxqs(struct ecore_hwfn * p_hwfn,u8 * num_rxqs)194 static OSAL_INLINE void ecore_vf_get_num_rxqs(struct ecore_hwfn *p_hwfn, u8 *num_rxqs) {}
ecore_vf_get_num_txqs(struct ecore_hwfn * p_hwfn,u8 * num_txqs)195 static OSAL_INLINE void ecore_vf_get_num_txqs(struct ecore_hwfn *p_hwfn, u8 *num_txqs) {}
ecore_vf_get_port_mac(struct ecore_hwfn * p_hwfn,u8 * port_mac)196 static OSAL_INLINE void ecore_vf_get_port_mac(struct ecore_hwfn *p_hwfn, u8 *port_mac) {}
ecore_vf_get_num_vlan_filters(struct ecore_hwfn * p_hwfn,u8 * num_vlan_filters)197 static OSAL_INLINE void ecore_vf_get_num_vlan_filters(struct ecore_hwfn *p_hwfn, u8 *num_vlan_filters) {}
ecore_vf_get_num_mac_filters(struct ecore_hwfn * p_hwfn,u8 * num_mac_filters)198 static OSAL_INLINE void ecore_vf_get_num_mac_filters(struct ecore_hwfn *p_hwfn, u8 *num_mac_filters) {}
ecore_vf_check_mac(struct ecore_hwfn * p_hwfn,u8 * mac)199 static OSAL_INLINE bool ecore_vf_check_mac(struct ecore_hwfn *p_hwfn, u8 *mac) {return false;}
200 #ifndef LINUX_REMOVE
ecore_vf_bulletin_get_forced_mac(struct ecore_hwfn * hwfn,u8 * dst_mac,u8 * p_is_forced)201 static OSAL_INLINE bool ecore_vf_bulletin_get_forced_mac(struct ecore_hwfn *hwfn, u8 *dst_mac, u8 *p_is_forced) {return false;}
ecore_vf_get_pre_fp_hsi(struct ecore_hwfn * p_hwfn)202 static OSAL_INLINE bool ecore_vf_get_pre_fp_hsi(struct ecore_hwfn *p_hwfn) {return false; }
203 #endif
ecore_vf_get_fw_version(struct ecore_hwfn * p_hwfn,u16 * fw_major,u16 * fw_minor,u16 * fw_rev,u16 * fw_eng)204 static OSAL_INLINE void ecore_vf_get_fw_version(struct ecore_hwfn *p_hwfn, u16 *fw_major, u16 *fw_minor, u16 *fw_rev, u16 *fw_eng) {}
ecore_vf_bulletin_get_udp_ports(struct ecore_hwfn * p_hwfn,u16 * p_vxlan_port,u16 * p_geneve_port)205 static OSAL_INLINE void ecore_vf_bulletin_get_udp_ports(struct ecore_hwfn *p_hwfn, u16 *p_vxlan_port, u16 *p_geneve_port) { return; }
206 #endif
207 #endif
208