Skip to content

Commit beead69

Browse files
emuslndavem330
authored andcommitted
ionic: Add the basic NDO callbacks for netdev support
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 77ceb68 commit beead69

File tree

6 files changed

+387
-2
lines changed

6 files changed

+387
-2
lines changed

drivers/net/ethernet/pensando/ionic/ionic.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ struct ionic_lif;
2828
struct ionic {
2929
struct pci_dev *pdev;
3030
struct device *dev;
31+
struct devlink_port dl_port;
3132
struct ionic_dev idev;
3233
struct mutex dev_cmd_lock; /* lock for dev_cmd operations */
3334
struct dentry *dentry;
3435
struct ionic_dev_bar bars[IONIC_BARS_MAX];
3536
unsigned int num_bars;
3637
struct ionic_identity ident;
3738
struct list_head lifs;
39+
struct ionic_lif *master_lif;
3840
unsigned int nnqs_per_lif;
3941
unsigned int neqs_per_lif;
4042
unsigned int ntxqs_per_lif;

drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,12 +206,24 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
206206
goto err_out_free_lifs;
207207
}
208208

209+
err = ionic_lifs_register(ionic);
210+
if (err) {
211+
dev_err(dev, "Cannot register LIFs: %d, aborting\n", err);
212+
goto err_out_deinit_lifs;
213+
}
214+
209215
err = ionic_devlink_register(ionic);
210-
if (err)
216+
if (err) {
211217
dev_err(dev, "Cannot register devlink: %d\n", err);
218+
goto err_out_deregister_lifs;
219+
}
212220

213221
return 0;
214222

223+
err_out_deregister_lifs:
224+
ionic_lifs_unregister(ionic);
225+
err_out_deinit_lifs:
226+
ionic_lifs_deinit(ionic);
215227
err_out_free_lifs:
216228
ionic_lifs_free(ionic);
217229
err_out_free_irqs:
@@ -246,6 +258,7 @@ static void ionic_remove(struct pci_dev *pdev)
246258
return;
247259

248260
ionic_devlink_unregister(ionic);
261+
ionic_lifs_unregister(ionic);
249262
ionic_lifs_deinit(ionic);
250263
ionic_lifs_free(ionic);
251264
ionic_bus_free_irq_vectors(ionic);

drivers/net/ethernet/pensando/ionic/ionic_dev.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#include "ionic_if.h"
1111
#include "ionic_regs.h"
1212

13+
#define IONIC_MIN_MTU ETH_MIN_MTU
14+
#define IONIC_MAX_MTU 9194
1315
#define IONIC_LIFS_MAX 1024
1416

1517
struct ionic_dev_bar {

drivers/net/ethernet/pensando/ionic/ionic_devlink.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include "ionic.h"
88
#include "ionic_bus.h"
9+
#include "ionic_lif.h"
910
#include "ionic_devlink.h"
1011

1112
static int ionic_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
@@ -72,8 +73,19 @@ int ionic_devlink_register(struct ionic *ionic)
7273
int err;
7374

7475
err = devlink_register(dl, ionic->dev);
75-
if (err)
76+
if (err) {
7677
dev_warn(ionic->dev, "devlink_register failed: %d\n", err);
78+
return err;
79+
}
80+
81+
devlink_port_attrs_set(&ionic->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
82+
0, false, 0, NULL, 0);
83+
err = devlink_port_register(dl, &ionic->dl_port, 0);
84+
if (err)
85+
dev_err(ionic->dev, "devlink_port_register failed: %d\n", err);
86+
else
87+
devlink_port_type_eth_set(&ionic->dl_port,
88+
ionic->master_lif->netdev);
7789

7890
return err;
7991
}
@@ -82,5 +94,6 @@ void ionic_devlink_unregister(struct ionic *ionic)
8294
{
8395
struct devlink *dl = priv_to_devlink(ionic);
8496

97+
devlink_port_unregister(&ionic->dl_port);
8598
devlink_unregister(dl);
8699
}

0 commit comments

Comments
 (0)