nfp_app_nic.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * Copyright (C) 2017 Netronome Systems, Inc.
  3. *
  4. * This software is dual licensed under the GNU General License Version 2,
  5. * June 1991 as shown in the file COPYING in the top-level directory of this
  6. * source tree or the BSD 2-Clause License provided below. You have the
  7. * option to license this software under the complete terms of either license.
  8. *
  9. * The BSD 2-Clause License:
  10. *
  11. * Redistribution and use in source and binary forms, with or
  12. * without modification, are permitted provided that the following
  13. * conditions are met:
  14. *
  15. * 1. Redistributions of source code must retain the above
  16. * copyright notice, this list of conditions and the following
  17. * disclaimer.
  18. *
  19. * 2. Redistributions in binary form must reproduce the above
  20. * copyright notice, this list of conditions and the following
  21. * disclaimer in the documentation and/or other materials
  22. * provided with the distribution.
  23. *
  24. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  25. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  26. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  27. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  28. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  29. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  30. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  31. * SOFTWARE.
  32. */
  33. #include "nfpcore/nfp_cpp.h"
  34. #include "nfpcore/nfp_nsp.h"
  35. #include "nfp_app.h"
  36. #include "nfp_main.h"
  37. #include "nfp_net.h"
  38. #include "nfp_port.h"
  39. static int
  40. nfp_app_nic_vnic_init_phy_port(struct nfp_pf *pf, struct nfp_app *app,
  41. struct nfp_net *nn, unsigned int id)
  42. {
  43. int err;
  44. if (!pf->eth_tbl)
  45. return 0;
  46. nn->port = nfp_port_alloc(app, NFP_PORT_PHYS_PORT, nn->dp.netdev);
  47. if (IS_ERR(nn->port))
  48. return PTR_ERR(nn->port);
  49. err = nfp_port_init_phy_port(pf, app, nn->port, id);
  50. if (err) {
  51. nfp_port_free(nn->port);
  52. return err;
  53. }
  54. return nn->port->type == NFP_PORT_INVALID;
  55. }
  56. int nfp_app_nic_vnic_alloc(struct nfp_app *app, struct nfp_net *nn,
  57. unsigned int id)
  58. {
  59. int err;
  60. err = nfp_app_nic_vnic_init_phy_port(app->pf, app, nn, id);
  61. if (err)
  62. return err < 0 ? err : 0;
  63. nfp_net_get_mac_addr(app->pf, nn->dp.netdev, nn->port);
  64. return 0;
  65. }