From: James S. <jsi...@us...> - 2002-02-05 18:53:46
|
Update of /cvsroot/linux-mips/linux/drivers/net In directory usw-pr-cvs1:/tmp/cvs-serv3054 Modified Files: ioc3-eth.c Log Message: Start of merging SNIA modifications for the IOC3 driver. Implement byteorder swapping for accesses to the ring entries. Index: ioc3-eth.c =================================================================== RCS file: /cvsroot/linux-mips/linux/drivers/net/ioc3-eth.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- ioc3-eth.c 2001/11/06 09:10:21 1.6 +++ ioc3-eth.c 2002/02/05 17:05:28 1.7 @@ -434,10 +434,10 @@ skb = ip->rx_skbs[rx_entry]; rxb = (struct ioc3_erxbuf *) (skb->data - RX_OFFSET); - w0 = rxb->w0; + w0 = be32_to_cpu(rxb->w0); while (w0 & ERXBUF_V) { - err = rxb->err; /* It's valid ... */ + err = be32_to_cpu(rxb->err); /* It's valid ... */ if (err & ERXBUF_GOODPKT) { len = ((w0 >> ERXBUF_BYTECNT_SHIFT) & 0x7ff) - 4; skb_trim(skb, len); @@ -478,8 +478,8 @@ ip->stats.rx_frame_errors++; next: ip->rx_skbs[n_entry] = new_skb; - rxr[n_entry] = (0xa5UL << 56) | - ((unsigned long) rxb & TO_PHYS_MASK); + rxr[n_entry] = cpu_to_be32((0xa5UL << 56) | + ((unsigned long) rxb & TO_PHYS_MASK)); rxb->w0 = 0; /* Clear valid flag */ n_entry = (n_entry + 1) & 511; /* Update erpir */ @@ -487,7 +487,7 @@ rx_entry = (rx_entry + 1) & 511; skb = ip->rx_skbs[rx_entry]; rxb = (struct ioc3_erxbuf *) (skb->data - RX_OFFSET); - w0 = rxb->w0; + w0 = be32_to_cpu(rxb->w0); } ioc3->erpir = (n_entry << 3) | ERPIR_ARM; ip->rx_pi = n_entry; @@ -1189,8 +1189,8 @@ /* Because we reserve afterwards. */ skb_put(skb, (1664 + RX_OFFSET)); rxb = (struct ioc3_erxbuf *) skb->data; - rxr[i] = (0xa5UL << 56) - | ((unsigned long) rxb & TO_PHYS_MASK); + rxr[i] = cpu_to_be64((0xa5UL << 56) | + ((unsigned long) rxb & TO_PHYS_MASK)); skb_reserve(skb, RX_OFFSET); } ip->rx_ci = 0; @@ -1515,7 +1515,7 @@ name: "ioc3-eth", id_table: ioc3_pci_tbl, probe: ioc3_probe, - remove: ioc3_remove_one, + remove: __devexit_p(ioc3_remove_one), }; static int __init ioc3_init_module(void) @@ -1554,8 +1554,8 @@ memset(desc->data + len, 0, ETH_ZLEN - len); len = ETH_ZLEN; } - desc->cmd = len | ETXD_INTWHENDONE | ETXD_D0V; - desc->bufcnt = len; + desc->cmd = cpu_to_be32(len | ETXD_INTWHENDONE | ETXD_D0V); + desc->bufcnt = cpu_to_be32(len); } else if ((data ^ (data + len)) & 0x4000) { unsigned long b2, s1, s2; @@ -1563,16 +1563,20 @@ s1 = b2 - data; s2 = data + len - b2; - desc->cmd = len | ETXD_INTWHENDONE | ETXD_B1V | ETXD_B2V; - desc->bufcnt = (s1 << ETXD_B1CNT_SHIFT) | - (s2 << ETXD_B2CNT_SHIFT); - desc->p1 = (0xa5UL << 56) | (data & TO_PHYS_MASK); - desc->p2 = (0xa5UL << 56) | (data & TO_PHYS_MASK); + desc->cmd = cpu_to_be32(len | ETXD_INTWHENDONE | + ETXD_B1V | ETXD_B2V); + desc->bufcnt = cpu_to_be32((s1 << ETXD_B1CNT_SHIFT) + | (s2 << ETXD_B2CNT_SHIFT)); + desc->p1 = cpu_to_be64((0xa5UL << 56) | + (data & TO_PHYS_MASK)); + desc->p2 = cpu_to_be64((0xa5UL << 56) | + (data & TO_PHYS_MASK)); } else { /* Normal sized packet that doesn't cross a page boundary. */ - desc->cmd = len | ETXD_INTWHENDONE | ETXD_B1V; - desc->bufcnt = len << ETXD_B1CNT_SHIFT; - desc->p1 = (0xa5UL << 56) | (data & TO_PHYS_MASK); + desc->cmd = cpu_to_be32(len | ETXD_INTWHENDONE | ETXD_B1V); + desc->bufcnt = cpu_to_be32(len << ETXD_B1CNT_SHIFT); + desc->p1 = cpu_to_be64((0xa5UL << 56) | + (data & TO_PHYS_MASK)); } BARRIER(); |