/* spider_net_probe initializes pdev and registers a net_device structure for it. After that, the device can be ifconfig'ed up  */
static int __devinit spider_net_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
/* spider_net_probe initializes pdev and registers a net_device structure for it. After that, the device can be ifconfig'ed up  */
static int __devinit spider_net_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
	int err = -EIO;
	struct spider_net_card *card;
	card = spider_net_setup_pci_dev(pdev);
	if (!card)
		goto out;
	spider_net_workaround_rxramfull(card);
	spider_net_init_card(card);
	err = spider_net_setup_phy(card);
	if (err)
		goto out_undo_pci;
	err = spider_net_setup_netdev(card);
	if (err)
		goto out_undo_pci;
	return 0;
out_undo_pci:
	spider_net_undo_pci_setup(card);
	free_netdev(card->netdev);
out:
	return err;
}