yellowfin: annotations and fixes (.24 fodder?)
pci_unmap_single() and friends getting a little-endian address... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
Родитель
51bf2976b5
Коммит
e5a3142100
|
@ -265,10 +265,10 @@ enum yellowfin_offsets {
|
|||
/* The Yellowfin Rx and Tx buffer descriptors.
|
||||
Elements are written as 32 bit for endian portability. */
|
||||
struct yellowfin_desc {
|
||||
u32 dbdma_cmd;
|
||||
u32 addr;
|
||||
u32 branch_addr;
|
||||
u32 result_status;
|
||||
__le32 dbdma_cmd;
|
||||
__le32 addr;
|
||||
__le32 branch_addr;
|
||||
__le32 result_status;
|
||||
};
|
||||
|
||||
struct tx_status_words {
|
||||
|
@ -922,7 +922,7 @@ static irqreturn_t yellowfin_interrupt(int irq, void *dev_instance)
|
|||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
/* Free the original skb. */
|
||||
pci_unmap_single(yp->pci_dev, yp->tx_ring[entry].addr,
|
||||
pci_unmap_single(yp->pci_dev, le32_to_cpu(yp->tx_ring[entry].addr),
|
||||
skb->len, PCI_DMA_TODEVICE);
|
||||
dev_kfree_skb_irq(skb);
|
||||
yp->tx_skbuff[entry] = NULL;
|
||||
|
@ -1056,13 +1056,13 @@ static int yellowfin_rx(struct net_device *dev)
|
|||
|
||||
if(!desc->result_status)
|
||||
break;
|
||||
pci_dma_sync_single_for_cpu(yp->pci_dev, desc->addr,
|
||||
pci_dma_sync_single_for_cpu(yp->pci_dev, le32_to_cpu(desc->addr),
|
||||
yp->rx_buf_sz, PCI_DMA_FROMDEVICE);
|
||||
desc_status = le32_to_cpu(desc->result_status) >> 16;
|
||||
buf_addr = rx_skb->data;
|
||||
data_size = (le32_to_cpu(desc->dbdma_cmd) -
|
||||
le32_to_cpu(desc->result_status)) & 0xffff;
|
||||
frame_status = le16_to_cpu(get_unaligned((s16*)&(buf_addr[data_size - 2])));
|
||||
frame_status = le16_to_cpu(get_unaligned((__le16*)&(buf_addr[data_size - 2])));
|
||||
if (yellowfin_debug > 4)
|
||||
printk(KERN_DEBUG " yellowfin_rx() status was %4.4x.\n",
|
||||
frame_status);
|
||||
|
@ -1123,7 +1123,7 @@ static int yellowfin_rx(struct net_device *dev)
|
|||
if (pkt_len > rx_copybreak) {
|
||||
skb_put(skb = rx_skb, pkt_len);
|
||||
pci_unmap_single(yp->pci_dev,
|
||||
yp->rx_ring[entry].addr,
|
||||
le32_to_cpu(yp->rx_ring[entry].addr),
|
||||
yp->rx_buf_sz,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
yp->rx_skbuff[entry] = NULL;
|
||||
|
@ -1134,9 +1134,10 @@ static int yellowfin_rx(struct net_device *dev)
|
|||
skb_reserve(skb, 2); /* 16 byte align the IP header */
|
||||
skb_copy_to_linear_data(skb, rx_skb->data, pkt_len);
|
||||
skb_put(skb, pkt_len);
|
||||
pci_dma_sync_single_for_device(yp->pci_dev, desc->addr,
|
||||
yp->rx_buf_sz,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
pci_dma_sync_single_for_device(yp->pci_dev,
|
||||
le32_to_cpu(desc->addr),
|
||||
yp->rx_buf_sz,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
}
|
||||
skb->protocol = eth_type_trans(skb, dev);
|
||||
netif_rx(skb);
|
||||
|
@ -1252,7 +1253,7 @@ static int yellowfin_close(struct net_device *dev)
|
|||
/* Free all the skbuffs in the Rx queue. */
|
||||
for (i = 0; i < RX_RING_SIZE; i++) {
|
||||
yp->rx_ring[i].dbdma_cmd = cpu_to_le32(CMD_STOP);
|
||||
yp->rx_ring[i].addr = 0xBADF00D0; /* An invalid address. */
|
||||
yp->rx_ring[i].addr = cpu_to_le32(0xBADF00D0); /* An invalid address. */
|
||||
if (yp->rx_skbuff[i]) {
|
||||
dev_kfree_skb(yp->rx_skbuff[i]);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче