18aa0cb00SJakub Kicinski /* 28aa0cb00SJakub Kicinski * Copyright (C) 2017 Netronome Systems, Inc. 38aa0cb00SJakub Kicinski * 48aa0cb00SJakub Kicinski * This software is dual licensed under the GNU General License Version 2, 58aa0cb00SJakub Kicinski * June 1991 as shown in the file COPYING in the top-level directory of this 68aa0cb00SJakub Kicinski * source tree or the BSD 2-Clause License provided below. You have the 78aa0cb00SJakub Kicinski * option to license this software under the complete terms of either license. 88aa0cb00SJakub Kicinski * 98aa0cb00SJakub Kicinski * The BSD 2-Clause License: 108aa0cb00SJakub Kicinski * 118aa0cb00SJakub Kicinski * Redistribution and use in source and binary forms, with or 128aa0cb00SJakub Kicinski * without modification, are permitted provided that the following 138aa0cb00SJakub Kicinski * conditions are met: 148aa0cb00SJakub Kicinski * 158aa0cb00SJakub Kicinski * 1. Redistributions of source code must retain the above 168aa0cb00SJakub Kicinski * copyright notice, this list of conditions and the following 178aa0cb00SJakub Kicinski * disclaimer. 188aa0cb00SJakub Kicinski * 198aa0cb00SJakub Kicinski * 2. Redistributions in binary form must reproduce the above 208aa0cb00SJakub Kicinski * copyright notice, this list of conditions and the following 218aa0cb00SJakub Kicinski * disclaimer in the documentation and/or other materials 228aa0cb00SJakub Kicinski * provided with the distribution. 238aa0cb00SJakub Kicinski * 248aa0cb00SJakub Kicinski * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 258aa0cb00SJakub Kicinski * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 268aa0cb00SJakub Kicinski * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 278aa0cb00SJakub Kicinski * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 288aa0cb00SJakub Kicinski * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 298aa0cb00SJakub Kicinski * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 308aa0cb00SJakub Kicinski * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 318aa0cb00SJakub Kicinski * SOFTWARE. 328aa0cb00SJakub Kicinski */ 338aa0cb00SJakub Kicinski 348aa0cb00SJakub Kicinski #include "nfpcore/nfp_cpp.h" 358aa0cb00SJakub Kicinski #include "nfpcore/nfp_nsp.h" 368aa0cb00SJakub Kicinski #include "nfp_app.h" 378aa0cb00SJakub Kicinski #include "nfp_main.h" 388aa0cb00SJakub Kicinski #include "nfp_net.h" 398aa0cb00SJakub Kicinski #include "nfp_port.h" 408aa0cb00SJakub Kicinski 418aa0cb00SJakub Kicinski static int 428aa0cb00SJakub Kicinski nfp_app_nic_vnic_init_phy_port(struct nfp_pf *pf, struct nfp_app *app, 438aa0cb00SJakub Kicinski struct nfp_net *nn, unsigned int id) 448aa0cb00SJakub Kicinski { 45a7ceb990SJakub Kicinski int err; 46a7ceb990SJakub Kicinski 478aa0cb00SJakub Kicinski if (!pf->eth_tbl) 488aa0cb00SJakub Kicinski return 0; 498aa0cb00SJakub Kicinski 508aa0cb00SJakub Kicinski nn->port = nfp_port_alloc(app, NFP_PORT_PHYS_PORT, nn->dp.netdev); 518aa0cb00SJakub Kicinski if (IS_ERR(nn->port)) 528aa0cb00SJakub Kicinski return PTR_ERR(nn->port); 538aa0cb00SJakub Kicinski 54a7ceb990SJakub Kicinski err = nfp_port_init_phy_port(pf, app, nn->port, id); 55a7ceb990SJakub Kicinski if (err) { 568aa0cb00SJakub Kicinski nfp_port_free(nn->port); 57a7ceb990SJakub Kicinski return err; 588aa0cb00SJakub Kicinski } 598aa0cb00SJakub Kicinski 60a7ceb990SJakub Kicinski return nn->port->type == NFP_PORT_INVALID; 618aa0cb00SJakub Kicinski } 628aa0cb00SJakub Kicinski 63c496291cSJakub Kicinski int nfp_app_nic_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, 648aa0cb00SJakub Kicinski unsigned int id) 658aa0cb00SJakub Kicinski { 668aa0cb00SJakub Kicinski int err; 678aa0cb00SJakub Kicinski 688aa0cb00SJakub Kicinski err = nfp_app_nic_vnic_init_phy_port(app->pf, app, nn, id); 698aa0cb00SJakub Kicinski if (err) 708aa0cb00SJakub Kicinski return err < 0 ? err : 0; 718aa0cb00SJakub Kicinski 72cb2cda48SJakub Kicinski nfp_net_get_mac_addr(app->pf, nn->port); 738aa0cb00SJakub Kicinski 748aa0cb00SJakub Kicinski return 0; 758aa0cb00SJakub Kicinski } 76