1df69ba43SShannon Nelson // SPDX-License-Identifier: GPL-2.0 2df69ba43SShannon Nelson /* Copyright(c) 2017 - 2019 Pensando Systems, Inc */ 3df69ba43SShannon Nelson 4df69ba43SShannon Nelson #include <linux/module.h> 5df69ba43SShannon Nelson #include <linux/netdevice.h> 6df69ba43SShannon Nelson #include <linux/etherdevice.h> 7df69ba43SShannon Nelson #include <linux/pci.h> 8df69ba43SShannon Nelson 9df69ba43SShannon Nelson #include "ionic.h" 10df69ba43SShannon Nelson #include "ionic_bus.h" 11df69ba43SShannon Nelson 12df69ba43SShannon Nelson /* Supported devices */ 13df69ba43SShannon Nelson static const struct pci_device_id ionic_id_table[] = { 14df69ba43SShannon Nelson { PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_PF) }, 15df69ba43SShannon Nelson { PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_VF) }, 16df69ba43SShannon Nelson { 0, } /* end of table */ 17df69ba43SShannon Nelson }; 18df69ba43SShannon Nelson MODULE_DEVICE_TABLE(pci, ionic_id_table); 19df69ba43SShannon Nelson 20df69ba43SShannon Nelson static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) 21df69ba43SShannon Nelson { 22df69ba43SShannon Nelson struct device *dev = &pdev->dev; 23df69ba43SShannon Nelson struct ionic *ionic; 24df69ba43SShannon Nelson 25df69ba43SShannon Nelson ionic = ionic_devlink_alloc(dev); 26df69ba43SShannon Nelson if (!ionic) 27df69ba43SShannon Nelson return -ENOMEM; 28df69ba43SShannon Nelson 29df69ba43SShannon Nelson ionic->pdev = pdev; 30df69ba43SShannon Nelson ionic->dev = dev; 31df69ba43SShannon Nelson pci_set_drvdata(pdev, ionic); 32df69ba43SShannon Nelson 33df69ba43SShannon Nelson return 0; 34df69ba43SShannon Nelson } 35df69ba43SShannon Nelson 36df69ba43SShannon Nelson static void ionic_remove(struct pci_dev *pdev) 37df69ba43SShannon Nelson { 38df69ba43SShannon Nelson struct ionic *ionic = pci_get_drvdata(pdev); 39df69ba43SShannon Nelson 40df69ba43SShannon Nelson ionic_devlink_free(ionic); 41df69ba43SShannon Nelson } 42df69ba43SShannon Nelson 43df69ba43SShannon Nelson static struct pci_driver ionic_driver = { 44df69ba43SShannon Nelson .name = IONIC_DRV_NAME, 45df69ba43SShannon Nelson .id_table = ionic_id_table, 46df69ba43SShannon Nelson .probe = ionic_probe, 47df69ba43SShannon Nelson .remove = ionic_remove, 48df69ba43SShannon Nelson }; 49df69ba43SShannon Nelson 50df69ba43SShannon Nelson int ionic_bus_register_driver(void) 51df69ba43SShannon Nelson { 52df69ba43SShannon Nelson return pci_register_driver(&ionic_driver); 53df69ba43SShannon Nelson } 54df69ba43SShannon Nelson 55df69ba43SShannon Nelson void ionic_bus_unregister_driver(void) 56df69ba43SShannon Nelson { 57df69ba43SShannon Nelson pci_unregister_driver(&ionic_driver); 58df69ba43SShannon Nelson } 59