diff options
Diffstat (limited to 'drivers/net/sk98lin/skge.c')
-rw-r--r-- | drivers/net/sk98lin/skge.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c index 9a879530ef6d..87bfe4c24a77 100644 --- a/drivers/net/sk98lin/skge.c +++ b/drivers/net/sk98lin/skge.c | |||
@@ -4899,15 +4899,17 @@ static int __devinit skge_probe_one(struct pci_dev *pdev, | |||
4899 | 4899 | ||
4900 | boards_found++; | 4900 | boards_found++; |
4901 | 4901 | ||
4902 | pci_set_drvdata(pdev, dev); | ||
4903 | |||
4902 | /* More then one port found */ | 4904 | /* More then one port found */ |
4903 | if ((pAC->GIni.GIMacsFound == 2 ) && (pAC->RlmtNets == 2)) { | 4905 | if ((pAC->GIni.GIMacsFound == 2 ) && (pAC->RlmtNets == 2)) { |
4904 | if ((dev = alloc_etherdev(sizeof(DEV_NET))) == 0) { | 4906 | dev = alloc_etherdev(sizeof(DEV_NET)); |
4905 | printk(KERN_ERR "Unable to allocate etherdev " | 4907 | if (!dev) { |
4908 | printk(KERN_ERR "sk98lin: unable to allocate etherdev " | ||
4906 | "structure!\n"); | 4909 | "structure!\n"); |
4907 | goto out; | 4910 | goto single_port; |
4908 | } | 4911 | } |
4909 | 4912 | ||
4910 | pAC->dev[1] = dev; | ||
4911 | pNet = netdev_priv(dev); | 4913 | pNet = netdev_priv(dev); |
4912 | pNet->PortNr = 1; | 4914 | pNet->PortNr = 1; |
4913 | pNet->NetNr = 1; | 4915 | pNet->NetNr = 1; |
@@ -4939,20 +4941,25 @@ static int __devinit skge_probe_one(struct pci_dev *pdev, | |||
4939 | if (using_dac) | 4941 | if (using_dac) |
4940 | dev->features |= NETIF_F_HIGHDMA; | 4942 | dev->features |= NETIF_F_HIGHDMA; |
4941 | 4943 | ||
4942 | if (register_netdev(dev)) { | 4944 | error = register_netdev(dev); |
4943 | printk(KERN_ERR "sk98lin: Could not register device for seconf port.\n"); | 4945 | if (error) { |
4946 | printk(KERN_ERR "sk98lin: Could not register device" | ||
4947 | " for second port. (%d)\n", error); | ||
4944 | free_netdev(dev); | 4948 | free_netdev(dev); |
4945 | pAC->dev[1] = pAC->dev[0]; | 4949 | goto single_port; |
4946 | } else { | ||
4947 | memcpy(&dev->dev_addr, | ||
4948 | &pAC->Addr.Net[1].CurrentMacAddress, 6); | ||
4949 | memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); | ||
4950 | |||
4951 | printk("%s: %s\n", dev->name, DeviceStr); | ||
4952 | printk(" PrefPort:B RlmtMode:Dual Check Link State\n"); | ||
4953 | } | 4950 | } |
4951 | |||
4952 | pAC->dev[1] = dev; | ||
4953 | memcpy(&dev->dev_addr, | ||
4954 | &pAC->Addr.Net[1].CurrentMacAddress, 6); | ||
4955 | memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); | ||
4956 | |||
4957 | printk("%s: %s\n", dev->name, DeviceStr); | ||
4958 | printk(" PrefPort:B RlmtMode:Dual Check Link State\n"); | ||
4954 | } | 4959 | } |
4955 | 4960 | ||
4961 | single_port: | ||
4962 | |||
4956 | /* Save the hardware revision */ | 4963 | /* Save the hardware revision */ |
4957 | pAC->HWRevision = (((pAC->GIni.GIPciHwRev >> 4) & 0x0F)*10) + | 4964 | pAC->HWRevision = (((pAC->GIni.GIPciHwRev >> 4) & 0x0F)*10) + |
4958 | (pAC->GIni.GIPciHwRev & 0x0F); | 4965 | (pAC->GIni.GIPciHwRev & 0x0F); |
@@ -4964,7 +4971,6 @@ static int __devinit skge_probe_one(struct pci_dev *pdev, | |||
4964 | memset(&pAC->PnmiBackup, 0, sizeof(SK_PNMI_STRUCT_DATA)); | 4971 | memset(&pAC->PnmiBackup, 0, sizeof(SK_PNMI_STRUCT_DATA)); |
4965 | memcpy(&pAC->PnmiBackup, &pAC->PnmiStruct, sizeof(SK_PNMI_STRUCT_DATA)); | 4972 | memcpy(&pAC->PnmiBackup, &pAC->PnmiStruct, sizeof(SK_PNMI_STRUCT_DATA)); |
4966 | 4973 | ||
4967 | pci_set_drvdata(pdev, dev); | ||
4968 | return 0; | 4974 | return 0; |
4969 | 4975 | ||
4970 | out_free_resources: | 4976 | out_free_resources: |