1*2c770819SKaran Tilak Kumar // SPDX-License-Identifier: GPL-2.0-only
2*2c770819SKaran Tilak Kumar /*
3*2c770819SKaran Tilak Kumar * Copyright 2008 Cisco Systems, Inc. All rights reserved.
4*2c770819SKaran Tilak Kumar * Copyright 2007 Nuova Systems, Inc. All rights reserved.
5*2c770819SKaran Tilak Kumar */
6*2c770819SKaran Tilak Kumar
7*2c770819SKaran Tilak Kumar #include <linux/module.h>
8*2c770819SKaran Tilak Kumar #include <linux/mempool.h>
9*2c770819SKaran Tilak Kumar #include <linux/string.h>
10*2c770819SKaran Tilak Kumar #include <linux/slab.h>
11*2c770819SKaran Tilak Kumar #include <linux/errno.h>
12*2c770819SKaran Tilak Kumar #include <linux/init.h>
13*2c770819SKaran Tilak Kumar #include <linux/pci.h>
14*2c770819SKaran Tilak Kumar #include <linux/interrupt.h>
15*2c770819SKaran Tilak Kumar #include <linux/irq.h>
16*2c770819SKaran Tilak Kumar #include <linux/spinlock.h>
17*2c770819SKaran Tilak Kumar #include <linux/workqueue.h>
18*2c770819SKaran Tilak Kumar #include <linux/kthread.h>
19*2c770819SKaran Tilak Kumar #include <linux/if_ether.h>
20*2c770819SKaran Tilak Kumar #include "fnic.h"
21*2c770819SKaran Tilak Kumar
22*2c770819SKaran Tilak Kumar static struct fnic_pcie_device fnic_pcie_device_table[] = {
23*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_SERENO, "Sereno", PCI_SUBDEVICE_ID_CISCO_VASONA,
24*2c770819SKaran Tilak Kumar "VIC 1280"},
25*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_SERENO, "Sereno", PCI_SUBDEVICE_ID_CISCO_COTATI,
26*2c770819SKaran Tilak Kumar "VIC 1240"},
27*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_SERENO, "Sereno",
28*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_LEXINGTON, "VIC 1225"},
29*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_SERENO, "Sereno", PCI_SUBDEVICE_ID_CISCO_ICEHOUSE,
30*2c770819SKaran Tilak Kumar "VIC 1285"},
31*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_SERENO, "Sereno",
32*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_KIRKWOODLAKE, "VIC 1225T"},
33*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_SERENO, "Sereno",
34*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_SUSANVILLE, "VIC 1227"},
35*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_SERENO, "Sereno", PCI_SUBDEVICE_ID_CISCO_TORRANCE,
36*2c770819SKaran Tilak Kumar "VIC 1227T"},
37*2c770819SKaran Tilak Kumar
38*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_CRUZ, "Cruz", PCI_SUBDEVICE_ID_CISCO_CALISTOGA,
39*2c770819SKaran Tilak Kumar "VIC 1340"},
40*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_CRUZ, "Cruz", PCI_SUBDEVICE_ID_CISCO_MOUNTAINVIEW,
41*2c770819SKaran Tilak Kumar "VIC 1380"},
42*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_CRUZ, "Cruz", PCI_SUBDEVICE_ID_CISCO_MOUNTTIAN,
43*2c770819SKaran Tilak Kumar "C3260-SIOC"},
44*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_CRUZ, "Cruz", PCI_SUBDEVICE_ID_CISCO_CLEARLAKE,
45*2c770819SKaran Tilak Kumar "VIC 1385"},
46*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_CRUZ, "Cruz", PCI_SUBDEVICE_ID_CISCO_MOUNTTIAN2,
47*2c770819SKaran Tilak Kumar "C3260-SIOC"},
48*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_CRUZ, "Cruz", PCI_SUBDEVICE_ID_CISCO_CLAREMONT,
49*2c770819SKaran Tilak Kumar "VIC 1387"},
50*2c770819SKaran Tilak Kumar
51*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega", PCI_SUBDEVICE_ID_CISCO_BRADBURY,
52*2c770819SKaran Tilak Kumar "VIC 1457"},
53*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega",
54*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_BRENTWOOD, "VIC 1455"},
55*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega",
56*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_BURLINGAME, "VIC 1487"},
57*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega", PCI_SUBDEVICE_ID_CISCO_BAYSIDE,
58*2c770819SKaran Tilak Kumar "VIC 1485"},
59*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega",
60*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_BAKERSFIELD, "VIC 1440"},
61*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega",
62*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_BOONVILLE, "VIC 1480"},
63*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega", PCI_SUBDEVICE_ID_CISCO_BENICIA,
64*2c770819SKaran Tilak Kumar "VIC 1495"},
65*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega", PCI_SUBDEVICE_ID_CISCO_BEAUMONT,
66*2c770819SKaran Tilak Kumar "VIC 1497"},
67*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega", PCI_SUBDEVICE_ID_CISCO_BRISBANE,
68*2c770819SKaran Tilak Kumar "VIC 1467"},
69*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega", PCI_SUBDEVICE_ID_CISCO_BENTON,
70*2c770819SKaran Tilak Kumar "VIC 1477"},
71*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega",
72*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_TWIN_RIVER, "VIC 14425"},
73*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BODEGA, "Bodega",
74*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_TWIN_PEAK, "VIC 14825"},
75*2c770819SKaran Tilak Kumar
76*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly", PCI_SUBDEVICE_ID_CISCO_BERN,
77*2c770819SKaran Tilak Kumar "VIC 15420"},
78*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly",
79*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_STOCKHOLM, "VIC 15428"},
80*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly", PCI_SUBDEVICE_ID_CISCO_KRAKOW,
81*2c770819SKaran Tilak Kumar "VIC 15411"},
82*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly",
83*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_LUCERNE, "VIC 15231"},
84*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly", PCI_SUBDEVICE_ID_CISCO_TURKU,
85*2c770819SKaran Tilak Kumar "VIC 15238"},
86*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly", PCI_SUBDEVICE_ID_CISCO_GENEVA,
87*2c770819SKaran Tilak Kumar "VIC 15422"},
88*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly",
89*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_HELSINKI, "VIC 15235"},
90*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly",
91*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_GOTHENBURG, "VIC 15425"},
92*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly",
93*2c770819SKaran Tilak Kumar PCI_SUBDEVICE_ID_CISCO_TURKU_PLUS, "VIC 15237"},
94*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly", PCI_SUBDEVICE_ID_CISCO_ZURICH,
95*2c770819SKaran Tilak Kumar "VIC 15230"},
96*2c770819SKaran Tilak Kumar {PCI_DEVICE_ID_CISCO_BEVERLY, "Beverly", PCI_SUBDEVICE_ID_CISCO_RIGA,
97*2c770819SKaran Tilak Kumar "VIC 15427"},
98*2c770819SKaran Tilak Kumar
99*2c770819SKaran Tilak Kumar {0,}
100*2c770819SKaran Tilak Kumar };
101*2c770819SKaran Tilak Kumar
fnic_get_desc_by_devid(struct pci_dev * pdev,char ** desc,char ** subsys_desc)102*2c770819SKaran Tilak Kumar int fnic_get_desc_by_devid(struct pci_dev *pdev, char **desc,
103*2c770819SKaran Tilak Kumar char **subsys_desc)
104*2c770819SKaran Tilak Kumar {
105*2c770819SKaran Tilak Kumar unsigned short device = PCI_DEVICE_ID_CISCO_VIC_FC;
106*2c770819SKaran Tilak Kumar int max = ARRAY_SIZE(fnic_pcie_device_table);
107*2c770819SKaran Tilak Kumar struct fnic_pcie_device *t = fnic_pcie_device_table;
108*2c770819SKaran Tilak Kumar int index = 0;
109*2c770819SKaran Tilak Kumar
110*2c770819SKaran Tilak Kumar if (pdev->device != device)
111*2c770819SKaran Tilak Kumar return 1;
112*2c770819SKaran Tilak Kumar
113*2c770819SKaran Tilak Kumar while (t->device != 0) {
114*2c770819SKaran Tilak Kumar if (memcmp
115*2c770819SKaran Tilak Kumar ((char *) &pdev->subsystem_device,
116*2c770819SKaran Tilak Kumar (char *) &t->subsystem_device, sizeof(short)) == 0)
117*2c770819SKaran Tilak Kumar break;
118*2c770819SKaran Tilak Kumar t++;
119*2c770819SKaran Tilak Kumar index++;
120*2c770819SKaran Tilak Kumar }
121*2c770819SKaran Tilak Kumar
122*2c770819SKaran Tilak Kumar if (index >= max - 1) {
123*2c770819SKaran Tilak Kumar *desc = NULL;
124*2c770819SKaran Tilak Kumar *subsys_desc = NULL;
125*2c770819SKaran Tilak Kumar return 1;
126*2c770819SKaran Tilak Kumar }
127*2c770819SKaran Tilak Kumar
128*2c770819SKaran Tilak Kumar *desc = fnic_pcie_device_table[index].desc;
129*2c770819SKaran Tilak Kumar *subsys_desc = fnic_pcie_device_table[index].subsys_desc;
130*2c770819SKaran Tilak Kumar return 0;
131*2c770819SKaran Tilak Kumar }
132