@@ -95,9 +95,40 @@
{PCI_VENDOR_ID_INTEL, 0x152a, NT, "Intel", "82599 10 Gigabit Dual Port Backplane Controller with FCoE"},
{PCI_VENDOR_ID_INTEL, 0x1557, NT, "Intel", "82599 10 Gigabit SFI Network Controller"},
+#define UNPROG_DEVICE 0x1509
+ {PCI_VENDOR_ID_INTEL, 0x150e, NT, "Intel", "82580 Quad Gigabit Ethernet Controller (Copper)"},
+ {PCI_VENDOR_ID_INTEL, 0x150f, NT , "Intel", "82580 Quad Gigabit Ethernet Controller (Fiber)"},
+ {PCI_VENDOR_ID_INTEL, 0x1510, NT , "Intel", "82580 Quad Gigabit Ethernet Controller (Backplane)"},
+ {PCI_VENDOR_ID_INTEL, 0x1511, NT , "Intel", "82580 Quad Gigabit Ethernet Controller (Ext. PHY)"},
+ {PCI_VENDOR_ID_INTEL, 0x1511, NT , "Intel", "82580 Dual Gigabit Ethernet Controller (Copper)"},
+ {PCI_VENDOR_ID_INTEL, UNPROG_DEVICE, NT, "Intel", "Unprogrammed 82580 Quad/Dual Gigabit Ethernet Controller"},
+
{0},
};
+static int nicintel_spi_get_flash_register_offset(struct pci_dev * dev)
+{
+ switch(dev->device_id)
+ {
+ case 0x10d8:
+ case 0x10f7:
+ case 0x10f8:
+ case 0x10f9:
+ case 0x10fb:
+ case 0x10fc:
+ case 0x1517:
+ case 0x151c:
+ case 0x1529:
+ case 0x152a:
+ case 0x1557:
+ return 0x10000;
+ default:
+ break;
+ }
+ return 0;
+}
+
+
static void nicintel_request_spibus(void)
{
uint32_t tmp;
@@ -198,13 +229,9 @@
if (!io_base_addr)
return 1;
- if (dev->device_id < 0x10d8) {
- nicintel_spibar = rphysmap("Intel Gigabit NIC w/ SPI flash", io_base_addr,
+ const int flash_register_offset = nicintel_spi_get_flash_register_offset(dev);
+ nicintel_spibar = rphysmap("Intel 10 Gigabit NIC w/ SPI flash", io_base_addr + flash_register_offset,
MEMMAP_SIZE);
- } else {
- nicintel_spibar = rphysmap("Intel 10 Gigabit NIC w/ SPI flash", io_base_addr + 0x10000,
- MEMMAP_SIZE);
- }
if (nicintel_spibar == ERROR_PTR)
return 1;