Loading drivers/net/tc35815.c +187 −185 Original line number Diff line number Diff line Loading @@ -249,7 +249,7 @@ struct tc35815_regs { /* Int_En bit asign -------------------------------------------------------- */ #define Int_NRAbtEn 0x00000800 /* 1:Non-recoverable Abort Enable */ #define Int_TxCtlCmpEn 0x00000400 /* 1:Transmit Control Complete Enable */ #define Int_TxCtlCmpEn 0x00000400 /* 1:Transmit Ctl Complete Enable */ #define Int_DmParErrEn 0x00000200 /* 1:DMA Parity Error Enable */ #define Int_DParDEn 0x00000100 /* 1:Data Parity Error Enable */ #define Int_EarNotEn 0x00000080 /* 1:Early Notify Enable */ Loading Loading @@ -352,8 +352,10 @@ struct BDesc { /* Tuning parameters */ #define DMA_BURST_SIZE 32 #define TX_THRESHOLD 1024 #define TX_THRESHOLD_MAX 1536 /* used threshold with packet max byte for low pci transfer ability.*/ #define TX_THRESHOLD_KEEP_LIMIT 10 /* setting threshold max value when overrun error occured this count. */ /* used threshold with packet max byte for low pci transfer ability.*/ #define TX_THRESHOLD_MAX 1536 /* setting threshold max value when overrun error occured this count. */ #define TX_THRESHOLD_KEEP_LIMIT 10 /* 16 + RX_BUF_NUM * 8 + RX_FD_NUM * 16 + TX_FD_NUM * 32 <= PAGE_SIZE*FD_PAGE_NUM */ #ifdef TC35815_USE_PACKEDBUFFER Loading Loading @@ -499,7 +501,8 @@ static void* alloc_rxbuf_page(struct pci_dev *hwdev, dma_addr_t *dma_handle) void *buf; /* pci_map + pci_dma_sync will be more effective than * pci_alloc_consistent on some archs. */ if ((buf = (void *)__get_free_page(GFP_ATOMIC)) == NULL) buf = (void *)__get_free_page(GFP_ATOMIC); if (!buf) return NULL; *dma_handle = pci_map_single(hwdev, buf, PAGE_SIZE, PCI_DMA_FROMDEVICE); Loading Loading @@ -962,7 +965,6 @@ static void __devexit tc35815_remove_one (struct pci_dev *pdev) kfree(lp->mii_bus.irq); unregister_netdev(dev); free_netdev(dev); pci_set_drvdata(pdev, NULL); } Loading @@ -980,11 +982,17 @@ tc35815_init_queues(struct net_device *dev) sizeof(struct TxFD) * TX_FD_NUM > PAGE_SIZE * FD_PAGE_NUM); if ((lp->fd_buf = pci_alloc_consistent(lp->pci_dev, PAGE_SIZE * FD_PAGE_NUM, &lp->fd_buf_dma)) == 0) lp->fd_buf = pci_alloc_consistent(lp->pci_dev, PAGE_SIZE * FD_PAGE_NUM, &lp->fd_buf_dma); if (!lp->fd_buf) return -ENOMEM; for (i = 0; i < RX_BUF_NUM; i++) { #ifdef TC35815_USE_PACKEDBUFFER if ((lp->data_buf[i] = alloc_rxbuf_page(lp->pci_dev, &lp->data_buf_dma[i])) == NULL) { lp->data_buf[i] = alloc_rxbuf_page(lp->pci_dev, &lp->data_buf_dma[i]); if (!lp->data_buf[i]) { while (--i >= 0) { free_rxbuf_page(lp->pci_dev, lp->data_buf[i], Loading Loading @@ -1027,18 +1035,17 @@ tc35815_init_queues(struct net_device *dev) #endif printk("\n"); } else { for (i = 0; i < FD_PAGE_NUM; i++) { clear_page((void *)((unsigned long)lp->fd_buf + i * PAGE_SIZE)); } for (i = 0; i < FD_PAGE_NUM; i++) clear_page((void *)((unsigned long)lp->fd_buf + i * PAGE_SIZE)); } fd_addr = (unsigned long)lp->fd_buf; /* Free Descriptors (for Receive) */ lp->rfd_base = (struct RxFD *)fd_addr; fd_addr += sizeof(struct RxFD) * RX_FD_NUM; for (i = 0; i < RX_FD_NUM; i++) { for (i = 0; i < RX_FD_NUM; i++) lp->rfd_base[i].fd.FDCtl = cpu_to_le32(FD_CownsFD); } lp->rfd_cur = lp->rfd_base; lp->rfd_limit = (struct RxFD *)fd_addr - (RX_FD_RESERVE + 1); Loading Loading @@ -1366,9 +1373,9 @@ tc35815_open(struct net_device *dev) * This is used if the interrupt line can turned off (shared). * See 3c503.c for an example of selecting the IRQ at config-time. */ if (request_irq(dev->irq, &tc35815_interrupt, IRQF_SHARED, dev->name, dev)) { if (request_irq(dev->irq, &tc35815_interrupt, IRQF_SHARED, dev->name, dev)) return -EAGAIN; } tc35815_chip_reset(dev); Loading Loading @@ -2182,8 +2189,7 @@ tc35815_set_multicast_list(struct net_device *dev) struct tc35815_regs __iomem *tr = (struct tc35815_regs __iomem *)dev->base_addr; if (dev->flags&IFF_PROMISC) { if (dev->flags & IFF_PROMISC) { #ifdef WORKAROUND_100HALF_PROMISC /* With some (all?) 100MHalf HUB, controller will hang * if we enabled promiscuous mode before linkup... */ Loading @@ -2194,15 +2200,12 @@ tc35815_set_multicast_list(struct net_device *dev) #endif /* Enable promiscuous mode */ tc_writel(CAM_CompEn | CAM_BroadAcc | CAM_GroupAcc | CAM_StationAcc, &tr->CAM_Ctl); } else if((dev->flags&IFF_ALLMULTI) || dev->mc_count > CAM_ENTRY_MAX - 3) { } else if ((dev->flags & IFF_ALLMULTI) || dev->mc_count > CAM_ENTRY_MAX - 3) { /* CAM 0, 1, 20 are reserved. */ /* Disable promiscuous mode, use normal mode. */ tc_writel(CAM_CompEn | CAM_BroadAcc | CAM_GroupAcc, &tr->CAM_Ctl); } else if(dev->mc_count) { } else if (dev->mc_count) { struct dev_mc_list *cur_addr = dev->mc_list; int i; int ena_bits = CAM_Ena_Bit(CAM_ENTRY_SOURCE); Loading @@ -2218,8 +2221,7 @@ tc35815_set_multicast_list(struct net_device *dev) } tc_writel(ena_bits, &tr->CAM_Ena); tc_writel(CAM_CompEn | CAM_BroadAcc, &tr->CAM_Ctl); } else { } else { tc_writel(CAM_Ena_Bit(CAM_ENTRY_SOURCE), &tr->CAM_Ena); tc_writel(CAM_CompEn | CAM_BroadAcc, &tr->CAM_Ctl); } Loading Loading
drivers/net/tc35815.c +187 −185 Original line number Diff line number Diff line Loading @@ -249,7 +249,7 @@ struct tc35815_regs { /* Int_En bit asign -------------------------------------------------------- */ #define Int_NRAbtEn 0x00000800 /* 1:Non-recoverable Abort Enable */ #define Int_TxCtlCmpEn 0x00000400 /* 1:Transmit Control Complete Enable */ #define Int_TxCtlCmpEn 0x00000400 /* 1:Transmit Ctl Complete Enable */ #define Int_DmParErrEn 0x00000200 /* 1:DMA Parity Error Enable */ #define Int_DParDEn 0x00000100 /* 1:Data Parity Error Enable */ #define Int_EarNotEn 0x00000080 /* 1:Early Notify Enable */ Loading Loading @@ -352,8 +352,10 @@ struct BDesc { /* Tuning parameters */ #define DMA_BURST_SIZE 32 #define TX_THRESHOLD 1024 #define TX_THRESHOLD_MAX 1536 /* used threshold with packet max byte for low pci transfer ability.*/ #define TX_THRESHOLD_KEEP_LIMIT 10 /* setting threshold max value when overrun error occured this count. */ /* used threshold with packet max byte for low pci transfer ability.*/ #define TX_THRESHOLD_MAX 1536 /* setting threshold max value when overrun error occured this count. */ #define TX_THRESHOLD_KEEP_LIMIT 10 /* 16 + RX_BUF_NUM * 8 + RX_FD_NUM * 16 + TX_FD_NUM * 32 <= PAGE_SIZE*FD_PAGE_NUM */ #ifdef TC35815_USE_PACKEDBUFFER Loading Loading @@ -499,7 +501,8 @@ static void* alloc_rxbuf_page(struct pci_dev *hwdev, dma_addr_t *dma_handle) void *buf; /* pci_map + pci_dma_sync will be more effective than * pci_alloc_consistent on some archs. */ if ((buf = (void *)__get_free_page(GFP_ATOMIC)) == NULL) buf = (void *)__get_free_page(GFP_ATOMIC); if (!buf) return NULL; *dma_handle = pci_map_single(hwdev, buf, PAGE_SIZE, PCI_DMA_FROMDEVICE); Loading Loading @@ -962,7 +965,6 @@ static void __devexit tc35815_remove_one (struct pci_dev *pdev) kfree(lp->mii_bus.irq); unregister_netdev(dev); free_netdev(dev); pci_set_drvdata(pdev, NULL); } Loading @@ -980,11 +982,17 @@ tc35815_init_queues(struct net_device *dev) sizeof(struct TxFD) * TX_FD_NUM > PAGE_SIZE * FD_PAGE_NUM); if ((lp->fd_buf = pci_alloc_consistent(lp->pci_dev, PAGE_SIZE * FD_PAGE_NUM, &lp->fd_buf_dma)) == 0) lp->fd_buf = pci_alloc_consistent(lp->pci_dev, PAGE_SIZE * FD_PAGE_NUM, &lp->fd_buf_dma); if (!lp->fd_buf) return -ENOMEM; for (i = 0; i < RX_BUF_NUM; i++) { #ifdef TC35815_USE_PACKEDBUFFER if ((lp->data_buf[i] = alloc_rxbuf_page(lp->pci_dev, &lp->data_buf_dma[i])) == NULL) { lp->data_buf[i] = alloc_rxbuf_page(lp->pci_dev, &lp->data_buf_dma[i]); if (!lp->data_buf[i]) { while (--i >= 0) { free_rxbuf_page(lp->pci_dev, lp->data_buf[i], Loading Loading @@ -1027,18 +1035,17 @@ tc35815_init_queues(struct net_device *dev) #endif printk("\n"); } else { for (i = 0; i < FD_PAGE_NUM; i++) { clear_page((void *)((unsigned long)lp->fd_buf + i * PAGE_SIZE)); } for (i = 0; i < FD_PAGE_NUM; i++) clear_page((void *)((unsigned long)lp->fd_buf + i * PAGE_SIZE)); } fd_addr = (unsigned long)lp->fd_buf; /* Free Descriptors (for Receive) */ lp->rfd_base = (struct RxFD *)fd_addr; fd_addr += sizeof(struct RxFD) * RX_FD_NUM; for (i = 0; i < RX_FD_NUM; i++) { for (i = 0; i < RX_FD_NUM; i++) lp->rfd_base[i].fd.FDCtl = cpu_to_le32(FD_CownsFD); } lp->rfd_cur = lp->rfd_base; lp->rfd_limit = (struct RxFD *)fd_addr - (RX_FD_RESERVE + 1); Loading Loading @@ -1366,9 +1373,9 @@ tc35815_open(struct net_device *dev) * This is used if the interrupt line can turned off (shared). * See 3c503.c for an example of selecting the IRQ at config-time. */ if (request_irq(dev->irq, &tc35815_interrupt, IRQF_SHARED, dev->name, dev)) { if (request_irq(dev->irq, &tc35815_interrupt, IRQF_SHARED, dev->name, dev)) return -EAGAIN; } tc35815_chip_reset(dev); Loading Loading @@ -2182,8 +2189,7 @@ tc35815_set_multicast_list(struct net_device *dev) struct tc35815_regs __iomem *tr = (struct tc35815_regs __iomem *)dev->base_addr; if (dev->flags&IFF_PROMISC) { if (dev->flags & IFF_PROMISC) { #ifdef WORKAROUND_100HALF_PROMISC /* With some (all?) 100MHalf HUB, controller will hang * if we enabled promiscuous mode before linkup... */ Loading @@ -2194,15 +2200,12 @@ tc35815_set_multicast_list(struct net_device *dev) #endif /* Enable promiscuous mode */ tc_writel(CAM_CompEn | CAM_BroadAcc | CAM_GroupAcc | CAM_StationAcc, &tr->CAM_Ctl); } else if((dev->flags&IFF_ALLMULTI) || dev->mc_count > CAM_ENTRY_MAX - 3) { } else if ((dev->flags & IFF_ALLMULTI) || dev->mc_count > CAM_ENTRY_MAX - 3) { /* CAM 0, 1, 20 are reserved. */ /* Disable promiscuous mode, use normal mode. */ tc_writel(CAM_CompEn | CAM_BroadAcc | CAM_GroupAcc, &tr->CAM_Ctl); } else if(dev->mc_count) { } else if (dev->mc_count) { struct dev_mc_list *cur_addr = dev->mc_list; int i; int ena_bits = CAM_Ena_Bit(CAM_ENTRY_SOURCE); Loading @@ -2218,8 +2221,7 @@ tc35815_set_multicast_list(struct net_device *dev) } tc_writel(ena_bits, &tr->CAM_Ena); tc_writel(CAM_CompEn | CAM_BroadAcc, &tr->CAM_Ctl); } else { } else { tc_writel(CAM_Ena_Bit(CAM_ENTRY_SOURCE), &tr->CAM_Ena); tc_writel(CAM_CompEn | CAM_BroadAcc, &tr->CAM_Ctl); } Loading