aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ks8851.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /drivers/net/ks8851.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff)
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/ks8851.c')
-rw-r--r--drivers/net/ks8851.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/net/ks8851.c b/drivers/net/ks8851.c
index a23f739d222f..9e9f9b349766 100644
--- a/drivers/net/ks8851.c
+++ b/drivers/net/ks8851.c
@@ -1,4 +1,4 @@
1/* drivers/net/ks8651.c 1/* drivers/net/ks8851.c
2 * 2 *
3 * Copyright 2009 Simtec Electronics 3 * Copyright 2009 Simtec Electronics
4 * http://www.simtec.co.uk/ 4 * http://www.simtec.co.uk/
@@ -407,7 +407,7 @@ static irqreturn_t ks8851_irq(int irq, void *pw)
407 * @buff: The buffer address 407 * @buff: The buffer address
408 * @len: The length of the data to read 408 * @len: The length of the data to read
409 * 409 *
410 * Issue an RXQ FIFO read command and read the @len ammount of data from 410 * Issue an RXQ FIFO read command and read the @len amount of data from
411 * the FIFO into the buffer specified by @buff. 411 * the FIFO into the buffer specified by @buff.
412 */ 412 */
413static void ks8851_rdfifo(struct ks8851_net *ks, u8 *buff, unsigned len) 413static void ks8851_rdfifo(struct ks8851_net *ks, u8 *buff, unsigned len)
@@ -714,7 +714,7 @@ static void ks8851_tx_work(struct work_struct *work)
714{ 714{
715 struct ks8851_net *ks = container_of(work, struct ks8851_net, tx_work); 715 struct ks8851_net *ks = container_of(work, struct ks8851_net, tx_work);
716 struct sk_buff *txb; 716 struct sk_buff *txb;
717 bool last = false; 717 bool last = skb_queue_empty(&ks->txq);
718 718
719 mutex_lock(&ks->lock); 719 mutex_lock(&ks->lock);
720 720
@@ -722,12 +722,14 @@ static void ks8851_tx_work(struct work_struct *work)
722 txb = skb_dequeue(&ks->txq); 722 txb = skb_dequeue(&ks->txq);
723 last = skb_queue_empty(&ks->txq); 723 last = skb_queue_empty(&ks->txq);
724 724
725 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA); 725 if (txb != NULL) {
726 ks8851_wrpkt(ks, txb, last); 726 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA);
727 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr); 727 ks8851_wrpkt(ks, txb, last);
728 ks8851_wrreg16(ks, KS_TXQCR, TXQCR_METFE); 728 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);
729 ks8851_wrreg16(ks, KS_TXQCR, TXQCR_METFE);
729 730
730 ks8851_done_tx(ks, txb); 731 ks8851_done_tx(ks, txb);
732 }
731 } 733 }
732 734
733 mutex_unlock(&ks->lock); 735 mutex_unlock(&ks->lock);
@@ -965,19 +967,17 @@ static void ks8851_set_rx_mode(struct net_device *dev)
965 967
966 rxctrl.rxcr1 = (RXCR1_RXME | RXCR1_RXAE | 968 rxctrl.rxcr1 = (RXCR1_RXME | RXCR1_RXAE |
967 RXCR1_RXPAFMA | RXCR1_RXMAFMA); 969 RXCR1_RXPAFMA | RXCR1_RXMAFMA);
968 } else if (dev->flags & IFF_MULTICAST && dev->mc_count > 0) { 970 } else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) {
969 struct dev_mc_list *mcptr = dev->mc_list; 971 struct dev_mc_list *mcptr;
970 u32 crc; 972 u32 crc;
971 int i;
972 973
973 /* accept some multicast */ 974 /* accept some multicast */
974 975
975 for (i = dev->mc_count; i > 0; i--) { 976 netdev_for_each_mc_addr(mcptr, dev) {
976 crc = ether_crc(ETH_ALEN, mcptr->dmi_addr); 977 crc = ether_crc(ETH_ALEN, mcptr->dmi_addr);
977 crc >>= (32 - 6); /* get top six bits */ 978 crc >>= (32 - 6); /* get top six bits */
978 979
979 rxctrl.mchash[crc >> 4] |= (1 << (crc & 0xf)); 980 rxctrl.mchash[crc >> 4] |= (1 << (crc & 0xf));
980 mcptr = mcptr->next;
981 } 981 }
982 982
983 rxctrl.rxcr1 = RXCR1_RXME | RXCR1_RXPAFMA; 983 rxctrl.rxcr1 = RXCR1_RXME | RXCR1_RXPAFMA;