示例#1
0
static void ResetAdapter(struct s_smc *smc)
{

	pr_debug(KERN_INFO "[fddi: ResetAdapter]\n");

	

	card_stop(smc);		

	
	mac_drv_clear_tx_queue(smc);
	mac_drv_clear_rx_queue(smc);

	

	smt_reset_defaults(smc, 1);	

	init_smt(smc, (smc->os.dev)->dev_addr);	

	smt_online(smc, 1);	
	STI_FBI();

	
	skfp_ctl_set_multicast_list_wo_lock(smc->os.dev);
}				
示例#2
0
static int skfp_close(struct net_device *dev)
{
	struct s_smc *smc = netdev_priv(dev);
	skfddi_priv *bp = &smc->os;

	CLI_FBI();
	smt_reset_defaults(smc, 1);
	card_stop(smc);
	mac_drv_clear_tx_queue(smc);
	mac_drv_clear_rx_queue(smc);

	netif_stop_queue(dev);
	
	free_irq(dev->irq, dev);

	skb_queue_purge(&bp->SendSkbQueue);
	bp->QueueSkb = MAX_TX_QUEUE_LEN;

	return (0);
}				
示例#3
0
static  int skfp_driver_init(struct net_device *dev)
{
	struct s_smc *smc = netdev_priv(dev);
	skfddi_priv *bp = &smc->os;
	int err = -EIO;

	pr_debug(KERN_INFO "entering skfp_driver_init\n");

	
	bp->base_addr = dev->base_addr;

	
	smc->hw.irq = dev->irq;

	spin_lock_init(&bp->DriverLock);
	
	
	bp->LocalRxBuffer = pci_alloc_consistent(&bp->pdev, MAX_FRAME_SIZE, &bp->LocalRxBufferDMA);
	if (!bp->LocalRxBuffer) {
		printk("could not allocate mem for ");
		printk("LocalRxBuffer: %d byte\n", MAX_FRAME_SIZE);
		goto fail;
	}

	
	bp->SharedMemSize = mac_drv_check_space();
	pr_debug(KERN_INFO "Memory for HWM: %ld\n", bp->SharedMemSize);
	if (bp->SharedMemSize > 0) {
		bp->SharedMemSize += 16;	

		bp->SharedMemAddr = pci_alloc_consistent(&bp->pdev,
							 bp->SharedMemSize,
							 &bp->SharedMemDMA);
		if (!bp->SharedMemSize) {
			printk("could not allocate mem for ");
			printk("hardware module: %ld byte\n",
			       bp->SharedMemSize);
			goto fail;
		}
		bp->SharedMemHeap = 0;	

	} else {
		bp->SharedMemAddr = NULL;
		bp->SharedMemHeap = 0;
	}			

	memset(bp->SharedMemAddr, 0, bp->SharedMemSize);

	card_stop(smc);		

	pr_debug(KERN_INFO "mac_drv_init()..\n");
	if (mac_drv_init(smc) != 0) {
		pr_debug(KERN_INFO "mac_drv_init() failed.\n");
		goto fail;
	}
	read_address(smc, NULL);
	pr_debug(KERN_INFO "HW-Addr: %02x %02x %02x %02x %02x %02x\n",
	       smc->hw.fddi_canon_addr.a[0],
	       smc->hw.fddi_canon_addr.a[1],
	       smc->hw.fddi_canon_addr.a[2],
	       smc->hw.fddi_canon_addr.a[3],
	       smc->hw.fddi_canon_addr.a[4],
	       smc->hw.fddi_canon_addr.a[5]);
	memcpy(dev->dev_addr, smc->hw.fddi_canon_addr.a, 6);

	smt_reset_defaults(smc, 0);

	return (0);

fail:
	if (bp->SharedMemAddr) {
		pci_free_consistent(&bp->pdev,
				    bp->SharedMemSize,
				    bp->SharedMemAddr,
				    bp->SharedMemDMA);
		bp->SharedMemAddr = NULL;
	}
	if (bp->LocalRxBuffer) {
		pci_free_consistent(&bp->pdev, MAX_FRAME_SIZE,
				    bp->LocalRxBuffer, bp->LocalRxBufferDMA);
		bp->LocalRxBuffer = NULL;
	}
	return err;
}				
示例#4
0
void smt_set_defaults(struct s_smc *smc)
{
	smt_reset_defaults(smc,0) ;
}