Skip to content

Commit

Permalink
ionic: Add the basic NDO callbacks for netdev support
Browse files Browse the repository at this point in the history
Set up the initial NDO structure and callbacks for netdev
to use, and register the netdev.  This will allow us to do
a few basic operations on the device, but no traffic yet.

Signed-off-by: Shannon Nelson <snelson@pensando.io>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Shannon Nelson authored and David S. Miller committed Sep 5, 2019
1 parent 77ceb68 commit beead69
Show file tree
Hide file tree
Showing 6 changed files with 387 additions and 2 deletions.
2 changes: 2 additions & 0 deletions drivers/net/ethernet/pensando/ionic/ionic.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,15 @@ struct ionic_lif;
struct ionic {
struct pci_dev *pdev;
struct device *dev;
struct devlink_port dl_port;
struct ionic_dev idev;
struct mutex dev_cmd_lock; /* lock for dev_cmd operations */
struct dentry *dentry;
struct ionic_dev_bar bars[IONIC_BARS_MAX];
unsigned int num_bars;
struct ionic_identity ident;
struct list_head lifs;
struct ionic_lif *master_lif;
unsigned int nnqs_per_lif;
unsigned int neqs_per_lif;
unsigned int ntxqs_per_lif;
Expand Down
15 changes: 14 additions & 1 deletion drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,12 +206,24 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto err_out_free_lifs;
}

err = ionic_lifs_register(ionic);
if (err) {
dev_err(dev, "Cannot register LIFs: %d, aborting\n", err);
goto err_out_deinit_lifs;
}

err = ionic_devlink_register(ionic);
if (err)
if (err) {
dev_err(dev, "Cannot register devlink: %d\n", err);
goto err_out_deregister_lifs;
}

return 0;

err_out_deregister_lifs:
ionic_lifs_unregister(ionic);
err_out_deinit_lifs:
ionic_lifs_deinit(ionic);
err_out_free_lifs:
ionic_lifs_free(ionic);
err_out_free_irqs:
Expand Down Expand Up @@ -246,6 +258,7 @@ static void ionic_remove(struct pci_dev *pdev)
return;

ionic_devlink_unregister(ionic);
ionic_lifs_unregister(ionic);
ionic_lifs_deinit(ionic);
ionic_lifs_free(ionic);
ionic_bus_free_irq_vectors(ionic);
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/ethernet/pensando/ionic/ionic_dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#include "ionic_if.h"
#include "ionic_regs.h"

#define IONIC_MIN_MTU ETH_MIN_MTU
#define IONIC_MAX_MTU 9194
#define IONIC_LIFS_MAX 1024

struct ionic_dev_bar {
Expand Down
15 changes: 14 additions & 1 deletion drivers/net/ethernet/pensando/ionic/ionic_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include "ionic.h"
#include "ionic_bus.h"
#include "ionic_lif.h"
#include "ionic_devlink.h"

static int ionic_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
Expand Down Expand Up @@ -72,8 +73,19 @@ int ionic_devlink_register(struct ionic *ionic)
int err;

err = devlink_register(dl, ionic->dev);
if (err)
if (err) {
dev_warn(ionic->dev, "devlink_register failed: %d\n", err);
return err;
}

devlink_port_attrs_set(&ionic->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
0, false, 0, NULL, 0);
err = devlink_port_register(dl, &ionic->dl_port, 0);
if (err)
dev_err(ionic->dev, "devlink_port_register failed: %d\n", err);
else
devlink_port_type_eth_set(&ionic->dl_port,
ionic->master_lif->netdev);

return err;
}
Expand All @@ -82,5 +94,6 @@ void ionic_devlink_unregister(struct ionic *ionic)
{
struct devlink *dl = priv_to_devlink(ionic);

devlink_port_unregister(&ionic->dl_port);
devlink_unregister(dl);
}
Loading

0 comments on commit beead69

Please sign in to comment.