xref: /dpdk/drivers/net/octeontx/base/octeontx_bgx.c (revision c6b97d678699d194b54e1833e5e1c5e01ebdeca6)
1aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause
2aaf4363eSJerin Jacob  * Copyright(c) 2017 Cavium, Inc
34d027880SJerin Jacob  */
44d027880SJerin Jacob 
54d027880SJerin Jacob #include <string.h>
64d027880SJerin Jacob 
74d027880SJerin Jacob #include "octeontx_bgx.h"
84d027880SJerin Jacob 
94d027880SJerin Jacob int
104d027880SJerin Jacob octeontx_bgx_port_open(int port, octeontx_mbox_bgx_port_conf_t *conf)
114d027880SJerin Jacob {
124d027880SJerin Jacob 	struct octeontx_mbox_hdr hdr;
134d027880SJerin Jacob 	octeontx_mbox_bgx_port_conf_t bgx_conf;
144d027880SJerin Jacob 	int len = sizeof(octeontx_mbox_bgx_port_conf_t);
154d027880SJerin Jacob 	int res;
164d027880SJerin Jacob 
174d027880SJerin Jacob 	memset(&bgx_conf, 0, sizeof(octeontx_mbox_bgx_port_conf_t));
184d027880SJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
194d027880SJerin Jacob 	hdr.msg = MBOX_BGX_PORT_OPEN;
204d027880SJerin Jacob 	hdr.vfid = port;
214d027880SJerin Jacob 
22d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, &bgx_conf, len);
234d027880SJerin Jacob 	if (res < 0)
244d027880SJerin Jacob 		return -EACCES;
254d027880SJerin Jacob 
264d027880SJerin Jacob 	conf->enable = bgx_conf.enable;
274d027880SJerin Jacob 	conf->promisc = bgx_conf.promisc;
284d027880SJerin Jacob 	conf->bpen = bgx_conf.bpen;
294d027880SJerin Jacob 	conf->node = bgx_conf.node;
304d027880SJerin Jacob 	conf->base_chan = bgx_conf.base_chan;
314d027880SJerin Jacob 	conf->num_chans = bgx_conf.num_chans;
324d027880SJerin Jacob 	conf->mtu = bgx_conf.mtu;
334d027880SJerin Jacob 	conf->bgx = bgx_conf.bgx;
344d027880SJerin Jacob 	conf->lmac = bgx_conf.lmac;
354d027880SJerin Jacob 	conf->mode = bgx_conf.mode;
364d027880SJerin Jacob 	conf->pkind = bgx_conf.pkind;
374d027880SJerin Jacob 	memcpy(conf->macaddr, bgx_conf.macaddr, 6);
384d027880SJerin Jacob 
394d027880SJerin Jacob 	return res;
404d027880SJerin Jacob }
414d027880SJerin Jacob 
424d027880SJerin Jacob int
434d027880SJerin Jacob octeontx_bgx_port_close(int port)
444d027880SJerin Jacob {
454d027880SJerin Jacob 	struct octeontx_mbox_hdr hdr;
464d027880SJerin Jacob 	int res;
474d027880SJerin Jacob 
484d027880SJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
494d027880SJerin Jacob 	hdr.msg = MBOX_BGX_PORT_CLOSE;
504d027880SJerin Jacob 	hdr.vfid = port;
514d027880SJerin Jacob 
52d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, NULL, 0);
534d027880SJerin Jacob 	if (res < 0)
544d027880SJerin Jacob 		return -EACCES;
554d027880SJerin Jacob 
564d027880SJerin Jacob 	return res;
574d027880SJerin Jacob }
584d027880SJerin Jacob 
594d027880SJerin Jacob int
604d027880SJerin Jacob octeontx_bgx_port_start(int port)
614d027880SJerin Jacob {
624d027880SJerin Jacob 	struct octeontx_mbox_hdr hdr;
634d027880SJerin Jacob 	int res;
644d027880SJerin Jacob 
654d027880SJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
664d027880SJerin Jacob 	hdr.msg = MBOX_BGX_PORT_START;
674d027880SJerin Jacob 	hdr.vfid = port;
684d027880SJerin Jacob 
69d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, NULL, 0);
704d027880SJerin Jacob 	if (res < 0)
714d027880SJerin Jacob 		return -EACCES;
724d027880SJerin Jacob 
734d027880SJerin Jacob 	return res;
744d027880SJerin Jacob }
754d027880SJerin Jacob 
764d027880SJerin Jacob int
774d027880SJerin Jacob octeontx_bgx_port_stop(int port)
784d027880SJerin Jacob {
794d027880SJerin Jacob 	struct octeontx_mbox_hdr hdr;
804d027880SJerin Jacob 	int res;
814d027880SJerin Jacob 
824d027880SJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
834d027880SJerin Jacob 	hdr.msg = MBOX_BGX_PORT_STOP;
844d027880SJerin Jacob 	hdr.vfid = port;
854d027880SJerin Jacob 
86d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, NULL, 0);
874d027880SJerin Jacob 	if (res < 0)
884d027880SJerin Jacob 		return -EACCES;
894d027880SJerin Jacob 
904d027880SJerin Jacob 	return res;
914d027880SJerin Jacob }
92e242dd1cSJerin Jacob 
93e242dd1cSJerin Jacob int
94e242dd1cSJerin Jacob octeontx_bgx_port_get_config(int port, octeontx_mbox_bgx_port_conf_t *conf)
95e242dd1cSJerin Jacob {
96e242dd1cSJerin Jacob 	struct octeontx_mbox_hdr hdr;
97e242dd1cSJerin Jacob 	octeontx_mbox_bgx_port_conf_t bgx_conf;
98e242dd1cSJerin Jacob 	int len = sizeof(octeontx_mbox_bgx_port_conf_t);
99e242dd1cSJerin Jacob 	int res;
100e242dd1cSJerin Jacob 
101e242dd1cSJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
102e242dd1cSJerin Jacob 	hdr.msg = MBOX_BGX_PORT_GET_CONFIG;
103e242dd1cSJerin Jacob 	hdr.vfid = port;
104e242dd1cSJerin Jacob 
105e242dd1cSJerin Jacob 	memset(&bgx_conf, 0, sizeof(octeontx_mbox_bgx_port_conf_t));
106d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, &bgx_conf, len);
107e242dd1cSJerin Jacob 	if (res < 0)
108e242dd1cSJerin Jacob 		return -EACCES;
109e242dd1cSJerin Jacob 
110e242dd1cSJerin Jacob 	conf->enable = bgx_conf.enable;
111e242dd1cSJerin Jacob 	conf->promisc = bgx_conf.promisc;
112e242dd1cSJerin Jacob 	conf->bpen = bgx_conf.bpen;
113e242dd1cSJerin Jacob 	conf->node = bgx_conf.node;
114e242dd1cSJerin Jacob 	conf->base_chan = bgx_conf.base_chan;
115e242dd1cSJerin Jacob 	conf->num_chans = bgx_conf.num_chans;
116e242dd1cSJerin Jacob 	conf->mtu = bgx_conf.mtu;
117e242dd1cSJerin Jacob 	conf->bgx = bgx_conf.bgx;
118e242dd1cSJerin Jacob 	conf->lmac = bgx_conf.lmac;
119e242dd1cSJerin Jacob 	conf->mode = bgx_conf.mode;
120e242dd1cSJerin Jacob 	conf->pkind = bgx_conf.pkind;
121e242dd1cSJerin Jacob 	memcpy(conf->macaddr, bgx_conf.macaddr, 6);
122e242dd1cSJerin Jacob 
123e242dd1cSJerin Jacob 	return res;
124e242dd1cSJerin Jacob }
125e242dd1cSJerin Jacob 
126e242dd1cSJerin Jacob int
127e242dd1cSJerin Jacob octeontx_bgx_port_status(int port, octeontx_mbox_bgx_port_status_t *stat)
128e242dd1cSJerin Jacob {
129e242dd1cSJerin Jacob 	struct octeontx_mbox_hdr hdr;
130e242dd1cSJerin Jacob 	octeontx_mbox_bgx_port_status_t bgx_stat;
131e242dd1cSJerin Jacob 	int len = sizeof(octeontx_mbox_bgx_port_status_t);
132e242dd1cSJerin Jacob 	int res;
133e242dd1cSJerin Jacob 
134e242dd1cSJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
135e242dd1cSJerin Jacob 	hdr.msg = MBOX_BGX_PORT_GET_STATUS;
136e242dd1cSJerin Jacob 	hdr.vfid = port;
137e242dd1cSJerin Jacob 
138d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, &bgx_stat, len);
139e242dd1cSJerin Jacob 	if (res < 0)
140e242dd1cSJerin Jacob 		return -EACCES;
141e242dd1cSJerin Jacob 
142e242dd1cSJerin Jacob 	stat->link_up = bgx_stat.link_up;
143e242dd1cSJerin Jacob 
144e242dd1cSJerin Jacob 	return res;
145e242dd1cSJerin Jacob }
146e242dd1cSJerin Jacob 
147e242dd1cSJerin Jacob int
148*c6b97d67SHarman Kalra octeontx_bgx_port_xstats(int port, octeontx_mbox_bgx_port_stats_t *stats)
149*c6b97d67SHarman Kalra {
150*c6b97d67SHarman Kalra 	struct octeontx_mbox_hdr hdr;
151*c6b97d67SHarman Kalra 	int len = sizeof(octeontx_mbox_bgx_port_stats_t);
152*c6b97d67SHarman Kalra 	int res;
153*c6b97d67SHarman Kalra 
154*c6b97d67SHarman Kalra 	hdr.coproc = OCTEONTX_BGX_COPROC;
155*c6b97d67SHarman Kalra 	hdr.msg = MBOX_BGX_PORT_GET_STATS;
156*c6b97d67SHarman Kalra 	hdr.vfid = port;
157*c6b97d67SHarman Kalra 
158*c6b97d67SHarman Kalra 	res = octeontx_mbox_send(&hdr, NULL, 0, stats, len);
159*c6b97d67SHarman Kalra 	if (res < 0)
160*c6b97d67SHarman Kalra 		return -EACCES;
161*c6b97d67SHarman Kalra 	return res;
162*c6b97d67SHarman Kalra }
163*c6b97d67SHarman Kalra 
164*c6b97d67SHarman Kalra int
165e242dd1cSJerin Jacob octeontx_bgx_port_stats(int port, octeontx_mbox_bgx_port_stats_t *stats)
166e242dd1cSJerin Jacob {
167e242dd1cSJerin Jacob 	struct octeontx_mbox_hdr hdr;
168e242dd1cSJerin Jacob 	octeontx_mbox_bgx_port_stats_t bgx_stats;
169e242dd1cSJerin Jacob 	int len = sizeof(octeontx_mbox_bgx_port_stats_t);
170e242dd1cSJerin Jacob 	int res;
171e242dd1cSJerin Jacob 
172e242dd1cSJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
173e242dd1cSJerin Jacob 	hdr.msg = MBOX_BGX_PORT_GET_STATS;
174e242dd1cSJerin Jacob 	hdr.vfid = port;
175e242dd1cSJerin Jacob 
176d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, &bgx_stats, len);
177e242dd1cSJerin Jacob 	if (res < 0)
178e242dd1cSJerin Jacob 		return -EACCES;
179e242dd1cSJerin Jacob 
180e242dd1cSJerin Jacob 	stats->rx_packets = bgx_stats.rx_packets;
181e242dd1cSJerin Jacob 	stats->rx_bytes = bgx_stats.rx_bytes;
182e242dd1cSJerin Jacob 	stats->rx_dropped = bgx_stats.rx_dropped;
183e242dd1cSJerin Jacob 	stats->rx_errors = bgx_stats.rx_errors;
184e242dd1cSJerin Jacob 	stats->tx_packets = bgx_stats.tx_packets;
185e242dd1cSJerin Jacob 	stats->tx_bytes = bgx_stats.tx_bytes;
186e242dd1cSJerin Jacob 	stats->tx_dropped = bgx_stats.tx_dropped;
187e242dd1cSJerin Jacob 	stats->tx_errors = bgx_stats.tx_errors;
188e242dd1cSJerin Jacob 	return res;
189e242dd1cSJerin Jacob }
190e242dd1cSJerin Jacob 
191e242dd1cSJerin Jacob int
192e242dd1cSJerin Jacob octeontx_bgx_port_stats_clr(int port)
193e242dd1cSJerin Jacob {
194e242dd1cSJerin Jacob 	struct octeontx_mbox_hdr hdr;
195e242dd1cSJerin Jacob 	int res;
196e242dd1cSJerin Jacob 
197e242dd1cSJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
198e242dd1cSJerin Jacob 	hdr.msg = MBOX_BGX_PORT_CLR_STATS;
199e242dd1cSJerin Jacob 	hdr.vfid = port;
200e242dd1cSJerin Jacob 
201d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, NULL, 0);
202e242dd1cSJerin Jacob 	if (res < 0)
203e242dd1cSJerin Jacob 		return -EACCES;
204e242dd1cSJerin Jacob 
205e242dd1cSJerin Jacob 	return res;
206e242dd1cSJerin Jacob }
207e242dd1cSJerin Jacob 
208e242dd1cSJerin Jacob int
209e242dd1cSJerin Jacob octeontx_bgx_port_link_status(int port)
210e242dd1cSJerin Jacob {
211e242dd1cSJerin Jacob 	struct octeontx_mbox_hdr hdr;
212e242dd1cSJerin Jacob 	uint8_t link;
213e242dd1cSJerin Jacob 	int len = sizeof(uint8_t);
214e242dd1cSJerin Jacob 	int res;
215e242dd1cSJerin Jacob 
216e242dd1cSJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
217e242dd1cSJerin Jacob 	hdr.msg = MBOX_BGX_PORT_GET_LINK_STATUS;
218e242dd1cSJerin Jacob 	hdr.vfid = port;
219e242dd1cSJerin Jacob 
220d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, NULL, 0, &link, len);
221e242dd1cSJerin Jacob 	if (res < 0)
222e242dd1cSJerin Jacob 		return -EACCES;
223e242dd1cSJerin Jacob 
224e242dd1cSJerin Jacob 	return link;
225e242dd1cSJerin Jacob }
226e242dd1cSJerin Jacob 
227e242dd1cSJerin Jacob int
2288b42b07eSHarman Kalra octeontx_bgx_port_set_link_state(int port, bool enable)
2298b42b07eSHarman Kalra {
2308b42b07eSHarman Kalra 	struct octeontx_mbox_hdr hdr;
2318b42b07eSHarman Kalra 
2328b42b07eSHarman Kalra 	hdr.coproc = OCTEONTX_BGX_COPROC;
2338b42b07eSHarman Kalra 	hdr.msg = MBOX_BGX_PORT_SET_LINK_STATE;
2348b42b07eSHarman Kalra 	hdr.vfid = port;
2358b42b07eSHarman Kalra 
2368b42b07eSHarman Kalra 	return octeontx_mbox_send(&hdr, &enable, sizeof(bool), NULL, 0);
2378b42b07eSHarman Kalra }
2388b42b07eSHarman Kalra 
2398b42b07eSHarman Kalra int
240e242dd1cSJerin Jacob octeontx_bgx_port_promisc_set(int port, int en)
241e242dd1cSJerin Jacob {
242e242dd1cSJerin Jacob 	struct octeontx_mbox_hdr hdr;
243e242dd1cSJerin Jacob 	uint8_t	prom;
244e242dd1cSJerin Jacob 	int res;
245e242dd1cSJerin Jacob 
246e242dd1cSJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
247e242dd1cSJerin Jacob 	hdr.msg = MBOX_BGX_PORT_SET_PROMISC;
248e242dd1cSJerin Jacob 	hdr.vfid = port;
249e242dd1cSJerin Jacob 	prom = en ? 1 : 0;
250e242dd1cSJerin Jacob 
251d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, &prom, sizeof(prom), NULL, 0);
252e242dd1cSJerin Jacob 	if (res < 0)
253e242dd1cSJerin Jacob 		return -EACCES;
254e242dd1cSJerin Jacob 
255e242dd1cSJerin Jacob 	return res;
256e242dd1cSJerin Jacob }
257e242dd1cSJerin Jacob 
258e242dd1cSJerin Jacob int
2593151e6a6SHarman Kalra octeontx_bgx_port_mtu_set(int port, int mtu)
2603151e6a6SHarman Kalra {
2613151e6a6SHarman Kalra 	struct octeontx_mbox_hdr hdr;
2623151e6a6SHarman Kalra 	int res;
2633151e6a6SHarman Kalra 
2643151e6a6SHarman Kalra 	hdr.coproc = OCTEONTX_BGX_COPROC;
2653151e6a6SHarman Kalra 	hdr.msg = MBOX_BGX_PORT_SET_MTU;
2663151e6a6SHarman Kalra 	hdr.vfid = port;
2673151e6a6SHarman Kalra 
2683151e6a6SHarman Kalra 	res = octeontx_mbox_send(&hdr, &mtu, sizeof(mtu), NULL, 0);
2693151e6a6SHarman Kalra 	if (res < 0)
2703151e6a6SHarman Kalra 		return -EACCES;
2713151e6a6SHarman Kalra 
2723151e6a6SHarman Kalra 	return res;
2733151e6a6SHarman Kalra }
2743151e6a6SHarman Kalra 
2753151e6a6SHarman Kalra int
276e242dd1cSJerin Jacob octeontx_bgx_port_mac_set(int port, uint8_t *mac_addr)
277e242dd1cSJerin Jacob {
278e242dd1cSJerin Jacob 	struct octeontx_mbox_hdr hdr;
279e242dd1cSJerin Jacob 	int len = 6;
280e242dd1cSJerin Jacob 	int res = 0;
281e242dd1cSJerin Jacob 
282e242dd1cSJerin Jacob 	hdr.coproc = OCTEONTX_BGX_COPROC;
283e242dd1cSJerin Jacob 	hdr.msg = MBOX_BGX_PORT_SET_MACADDR;
284e242dd1cSJerin Jacob 	hdr.vfid = port;
285e242dd1cSJerin Jacob 
286d8dd3165SPavan Nikhilesh 	res = octeontx_mbox_send(&hdr, mac_addr, len, NULL, 0);
287e242dd1cSJerin Jacob 	if (res < 0)
288e242dd1cSJerin Jacob 		return -EACCES;
289e242dd1cSJerin Jacob 
290e242dd1cSJerin Jacob 	return res;
291e242dd1cSJerin Jacob }
292e4373bf1SSunil Kumar Kori 
293e4373bf1SSunil Kumar Kori int
2949614459bSSunil Kumar Kori octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr, int index)
295e4373bf1SSunil Kumar Kori {
2969614459bSSunil Kumar Kori 	struct octeontx_mbox_bgx_port_mac_filter filter;
297e4373bf1SSunil Kumar Kori 	struct octeontx_mbox_hdr hdr;
298e4373bf1SSunil Kumar Kori 	int len = 6;
299e4373bf1SSunil Kumar Kori 
300e4373bf1SSunil Kumar Kori 	hdr.coproc = OCTEONTX_BGX_COPROC;
301e4373bf1SSunil Kumar Kori 	hdr.msg = MBOX_BGX_PORT_ADD_MACADDR;
302e4373bf1SSunil Kumar Kori 	hdr.vfid = port;
303e4373bf1SSunil Kumar Kori 
3049614459bSSunil Kumar Kori 	memcpy(filter.mac_addr, mac_addr, len);
3059614459bSSunil Kumar Kori 	filter.index = index;
3069614459bSSunil Kumar Kori 	len = sizeof(struct octeontx_mbox_bgx_port_mac_filter);
307e4373bf1SSunil Kumar Kori 
3089614459bSSunil Kumar Kori 	return octeontx_mbox_send(&hdr, &filter, len, NULL, 0);
309e4373bf1SSunil Kumar Kori }
310e4373bf1SSunil Kumar Kori 
311e4373bf1SSunil Kumar Kori int
312e4373bf1SSunil Kumar Kori octeontx_bgx_port_mac_del(int port, uint32_t index)
313e4373bf1SSunil Kumar Kori {
314e4373bf1SSunil Kumar Kori 	struct octeontx_mbox_hdr hdr;
315e4373bf1SSunil Kumar Kori 	int len = sizeof(uint32_t);
316e4373bf1SSunil Kumar Kori 	int res = 0;
317e4373bf1SSunil Kumar Kori 
318e4373bf1SSunil Kumar Kori 	hdr.coproc = OCTEONTX_BGX_COPROC;
319e4373bf1SSunil Kumar Kori 	hdr.msg = MBOX_BGX_PORT_DEL_MACADDR;
320e4373bf1SSunil Kumar Kori 	hdr.vfid = port;
321e4373bf1SSunil Kumar Kori 
322e4373bf1SSunil Kumar Kori 	res = octeontx_mbox_send(&hdr, &index, len, NULL, 0);
323e4373bf1SSunil Kumar Kori 	if (res < 0)
324e4373bf1SSunil Kumar Kori 		return -EACCES;
325e4373bf1SSunil Kumar Kori 
326e4373bf1SSunil Kumar Kori 	return res;
327e4373bf1SSunil Kumar Kori }
328e4373bf1SSunil Kumar Kori 
329e4373bf1SSunil Kumar Kori int
330e4373bf1SSunil Kumar Kori octeontx_bgx_port_mac_entries_get(int port)
331e4373bf1SSunil Kumar Kori {
332e4373bf1SSunil Kumar Kori 	struct octeontx_mbox_hdr hdr;
333e4373bf1SSunil Kumar Kori 	int resp = 6;
334e4373bf1SSunil Kumar Kori 	int res = 0;
335e4373bf1SSunil Kumar Kori 
336e4373bf1SSunil Kumar Kori 	hdr.coproc = OCTEONTX_BGX_COPROC;
337e4373bf1SSunil Kumar Kori 	hdr.msg = MBOX_BGX_PORT_GET_MACADDR_ENTRIES;
338e4373bf1SSunil Kumar Kori 	hdr.vfid = port;
339e4373bf1SSunil Kumar Kori 
340e4373bf1SSunil Kumar Kori 	res = octeontx_mbox_send(&hdr, NULL, 0, &resp, sizeof(int));
341e4373bf1SSunil Kumar Kori 	if (res < 0)
342e4373bf1SSunil Kumar Kori 		return -EACCES;
343e4373bf1SSunil Kumar Kori 
344e4373bf1SSunil Kumar Kori 	return resp;
345e4373bf1SSunil Kumar Kori }
346241a6500SVamsi Attunuru 
347241a6500SVamsi Attunuru int octeontx_bgx_port_get_fifo_cfg(int port,
348241a6500SVamsi Attunuru 				   octeontx_mbox_bgx_port_fifo_cfg_t *cfg)
349241a6500SVamsi Attunuru {
350241a6500SVamsi Attunuru 	int len = sizeof(octeontx_mbox_bgx_port_fifo_cfg_t);
351241a6500SVamsi Attunuru 	octeontx_mbox_bgx_port_fifo_cfg_t conf;
352241a6500SVamsi Attunuru 	struct octeontx_mbox_hdr hdr;
353241a6500SVamsi Attunuru 
354241a6500SVamsi Attunuru 	hdr.coproc = OCTEONTX_BGX_COPROC;
355241a6500SVamsi Attunuru 	hdr.msg = MBOX_BGX_PORT_GET_FIFO_CFG;
356241a6500SVamsi Attunuru 	hdr.vfid = port;
357241a6500SVamsi Attunuru 
358241a6500SVamsi Attunuru 	if (octeontx_mbox_send(&hdr, NULL, 0, &conf, len) < 0)
359241a6500SVamsi Attunuru 		return -EACCES;
360241a6500SVamsi Attunuru 
361241a6500SVamsi Attunuru 	cfg->rx_fifosz = conf.rx_fifosz;
362241a6500SVamsi Attunuru 
363241a6500SVamsi Attunuru 	return 0;
364241a6500SVamsi Attunuru }
365241a6500SVamsi Attunuru 
366241a6500SVamsi Attunuru int octeontx_bgx_port_flow_ctrl_cfg(int port,
367241a6500SVamsi Attunuru 				    octeontx_mbox_bgx_port_fc_cfg_t *cfg)
368241a6500SVamsi Attunuru {
369241a6500SVamsi Attunuru 	int len = sizeof(octeontx_mbox_bgx_port_fc_cfg_t);
370241a6500SVamsi Attunuru 	octeontx_mbox_bgx_port_fc_cfg_t conf;
371241a6500SVamsi Attunuru 	struct octeontx_mbox_hdr hdr;
372241a6500SVamsi Attunuru 
373241a6500SVamsi Attunuru 	hdr.coproc = OCTEONTX_BGX_COPROC;
374241a6500SVamsi Attunuru 	hdr.msg = MBOX_BGX_PORT_FLOW_CTRL_CFG;
375241a6500SVamsi Attunuru 	hdr.vfid = port;
376241a6500SVamsi Attunuru 
377241a6500SVamsi Attunuru 	if (cfg->fc_cfg == BGX_PORT_FC_CFG_SET)
378241a6500SVamsi Attunuru 		memcpy(&conf, cfg, len);
379241a6500SVamsi Attunuru 	else
380241a6500SVamsi Attunuru 		memset(&conf, 0, len);
381241a6500SVamsi Attunuru 
382241a6500SVamsi Attunuru 	if (octeontx_mbox_send(&hdr, &conf, len, &conf, len) < 0)
383241a6500SVamsi Attunuru 		return -EACCES;
384241a6500SVamsi Attunuru 
385241a6500SVamsi Attunuru 	if (cfg->fc_cfg == BGX_PORT_FC_CFG_SET)
386241a6500SVamsi Attunuru 		goto done;
387241a6500SVamsi Attunuru 
388241a6500SVamsi Attunuru 	cfg->rx_pause = conf.rx_pause;
389241a6500SVamsi Attunuru 	cfg->tx_pause = conf.tx_pause;
390241a6500SVamsi Attunuru 	cfg->low_water = conf.low_water;
391241a6500SVamsi Attunuru 	cfg->high_water = conf.high_water;
392241a6500SVamsi Attunuru 
393241a6500SVamsi Attunuru done:
394241a6500SVamsi Attunuru 	return 0;
395241a6500SVamsi Attunuru }
396a84ff1d9SHarman Kalra 
397a84ff1d9SHarman Kalra int octeontx_bgx_port_change_mode(int port,
398a84ff1d9SHarman Kalra 				  octeontx_mbox_bgx_port_change_mode_t *cfg)
399a84ff1d9SHarman Kalra {
400a84ff1d9SHarman Kalra 	int len = sizeof(octeontx_mbox_bgx_port_change_mode_t), res;
401a84ff1d9SHarman Kalra 	octeontx_mbox_bgx_port_change_mode_t conf;
402a84ff1d9SHarman Kalra 	struct octeontx_mbox_hdr hdr;
403a84ff1d9SHarman Kalra 
404a84ff1d9SHarman Kalra 	hdr.coproc = OCTEONTX_BGX_COPROC;
405a84ff1d9SHarman Kalra 	hdr.msg = MBOX_BGX_PORT_CHANGE_MODE;
406a84ff1d9SHarman Kalra 	hdr.vfid = port;
407a84ff1d9SHarman Kalra 
408a84ff1d9SHarman Kalra 	memcpy(&conf, cfg, len);
409a84ff1d9SHarman Kalra 	res = octeontx_mbox_send(&hdr, &conf, len, NULL, 0);
410a84ff1d9SHarman Kalra 	if (res < 0)
411a84ff1d9SHarman Kalra 		return -EACCES;
412a84ff1d9SHarman Kalra 
413a84ff1d9SHarman Kalra 	return res;
414a84ff1d9SHarman Kalra }
415