196de2506SJakub Kicinski // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
296de2506SJakub Kicinski /* Copyright (C) 2017-2018 Netronome Systems, Inc. */
38aa0cb00SJakub Kicinski 
48aa0cb00SJakub Kicinski #include "nfpcore/nfp_cpp.h"
58aa0cb00SJakub Kicinski #include "nfpcore/nfp_nsp.h"
68aa0cb00SJakub Kicinski #include "nfp_app.h"
78aa0cb00SJakub Kicinski #include "nfp_main.h"
88aa0cb00SJakub Kicinski #include "nfp_net.h"
98aa0cb00SJakub Kicinski #include "nfp_port.h"
108aa0cb00SJakub Kicinski 
nfp_app_nic_vnic_init_phy_port(struct nfp_pf * pf,struct nfp_app * app,struct nfp_net * nn,unsigned int id)11cc54dc28SJakub Kicinski int nfp_app_nic_vnic_init_phy_port(struct nfp_pf *pf, struct nfp_app *app,
128aa0cb00SJakub Kicinski 				   struct nfp_net *nn, unsigned int id)
138aa0cb00SJakub Kicinski {
14a7ceb990SJakub Kicinski 	int err;
15a7ceb990SJakub Kicinski 
168aa0cb00SJakub Kicinski 	if (!pf->eth_tbl)
178aa0cb00SJakub Kicinski 		return 0;
188aa0cb00SJakub Kicinski 
198aa0cb00SJakub Kicinski 	nn->port = nfp_port_alloc(app, NFP_PORT_PHYS_PORT, nn->dp.netdev);
208aa0cb00SJakub Kicinski 	if (IS_ERR(nn->port))
218aa0cb00SJakub Kicinski 		return PTR_ERR(nn->port);
228aa0cb00SJakub Kicinski 
23a7ceb990SJakub Kicinski 	err = nfp_port_init_phy_port(pf, app, nn->port, id);
24a7ceb990SJakub Kicinski 	if (err) {
258aa0cb00SJakub Kicinski 		nfp_port_free(nn->port);
26a7ceb990SJakub Kicinski 		return err;
278aa0cb00SJakub Kicinski 	}
288aa0cb00SJakub Kicinski 
29a7ceb990SJakub Kicinski 	return nn->port->type == NFP_PORT_INVALID;
308aa0cb00SJakub Kicinski }
318aa0cb00SJakub Kicinski 
nfp_app_nic_vnic_alloc(struct nfp_app * app,struct nfp_net * nn,unsigned int id)32c496291cSJakub Kicinski int nfp_app_nic_vnic_alloc(struct nfp_app *app, struct nfp_net *nn,
338aa0cb00SJakub Kicinski 			   unsigned int id)
348aa0cb00SJakub Kicinski {
358aa0cb00SJakub Kicinski 	int err;
368aa0cb00SJakub Kicinski 
378aa0cb00SJakub Kicinski 	err = nfp_app_nic_vnic_init_phy_port(app->pf, app, nn, id);
388aa0cb00SJakub Kicinski 	if (err)
398aa0cb00SJakub Kicinski 		return err < 0 ? err : 0;
408aa0cb00SJakub Kicinski 
41c55ca688SJakub Kicinski 	nfp_net_get_mac_addr(app->pf, nn->dp.netdev, nn->port);
428aa0cb00SJakub Kicinski 
438aa0cb00SJakub Kicinski 	return 0;
448aa0cb00SJakub Kicinski }
45