|
@@ -11,39 +11,35 @@
|
|
|
|
|
|
#include "aq_main.h"
|
|
|
#include "aq_nic.h"
|
|
|
+#include "aq_nic_internal.h"
|
|
|
#include "aq_pci_func.h"
|
|
|
#include "aq_ethtool.h"
|
|
|
-#include "hw_atl/hw_atl_a0.h"
|
|
|
-#include "hw_atl/hw_atl_b0.h"
|
|
|
|
|
|
#include <linux/netdevice.h>
|
|
|
#include <linux/module.h>
|
|
|
|
|
|
-static const struct pci_device_id aq_pci_tbl[] = {
|
|
|
- { PCI_VDEVICE(AQUANTIA, HW_ATL_DEVICE_ID_0001), },
|
|
|
- { PCI_VDEVICE(AQUANTIA, HW_ATL_DEVICE_ID_D100), },
|
|
|
- { PCI_VDEVICE(AQUANTIA, HW_ATL_DEVICE_ID_D107), },
|
|
|
- { PCI_VDEVICE(AQUANTIA, HW_ATL_DEVICE_ID_D108), },
|
|
|
- { PCI_VDEVICE(AQUANTIA, HW_ATL_DEVICE_ID_D109), },
|
|
|
- {}
|
|
|
-};
|
|
|
-
|
|
|
-MODULE_DEVICE_TABLE(pci, aq_pci_tbl);
|
|
|
-
|
|
|
MODULE_LICENSE("GPL v2");
|
|
|
MODULE_VERSION(AQ_CFG_DRV_VERSION);
|
|
|
MODULE_AUTHOR(AQ_CFG_DRV_AUTHOR);
|
|
|
MODULE_DESCRIPTION(AQ_CFG_DRV_DESC);
|
|
|
|
|
|
-static const struct aq_hw_ops *aq_pci_probe_get_hw_ops_by_id(struct pci_dev *pdev)
|
|
|
+static const struct net_device_ops aq_ndev_ops;
|
|
|
+
|
|
|
+struct net_device *aq_ndev_alloc(void)
|
|
|
{
|
|
|
- const struct aq_hw_ops *ops = NULL;
|
|
|
+ struct net_device *ndev = NULL;
|
|
|
+ struct aq_nic_s *aq_nic = NULL;
|
|
|
|
|
|
- ops = hw_atl_a0_get_ops_by_id(pdev);
|
|
|
- if (!ops)
|
|
|
- ops = hw_atl_b0_get_ops_by_id(pdev);
|
|
|
+ ndev = alloc_etherdev_mq(sizeof(struct aq_nic_s), AQ_CFG_VECS_MAX);
|
|
|
+ if (!ndev)
|
|
|
+ return NULL;
|
|
|
|
|
|
- return ops;
|
|
|
+ aq_nic = netdev_priv(ndev);
|
|
|
+ aq_nic->ndev = ndev;
|
|
|
+ ndev->netdev_ops = &aq_ndev_ops;
|
|
|
+ ndev->ethtool_ops = &aq_ethtool_ops;
|
|
|
+
|
|
|
+ return ndev;
|
|
|
}
|
|
|
|
|
|
static int aq_ndev_open(struct net_device *ndev)
|
|
@@ -170,66 +166,3 @@ static const struct net_device_ops aq_ndev_ops = {
|
|
|
.ndo_set_mac_address = aq_ndev_set_mac_address,
|
|
|
.ndo_set_features = aq_ndev_set_features
|
|
|
};
|
|
|
-
|
|
|
-static int aq_pci_probe(struct pci_dev *pdev,
|
|
|
- const struct pci_device_id *pci_id)
|
|
|
-{
|
|
|
- const struct aq_hw_ops *aq_hw_ops = NULL;
|
|
|
- struct aq_pci_func_s *aq_pci_func = NULL;
|
|
|
- int err = 0;
|
|
|
-
|
|
|
- err = pci_enable_device(pdev);
|
|
|
- if (err < 0)
|
|
|
- goto err_exit;
|
|
|
- aq_hw_ops = aq_pci_probe_get_hw_ops_by_id(pdev);
|
|
|
- aq_pci_func = aq_pci_func_alloc(aq_hw_ops, pdev,
|
|
|
- &aq_ndev_ops, &aq_ethtool_ops);
|
|
|
- if (!aq_pci_func) {
|
|
|
- err = -ENOMEM;
|
|
|
- goto err_exit;
|
|
|
- }
|
|
|
- err = aq_pci_func_init(aq_pci_func);
|
|
|
- if (err < 0)
|
|
|
- goto err_exit;
|
|
|
-
|
|
|
-err_exit:
|
|
|
- if (err < 0) {
|
|
|
- if (aq_pci_func)
|
|
|
- aq_pci_func_free(aq_pci_func);
|
|
|
- }
|
|
|
- return err;
|
|
|
-}
|
|
|
-
|
|
|
-static void aq_pci_remove(struct pci_dev *pdev)
|
|
|
-{
|
|
|
- struct aq_pci_func_s *aq_pci_func = pci_get_drvdata(pdev);
|
|
|
-
|
|
|
- aq_pci_func_deinit(aq_pci_func);
|
|
|
- aq_pci_func_free(aq_pci_func);
|
|
|
-}
|
|
|
-
|
|
|
-static int aq_pci_suspend(struct pci_dev *pdev, pm_message_t pm_msg)
|
|
|
-{
|
|
|
- struct aq_pci_func_s *aq_pci_func = pci_get_drvdata(pdev);
|
|
|
-
|
|
|
- return aq_pci_func_change_pm_state(aq_pci_func, &pm_msg);
|
|
|
-}
|
|
|
-
|
|
|
-static int aq_pci_resume(struct pci_dev *pdev)
|
|
|
-{
|
|
|
- struct aq_pci_func_s *aq_pci_func = pci_get_drvdata(pdev);
|
|
|
- pm_message_t pm_msg = PMSG_RESTORE;
|
|
|
-
|
|
|
- return aq_pci_func_change_pm_state(aq_pci_func, &pm_msg);
|
|
|
-}
|
|
|
-
|
|
|
-static struct pci_driver aq_pci_ops = {
|
|
|
- .name = AQ_CFG_DRV_NAME,
|
|
|
- .id_table = aq_pci_tbl,
|
|
|
- .probe = aq_pci_probe,
|
|
|
- .remove = aq_pci_remove,
|
|
|
- .suspend = aq_pci_suspend,
|
|
|
- .resume = aq_pci_resume,
|
|
|
-};
|
|
|
-
|
|
|
-module_pci_driver(aq_pci_ops);
|