Loading drivers/net/sky2.c +69 −4 Original line number Diff line number Diff line Loading @@ -4191,6 +4191,69 @@ static int __devinit pci_wake_enabled(struct pci_dev *dev) return value & PCI_PM_CTRL_PME_ENABLE; } /* * Read and parse the first part of Vital Product Data */ #define VPD_SIZE 128 #define VPD_MAGIC 0x82 static void __devinit sky2_vpd_info(struct sky2_hw *hw) { int cap = pci_find_capability(hw->pdev, PCI_CAP_ID_VPD); const u8 *p; u8 *vpd_buf = NULL; u16 len; static struct vpd_tag { char tag[2]; char *label; } vpd_tags[] = { { "PN", "Part Number" }, { "EC", "Engineering Level" }, { "MN", "Manufacturer" }, }; if (!cap) goto out; vpd_buf = kmalloc(VPD_SIZE, GFP_KERNEL); if (!vpd_buf) goto out; if (sky2_vpd_read(hw, cap, vpd_buf, 0, VPD_SIZE)) goto out; if (vpd_buf[0] != VPD_MAGIC) goto out; len = vpd_buf[1]; if (len == 0 || len > VPD_SIZE - 4) goto out; p = vpd_buf + 3; dev_info(&hw->pdev->dev, "%.*s\n", len, p); p += len; while (p < vpd_buf + VPD_SIZE - 4) { int i; if (!memcmp("RW", p, 2)) /* end marker */ break; len = p[2]; if (len > (p - vpd_buf) - 4) break; for (i = 0; i < ARRAY_SIZE(vpd_tags); i++) { if (!memcmp(vpd_tags[i].tag, p, 2)) { printk(KERN_DEBUG " %s: %.*s\n", vpd_tags[i].label, len, p + 3); break; } } p += len + 3; } out: kfree(vpd_buf); } /* This driver supports yukon2 chipset only */ static const char *sky2_name(u8 chipid, char *buf, int sz) { Loading Loading @@ -4289,13 +4352,13 @@ static int __devinit sky2_probe(struct pci_dev *pdev, if (err) goto err_out_iounmap; dev_info(&pdev->dev, "v%s addr 0x%llx irq %d Yukon-2 %s rev %d\n", DRV_VERSION, (unsigned long long)pci_resource_start(pdev, 0), pdev->irq, sky2_name(hw->chip_id, buf1, sizeof(buf1)), hw->chip_rev); dev_info(&pdev->dev, "Yukon-2 %s chip revision %d\n", sky2_name(hw->chip_id, buf1, sizeof(buf1)), hw->chip_rev); sky2_reset(hw); sky2_vpd_info(hw); dev = sky2_init_netdev(hw, 0, using_dac, wol_default); if (!dev) { err = -ENOMEM; Loading Loading @@ -4546,6 +4609,8 @@ static struct pci_driver sky2_driver = { static int __init sky2_init_module(void) { pr_info(PFX "driver version " DRV_VERSION "\n"); sky2_debug_init(); return pci_register_driver(&sky2_driver); } Loading Loading
drivers/net/sky2.c +69 −4 Original line number Diff line number Diff line Loading @@ -4191,6 +4191,69 @@ static int __devinit pci_wake_enabled(struct pci_dev *dev) return value & PCI_PM_CTRL_PME_ENABLE; } /* * Read and parse the first part of Vital Product Data */ #define VPD_SIZE 128 #define VPD_MAGIC 0x82 static void __devinit sky2_vpd_info(struct sky2_hw *hw) { int cap = pci_find_capability(hw->pdev, PCI_CAP_ID_VPD); const u8 *p; u8 *vpd_buf = NULL; u16 len; static struct vpd_tag { char tag[2]; char *label; } vpd_tags[] = { { "PN", "Part Number" }, { "EC", "Engineering Level" }, { "MN", "Manufacturer" }, }; if (!cap) goto out; vpd_buf = kmalloc(VPD_SIZE, GFP_KERNEL); if (!vpd_buf) goto out; if (sky2_vpd_read(hw, cap, vpd_buf, 0, VPD_SIZE)) goto out; if (vpd_buf[0] != VPD_MAGIC) goto out; len = vpd_buf[1]; if (len == 0 || len > VPD_SIZE - 4) goto out; p = vpd_buf + 3; dev_info(&hw->pdev->dev, "%.*s\n", len, p); p += len; while (p < vpd_buf + VPD_SIZE - 4) { int i; if (!memcmp("RW", p, 2)) /* end marker */ break; len = p[2]; if (len > (p - vpd_buf) - 4) break; for (i = 0; i < ARRAY_SIZE(vpd_tags); i++) { if (!memcmp(vpd_tags[i].tag, p, 2)) { printk(KERN_DEBUG " %s: %.*s\n", vpd_tags[i].label, len, p + 3); break; } } p += len + 3; } out: kfree(vpd_buf); } /* This driver supports yukon2 chipset only */ static const char *sky2_name(u8 chipid, char *buf, int sz) { Loading Loading @@ -4289,13 +4352,13 @@ static int __devinit sky2_probe(struct pci_dev *pdev, if (err) goto err_out_iounmap; dev_info(&pdev->dev, "v%s addr 0x%llx irq %d Yukon-2 %s rev %d\n", DRV_VERSION, (unsigned long long)pci_resource_start(pdev, 0), pdev->irq, sky2_name(hw->chip_id, buf1, sizeof(buf1)), hw->chip_rev); dev_info(&pdev->dev, "Yukon-2 %s chip revision %d\n", sky2_name(hw->chip_id, buf1, sizeof(buf1)), hw->chip_rev); sky2_reset(hw); sky2_vpd_info(hw); dev = sky2_init_netdev(hw, 0, using_dac, wol_default); if (!dev) { err = -ENOMEM; Loading Loading @@ -4546,6 +4609,8 @@ static struct pci_driver sky2_driver = { static int __init sky2_init_module(void) { pr_info(PFX "driver version " DRV_VERSION "\n"); sky2_debug_init(); return pci_register_driver(&sky2_driver); } Loading