diff options
Diffstat (limited to 'drivers/net/fddi/defza.c')
-rw-r--r-- | drivers/net/fddi/defza.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/drivers/net/fddi/defza.c b/drivers/net/fddi/defza.c index 7d01b70f7ed8..3b7f10a5f06a 100644 --- a/drivers/net/fddi/defza.c +++ b/drivers/net/fddi/defza.c | |||
@@ -797,11 +797,40 @@ static void fza_tx_smt(struct net_device *dev) | |||
797 | smt_tx_ptr = fp->mmio + readl_u(&fp->ring_smt_tx[i].buffer); | 797 | smt_tx_ptr = fp->mmio + readl_u(&fp->ring_smt_tx[i].buffer); |
798 | len = readl_u(&fp->ring_smt_tx[i].rmc) & FZA_RING_PBC_MASK; | 798 | len = readl_u(&fp->ring_smt_tx[i].rmc) & FZA_RING_PBC_MASK; |
799 | 799 | ||
800 | /* Queue the frame to the RMC transmit ring. */ | 800 | if (!netif_queue_stopped(dev)) { |
801 | if (!netif_queue_stopped(dev)) | 801 | if (dev_nit_active(dev)) { |
802 | struct sk_buff *skb; | ||
803 | |||
804 | /* Length must be a multiple of 4 as only word | ||
805 | * reads are permitted! | ||
806 | */ | ||
807 | skb = fza_alloc_skb_irq(dev, (len + 3) & ~3); | ||
808 | if (!skb) | ||
809 | goto err_no_skb; /* Drop. */ | ||
810 | |||
811 | skb_data_ptr = (struct fza_buffer_tx *) | ||
812 | skb->data; | ||
813 | |||
814 | fza_reads(smt_tx_ptr, skb_data_ptr, | ||
815 | (len + 3) & ~3); | ||
816 | skb->dev = dev; | ||
817 | skb_reserve(skb, 3); /* Skip over PRH. */ | ||
818 | skb_put(skb, len - 3); | ||
819 | skb_reset_network_header(skb); | ||
820 | |||
821 | dev_queue_xmit_nit(skb, dev); | ||
822 | |||
823 | dev_kfree_skb_irq(skb); | ||
824 | |||
825 | err_no_skb: | ||
826 | ; | ||
827 | } | ||
828 | |||
829 | /* Queue the frame to the RMC transmit ring. */ | ||
802 | fza_do_xmit((union fza_buffer_txp) | 830 | fza_do_xmit((union fza_buffer_txp) |
803 | { .mmio_ptr = smt_tx_ptr }, | 831 | { .mmio_ptr = smt_tx_ptr }, |
804 | len, dev, 1); | 832 | len, dev, 1); |
833 | } | ||
805 | 834 | ||
806 | writel_o(FZA_RING_OWN_FZA, &fp->ring_smt_tx[i].own); | 835 | writel_o(FZA_RING_OWN_FZA, &fp->ring_smt_tx[i].own); |
807 | fp->ring_smt_tx_index = | 836 | fp->ring_smt_tx_index = |