1*96de2506SJakub Kicinski // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*96de2506SJakub 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