Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/mediatek/mt76/mt7603/pci.c
48525 views
1
// SPDX-License-Identifier: ISC
2
3
#include <linux/kernel.h>
4
#include <linux/module.h>
5
#include <linux/pci.h>
6
7
#include "mt7603.h"
8
9
static const struct pci_device_id mt76pci_device_table[] = {
10
{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7603) },
11
{ },
12
};
13
14
static int
15
mt76pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
16
{
17
struct mt7603_dev *dev;
18
struct mt76_dev *mdev;
19
int ret;
20
21
ret = pcim_enable_device(pdev);
22
if (ret)
23
return ret;
24
25
ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
26
if (ret)
27
return ret;
28
29
pci_set_master(pdev);
30
31
ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
32
if (ret)
33
return ret;
34
35
mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt7603_ops,
36
&mt7603_drv_ops);
37
if (!mdev)
38
return -ENOMEM;
39
40
dev = container_of(mdev, struct mt7603_dev, mt76);
41
mt76_mmio_init(mdev, pcim_iomap_table(pdev)[0]);
42
43
mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
44
(mt76_rr(dev, MT_HW_REV) & 0xff);
45
dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
46
47
mt76_wr(dev, MT_INT_MASK_CSR, 0);
48
49
ret = devm_request_irq(mdev->dev, pdev->irq, mt7603_irq_handler,
50
IRQF_SHARED, KBUILD_MODNAME, dev);
51
if (ret)
52
goto error;
53
54
ret = mt7603_register_device(dev);
55
if (ret)
56
goto error;
57
58
return 0;
59
error:
60
mt76_free_device(&dev->mt76);
61
62
return ret;
63
}
64
65
static void
66
mt76pci_remove(struct pci_dev *pdev)
67
{
68
struct mt76_dev *mdev = pci_get_drvdata(pdev);
69
struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
70
71
mt7603_unregister_device(dev);
72
}
73
74
MODULE_DEVICE_TABLE(pci, mt76pci_device_table);
75
MODULE_FIRMWARE(MT7603_FIRMWARE_E1);
76
MODULE_FIRMWARE(MT7603_FIRMWARE_E2);
77
78
struct pci_driver mt7603_pci_driver = {
79
.name = KBUILD_MODNAME,
80
.id_table = mt76pci_device_table,
81
.probe = mt76pci_probe,
82
.remove = mt76pci_remove,
83
};
84
85