net: tn40xx: add pci driver for Tehuti Networks TN40xx chips

This just adds the scaffolding for an ethernet driver for Tehuti
Networks TN40xx chips.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Link: https://patch.msgid.link/20240623235507.108147-3-fujita.tomonori@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
FUJITA Tomonori 2024-06-24 08:55:02 +09:00 committed by Jakub Kicinski
parent eee5528890
commit ab61adc600
5 changed files with 85 additions and 1 deletions

View File

@ -22148,7 +22148,13 @@ TEHUTI ETHERNET DRIVER
M: Andy Gospodarek <andy@greyhouse.net>
L: netdev@vger.kernel.org
S: Supported
F: drivers/net/ethernet/tehuti/*
F: drivers/net/ethernet/tehuti/tehuti.*
TEHUTI TN40XX ETHERNET DRIVER
M: FUJITA Tomonori <fujita.tomonori@gmail.com>
L: netdev@vger.kernel.org
S: Maintained
F: drivers/net/ethernet/tehuti/tn40*
TELECOM CLOCK DRIVER FOR MCPL0010
M: Mark Gross <markgross@kernel.org>

View File

@ -23,4 +23,16 @@ config TEHUTI
help
Tehuti Networks 10G Ethernet NIC
config TEHUTI_TN40
tristate "Tehuti Networks TN40xx 10G Ethernet adapters"
depends on PCI
help
This driver supports 10G Ethernet adapters using Tehuti Networks
TN40xx chips. Currently, adapters with Applied Micro Circuits
Corporation QT2025 are supported; Tehuti Networks TN9310,
DLink DXE-810S, ASUS XG-C100F, and Edimax EN-9320.
To compile this driver as a module, choose M here: the module
will be called tn40xx.
endif # NET_VENDOR_TEHUTI

View File

@ -4,3 +4,6 @@
#
obj-$(CONFIG_TEHUTI) += tehuti.o
tn40xx-y := tn40.o
obj-$(CONFIG_TEHUTI_TN40) += tn40xx.o

View File

@ -0,0 +1,54 @@
// SPDX-License-Identifier: GPL-2.0+
/* Copyright (c) Tehuti Networks Ltd. */
#include <linux/pci.h>
#include "tn40.h"
static int tn40_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
int ret;
ret = pci_enable_device(pdev);
if (ret)
return ret;
ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
if (ret) {
dev_err(&pdev->dev, "failed to set DMA mask.\n");
goto err_disable_device;
}
return 0;
err_disable_device:
pci_disable_device(pdev);
return ret;
}
static void tn40_remove(struct pci_dev *pdev)
{
pci_disable_device(pdev);
}
static const struct pci_device_id tn40_id_table[] = {
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_TEHUTI, 0x4022,
PCI_VENDOR_ID_TEHUTI, 0x3015) },
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_TEHUTI, 0x4022,
PCI_VENDOR_ID_DLINK, 0x4d00) },
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_TEHUTI, 0x4022,
PCI_VENDOR_ID_ASUSTEK, 0x8709) },
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_TEHUTI, 0x4022,
PCI_VENDOR_ID_EDIMAX, 0x8103) },
{ }
};
static struct pci_driver tn40_driver = {
.name = TN40_DRV_NAME,
.id_table = tn40_id_table,
.probe = tn40_probe,
.remove = tn40_remove,
};
module_pci_driver(tn40_driver);
MODULE_DEVICE_TABLE(pci, tn40_id_table);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Tehuti Network TN40xx Driver");

View File

@ -0,0 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/* Copyright (c) Tehuti Networks Ltd. */
#ifndef _TN40_H_
#define _TN40_H_
#define TN40_DRV_NAME "tn40xx"
#endif /* _TN40XX_H */