Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dscc4 endian fixes

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by

Al Viro and committed by
Jeff Garzik
409cd63e 5f490c96

+49 -45
+49 -45
drivers/net/wan/dscc4.c
··· 139 139 }; 140 140 141 141 struct TxFD { 142 - u32 state; 143 - u32 next; 144 - u32 data; 145 - u32 complete; 142 + __le32 state; 143 + __le32 next; 144 + __le32 data; 145 + __le32 complete; 146 146 u32 jiffies; /* Allows sizeof(TxFD) == sizeof(RxFD) + extra hack */ 147 + /* FWIW, datasheet calls that "dummy" and says that card 148 + * never looks at it; neither does the driver */ 147 149 }; 148 150 149 151 struct RxFD { 150 - u32 state1; 151 - u32 next; 152 - u32 data; 153 - u32 state2; 154 - u32 end; 152 + __le32 state1; 153 + __le32 next; 154 + __le32 data; 155 + __le32 state2; 156 + __le32 end; 155 157 }; 156 158 157 159 #define DUMMY_SKB_SIZE 64 ··· 183 181 #define SCC_REG_START(dpriv) (SCC_START+(dpriv->dev_id)*SCC_OFFSET) 184 182 185 183 struct dscc4_pci_priv { 186 - u32 *iqcfg; 184 + __le32 *iqcfg; 187 185 int cfg_cur; 188 186 spinlock_t lock; 189 187 struct pci_dev *pdev; ··· 199 197 200 198 struct RxFD *rx_fd; 201 199 struct TxFD *tx_fd; 202 - u32 *iqrx; 203 - u32 *iqtx; 200 + __le32 *iqrx; 201 + __le32 *iqtx; 204 202 205 203 /* FIXME: check all the volatile are required */ 206 204 volatile u32 tx_current; ··· 300 298 #define BrrExpMask 0x00000f00 301 299 #define BrrMultMask 0x0000003f 302 300 #define EncodingMask 0x00700000 303 - #define Hold 0x40000000 301 + #define Hold cpu_to_le32(0x40000000) 304 302 #define SccBusy 0x10000000 305 303 #define PowerUp 0x80000000 306 304 #define Vis 0x00001000 ··· 309 307 #define FrameRdo 0x40 310 308 #define FrameCrc 0x20 311 309 #define FrameRab 0x10 312 - #define FrameAborted 0x00000200 313 - #define FrameEnd 0x80000000 314 - #define DataComplete 0x40000000 310 + #define FrameAborted cpu_to_le32(0x00000200) 311 + #define FrameEnd cpu_to_le32(0x80000000) 312 + #define DataComplete cpu_to_le32(0x40000000) 315 313 #define LengthCheck 0x00008000 316 314 #define SccEvt 0x02000000 317 315 #define NoAck 0x00000200 318 316 #define Action 0x00000001 319 - #define HiDesc 0x20000000 317 + #define HiDesc cpu_to_le32(0x20000000) 320 318 321 319 /* SCC events */ 322 320 #define RxEvt 0xf0000000 ··· 491 489 skbuff = dpriv->tx_skbuff; 492 490 for (i = 0; i < TX_RING_SIZE; i++) { 493 491 if (*skbuff) { 494 - pci_unmap_single(pdev, tx_fd->data, (*skbuff)->len, 495 - PCI_DMA_TODEVICE); 492 + pci_unmap_single(pdev, le32_to_cpu(tx_fd->data), 493 + (*skbuff)->len, PCI_DMA_TODEVICE); 496 494 dev_kfree_skb(*skbuff); 497 495 } 498 496 skbuff++; ··· 502 500 skbuff = dpriv->rx_skbuff; 503 501 for (i = 0; i < RX_RING_SIZE; i++) { 504 502 if (*skbuff) { 505 - pci_unmap_single(pdev, rx_fd->data, 503 + pci_unmap_single(pdev, le32_to_cpu(rx_fd->data), 506 504 RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE); 507 505 dev_kfree_skb(*skbuff); 508 506 } ··· 524 522 dpriv->rx_skbuff[dirty] = skb; 525 523 if (skb) { 526 524 skb->protocol = hdlc_type_trans(skb, dev); 527 - rx_fd->data = pci_map_single(dpriv->pci_priv->pdev, skb->data, 528 - len, PCI_DMA_FROMDEVICE); 525 + rx_fd->data = cpu_to_le32(pci_map_single(dpriv->pci_priv->pdev, 526 + skb->data, len, PCI_DMA_FROMDEVICE)); 529 527 } else { 530 - rx_fd->data = (u32) NULL; 528 + rx_fd->data = 0; 531 529 ret = -1; 532 530 } 533 531 return ret; ··· 589 587 590 588 do { 591 589 if (!(dpriv->flags & (NeedIDR | NeedIDT)) || 592 - (dpriv->iqtx[cur] & Xpr)) 590 + (dpriv->iqtx[cur] & cpu_to_le32(Xpr))) 593 591 break; 594 592 smp_rmb(); 595 593 schedule_timeout_uninterruptible(10); ··· 652 650 printk(KERN_DEBUG "%s: skb=0 (%s)\n", dev->name, __FUNCTION__); 653 651 goto refill; 654 652 } 655 - pkt_len = TO_SIZE(rx_fd->state2); 656 - pci_unmap_single(pdev, rx_fd->data, RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE); 653 + pkt_len = TO_SIZE(le32_to_cpu(rx_fd->state2)); 654 + pci_unmap_single(pdev, le32_to_cpu(rx_fd->data), 655 + RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE); 657 656 if ((skb->data[--pkt_len] & FrameOk) == FrameOk) { 658 657 stats->rx_packets++; 659 658 stats->rx_bytes += pkt_len; ··· 682 679 } 683 680 dscc4_rx_update(dpriv, dev); 684 681 rx_fd->state2 = 0x00000000; 685 - rx_fd->end = 0xbabeface; 682 + rx_fd->end = cpu_to_le32(0xbabeface); 686 683 } 687 684 688 685 static void dscc4_free1(struct pci_dev *pdev) ··· 775 772 } 776 773 /* Global interrupt queue */ 777 774 writel((u32)(((IRQ_RING_SIZE >> 5) - 1) << 20), ioaddr + IQLENR1); 778 - priv->iqcfg = (u32 *) pci_alloc_consistent(pdev, 779 - IRQ_RING_SIZE*sizeof(u32), &priv->iqcfg_dma); 775 + priv->iqcfg = (__le32 *) pci_alloc_consistent(pdev, 776 + IRQ_RING_SIZE*sizeof(__le32), &priv->iqcfg_dma); 780 777 if (!priv->iqcfg) 781 778 goto err_free_irq_5; 782 779 writel(priv->iqcfg_dma, ioaddr + IQCFG); ··· 789 786 */ 790 787 for (i = 0; i < dev_per_card; i++) { 791 788 dpriv = priv->root + i; 792 - dpriv->iqtx = (u32 *) pci_alloc_consistent(pdev, 789 + dpriv->iqtx = (__le32 *) pci_alloc_consistent(pdev, 793 790 IRQ_RING_SIZE*sizeof(u32), &dpriv->iqtx_dma); 794 791 if (!dpriv->iqtx) 795 792 goto err_free_iqtx_6; ··· 797 794 } 798 795 for (i = 0; i < dev_per_card; i++) { 799 796 dpriv = priv->root + i; 800 - dpriv->iqrx = (u32 *) pci_alloc_consistent(pdev, 797 + dpriv->iqrx = (__le32 *) pci_alloc_consistent(pdev, 801 798 IRQ_RING_SIZE*sizeof(u32), &dpriv->iqrx_dma); 802 799 if (!dpriv->iqrx) 803 800 goto err_free_iqrx_7; ··· 1159 1156 dpriv->tx_skbuff[next] = skb; 1160 1157 tx_fd = dpriv->tx_fd + next; 1161 1158 tx_fd->state = FrameEnd | TO_STATE_TX(skb->len); 1162 - tx_fd->data = pci_map_single(ppriv->pdev, skb->data, skb->len, 1163 - PCI_DMA_TODEVICE); 1159 + tx_fd->data = cpu_to_le32(pci_map_single(ppriv->pdev, skb->data, skb->len, 1160 + PCI_DMA_TODEVICE)); 1164 1161 tx_fd->complete = 0x00000000; 1165 1162 tx_fd->jiffies = jiffies; 1166 1163 mb(); ··· 1511 1508 if (state & Cfg) { 1512 1509 if (debug > 0) 1513 1510 printk(KERN_DEBUG "%s: CfgIV\n", DRV_NAME); 1514 - if (priv->iqcfg[priv->cfg_cur++%IRQ_RING_SIZE] & Arf) 1511 + if (priv->iqcfg[priv->cfg_cur++%IRQ_RING_SIZE] & cpu_to_le32(Arf)) 1515 1512 printk(KERN_ERR "%s: %s failed\n", dev->name, "CFG"); 1516 1513 if (!(state &= ~Cfg)) 1517 1514 goto out; ··· 1544 1541 1545 1542 try: 1546 1543 cur = dpriv->iqtx_current%IRQ_RING_SIZE; 1547 - state = dpriv->iqtx[cur]; 1544 + state = le32_to_cpu(dpriv->iqtx[cur]); 1548 1545 if (!state) { 1549 1546 if (debug > 4) 1550 1547 printk(KERN_DEBUG "%s: Tx ISR = 0x%08x\n", dev->name, ··· 1583 1580 tx_fd = dpriv->tx_fd + cur; 1584 1581 skb = dpriv->tx_skbuff[cur]; 1585 1582 if (skb) { 1586 - pci_unmap_single(ppriv->pdev, tx_fd->data, 1583 + pci_unmap_single(ppriv->pdev, le32_to_cpu(tx_fd->data), 1587 1584 skb->len, PCI_DMA_TODEVICE); 1588 1585 if (tx_fd->state & FrameEnd) { 1589 1586 stats->tx_packets++; ··· 1714 1711 1715 1712 try: 1716 1713 cur = dpriv->iqrx_current%IRQ_RING_SIZE; 1717 - state = dpriv->iqrx[cur]; 1714 + state = le32_to_cpu(dpriv->iqrx[cur]); 1718 1715 if (!state) 1719 1716 return; 1720 1717 dpriv->iqrx[cur] = 0; ··· 1758 1755 goto try; 1759 1756 rx_fd->state1 &= ~Hold; 1760 1757 rx_fd->state2 = 0x00000000; 1761 - rx_fd->end = 0xbabeface; 1758 + rx_fd->end = cpu_to_le32(0xbabeface); 1762 1759 //} 1763 1760 goto try; 1764 1761 } ··· 1837 1834 hdlc_stats(dev)->rx_over_errors++; 1838 1835 rx_fd->state1 |= Hold; 1839 1836 rx_fd->state2 = 0x00000000; 1840 - rx_fd->end = 0xbabeface; 1837 + rx_fd->end = cpu_to_le32(0xbabeface); 1841 1838 } else 1842 1839 dscc4_rx_skb(dpriv, dev); 1843 1840 } while (1); ··· 1907 1904 skb_copy_to_linear_data(skb, version, 1908 1905 strlen(version) % DUMMY_SKB_SIZE); 1909 1906 tx_fd->state = FrameEnd | TO_STATE_TX(DUMMY_SKB_SIZE); 1910 - tx_fd->data = pci_map_single(dpriv->pci_priv->pdev, skb->data, 1911 - DUMMY_SKB_SIZE, PCI_DMA_TODEVICE); 1907 + tx_fd->data = cpu_to_le32(pci_map_single(dpriv->pci_priv->pdev, 1908 + skb->data, DUMMY_SKB_SIZE, 1909 + PCI_DMA_TODEVICE)); 1912 1910 dpriv->tx_skbuff[last] = skb; 1913 1911 } 1914 1912 return skb; ··· 1941 1937 tx_fd->state = FrameEnd | TO_STATE_TX(2*DUMMY_SKB_SIZE); 1942 1938 tx_fd->complete = 0x00000000; 1943 1939 /* FIXME: NULL should be ok - to be tried */ 1944 - tx_fd->data = dpriv->tx_fd_dma; 1945 - (tx_fd++)->next = (u32)(dpriv->tx_fd_dma + 1940 + tx_fd->data = cpu_to_le32(dpriv->tx_fd_dma); 1941 + (tx_fd++)->next = cpu_to_le32(dpriv->tx_fd_dma + 1946 1942 (++i%TX_RING_SIZE)*sizeof(*tx_fd)); 1947 1943 } while (i < TX_RING_SIZE); 1948 1944 ··· 1955 1951 /* size set by the host. Multiple of 4 bytes please */ 1956 1952 rx_fd->state1 = HiDesc; 1957 1953 rx_fd->state2 = 0x00000000; 1958 - rx_fd->end = 0xbabeface; 1954 + rx_fd->end = cpu_to_le32(0xbabeface); 1959 1955 rx_fd->state1 |= TO_STATE_RX(HDLC_MAX_MRU); 1960 1956 // FIXME: return value verifiee mais traitement suspect 1961 1957 if (try_get_rx_skb(dpriv, dev) >= 0) 1962 1958 dpriv->rx_dirty++; 1963 - (rx_fd++)->next = (u32)(dpriv->rx_fd_dma + 1959 + (rx_fd++)->next = cpu_to_le32(dpriv->rx_fd_dma + 1964 1960 (++i%RX_RING_SIZE)*sizeof(*rx_fd)); 1965 1961 } while (i < RX_RING_SIZE); 1966 1962