Hi, Attached below is an attempt I made, for a friend of mine, to make via-velocity work on big-endian hosts. It doesn't quite work, however, and since I don't have the hardware myself, it's kind of cumbersome to debug it. Maybe someone here has an interest?
cheers, Lennert Index: linux-2.6.16/drivers/net/via-velocity.c =================================================================== --- linux-2.6.16.orig/drivers/net/via-velocity.c +++ linux-2.6.16/drivers/net/via-velocity.c @@ -511,7 +511,7 @@ static void velocity_rx_reset(struct vel * Init state, all RD entries belong to the NIC */ for (i = 0; i < vptr->options.numrx; ++i) - vptr->rd_ring[i].rdesc0.owner = OWNED_BY_NIC; + vptr->rd_ring[i].rdesc0 |= cpu_to_le32(RDESC0_OWNED_BY_NIC); writew(vptr->options.numrx, ®s->RBRDU); writel(vptr->rd_pool_dma, ®s->RDBaseLo); @@ -607,7 +607,7 @@ static void velocity_init_registers(stru vptr->int_mask = INT_MASK_DEF; - writel(cpu_to_le32(vptr->rd_pool_dma), ®s->RDBaseLo); + writel(vptr->rd_pool_dma, ®s->RDBaseLo); writew(vptr->options.numrx - 1, ®s->RDCSize); mac_rx_queue_run(regs); mac_rx_queue_wake(regs); @@ -615,7 +615,7 @@ static void velocity_init_registers(stru writew(vptr->options.numtx - 1, ®s->TDCSize); for (i = 0; i < vptr->num_txq; i++) { - writel(cpu_to_le32(vptr->td_pool_dma[i]), &(regs->TDBaseLo[i])); + writel(vptr->td_pool_dma[i], &(regs->TDBaseLo[i])); mac_tx_queue_run(regs, i); } @@ -1022,7 +1022,7 @@ static inline void velocity_give_many_rx dirty = vptr->rd_dirty - unusable; for (avail = vptr->rd_filled & 0xfffc; avail; avail--) { dirty = (dirty > 0) ? dirty - 1 : vptr->options.numrx - 1; - vptr->rd_ring[dirty].rdesc0.owner = OWNED_BY_NIC; + vptr->rd_ring[dirty].rdesc0 |= cpu_to_le32(RDESC0_OWNED_BY_NIC); } writew(vptr->rd_filled & 0xfffc, ®s->RBRDU); @@ -1037,7 +1037,7 @@ static int velocity_rx_refill(struct vel struct rx_desc *rd = vptr->rd_ring + dirty; /* Fine for an all zero Rx desc at init time as well */ - if (rd->rdesc0.owner == OWNED_BY_NIC) + if (rd->rdesc0 & cpu_to_le32(RDESC0_OWNED_BY_NIC)) break; if (!vptr->rd_info[dirty].skb) { @@ -1237,31 +1237,34 @@ static int velocity_rx_srv(struct veloci do { struct rx_desc *rd = vptr->rd_ring + rd_curr; + u32 rdesc0; if (!vptr->rd_info[rd_curr].skb) break; - if (rd->rdesc0.owner == OWNED_BY_NIC) + if (rd->rdesc0 & cpu_to_le32(RDESC0_OWNED_BY_NIC)) break; rmb(); + rdesc0 = le32_to_cpu(rd->rdesc0); + /* * Don't drop CE or RL error frame although RXOK is off */ - if ((rd->rdesc0.RSR & RSR_RXOK) || (!(rd->rdesc0.RSR & RSR_RXOK) && (rd->rdesc0.RSR & (RSR_CE | RSR_RL)))) { + if ((rdesc0 & RDESC0_RSR_RXOK) || (!(rdesc0 & RDESC0_RSR_RXOK) && (rdesc0 & (RDESC0_RSR_CE | RDESC0_RSR_RL)))) { if (velocity_receive_frame(vptr, rd_curr) < 0) stats->rx_dropped++; } else { - if (rd->rdesc0.RSR & RSR_CRC) + if (rdesc0 & RDESC0_RSR_CRC) stats->rx_crc_errors++; - if (rd->rdesc0.RSR & RSR_FAE) + if (rdesc0 & RDESC0_RSR_FAE) stats->rx_frame_errors++; stats->rx_dropped++; } - rd->inten = 1; + rd->rdesc3 |= cpu_to_le32(RDESC3_INTEN); vptr->dev->last_rx = jiffies; @@ -1294,11 +1297,11 @@ static inline void velocity_rx_csum(stru { skb->ip_summed = CHECKSUM_NONE; - if (rd->rdesc1.CSM & CSM_IPKT) { - if (rd->rdesc1.CSM & CSM_IPOK) { - if ((rd->rdesc1.CSM & CSM_TCPKT) || - (rd->rdesc1.CSM & CSM_UDPKT)) { - if (!(rd->rdesc1.CSM & CSM_TUPOK)) { + if (rd->rdesc1 & cpu_to_le32(RDESC1_CSM_IPKT)) { + if (rd->rdesc1 & cpu_to_le32(RDESC1_CSM_IPOK)) { + if ((rd->rdesc1 & cpu_to_le32(RDESC1_CSM_TCPKT)) || + (rd->rdesc1 & cpu_to_le32(RDESC1_CSM_UDPKT))) { + if (!(rd->rdesc1 & cpu_to_le32(RDESC1_CSM_TUPOK))) { return; } } @@ -1381,16 +1384,20 @@ static int velocity_receive_frame(struct struct net_device_stats *stats = &vptr->stats; struct velocity_rd_info *rd_info = &(vptr->rd_info[idx]); struct rx_desc *rd = &(vptr->rd_ring[idx]); - int pkt_len = rd->rdesc0.len; + u32 rdesc0; + int pkt_len; struct sk_buff *skb; - if (rd->rdesc0.RSR & (RSR_STP | RSR_EDP)) { + rdesc0 = le32_to_cpu(rd->rdesc0); + pkt_len = (rdesc0 >> RDESC0_LEN_SHIFT) & RDESC0_LEN_MASK; + + if (rdesc0 & (RDESC0_RSR_STP | RDESC0_RSR_EDP)) { VELOCITY_PRT(MSG_LEVEL_VERBOSE, KERN_ERR " %s : the received frame span multple RDs.\n", vptr->dev->name); stats->rx_length_errors++; return -EINVAL; } - if (rd->rdesc0.RSR & RSR_MAR) + if (rdesc0 & RDESC0_RSR_MAR) vptr->stats.multicast++; skb = rd_info->skb; @@ -1404,7 +1411,7 @@ static int velocity_receive_frame(struct */ if (vptr->flags & VELOCITY_FLAGS_VAL_PKT_LEN) { - if (rd->rdesc0.RSR & RSR_RL) { + if (rdesc0 & RDESC0_RSR_RL) { stats->rx_length_errors++; return -EINVAL; } @@ -1464,11 +1471,10 @@ static int velocity_alloc_rx_buf(struct * Fill in the descriptor to match */ - *((u32 *) & (rd->rdesc0)) = 0; - rd->len = cpu_to_le32(vptr->rx_buf_sz); - rd->inten = 1; + rd->rdesc0 = cpu_to_le32(vptr->rx_buf_sz << RDESC0_LEN_SHIFT); rd->pa_low = cpu_to_le32(rd_info->skb_dma); - rd->pa_high = 0; + rd->rdesc3 = cpu_to_le32(RDESC3_INTEN); + return 0; } @@ -1502,22 +1508,22 @@ static int velocity_tx_srv(struct veloci td = &(vptr->td_rings[qnum][idx]); tdinfo = &(vptr->td_infos[qnum][idx]); - if (td->tdesc0.owner == OWNED_BY_NIC) + if (td->tdesc0 & cpu_to_le32(TDESC0_OWNED_BY_NIC)) break; if ((works++ > 15)) break; - if (td->tdesc0.TSR & TSR0_TERR) { + if (td->tdesc0 & cpu_to_le32(TDESC0_TSR_TERR)) { stats->tx_errors++; stats->tx_dropped++; - if (td->tdesc0.TSR & TSR0_CDH) + if (td->tdesc0 & cpu_to_le32(TDESC0_TSR_CDH)) stats->tx_heartbeat_errors++; - if (td->tdesc0.TSR & TSR0_CRS) + if (td->tdesc0 & cpu_to_le32(TDESC0_TSR_CRS)) stats->tx_carrier_errors++; - if (td->tdesc0.TSR & TSR0_ABT) + if (td->tdesc0 & cpu_to_le32(TDESC0_TSR_ABT)) stats->tx_aborted_errors++; - if (td->tdesc0.TSR & TSR0_OWC) + if (td->tdesc0 & cpu_to_le32(TDESC0_TSR_OWC)) stats->tx_window_errors++; } else { stats->tx_packets++; @@ -1905,9 +1911,9 @@ static int velocity_xmit(struct sk_buff td_ptr = &(vptr->td_rings[qnum][index]); tdinfo = &(vptr->td_infos[qnum][index]); - td_ptr->tdesc1.TCPLS = TCPLS_NORMAL; - td_ptr->tdesc1.TCR = TCR0_TIC; - td_ptr->td_buf[0].queue = 0; + td_ptr->tdesc1 &= ~cpu_to_le32(TDESC1_TCPLS | TDESC1_TCR); + td_ptr->tdesc1 |= cpu_to_le32(TDESC1_TCPLS_NORMAL | TDESC1_TCR_TIC); + td_ptr->td_buf[0].td_buf1 &= ~cpu_to_le32(TD_BUF1_QUEUE); /* * Pad short frames. @@ -1921,12 +1927,13 @@ static int velocity_xmit(struct sk_buff memset(tdinfo->buf + skb->len, 0, ETH_ZLEN - skb->len); tdinfo->skb = skb; tdinfo->skb_dma[0] = tdinfo->buf_dma; - td_ptr->tdesc0.pktsize = pktlen; + td_ptr->tdesc0 &= ~cpu_to_le32(TDESC0_PKTSIZE); + td_ptr->tdesc0 |= cpu_to_le32((pktlen & TDESC0_PKTSIZE_MASK) << TDESC0_PKTSIZE_SHIFT); td_ptr->td_buf[0].pa_low = cpu_to_le32(tdinfo->skb_dma[0]); - td_ptr->td_buf[0].pa_high = 0; - td_ptr->td_buf[0].bufsize = td_ptr->tdesc0.pktsize; + td_ptr->td_buf[0].td_buf1 = cpu_to_le32((pktlen & TD_BUF1_BUFSIZE_MASK) << TD_BUF1_BUFSIZE_SHIFT); tdinfo->nskb_dma = 1; - td_ptr->tdesc1.CMDZ = 2; + td_ptr->tdesc1 &= ~cpu_to_le32(TDESC1_CMDZ); + td_ptr->tdesc1 |= cpu_to_le32(2 << TDESC1_CMDZ_SHIFT); } else #ifdef VELOCITY_ZERO_COPY_SUPPORT if (skb_shinfo(skb)->nr_frags > 0) { @@ -1936,12 +1943,12 @@ static int velocity_xmit(struct sk_buff skb_linearize(skb, GFP_ATOMIC); memcpy(tdinfo->buf, skb->data, skb->len); tdinfo->skb_dma[0] = tdinfo->buf_dma; - td_ptr->tdesc0.pktsize = + td_ptr->tdesc0.pktsize = td_ptr->td_buf[0].pa_low = cpu_to_le32(tdinfo->skb_dma[0]); - td_ptr->td_buf[0].pa_high = 0; - td_ptr->td_buf[0].bufsize = td_ptr->tdesc0.pktsize; + td_ptr->td_buf[0].td_buf1 = cpu_to_le32((size & TD_BUF1_BUFSIZE_MASK) << TD_BUF1_BUFSIZE_SHIFT); tdinfo->nskb_dma = 1; - td_ptr->tdesc1.CMDZ = 2; + td_ptr->tdesc1 &= ~cpu_to_le32(TDESC1_CMDZ); + td_ptr->tdesc1 |= cpu_to_le32(2 << TDESC1_CMDZ_SHIFT); } else { int i = 0; tdinfo->nskb_dma = 0; @@ -1977,19 +1984,19 @@ static int velocity_xmit(struct sk_buff */ tdinfo->skb = skb; tdinfo->skb_dma[0] = pci_map_single(vptr->pdev, skb->data, pktlen, PCI_DMA_TODEVICE); - td_ptr->tdesc0.pktsize = pktlen; + td_ptr->tdesc0 &= ~cpu_to_le32(TDESC0_PKTSIZE); + td_ptr->tdesc0 |= cpu_to_le32((pktlen & TDESC0_PKTSIZE_MASK) << TDESC0_PKTSIZE_SHIFT); td_ptr->td_buf[0].pa_low = cpu_to_le32(tdinfo->skb_dma[0]); - td_ptr->td_buf[0].pa_high = 0; - td_ptr->td_buf[0].bufsize = td_ptr->tdesc0.pktsize; + td_ptr->td_buf[0].td_buf1 = cpu_to_le32((pktlen & TD_BUF1_BUFSIZE_MASK) << TD_BUF1_BUFSIZE_SHIFT); tdinfo->nskb_dma = 1; - td_ptr->tdesc1.CMDZ = 2; + td_ptr->tdesc1 &= ~cpu_to_le32(TDESC1_CMDZ); + td_ptr->tdesc1 |= cpu_to_le32(2 << TDESC1_CMDZ_SHIFT); } if (vptr->flags & VELOCITY_FLAGS_TAGGING) { - td_ptr->tdesc1.pqinf.VID = (vptr->options.vid & 0xfff); - td_ptr->tdesc1.pqinf.priority = 0; - td_ptr->tdesc1.pqinf.CFI = 0; - td_ptr->tdesc1.TCR |= TCR0_VETAG; + td_ptr->tdesc1 |= cpu_to_le32(TDESC1_TCR_VETAG); + td_ptr->tdesc1 &= ~cpu_to_le32(TDESC1_PRIORITY | TDESC1_CFI | TDESC1_VID); + td_ptr->tdesc1 |= cpu_to_le32((vptr->options.vid & TDESC1_VID_MASK) << TDESC1_VID_SHIFT); } /* @@ -1999,10 +2006,10 @@ static int velocity_xmit(struct sk_buff && (skb->ip_summed == CHECKSUM_HW)) { struct iphdr *ip = skb->nh.iph; if (ip->protocol == IPPROTO_TCP) - td_ptr->tdesc1.TCR |= TCR0_TCPCK; + td_ptr->tdesc1 |= cpu_to_le32(TDESC1_TCR_TCPCK); else if (ip->protocol == IPPROTO_UDP) - td_ptr->tdesc1.TCR |= (TCR0_UDPCK); - td_ptr->tdesc1.TCR |= TCR0_IPCK; + td_ptr->tdesc1 |= cpu_to_le32(TDESC1_TCR_UDPCK); + td_ptr->tdesc1 |= cpu_to_le32(TDESC1_TCR_IPCK); } { @@ -2010,7 +2017,7 @@ static int velocity_xmit(struct sk_buff if (prev < 0) prev = vptr->options.numtx - 1; - td_ptr->tdesc0.owner = OWNED_BY_NIC; + td_ptr->tdesc0 |= cpu_to_le32(TDESC0_OWNED_BY_NIC); vptr->td_used[qnum]++; vptr->td_curr[qnum] = (index + 1) % vptr->options.numtx; @@ -2018,7 +2025,7 @@ static int velocity_xmit(struct sk_buff netif_stop_queue(dev); td_ptr = &(vptr->td_rings[qnum][prev]); - td_ptr->td_buf[0].queue = 1; + td_ptr->td_buf[0].td_buf1 |= cpu_to_le32(TD_BUF1_QUEUE); mac_tx_queue_wake(vptr->mac_regs, qnum); } dev->trans_start = jiffies; Index: linux-2.6.16/drivers/net/via-velocity.h =================================================================== --- linux-2.6.16.orig/drivers/net/via-velocity.h +++ linux-2.6.16/drivers/net/via-velocity.h @@ -56,113 +56,6 @@ #define VAR_USED(p) do {(p)=(p);} while (0) -/* - * Purpose: Structures for MAX RX/TX descriptors. - */ - - -#define B_OWNED_BY_CHIP 1 -#define B_OWNED_BY_HOST 0 - -/* - * Bits in the RSR0 register - */ - -#define RSR_DETAG 0x0080 -#define RSR_SNTAG 0x0040 -#define RSR_RXER 0x0020 -#define RSR_RL 0x0010 -#define RSR_CE 0x0008 -#define RSR_FAE 0x0004 -#define RSR_CRC 0x0002 -#define RSR_VIDM 0x0001 - -/* - * Bits in the RSR1 register - */ - -#define RSR_RXOK 0x8000 // rx OK -#define RSR_PFT 0x4000 // Perfect filtering address match -#define RSR_MAR 0x2000 // MAC accept multicast address packet -#define RSR_BAR 0x1000 // MAC accept broadcast address packet -#define RSR_PHY 0x0800 // MAC accept physical address packet -#define RSR_VTAG 0x0400 // 802.1p/1q tagging packet indicator -#define RSR_STP 0x0200 // start of packet -#define RSR_EDP 0x0100 // end of packet - -/* - * Bits in the RSR1 register - */ - -#define RSR1_RXOK 0x80 // rx OK -#define RSR1_PFT 0x40 // Perfect filtering address match -#define RSR1_MAR 0x20 // MAC accept multicast address packet -#define RSR1_BAR 0x10 // MAC accept broadcast address packet -#define RSR1_PHY 0x08 // MAC accept physical address packet -#define RSR1_VTAG 0x04 // 802.1p/1q tagging packet indicator -#define RSR1_STP 0x02 // start of packet -#define RSR1_EDP 0x01 // end of packet - -/* - * Bits in the CSM register - */ - -#define CSM_IPOK 0x40 //IP Checkusm validatiaon ok -#define CSM_TUPOK 0x20 //TCP/UDP Checkusm validatiaon ok -#define CSM_FRAG 0x10 //Fragment IP datagram -#define CSM_IPKT 0x04 //Received an IP packet -#define CSM_TCPKT 0x02 //Received a TCP packet -#define CSM_UDPKT 0x01 //Received a UDP packet - -/* - * Bits in the TSR0 register - */ - -#define TSR0_ABT 0x0080 // Tx abort because of excessive collision -#define TSR0_OWT 0x0040 // Jumbo frame Tx abort -#define TSR0_OWC 0x0020 // Out of window collision -#define TSR0_COLS 0x0010 // experience collision in this transmit event -#define TSR0_NCR3 0x0008 // collision retry counter[3] -#define TSR0_NCR2 0x0004 // collision retry counter[2] -#define TSR0_NCR1 0x0002 // collision retry counter[1] -#define TSR0_NCR0 0x0001 // collision retry counter[0] -#define TSR0_TERR 0x8000 // -#define TSR0_FDX 0x4000 // current transaction is serviced by full duplex mode -#define TSR0_GMII 0x2000 // current transaction is serviced by GMII mode -#define TSR0_LNKFL 0x1000 // packet serviced during link down -#define TSR0_SHDN 0x0400 // shutdown case -#define TSR0_CRS 0x0200 // carrier sense lost -#define TSR0_CDH 0x0100 // AQE test fail (CD heartbeat) - -/* - * Bits in the TSR1 register - */ - -#define TSR1_TERR 0x80 // -#define TSR1_FDX 0x40 // current transaction is serviced by full duplex mode -#define TSR1_GMII 0x20 // current transaction is serviced by GMII mode -#define TSR1_LNKFL 0x10 // packet serviced during link down -#define TSR1_SHDN 0x04 // shutdown case -#define TSR1_CRS 0x02 // carrier sense lost -#define TSR1_CDH 0x01 // AQE test fail (CD heartbeat) - -// -// Bits in the TCR0 register -// -#define TCR0_TIC 0x80 // assert interrupt immediately while descriptor has been send complete -#define TCR0_PIC 0x40 // priority interrupt request, INA# is issued over adaptive interrupt scheme -#define TCR0_VETAG 0x20 // enable VLAN tag -#define TCR0_IPCK 0x10 // request IP checksum calculation. -#define TCR0_UDPCK 0x08 // request UDP checksum calculation. -#define TCR0_TCPCK 0x04 // request TCP checksum calculation. -#define TCR0_JMBO 0x02 // indicate a jumbo packet in GMAC side -#define TCR0_CRC 0x01 // disable CRC generation - -#define TCPLS_NORMAL 3 -#define TCPLS_START 2 -#define TCPLS_END 1 -#define TCPLS_MED 0 - // max transmit or receive buffer size #define CB_RX_BUF_SIZE 2048UL // max buffer size @@ -193,68 +86,114 @@ /* * Receive descriptor */ - -struct rdesc0 { - u16 RSR; /* Receive status */ - u16 len:14; /* Received packet length */ - u16 reserved:1; - u16 owner:1; /* Who owns this buffer ? */ -}; - -struct rdesc1 { - u16 PQTAG; - u8 CSM; - u8 IPKT; -}; - struct rx_desc { - struct rdesc0 rdesc0; - struct rdesc1 rdesc1; + u32 rdesc0; + u32 rdesc1; u32 pa_low; /* Low 32 bit PCI address */ - u16 pa_high; /* Next 16 bit PCI address (48 total) */ - u16 len:15; /* Frame size */ - u16 inten:1; /* Enable interrupt */ -} __attribute__ ((__packed__)); + u32 rdesc3; +}; + +#define RDESC0_OWNED_BY_NIC 0x80000000 +#define RDESC0_LEN 0x3fff0000 +#define RDESC0_LEN_SHIFT 16 +#define RDESC0_LEN_MASK 0x00003fff +#define RDESC0_RSR 0x0000ffff +#define RDESC0_RSR_RXOK 0x00008000 +#define RDESC0_RSR_PFT 0x00004000 +#define RDESC0_RSR_MAR 0x00002000 +#define RDESC0_RSR_BAR 0x00001000 +#define RDESC0_RSR_PHY 0x00000800 +#define RDESC0_RSR_VTAG 0x00000400 +#define RDESC0_RSR_STP 0x00000200 +#define RDESC0_RSR_EDP 0x00000100 +#define RDESC0_RSR_DETAG 0x00000080 +#define RDESC0_RSR_SNTAG 0x00000040 +#define RDESC0_RSR_RXER 0x00000020 +#define RDESC0_RSR_RL 0x00000010 +#define RDESC0_RSR_CE 0x00000008 +#define RDESC0_RSR_FAE 0x00000004 +#define RDESC0_RSR_CRC 0x00000002 +#define RDESC0_RSR_VIDM 0x00000001 + +#define RDESC1_IPKT 0xff000000 +#define RDESC1_CSM 0x00ff0000 +#define RDESC1_CSM_IPOK 0x00400000 +#define RDESC1_CSM_TUPOK 0x00200000 +#define RDESC1_CSM_FRAG 0x00100000 +#define RDESC1_CSM_IPKT 0x00040000 +#define RDESC1_CSM_TCPKT 0x00020000 +#define RDESC1_CSM_UDPKT 0x00010000 +#define RDESC1_PQTAG 0x0000ffff + +#define RDESC3_INTEN 0x80000000 +#define RDESC3_LEN 0x3fff0000 +#define RDESC3_PA_HIGH 0x0000ffff /* * Transmit descriptor */ -struct tdesc0 { - u16 TSR; /* Transmit status register */ - u16 pktsize:14; /* Size of frame */ - u16 reserved:1; - u16 owner:1; /* Who owns the buffer */ -}; - -struct pqinf { /* Priority queue info */ - u16 VID:12; - u16 CFI:1; - u16 priority:3; -} __attribute__ ((__packed__)); - -struct tdesc1 { - struct pqinf pqinf; - u8 TCR; - u8 TCPLS:2; - u8 reserved:2; - u8 CMDZ:4; -} __attribute__ ((__packed__)); - struct td_buf { u32 pa_low; - u16 pa_high; - u16 bufsize:14; - u16 reserved:1; - u16 queue:1; -} __attribute__ ((__packed__)); + u32 td_buf1; +}; + +#define TD_BUF1_QUEUE 0x80000000 +#define TD_BUF1_BUFSIZE 0x3fff0000 +#define TD_BUF1_BUFSIZE_SHIFT 16 +#define TD_BUF1_BUFSIZE_MASK 0x00003fff +#define TD_BUF1_PA_HIGH 0x0000ffff struct tx_desc { - struct tdesc0 tdesc0; - struct tdesc1 tdesc1; + u32 tdesc0; + u32 tdesc1; struct td_buf td_buf[7]; }; +#define TDESC0_OWNED_BY_NIC 0x80000000 +#define TDESC0_PKTSIZE 0x3fff0000 +#define TDESC0_PKTSIZE_SHIFT 16 +#define TDESC0_PKTSIZE_MASK 0x00003fff +#define TDESC0_TSR 0x0000ffff +#define TDESC0_TSR_TERR 0x00008000 +#define TDESC0_TSR_FDX 0x00004000 +#define TDESC0_TSR_GMII 0x00002000 +#define TDESC0_TSR_LNKFL 0x00001000 +#define TDESC0_TSR_SHDN 0x00000400 +#define TDESC0_TSR_CRS 0x00000200 +#define TDESC0_TSR_CDH 0x00000100 +#define TDESC0_TSR_ABT 0x00000080 +#define TDESC0_TSR_OWT 0x00000040 +#define TDESC0_TSR_OWC 0x00000020 +#define TDESC0_TSR_COLS 0x00000010 +#define TDESC0_TSR_NCR3 0x00000008 +#define TDESC0_TSR_NCR2 0x00000004 +#define TDESC0_TSR_NCR1 0x00000002 +#define TDESC0_TSR_NCR0 0x00000001 + +#define TDESC1_CMDZ 0xf0000000 +#define TDESC1_CMDZ_SHIFT 28 +#define TDESC1_CMDZ_MASK 0x0000000f +#define TDESC1_TCPLS 0x03000000 +#define TDESC1_TCPLS_NORMAL 0x03000000 +#define TDESC1_TCPLS_START 0x02000000 +#define TDESC1_TCPLS_END 0x01000000 +#define TDESC1_TCPLS_MED 0x00000000 +#define TDESC1_TCR 0x00ff0000 +#define TDESC1_TCR_TIC 0x00800000 +#define TDESC1_TCR_PIC 0x00400000 +#define TDESC1_TCR_VETAG 0x00200000 +#define TDESC1_TCR_IPCK 0x00100000 +#define TDESC1_TCR_UDPCK 0x00080000 +#define TDESC1_TCR_TCPCK 0x00040000 +#define TDESC1_TCR_JMBO 0x00020000 +#define TDESC1_TCR_CRC 0x00010000 +#define TDESC1_PRIORITY 0x0000e000 +#define TDESC1_CFI 0x00001000 +#define TDESC1_VID 0x00000fff +#define TDESC1_VID_SHIFT 0 +#define TDESC1_VID_MASK 0x00000fff + struct velocity_rd_info { struct sk_buff *skb; dma_addr_t skb_dma; @@ -291,10 +230,6 @@ struct velocity_td_info { dma_addr_t buf_dma; }; -enum velocity_owner { - OWNED_BY_HOST = 0, - OWNED_BY_NIC = 1 -}; /* - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html