|
From: <ls...@us...> - 2007-05-02 20:44:15
|
Revision: 3178
http://jnode.svn.sourceforge.net/jnode/?rev=3178&view=rev
Author: lsantha
Date: 2007-05-02 13:44:01 -0700 (Wed, 02 May 2007)
Log Message:
-----------
via-rhine nic driver, initial commit.
Added Paths:
-----------
trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxDesc.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxDesc.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineDriver.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineFlags.java
Added: trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxDesc.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxDesc.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxDesc.java 2007-05-02 20:44:01 UTC (rev 3178)
@@ -0,0 +1,81 @@
+/*
+ * $Id$
+ */
+package org.jnode.driver.net.via_rhine;
+
+import org.jnode.system.ResourceManager;
+import org.jnode.system.MemoryResource;
+import org.jnode.net.SocketBuffer;
+import org.apache.log4j.Logger;
+import static org.jnode.driver.net.via_rhine.ViaRhineConstants.*;
+import org.vmmagic.unboxed.Address;
+
+
+/**
+ * @author Levente S\xE1ntha
+ */
+public class RxDesc {
+ protected final Logger log = Logger.getLogger(getClass());
+ byte[] desc;
+ int descOffs;
+ MemoryResource descMr;
+ byte[] data;
+ int dataOffs;
+ MemoryResource dataMr;
+ int descAddr;
+ RxDesc(ResourceManager rm){
+ desc = new byte[16 + 32];
+ descMr = rm.asMemoryResource(desc);
+ Address memAddr = descMr.getAddress();
+
+ int addr = memAddr.toInt();
+ descOffs = 0;
+ // Align on 32-byte boundary
+ while ((addr & 31) != 0) {
+ addr++;
+ descOffs++;
+ }
+ descAddr = memAddr.add(descOffs).toInt();
+
+ descMr.setInt(descOffs, 0x80000000);
+ descMr.setInt(descOffs + 4, PKT_BUF_SZ);
+
+ data = new byte[PKT_BUF_SZ + 32];
+ dataMr = rm.asMemoryResource(data);
+
+ memAddr = dataMr.getAddress();
+ addr = memAddr.toInt();
+ dataOffs = 0;
+ // Align on 32-byte boundary
+ while ((addr & 31) != 0) {
+ addr++;
+ dataOffs++;
+ }
+
+ descMr.setInt(descOffs + 8, memAddr.add(dataOffs).toInt());
+ }
+
+ void setOwnBit(){
+ descMr.setInt(descOffs, descMr.getInt(descOffs) | 0x80000000);
+ }
+
+ boolean isOwnBit(){
+ return (descMr.getInt(descOffs) & 0x80000000) != 0;
+ }
+
+ void setNextDescAddr(int addr){
+ descMr.setInt(descOffs + 12, addr);
+ }
+
+ int frameLength(){
+ return descMr.getChar(descOffs + 2) & 0x000007FF;
+ }
+
+ SocketBuffer getPacket(){
+ int ln = frameLength();
+ log.debug("packetlength: " + ln);
+ byte[] buf = new byte[ln];
+ System.arraycopy(data, dataOffs, buf, 0, ln);
+ return new SocketBuffer(buf, 0, ln);
+ }
+}
Added: trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java 2007-05-02 20:44:01 UTC (rev 3178)
@@ -0,0 +1,43 @@
+/*
+ * $Id$
+ */
+package org.jnode.driver.net.via_rhine;
+
+import static org.jnode.driver.net.via_rhine.ViaRhineConstants.*;
+import org.jnode.system.ResourceManager;
+import org.jnode.net.SocketBuffer;
+
+/**
+ * @author Levente S\xE1ntha
+ */
+public class RxRing {
+ RxDesc[] ring;
+ int ringAddr;
+ int current;
+ RxRing(ResourceManager rm){
+ ring = new RxDesc[RX_RING_SIZE];
+ for(int i = 0; i < RX_RING_SIZE; i++){
+ ring[i] = new RxDesc(rm);
+ if(i == 0)
+ ringAddr = ring[0].descAddr;
+ else
+ ring[i - 1].setNextDescAddr(ring[i].descAddr);
+
+
+ }
+ ring[RX_RING_SIZE - 1].setNextDescAddr(ringAddr);
+ }
+
+
+ SocketBuffer getPacket(){
+ return ring[current].getPacket();
+ }
+
+ RxDesc currentDesc(){
+ return ring[current];
+ }
+
+ void next(){
+ current = (current + 1) % RX_RING_SIZE;
+ }
+}
Added: trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxDesc.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxDesc.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxDesc.java 2007-05-02 20:44:01 UTC (rev 3178)
@@ -0,0 +1,86 @@
+/*
+ * $Id$
+ */
+package org.jnode.driver.net.via_rhine;
+
+import org.apache.log4j.Logger;
+import org.jnode.system.MemoryResource;
+import org.jnode.system.ResourceManager;
+import org.jnode.net.SocketBuffer;
+import static org.jnode.net.ethernet.EthernetConstants.*;
+import org.vmmagic.unboxed.Address;
+import java.util.Arrays;
+
+
+/**
+ * @author Levente S\xE1ntha
+ */
+public class TxDesc {
+ protected final Logger log = Logger.getLogger(getClass());
+ byte[] desc;
+ int descOffs;
+ MemoryResource descMr;
+ byte[] data;
+ int dataOffs;
+ MemoryResource dataMr;
+ int descAddr;
+ TxDesc(ResourceManager rm){
+ desc = new byte[16 + 32];
+ descMr = rm.asMemoryResource(desc);
+ Address memAddr = descMr.getAddress();
+
+ int addr = memAddr.toInt();
+ descOffs = 0;
+ // Align on 32-byte boundary
+ while ((addr & 31) != 0) {
+ addr++;
+ descOffs++;
+ }
+ descAddr = memAddr.add(descOffs).toInt();
+
+ descMr.setInt(descOffs, 0x80000000);
+ descMr.setInt(descOffs + 4, ViaRhineConstants.PKT_BUF_SZ);
+
+ data = new byte[ViaRhineConstants.PKT_BUF_SZ + 32];
+ dataMr = rm.asMemoryResource(data);
+
+ memAddr = dataMr.getAddress();
+ addr = memAddr.toInt();
+ dataOffs = 0;
+ // Align on 32-byte boundary
+ while ((addr & 31) != 0) {
+ addr++;
+ dataOffs++;
+ }
+
+ descMr.setInt(descOffs + 8, memAddr.add(dataOffs).toInt());
+ }
+
+ void setOwnBit(){
+ descMr.setInt(descOffs, descMr.getInt(descOffs) | 0x80000000);
+ }
+
+ boolean isOwnBit(){
+ return (descMr.getInt(descOffs) & 0x80000000) != 0;
+ }
+
+ void setNextDescAddr(int addr){
+ descMr.setInt(descOffs + 12, addr);
+ }
+
+ void setFrameLength(int size){
+ descMr.setInt(descOffs + 4, ((descMr.getInt(descOffs + 4) & ~0x000007FF) | (size & 0x000007FF)));
+ }
+
+ void setPacket(SocketBuffer sb){
+ int ln = sb.getSize();
+ log.debug("packetlength: " + ln);
+ sb.get(data, dataOffs, 0, ln);
+
+ if(ln < ETH_ZLEN + 10){
+ Arrays.fill(data, dataOffs + ln, dataOffs + ETH_ZLEN + 10, (byte)0);
+ setFrameLength(ETH_ZLEN + 10);
+ }
+
+ }
+}
Added: trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java 2007-05-02 20:44:01 UTC (rev 3178)
@@ -0,0 +1,38 @@
+/*
+ * $Id$
+ */
+package org.jnode.driver.net.via_rhine;
+
+import org.jnode.system.ResourceManager;
+import org.jnode.net.SocketBuffer;
+
+/**
+ * @author Levente S\xE1ntha
+ */
+public class TxRing {
+ TxDesc[] ring;
+ int ringAddr;
+ int current;
+ TxRing(ResourceManager rm){
+ ring = new TxDesc[ViaRhineConstants.TX_RING_SIZE];
+ for(int i = 0; i < ViaRhineConstants.TX_RING_SIZE; i++){
+ ring[i] = new TxDesc(rm);
+ if(i == 0)
+ ringAddr = ring[0].descAddr;
+ else
+ ring[i - 1].setNextDescAddr(ring[i].descAddr);
+
+
+ }
+ ring[ViaRhineConstants.TX_RING_SIZE - 1].setNextDescAddr(ringAddr);
+ }
+
+
+ TxDesc currentDesc(){
+ return ring[current];
+ }
+
+ void next(){
+ current = (current + 1) % ViaRhineConstants.TX_RING_SIZE;
+ }
+}
Added: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java 2007-05-02 20:44:01 UTC (rev 3178)
@@ -0,0 +1,815 @@
+/*
+ * $Id$
+ */
+package org.jnode.driver.net.via_rhine;
+
+import org.jnode.driver.net.spi.AbstractDeviceCore;
+import org.jnode.driver.DriverException;
+import org.jnode.driver.Device;
+import org.jnode.driver.bus.pci.PCIHeaderType0;
+import org.jnode.driver.bus.pci.PCIDevice;
+import org.jnode.driver.bus.pci.PCIBaseAddress;
+import org.jnode.net.HardwareAddress;
+import org.jnode.net.SocketBuffer;
+import org.jnode.net.ethernet.EthernetAddress;
+import org.jnode.util.TimeoutException;
+import org.jnode.util.NumberUtils;
+import org.jnode.system.*;
+import org.jnode.naming.InitialNaming;
+import javax.naming.NameNotFoundException;
+
+import static org.jnode.net.ethernet.EthernetConstants.*;
+import static org.jnode.driver.net.via_rhine.ViaRhineConstants.*;
+import org.jnode.driver.net.ethernet.spi.Flags;
+import org.jnode.shell.CommandLine;
+import org.jnode.shell.help.ParsedArguments;
+import java.io.*;
+import java.net.URL;
+
+/**
+ * @author Levente S\xE1ntha
+ */
+public class ViaRhineCore extends AbstractDeviceCore implements IRQHandler {
+ private final int ioBase;
+ private final IOResource io;
+ private final IRQResource irq;
+ private EthernetAddress hwAddress;
+ private ViaRhineDriver driver;
+
+
+ /*
+ char devname[8]; // Used only for kernel debugging.
+ const char *product_name;
+ struct rhine_rx_desc *rx_ring;
+ struct rhine_tx_desc *tx_ring;
+ char *rx_buffs[RX_RING_SIZE];
+ char *tx_buffs[TX_RING_SIZE];
+
+ // temporary Rx buffers.
+
+ int chip_id;
+ int chip_revision;
+ unsigned short ioaddr;
+ unsigned int cur_rx, cur_tx; // The next free and used entries
+ unsigned int dirty_rx, dirty_tx;
+ // The saved address of a sent-in-place packet/buffer, for skfree().
+ struct sk_buff *tx_skbuff[TX_RING_SIZE];
+ unsigned char mc_filter[8]; // Current multicast filter.
+ char phys[4]; // MII device addresses.
+ unsigned int tx_full:1; // The Tx queue is full.
+ unsigned int full_duplex:1; // Full-duplex operation requested.
+ unsigned int default_port:4; // Last dev->if_port value.
+ unsigned int media2:4; // Secondary monitored media port.
+ unsigned int medialock:1; // Don't sense media type.
+ unsigned int mediasense:1; // Media sensing in progress.
+
+ */
+
+ ViaRhineRxDescriptor[] rx_ring = new ViaRhineRxDescriptor[RX_RING_SIZE];
+ ViaRhineTxDescriptor[] tx_ring = new ViaRhineTxDescriptor[TX_RING_SIZE];
+ byte[] rx_buffs = new byte[RX_RING_SIZE];
+ byte[] tx_buffs = new byte[TX_RING_SIZE];
+
+ int chip_id;
+ int chip_revision;
+ short ioaddr;
+ int cur_rx, cur_tx; // The next free and used entries
+ int dirty_rx, dirty_tx;
+ // The saved address of a sent-in-place packet/buffer, for skfree().
+ SocketBuffer[] tx_skbuff = new SocketBuffer[TX_RING_SIZE];
+ char[] mc_filter = new char[8]; // Current multicast filter.
+ char[] phys = new char[4]; // MII device addresses.
+ int tx_full =1; // The Tx queue is full.
+ int full_duplex = 1; // Full-duplex operation requested.
+ int default_port = 4; // Last dev->if_port value.
+ int media2 = 4; // Secondary monitored media port.
+ int medialock = 1; // Don't sense media type.
+ int mediasense = 1; // Media sensing in progress.
+
+ RxRing rxRing;
+ TxRing txRing;
+
+ public ViaRhineCore(ViaRhineDriver driver, Device device, ResourceOwner owner, Flags flags)
+ throws DriverException, ResourceNotFreeException{
+ this.driver = driver;
+ final int irq_nr = getIRQ(device, flags);
+ PCIBaseAddress addr = getIOBaseAddress(device, flags);
+ this.ioBase = addr.getIOBase();
+ int io_length = addr.getSize();
+ final ResourceManager rm;
+
+ try {
+ rm = InitialNaming.lookup(ResourceManager.NAME);
+ } catch (NameNotFoundException ex) {
+ throw new DriverException("Cannot find ResourceManager");
+ }
+
+ this.irq = rm.claimIRQ(owner, irq_nr, this, true);
+
+ try {
+ io = rm.claimIOResource(owner, ioBase, io_length);
+ } catch (ResourceNotFreeException ex) {
+ this.irq.release();
+ throw ex;
+ }
+
+ final byte[] hwAddrArr = new byte[ETH_ALEN];
+ for (int i = 0; i < ETH_ALEN; i++)
+ hwAddrArr[i] = (byte) getReg8(byPAR0 + i);
+
+ this.hwAddress = new EthernetAddress(hwAddrArr, 0);
+
+ log.debug("Found " + flags.getName() + " IRQ = " + irq.getIRQ()
+ + ", IO Base = 0x" + NumberUtils.hex(ioBase)
+ + ", IO Length = " + io_length
+ + ", MAC Address = "+ hwAddress);
+ }
+
+ protected PCIBaseAddress getIOBaseAddress(Device device, Flags flags)
+ throws DriverException {
+ final PCIHeaderType0 config = ((PCIDevice)device).getConfig().asHeaderType0();
+ final PCIBaseAddress[] addrs = config.getBaseAddresses();
+ if (addrs.length < 1) {
+ throw new DriverException("Cannot find iobase: not base addresses");
+ }
+ if (!addrs[0].isIOSpace()) {
+ throw new DriverException("Cannot find iobase: first address is not I/O");
+ }
+ return addrs[0];
+ }
+
+ /**
+ * Gets the IRQ used by the given device
+ * @param device
+ * @param flags
+ */
+ protected int getIRQ(Device device, Flags flags) throws DriverException {
+ final PCIHeaderType0 config = ((PCIDevice)device).getConfig().asHeaderType0();
+ return config.getInterruptLine();
+ }
+
+ public void handleInterrupt(int irq) {
+ log.debug("handleInterrupt()");
+
+ printIntrStatus();
+ setIRQEnabled(false);
+
+ int intr_status = getIntrStatus();
+ if((intr_status & (IntrRxDone | IntrRxNoBuf | IntrRxOverflow |
+ IntrRxDropped | IntrRxEarly | IntrRxEmpty | IntrRxErr | IntrRxWakeUp)) != 0){
+ /* Acknowledge all of the current interrupt sources ASAP. */
+ //outw(DEFAULT_INTR & ~IntrRxDone, nic->ioaddr + IntrStatus);
+ //IOSYNC;
+ try {
+
+ Thread.sleep(50);
+ if(!rxRing.currentDesc().isOwnBit()){
+ SocketBuffer packet = rxRing.getPacket();
+ driver.onReceive(packet);
+ log.debug("New packet");
+ log.debug(packet.getLinkLayerHeader().getSourceAddress());
+ log.debug(packet.getLinkLayerHeader().getDestinationAddress());
+ log.debug("\n" + hexDump(packet.toByteArray()) + "\n");
+ rxRing.currentDesc().setOwnBit();
+ rxRing.next();
+ }
+
+ } catch(Exception e ){
+ log.error("error in irq handler", e);
+ }
+ //setReg16(IntrStatus, DEFAULT_INTR & ~IntrRxDone);
+ setReg16(IntrStatus, DEFAULT_INTR);
+ }
+
+ if((intr_status & (IntrTxDone | IntrTxAborted | IntrTxDescRace |
+ IntrTxError | IntrTxErrSummary | IntrTxUnderrun)) != 0) {
+ try {
+
+ if((intr_status & IntrTxError) != 0){
+ reset();
+ return;
+ }
+
+ Thread.sleep(50);
+ } catch(Exception e ){
+ log.error("error in irq handler", e);
+ }
+
+ setReg16(IntrStatus, DEFAULT_INTR | my_INTR);
+
+ }
+
+
+ setIRQEnabled(true);
+ }
+
+ int my_INTR = IntrTxDone | IntrTxError | IntrTxUnderrun;
+
+ private void printIntrStatus(){
+ /*
+ int IntrRxDone=0x0001, IntrRxErr=0x0004, IntrRxEmpty=0x0020,
+ IntrTxDone=0x0002, IntrTxError=0x0008, IntrTxUnderrun=0x0210,
+ IntrPCIErr=0x0040,
+ IntrStatsMax=0x0080, IntrRxEarly=0x0100,
+ IntrRxOverflow=0x0400, IntrRxDropped=0x0800, IntrRxNoBuf=0x1000,
+ IntrTxAborted=0x2000, IntrLinkChange=0x4000,
+ IntrRxWakeUp=0x8000,
+ IntrNormalSummary=0x0003, IntrAbnormalSummary=0xC260,
+ IntrTxDescRace=0x080000, // mapped from IntrStatus2
+ IntrTxErrSummary=0x082218;
+ */
+
+ int intr_status = getIntrStatus();
+
+ log.debug("Interrupt status word: 0x" + NumberUtils.hex(intr_status));
+
+ if((intr_status & IntrRxDone) != 0)
+ log.debug("Interrupt status: " + "IntrRxDone");
+
+ if((intr_status & IntrRxErr) != 0)
+ log.debug("Interrupt status: " + "IntrRxErr");
+
+ if((intr_status & IntrRxEmpty) != 0)
+ log.debug("Interrupt status: " + "IntrRxEmpty");
+
+ if((intr_status & IntrTxDone) != 0)
+ log.debug("Interrupt status: " + "IntrTxDone");
+
+ if((intr_status & IntrTxError) != 0)
+ log.debug("Interrupt status: " + "IntrTxError");
+
+ if((intr_status & IntrTxUnderrun) != 0)
+ log.debug("Interrupt status: " + "IntrTxUnderrun");
+
+ if((intr_status & IntrPCIErr) != 0)
+ log.debug("Interrupt status: " + "IntrPCIErr");
+
+ if((intr_status & IntrStatsMax) != 0)
+ log.debug("Interrupt status: " + "IntrStatsMax");
+
+ if((intr_status & IntrRxEarly) != 0)
+ log.debug("Interrupt status: " + "IntrRxEarly");
+
+ if((intr_status & IntrRxOverflow) != 0)
+ log.debug("Interrupt status: " + "IntrRxOverflow");
+
+ if((intr_status & IntrRxDropped) != 0)
+ log.debug("Interrupt status: " + "IntrRxDropped");
+
+ if((intr_status & IntrRxNoBuf) != 0)
+ log.debug("Interrupt status: " + "IntrRxNoBuf");
+
+ if((intr_status & IntrTxAborted) != 0)
+ log.debug("Interrupt status: " + "IntrTxAborted");
+
+ if((intr_status & IntrLinkChange) != 0)
+ log.debug("Interrupt status: " + "IntrLinkChange");
+
+ if((intr_status & IntrRxWakeUp) != 0)
+ log.debug("Interrupt status: " + "IntrRxWakeUp");
+
+ if((intr_status & IntrTxDescRace) != 0)
+ log.debug("Interrupt status: " + "IntrTxDescRace");
+
+ }
+
+ private void setIRQEnabled(boolean enable){
+ int intr_status = getIntrStatus();
+
+ if (enable)
+ intr_status = intr_status | DEFAULT_INTR | my_INTR;
+ else
+ intr_status = (intr_status & ~(DEFAULT_INTR | my_INTR));
+
+ setReg16(IntrEnable, intr_status);
+ }
+
+ private int getIntrStatus() {
+ int intr_status = getReg16(IntrStatus);
+ /* On Rhine-II, Bit 3 indicates Tx descriptor write-back race. */
+
+ /* added comment by guard */
+ /* For supporting VT6107, please use revision id to recognize different chips in driver */
+ // if (tp->chip_id == 0x3065)
+
+ //if( tp->chip_revision < 0x80 && tp->chip_revision >=0x40 )
+ intr_status |= getReg8(IntrStatus2) << 16;
+
+ return intr_status;
+ }
+
+ public HardwareAddress getHwAddress() {
+ log.debug("getHwAddress");
+ return hwAddress;
+ }
+
+ public void initialize() throws DriverException {
+ log.debug("initialize()");
+ probe();
+ reset();
+ }
+
+ public void disable() {
+ log.debug("disable()");
+ /* merge reset and disable */
+ //rhine_reset(nic);
+ reset();
+
+ /* Switch to loopback mode to avoid hardware races. */
+ //writeb(0x60 | 0x01, byTCR);
+ setReg8(byTCR, 0x60 | 0x01);
+
+ /* Stop the chip's Tx and Rx processes. */
+ //writew(CR_STOP, byCR0);
+ setReg16(byCR0, CR_STOP);
+ }
+
+ private void reset(){
+ /* software reset */
+ setReg8(byCR1, CR1_SFRST);
+ MIIDelay();
+
+ //init ring
+ try {
+ final ResourceManager rm = InitialNaming.lookup(ResourceManager.NAME);
+ rxRing = new RxRing(rm);
+ log.debug("Rx ring initialised");
+ txRing = new TxRing(rm);
+ log.debug("Tx ring initialised");
+ } catch (NameNotFoundException ex) {
+ throw new RuntimeException("Cannot find ResourceManager");
+ }
+
+ /*write TD RD Descriptor to MAC */
+ setReg32(dwCurrentRxDescAddr, rxRing.ringAddr);
+ setReg32(dwCurrentTxDescAddr, txRing.ringAddr);
+
+ /* close IMR */
+ setReg16 (byIMR0, 0x0000);
+
+ /* Setup Multicast */
+ //set_rx_mode(nic);
+ setRxMode();
+
+ /* set TCR RCR threshold to store and forward*/
+ //outb (0x3e, byBCR0);
+ //outb (0x38, byBCR1);
+ //outb (0x2c, byRCR);
+ //outb (0x60, byTCR);
+ setReg8(byBCR0, 0x3e);
+ setReg8(byBCR1, 0x38);
+ setReg8(byRCR, 0x2c);
+ setReg8(byTCR, 0x60);
+
+ /* Set Fulldupex */
+ int FDXFlag = queryAuto ();
+ if (FDXFlag == 1) {
+ setReg8(byCFGD, CFGD_CFDX);
+ setReg16(byCR0, CR_FDX);
+ }
+
+ /* KICK NIC to WORK */
+ //CRbak = inw (byCR0);
+ //CRbak = CRbak & 0xFFFB; /* not CR_STOP */
+ //outw ((CRbak | CR_STRT | CR_TXON | CR_RXON | CR_DPOLL), byCR0);
+ int cr = getReg8(byCR0);
+ cr = cr & 0xFFFB;
+ setReg16(byCR0, cr | CR_STRT | CR_TXON | CR_RXON | CR_DPOLL);
+
+ /* disable all known interrupt */
+ //outw (0, byIMR0);
+ //setReg16(byIMR0, 0);
+
+
+ //--------------------
+ //outw (IMRShadow, byIMR0);
+ setReg16(byIMR0, IMRShadow);
+ }
+
+ private void setRxMode(){
+ /* ! IFF_PROMISC */
+ //outl(0xffffffff, byMAR0);
+ //outl(0xffffffff, byMAR4);
+ //rx_mode = 0x0C;
+ //outb(0x60 /* thresh */ | rx_mode, byRCR );
+ setReg32(byMAR0, 0xffffffff);
+ setReg32(byMAR4, 0xffffffff);
+ int rx_mode = 0x0C;
+ setReg8(byRCR, 0x60 | rx_mode);
+ }
+
+ private void reloadEEPROM()
+ {
+ //int i;
+ //outb(0x20, byEECSR);
+ setReg8(byEECSR, 0x20);
+
+ /* Typically 2 cycles to reload. */
+ //for (i = 0; i < 150; i++)
+ // if (! (inb(byEECSR) & 0x20))
+ // break;
+
+ for (int i = 0; i < 150; i++)
+ if ( (getReg8(byEECSR) & 0x20) == 0)
+ break;
+ }
+
+
+ void initRing () {
+ int i;
+ tx_full = 0;
+ cur_rx = cur_tx = 0;
+ dirty_rx = dirty_tx = 0;
+
+ for (i = 0; i < RX_RING_SIZE; i++) {
+
+ rx_ring[i].rxStatus_bits.own_bit = 1;
+ rx_ring[i].rxControl_bits.rx_buf_size = 1536;
+
+ //--rx_ring[i].buf_addr_1 = virt_to_bus (tp->rx_buffs[i]);
+ //--rx_ring[i].buf_addr_2 = virt_to_bus (&tp->rx_ring[i + 1]);
+
+ /* printf("[%d]buf1=%hX,buf2=%hX",i,tp->rx_ring[i].buf_addr_1,tp->rx_ring[i].buf_addr_2); */
+ }
+ /* Mark the last entry as wrapping the ring. */
+ /* tp->rx_ring[i-1].rx_ctrl.bits.rx_buf_size =1518; */
+
+ //--rx_ring[i - 1].buf_addr_2 = virt_to_bus (&tp->rx_ring[0]);
+
+ /*printf("[%d]buf1=%hX,buf2=%hX",i-1,tp->rx_ring[i-1].buf_addr_1,tp->rx_ring[i-1].buf_addr_2); */
+
+ /* The Tx buffer descriptor is filled in as needed, but we
+ do need to clear the ownership bit. */
+
+ for (i = 0; i < TX_RING_SIZE; i++) {
+
+ tx_ring[i].txStatus_lw = 0;
+ tx_ring[i].txControl_lw = 0x00e08000;
+ //--tx_ring[i].buf_addr_1 = virt_to_bus (tp->tx_buffs[i]);
+ //--tx_ring[i].buf_addr_2 = virt_to_bus (&tp->tx_ring[i + 1]);
+ /* printf("[%d]buf1=%hX,buf2=%hX",i,tp->tx_ring[i].buf_addr_1,tp->tx_ring[i].buf_addr_2); */
+ }
+
+ //--tx_ring[i - 1].buf_addr_2 = virt_to_bus (&tp->tx_ring[0]);
+ /* printf("[%d]buf1=%hX,buf2=%hX",i,tp->tx_ring[i-1].buf_addr_1,tp->tx_ring[i-1].buf_addr_2); */
+ }
+
+ private int queryAuto () {
+ int byMIIIndex;
+ int MIIReturn;
+
+ int advertising,mii_reg5;
+ int negociated;
+
+ byMIIIndex = 0x04;
+ MIIReturn = ReadMII (byMIIIndex);
+ advertising=MIIReturn;
+
+ byMIIIndex = 0x05;
+ MIIReturn = ReadMII (byMIIIndex);
+ mii_reg5=MIIReturn;
+
+ negociated=mii_reg5 & advertising;
+
+ if ( (negociated & 0x100) != 0 || (negociated & 0x1C0) == 0x40 )
+ return 1;
+ else
+ return 0;
+
+ }
+
+ private int ReadMII(int byMIIIndex) {
+ int ReturnMII;
+ int byMIIAdrbak;
+ int byMIICRbak;
+ int byMIItemp;
+
+ byMIIAdrbak = getReg8(byMIIAD);
+ byMIICRbak = getReg8(byMIICR);
+ setReg8 (byMIICR, byMIICRbak & 0x7f);
+ MIIDelay ();
+
+ setReg8(byMIIAD, byMIIIndex);
+ MIIDelay ();
+
+ setReg8(byMIICR, getReg8(byMIICR) | 0x40);
+
+ byMIItemp = getReg8(byMIICR);
+ byMIItemp = byMIItemp & 0x40;
+
+ while (byMIItemp != 0) {
+ byMIItemp = getReg8(byMIICR);
+ byMIItemp = byMIItemp & 0x40;
+ }
+ MIIDelay ();
+
+ ReturnMII = getReg16(wMIIDATA);
+
+ setReg8(byMIIAD, byMIIAdrbak);
+ setReg8(byMIICR, byMIICRbak);
+ MIIDelay ();
+
+ return (ReturnMII);
+ }
+
+ void WriteMII (int byMIISetByte, int byMIISetBit, int byMIIOP) {
+ int ReadMIItmp;
+ int MIIMask;
+ int byMIIAdrbak;
+ int byMIICRbak;
+ int byMIItemp;
+
+
+ byMIIAdrbak = getReg8(byMIIAD);
+
+ byMIICRbak = getReg8(byMIICR);
+ setReg8(byMIICR, byMIICRbak & 0x7f);
+ MIIDelay ();
+ setReg8(byMIIAD, byMIISetByte);
+ MIIDelay ();
+
+ setReg8(byMIICR, getReg8(byMIICR) | 0x40);
+
+ byMIItemp = getReg8(byMIICR);
+ byMIItemp = byMIItemp & 0x40;
+
+ while (byMIItemp != 0) {
+ byMIItemp = getReg8(byMIICR);
+ byMIItemp = byMIItemp & 0x40;
+ }
+ MIIDelay ();
+
+ ReadMIItmp = getReg16(wMIIDATA);
+ MIIMask = 0x0001;
+ MIIMask = MIIMask << byMIISetBit;
+
+
+ if (byMIIOP == 0) {
+ MIIMask = ~MIIMask;
+ ReadMIItmp = ReadMIItmp & MIIMask;
+ } else {
+ ReadMIItmp = ReadMIItmp | MIIMask;
+ }
+
+ setReg16(wMIIDATA, ReadMIItmp);
+ MIIDelay ();
+
+ setReg8(byMIICR, getReg8(byMIICR) | 0x20);
+ byMIItemp = getReg8(byMIICR);
+ byMIItemp = byMIItemp & 0x20;
+
+ while (byMIItemp != 0) {
+ byMIItemp = getReg8(byMIICR);
+ byMIItemp = byMIItemp & 0x20;
+ }
+
+ MIIDelay ();
+
+ setReg8(byMIIAD, byMIIAdrbak & 0x7f);
+ setReg8(byMIICR, byMIICRbak);
+ MIIDelay ();
+
+ }
+
+ private void MIIDelay (){
+ for (int i = 0; i < 0x7fff; i++) {
+ getReg8(0x61);
+ getReg8(0x61);
+ getReg8(0x61);
+ getReg8(0x61);
+ }
+ }
+
+ void probe() {
+ int options = -1;
+ int did_version = 0; /* Already printed version info. */
+ int i;
+ int timeout;
+ int FDXFlag;
+ int byMIIvalue, LineSpeed, MIICRbak;
+
+ //if (rhine_debug > 0 && did_version++ == 0)
+ // printf (version);
+ reloadEEPROM();
+ /* Perhaps this should be read from the EEPROM? */
+ //--for (i = 0; i < ETH_ALEN; i++)
+ //--nic->node_addr[i] = inb (byPAR0 + i);
+ //--printf ("IO address %hX Ethernet Address: %!\n", ioaddr, nic->node_addr);
+
+ /* restart MII auto-negotiation */
+ WriteMII (0, 9, 1);
+ log.info ("Analyzing Media type,this will take several seconds........");
+ for (i = 0; i < 5; i++) {
+
+ /* need to wait 1 millisecond - we will round it up to 50-100ms */
+ try {
+ Thread.sleep(70);
+ } catch(InterruptedException x){
+ //ignore
+ }
+
+ if ((ReadMII(1) & 0x0020) != 0)
+ break;
+ }
+ log.info("OK\n");
+
+ /*
+ #if 0
+ //* JJM : for Debug
+ printf("MII : Address %hhX ",inb(ioaddr+0x6c));
+ {
+ unsigned char st1,st2,adv1,adv2,l1,l2;
+
+ st1=ReadMII(1,ioaddr)>>8;
+ st2=ReadMII(1,ioaddr)&0xFF;
+ adv1=ReadMII(4,ioaddr)>>8;
+ adv2=ReadMII(4,ioaddr)&0xFF;
+ l1=ReadMII(5,ioaddr)>>8;
+ l2=ReadMII(5,ioaddr)&0xFF;
+ printf(" status 0x%hhX%hhX, advertising 0x%hhX%hhX, link 0x%hhX%hhX\n", st1,st2,adv1,adv2,l1,l2);
+ }
+ #endif
+ */
+ /* query MII to know LineSpeed,duplex mode */
+ byMIIvalue = getReg8(0x6d);
+ LineSpeed = byMIIvalue & MIISR_SPEED;
+ if (LineSpeed != 0){ //JJM
+ log.info("Linespeed=10Mbs");
+ } else {
+ log.info("Linespeed=100Mbs");
+ }
+
+ FDXFlag = queryAuto();
+ if (FDXFlag == 1) {
+ log.info(" Fullduplex\n");
+ setReg16(byCR0, CR_FDX);
+ } else {
+ log.info(" Halfduplex\n");
+ }
+
+
+ /* set MII 10 FULL ON */
+ WriteMII (17, 1, 1);
+
+ /* turn on MII link change */
+ MIICRbak = getReg8(byMIICR);
+ setReg8(byMIICR, MIICRbak & 0x7F);
+ MIIDelay ();
+ setReg8(byMIIAD, 0x41);
+ MIIDelay ();
+
+ /* while((inb(byMIIAD)&0x20)==0) ; */
+ setReg8(byMIICR, MIICRbak | 0x80);
+
+
+ /* The lower four bits are the media type. */
+ if (options > 0) {
+ full_duplex = (options & 16) != 0 ? 1 : 0;
+ default_...
[truncated message content] |
|
From: <ls...@us...> - 2007-05-05 20:51:08
|
Revision: 3182
http://jnode.svn.sourceforge.net/jnode/?rev=3182&view=rev
Author: lsantha
Date: 2007-05-05 13:51:01 -0700 (Sat, 05 May 2007)
Log Message:
-----------
VIA Rhine code restructuring. Simple things are working.
Modified Paths:
--------------
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineConstants.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineFlags.java
Added Paths:
-----------
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineDesc.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineRing.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineRxRing.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineTxRing.java
Removed Paths:
-------------
trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxDesc.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxDesc.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java
Deleted: trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxDesc.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxDesc.java 2007-05-03 06:30:23 UTC (rev 3181)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxDesc.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -1,81 +0,0 @@
-/*
- * $Id$
- */
-package org.jnode.driver.net.via_rhine;
-
-import org.jnode.system.ResourceManager;
-import org.jnode.system.MemoryResource;
-import org.jnode.net.SocketBuffer;
-import org.apache.log4j.Logger;
-import static org.jnode.driver.net.via_rhine.ViaRhineConstants.*;
-import org.vmmagic.unboxed.Address;
-
-
-/**
- * @author Levente S\xE1ntha
- */
-public class RxDesc {
- protected final Logger log = Logger.getLogger(getClass());
- byte[] desc;
- int descOffs;
- MemoryResource descMr;
- byte[] data;
- int dataOffs;
- MemoryResource dataMr;
- int descAddr;
- RxDesc(ResourceManager rm){
- desc = new byte[16 + 32];
- descMr = rm.asMemoryResource(desc);
- Address memAddr = descMr.getAddress();
-
- int addr = memAddr.toInt();
- descOffs = 0;
- // Align on 32-byte boundary
- while ((addr & 31) != 0) {
- addr++;
- descOffs++;
- }
- descAddr = memAddr.add(descOffs).toInt();
-
- descMr.setInt(descOffs, 0x80000000);
- descMr.setInt(descOffs + 4, PKT_BUF_SZ);
-
- data = new byte[PKT_BUF_SZ + 32];
- dataMr = rm.asMemoryResource(data);
-
- memAddr = dataMr.getAddress();
- addr = memAddr.toInt();
- dataOffs = 0;
- // Align on 32-byte boundary
- while ((addr & 31) != 0) {
- addr++;
- dataOffs++;
- }
-
- descMr.setInt(descOffs + 8, memAddr.add(dataOffs).toInt());
- }
-
- void setOwnBit(){
- descMr.setInt(descOffs, descMr.getInt(descOffs) | 0x80000000);
- }
-
- boolean isOwnBit(){
- return (descMr.getInt(descOffs) & 0x80000000) != 0;
- }
-
- void setNextDescAddr(int addr){
- descMr.setInt(descOffs + 12, addr);
- }
-
- int frameLength(){
- return descMr.getChar(descOffs + 2) & 0x000007FF;
- }
-
- SocketBuffer getPacket(){
- int ln = frameLength();
- log.debug("packetlength: " + ln);
- byte[] buf = new byte[ln];
- System.arraycopy(data, dataOffs, buf, 0, ln);
- return new SocketBuffer(buf, 0, ln);
- }
-}
Deleted: trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java 2007-05-03 06:30:23 UTC (rev 3181)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -1,43 +0,0 @@
-/*
- * $Id$
- */
-package org.jnode.driver.net.via_rhine;
-
-import static org.jnode.driver.net.via_rhine.ViaRhineConstants.*;
-import org.jnode.system.ResourceManager;
-import org.jnode.net.SocketBuffer;
-
-/**
- * @author Levente S\xE1ntha
- */
-public class RxRing {
- RxDesc[] ring;
- int ringAddr;
- int current;
- RxRing(ResourceManager rm){
- ring = new RxDesc[RX_RING_SIZE];
- for(int i = 0; i < RX_RING_SIZE; i++){
- ring[i] = new RxDesc(rm);
- if(i == 0)
- ringAddr = ring[0].descAddr;
- else
- ring[i - 1].setNextDescAddr(ring[i].descAddr);
-
-
- }
- ring[RX_RING_SIZE - 1].setNextDescAddr(ringAddr);
- }
-
-
- SocketBuffer getPacket(){
- return ring[current].getPacket();
- }
-
- RxDesc currentDesc(){
- return ring[current];
- }
-
- void next(){
- current = (current + 1) % RX_RING_SIZE;
- }
-}
Deleted: trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxDesc.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxDesc.java 2007-05-03 06:30:23 UTC (rev 3181)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxDesc.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -1,86 +0,0 @@
-/*
- * $Id$
- */
-package org.jnode.driver.net.via_rhine;
-
-import org.apache.log4j.Logger;
-import org.jnode.system.MemoryResource;
-import org.jnode.system.ResourceManager;
-import org.jnode.net.SocketBuffer;
-import static org.jnode.net.ethernet.EthernetConstants.*;
-import org.vmmagic.unboxed.Address;
-import java.util.Arrays;
-
-
-/**
- * @author Levente S\xE1ntha
- */
-public class TxDesc {
- protected final Logger log = Logger.getLogger(getClass());
- byte[] desc;
- int descOffs;
- MemoryResource descMr;
- byte[] data;
- int dataOffs;
- MemoryResource dataMr;
- int descAddr;
- TxDesc(ResourceManager rm){
- desc = new byte[16 + 32];
- descMr = rm.asMemoryResource(desc);
- Address memAddr = descMr.getAddress();
-
- int addr = memAddr.toInt();
- descOffs = 0;
- // Align on 32-byte boundary
- while ((addr & 31) != 0) {
- addr++;
- descOffs++;
- }
- descAddr = memAddr.add(descOffs).toInt();
-
- descMr.setInt(descOffs, 0x80000000);
- descMr.setInt(descOffs + 4, ViaRhineConstants.PKT_BUF_SZ);
-
- data = new byte[ViaRhineConstants.PKT_BUF_SZ + 32];
- dataMr = rm.asMemoryResource(data);
-
- memAddr = dataMr.getAddress();
- addr = memAddr.toInt();
- dataOffs = 0;
- // Align on 32-byte boundary
- while ((addr & 31) != 0) {
- addr++;
- dataOffs++;
- }
-
- descMr.setInt(descOffs + 8, memAddr.add(dataOffs).toInt());
- }
-
- void setOwnBit(){
- descMr.setInt(descOffs, descMr.getInt(descOffs) | 0x80000000);
- }
-
- boolean isOwnBit(){
- return (descMr.getInt(descOffs) & 0x80000000) != 0;
- }
-
- void setNextDescAddr(int addr){
- descMr.setInt(descOffs + 12, addr);
- }
-
- void setFrameLength(int size){
- descMr.setInt(descOffs + 4, ((descMr.getInt(descOffs + 4) & ~0x000007FF) | (size & 0x000007FF)));
- }
-
- void setPacket(SocketBuffer sb){
- int ln = sb.getSize();
- log.debug("packetlength: " + ln);
- sb.get(data, dataOffs, 0, ln);
-
- if(ln < ETH_ZLEN + 10){
- Arrays.fill(data, dataOffs + ln, dataOffs + ETH_ZLEN + 10, (byte)0);
- setFrameLength(ETH_ZLEN + 10);
- }
-
- }
-}
Deleted: trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java 2007-05-03 06:30:23 UTC (rev 3181)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -1,38 +0,0 @@
-/*
- * $Id$
- */
-package org.jnode.driver.net.via_rhine;
-
-import org.jnode.system.ResourceManager;
-import org.jnode.net.SocketBuffer;
-
-/**
- * @author Levente S\xE1ntha
- */
-public class TxRing {
- TxDesc[] ring;
- int ringAddr;
- int current;
- TxRing(ResourceManager rm){
- ring = new TxDesc[ViaRhineConstants.TX_RING_SIZE];
- for(int i = 0; i < ViaRhineConstants.TX_RING_SIZE; i++){
- ring[i] = new TxDesc(rm);
- if(i == 0)
- ringAddr = ring[0].descAddr;
- else
- ring[i - 1].setNextDescAddr(ring[i].descAddr);
-
-
- }
- ring[ViaRhineConstants.TX_RING_SIZE - 1].setNextDescAddr(ringAddr);
- }
-
-
- TxDesc currentDesc(){
- return ring[current];
- }
-
- void next(){
- current = (current + 1) % ViaRhineConstants.TX_RING_SIZE;
- }
-}
Modified: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineConstants.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineConstants.java 2007-05-03 06:30:23 UTC (rev 3181)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineConstants.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -6,72 +6,71 @@
/**
* @author Levente S\xE1ntha
*/
-public interface ViaRhineConstants {
- byte ioaddr = 0;
- byte byPAR0 = ioaddr;
- byte byRCR = ioaddr + 6;
- byte byTCR = ioaddr + 7;
- byte byCR0 = ioaddr + 8;
- byte byCR1 = ioaddr + 9;
- byte byISR0 = ioaddr + 0x0c;
- byte byISR1 = ioaddr + 0x0d;
- byte byIMR0 = ioaddr + 0x0e;
- byte byIMR1 = ioaddr + 0x0f;
- byte byMAR0 = ioaddr + 0x10;
- byte byMAR1 = ioaddr + 0x11;
- byte byMAR2 = ioaddr + 0x12;
- byte byMAR3 = ioaddr + 0x13;
- byte byMAR4 = ioaddr + 0x14;
- byte byMAR5 = ioaddr + 0x15;
- byte byMAR6 = ioaddr + 0x16;
- byte byMAR7 = ioaddr + 0x17;
- int dwCurrentRxDescAddr = ioaddr + 0x18;
- int dwCurrentTxDescAddr = ioaddr + 0x1c;
- int dwCurrentRDSE0 = ioaddr + 0x20;
- int dwCurrentRDSE1 = ioaddr + 0x24;
- int dwCurrentRDSE2 = ioaddr + 0x28;
- int dwCurrentRDSE3 = ioaddr + 0x2c;
- int dwNextRDSE0 = ioaddr + 0x30;
- int dwNextRDSE1 = ioaddr + 0x34;
- int dwNextRDSE2 = ioaddr + 0x38;
- int dwNextRDSE3 = ioaddr + 0x3c;
- int dwCurrentTDSE0 = ioaddr + 0x40;
- int dwCurrentTDSE1 = ioaddr + 0x44;
- int dwCurrentTDSE2 = ioaddr + 0x48;
- int dwCurrentTDSE3 = ioaddr + 0x4c;
- int dwNextTDSE0 = ioaddr + 0x50;
- int dwNextTDSE1 = ioaddr + 0x54;
- int dwNextTDSE2 = ioaddr + 0x58;
- int dwNextTDSE3 = ioaddr + 0x5c;
- int dwCurrRxDMAPtr = ioaddr + 0x60;
- int dwCurrTxDMAPtr = ioaddr + 0x64;
- int byMPHY = ioaddr + 0x6c;
- int byMIISR = ioaddr + 0x6d;
- int byBCR0 = ioaddr + 0x6e;
- int byBCR1 = ioaddr + 0x6f;
- int byMIICR = ioaddr + 0x70;
- int byMIIAD = ioaddr + 0x71;
- int wMIIDATA = ioaddr + 0x72;
- int byEECSR = ioaddr + 0x74;
- int byTEST = ioaddr + 0x75;
- int byGPIO = ioaddr + 0x76;
- int byCFGA = ioaddr + 0x78;
- int byCFGB = ioaddr + 0x79;
- int byCFGC = ioaddr + 0x7a;
- int byCFGD = ioaddr + 0x7b;
- int wTallyCntMPA = ioaddr + 0x7c;
- int wTallyCntCRC = ioaddr + 0x7d;
- int bySTICKHW = ioaddr + 0x83;
- int byWOLcrClr = ioaddr + 0xA4;
- int byWOLcgClr = ioaddr + 0xA7;
- int byPwrcsrClr = ioaddr + 0xAC;
+interface ViaRhineConstants {
+ int byPAR0 = 0;
+ int byRCR = 6;
+ int byTCR = 7;
+ int byCR0 = 8;
+ int byCR1 = 9;
+ int byISR0 = 0x0c;
+ int byISR1 = 0x0d;
+ int byIMR0 = 0x0e;
+ int byIMR1 = 0x0f;
+ int byMAR0 = 0x10;
+ int byMAR1 = 0x11;
+ int byMAR2 = 0x12;
+ int byMAR3 = 0x13;
+ int byMAR4 = 0x14;
+ int byMAR5 = 0x15;
+ int byMAR6 = 0x16;
+ int byMAR7 = 0x17;
+ int dwCurrentRxDescAddr = 0x18;
+ int dwCurrentTxDescAddr = 0x1c;
+ int dwCurrentRDSE0 = 0x20;
+ int dwCurrentRDSE1 = 0x24;
+ int dwCurrentRDSE2 = 0x28;
+ int dwCurrentRDSE3 = 0x2c;
+ int dwNextRDSE0 = 0x30;
+ int dwNextRDSE1 = 0x34;
+ int dwNextRDSE2 = 0x38;
+ int dwNextRDSE3 = 0x3c;
+ int dwCurrentTDSE0 = 0x40;
+ int dwCurrentTDSE1 = 0x44;
+ int dwCurrentTDSE2 = 0x48;
+ int dwCurrentTDSE3 = 0x4c;
+ int dwNextTDSE0 = 0x50;
+ int dwNextTDSE1 = 0x54;
+ int dwNextTDSE2 = 0x58;
+ int dwNextTDSE3 = 0x5c;
+ int dwCurrRxDMAPtr = 0x60;
+ int dwCurrTxDMAPtr = 0x64;
+ int byMPHY = 0x6c;
+ int byMIISR = 0x6d;
+ int byBCR0 = 0x6e;
+ int byBCR1 = 0x6f;
+ int byMIICR = 0x70;
+ int byMIIAD = 0x71;
+ int wMIIDATA = 0x72;
+ int byEECSR = 0x74;
+ int byTEST = 0x75;
+ int byGPIO = 0x76;
+ int byCFGA = 0x78;
+ int byCFGB = 0x79;
+ int byCFGC = 0x7a;
+ int byCFGD = 0x7b;
+ int wTallyCntMPA = 0x7c;
+ int wTallyCntCRC = 0x7d;
+ int bySTICKHW = 0x83;
+ int byWOLcrClr = 0xA4;
+ int byWOLcgClr = 0xA7;
+ int byPwrcsrClr = 0xAC;
+
/*--------------------- Exioaddr Definitions -------------------------*/
-/*
- * Bits in the RCR register
- */
-
+ /*
+ * Bits in the RCR register
+ */
int RCR_RRFT2 = 0x80;
int RCR_RRFT1 = 0x40;
int RCR_RRFT0 = 0x20;
@@ -81,10 +80,9 @@
int RCR_AR = 0x02;
int RCR_SEP = 0x01;
-/*
- * Bits in the TCR register
- */
-
+ /*
+ * Bits in the TCR register
+ */
int TCR_RTSF = 0x80;
int TCR_RTFT1 = 0x40;
int TCR_RTFT0 = 0x20;
@@ -92,10 +90,9 @@
int TCR_LB1 = 0x04; /* loopback[1] */
int TCR_LB0 = 0x02; /* loopback[0] */
-/*
- * Bits in the CR0 register
- */
-
+ /*
+ * Bits in the CR0 register
+ */
int CR0_RDMD = 0x40; /* rx descriptor polling demand */
int CR0_TDMD = 0x20; /* tx descriptor polling demand */
int CR0_TXON = 0x10;
@@ -104,10 +101,9 @@
int CR0_STRT = 0x02; /* start NIC */
int CR0_INIT = 0x01; /* start init process */
-/*
-* Bits in the CR1 register
-*/
-
+ /*
+ * Bits in the CR1 register
+ */
int CR1_SFRST = 0x80 /* software reset */;
int CR1_RDMD1 = 0x40 /* RDMD1 */;
int CR1_TDMD1 = 0x20 /* TDMD1 */;
@@ -117,10 +113,9 @@
int CR1_ETEN = 0x02 /* early tx mode */;
int CR1_EREN = 0x01 /* early rx mode */;
-/*
- * Bits in the CR register
- */
-
+ /*
+ * Bits in the CR register
+ */
int CR_RDMD = 0x0040 /* rx descriptor polling demand */;
int CR_TDMD = 0x0020 /* tx descriptor polling demand */;
int CR_TXON = 0x0010;
@@ -137,10 +132,9 @@
int CR_ETEN = 0x0200 /* early tx mode */;
int CR_EREN = 0x0100 /* early rx mode */;
-/*
- * Bits in the IMR0 register
- */
-
+ /*
+ * Bits in the IMR0 register
+ */
int IMR0_CNTM = 0x80;
int IMR0_BEM = 0x40;
int IMR0_RUM = 0x20;
@@ -150,14 +144,12 @@
int IMR0_PTXM = 0x02;
int IMR0_PRXM = 0x01;
-/* define imrshadow */
-
+ /* define imrshadow */
int IMRShadow = 0x5AFF;
-/*
- * Bits in the IMR1 register
- */
-
+ /*
+ * Bits in the IMR1 register
+ */
int IMR1_INITM = 0x80;
int IMR1_SRCM = 0x40;
int IMR1_NBFM = 0x10;
@@ -166,10 +158,9 @@
int IMR1_ETM = 0x02;
int IMR1_ERM = 0x01;
-/*
- * Bits in the ISR register
- */
-
+ /*
+ * Bits in the ISR register
+ */
int ISR_INITI = 0x8000;
int ISR_SRCI = 0x4000;
int ISR_ABTI = 0x2000;
@@ -187,10 +178,9 @@
int ISR_PTX = 0x0002;
int ISR_PRX = 0x0001;
-/*
- * Bits in the ISR0 register;
- */
-
+ /*
+ * Bits in the ISR0 register;
+ */
int ISR0_CNT = 0x80;
int ISR0_BE = 0x40;
int ISR0_RU = 0x20;
@@ -200,10 +190,9 @@
int ISR0_PTX = 0x02;
int ISR0_PRX = 0x01;
-/*
- * Bits in the ISR1 register
- */
-
+ /*
+ * Bits in the ISR1 register
+ */
int ISR1_INITI = 0x80;
int ISR1_SRCI = 0x40;
int ISR1_NORBF = 0x10;
@@ -211,23 +200,20 @@
int ISR1_ETI = 0x02;
int ISR1_ERI = 0x01;
-/* ISR ABNORMAL CONDITION */
-
+ /* ISR ABNORMAL CONDITION */
int ISR_ABNORMAL = ISR_BE + ISR_RU + ISR_TU + ISR_CNT + ISR_NORBF + ISR_PKTRA;
-/*
- * Bits in the MIISR register;
- */
-
+ /*
+ * Bits in the MIISR register;
+ */
int MIISR_MIIERR = 0x08;
int MIISR_MRERR = 0x04;
int MIISR_LNKFL = 0x02;
int MIISR_SPEED = 0x01;
-/*
- * Bits in the MIICR register;
- */
-
+ /*
+ * Bits in the MIICR register;
+ */
int MIICR_MAUTO = 0x80;
int MIICR_RCMD = 0x40;
int MIICR_WCMD = 0x20;
@@ -237,10 +223,9 @@
int MIICR_MDI = 0x02;
int MIICR_MDC = 0x01;
-/*
- * Bits in the EECSR register;
- */
-
+ /*
+ * Bits in the EECSR register;
+ */
int EECSR_EEPR = 0x80 /* eeprom programed status, 73h means programed */;
int EECSR_EMBP = 0x40 /* eeprom embeded programming */;
int EECSR_AUTOLD = 0x20 /* eeprom content reload */;
@@ -373,102 +358,47 @@
int PCI_REG_MODE3 = 0x53;
int MODE3_MIION = 0x04; /* in PCI_REG_MOD3 OF PCI space */
-/* Offsets to the device registers. */
- /*
-enum register_offsets {
- StationAddr=0x00, RxConfig=0x06, TxConfig=0x07, ChipCmd=0x08,
- IntrStatus=0x0C, IntrEnable=0x0E,
- MulticastFilter0=0x10, MulticastFilter1=0x14,
- RxRingPtr=0x18, TxRingPtr=0x1C, GFIFOTest=0x54,
- MIIPhyAddr=0x6C, MIIStatus=0x6D, PCIBusConfig=0x6E,
- MIICmd=0x70, MIIRegAddr=0x71, MIIData=0x72, MACRegEEcsr=0x74,
- ConfigA=0x78, ConfigB=0x79, ConfigC=0x7A, ConfigD=0x7B,
- RxMissed=0x7C, RxCRCErrs=0x7E, MiscCmd=0x81,
- StickyHW=0x83, IntrStatus2=0x84, WOLcrClr=0xA4, WOLcgClr=0xA7,
- PwrcsrClr=0xAC,
-};
-*/
+ /* Offsets to the device registers. */
+ int StationAddr = 0x00, RxConfig = 0x06, TxConfig = 0x07, ChipCmd = 0x08,
+ IntrStatus = 0x0C, IntrEnable = 0x0E,
+ MulticastFilter0 = 0x10, MulticastFilter1 = 0x14,
+ RxRingPtr = 0x18, TxRingPtr = 0x1C, GFIFOTest = 0x54,
+ MIIPhyAddr = 0x6C, MIIStatus = 0x6D, PCIBusConfig = 0x6E,
+ MIICmd = 0x70, MIIRegAddr = 0x71, MIIData = 0x72, MACRegEEcsr = 0x74,
+ ConfigA = 0x78, ConfigB = 0x79, ConfigC = 0x7A, ConfigD = 0x7B,
+ RxMissed = 0x7C, RxCRCErrs = 0x7E, MiscCmd = 0x81,
+ StickyHW = 0x83, IntrStatus2 = 0x84, WOLcrClr = 0xA4, WOLcgClr = 0xA7,
+ PwrcsrClr = 0xAC;
-/* Offsets to the device registers. */
- int StationAddr=0x00, RxConfig=0x06, TxConfig=0x07, ChipCmd=0x08,
- IntrStatus=0x0C, IntrEnable=0x0E,
- MulticastFilter0=0x10, MulticastFilter1=0x14,
- RxRingPtr=0x18, TxRingPtr=0x1C, GFIFOTest=0x54,
- MIIPhyAddr=0x6C, MIIStatus=0x6D, PCIBusConfig=0x6E,
- MIICmd=0x70, MIIRegAddr=0x71, MIIData=0x72, MACRegEEcsr=0x74,
- ConfigA=0x78, ConfigB=0x79, ConfigC=0x7A, ConfigD=0x7B,
- RxMissed=0x7C, RxCRCErrs=0x7E, MiscCmd=0x81,
- StickyHW=0x83, IntrStatus2=0x84, WOLcrClr=0xA4, WOLcgClr=0xA7,
- PwrcsrClr=0xAC;
+ /* Bits in the interrupt status/mask registers. */
+ int IntrRxDone = 0x0001, IntrRxErr = 0x0004, IntrRxEmpty = 0x0020,
+ IntrTxDone = 0x0002, IntrTxError = 0x0008, IntrTxUnderrun = 0x0210,
+ IntrPCIErr = 0x0040,
+ IntrStatsMax = 0x0080, IntrRxEarly = 0x0100,
+ IntrRxOverflow = 0x0400, IntrRxDropped = 0x0800, IntrRxNoBuf = 0x1000,
+ IntrTxAborted = 0x2000, IntrLinkChange = 0x4000,
+ IntrRxWakeUp = 0x8000,
+ IntrNormalSummary = 0x0003, IntrAbnormalSummary = 0xC260,
+ IntrTxDescRace = 0x080000, // mapped from IntrStatus2
+ IntrTxErrSummary = 0x082218;
-/* Bits in the interrupt status/mask registers. */
- /*
-enum intr_status_bits {
- IntrRxDone=0x0001, IntrRxErr=0x0004, IntrRxEmpty=0x0020,
- IntrTxDone=0x0002, IntrTxError=0x0008, IntrTxUnderrun=0x0210,
- IntrPCIErr=0x0040,
- IntrStatsMax=0x0080, IntrRxEarly=0x0100,
- IntrRxOverflow=0x0400, IntrRxDropped=0x0800, IntrRxNoBuf=0x1000,
- IntrTxAborted=0x2000, IntrLinkChange=0x4000,
- IntrRxWakeUp=0x8000,
- IntrNormalSummary=0x0003, IntrAbnormalSummary=0xC260,
- IntrTxDescRace=0x080000, // mapped from IntrStatus2
- IntrTxErrSummary=0x082218,
-};
-/* Bits in the interrupt status/mask registers. */
+ int DEFAULT_INTR = IntrRxDone | IntrRxErr | IntrRxEmpty |
+ IntrRxOverflow | IntrRxDropped | IntrRxNoBuf;
- int IntrRxDone=0x0001, IntrRxErr=0x0004, IntrRxEmpty=0x0020,
- IntrTxDone=0x0002, IntrTxError=0x0008, IntrTxUnderrun=0x0210,
- IntrPCIErr=0x0040,
- IntrStatsMax=0x0080, IntrRxEarly=0x0100,
- IntrRxOverflow=0x0400, IntrRxDropped=0x0800, IntrRxNoBuf=0x1000,
- IntrTxAborted=0x2000, IntrLinkChange=0x4000,
- IntrRxWakeUp=0x8000,
- IntrNormalSummary=0x0003, IntrAbnormalSummary=0xC260,
- IntrTxDescRace=0x080000, // mapped from IntrStatus2
- IntrTxErrSummary=0x082218;
-
-
-
-//#define DEFAULT_INTR (IntrRxDone | IntrRxErr | IntrRxEmpty| IntrRxOverflow | \
-// IntrRxDropped | IntrRxNoBuf)
-
- int DEFAULT_INTR = IntrRxDone | IntrRxErr | IntrRxEmpty|
- IntrRxOverflow | IntrRxDropped | IntrRxNoBuf;
-
-//enum rhine_revs {
-// int VT86C100A = 0x00;
-// int VTunknown0 = 0x20;
-// int VT6102 = 0x40;
-// int VT8231 = 0x50; /* Integrated MAC */
-// int VT8233 = 0x60; /* Integrated MAC */
-// int VT8235 = 0x74; /* Integrated MAC */
-// int VT8237 = 0x78; /* Integrated MAC */
-// int VTunknown1 = 0x7C;
-// int VT6105 = 0x80;
-// int VT6105_B0 = 0x83;
-// int VT6105L = 0x8A;
-// int VT6107 = 0x8C;
-// int VTunknown2 = 0x8E;
-// int VT6105M = 0x90;
-//};
-
-//enum rhine_revs {
- int VT86C100A = 0x00;
- int VTunknown0 = 0x20;
- int VT6102 = 0x40;
- int VT8231 = 0x50; /* Integrated MAC */
- int VT8233 = 0x60; /* Integrated MAC */
- int VT8235 = 0x74; /* Integrated MAC */
- int VT8237 = 0x78; /* Integrated MAC */
- int VTunknown1 = 0x7C;
- int VT6105 = 0x80;
- int VT6105_B0 = 0x83;
- int VT6105L = 0x8A;
- int VT6107 = 0x8C;
- int VTunknown2 = 0x8E;
- int VT6105M = 0x90;
-//};
-
+ //enum rhine_revs
+ int VT86C100A = 0x00;
+ int VTunknown0 = 0x20;
+ int VT6102 = 0x40;
+ int VT8231 = 0x50; /* Integrated MAC */
+ int VT8233 = 0x60; /* Integrated MAC */
+ int VT8235 = 0x74; /* Integrated MAC */
+ int VT8237 = 0x78; /* Integrated MAC */
+ int VTunknown1 = 0x7C;
+ int VT6105 = 0x80;
+ int VT6105_B0 = 0x83;
+ int VT6105L = 0x8A;
+ int VT6107 = 0x8C;
+ int VTunknown2 = 0x8E;
+ int VT6105M = 0x90;
}
\ No newline at end of file
Modified: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java 2007-05-03 06:30:23 UTC (rev 3181)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -21,47 +21,33 @@
import static org.jnode.net.ethernet.EthernetConstants.*;
import static org.jnode.driver.net.via_rhine.ViaRhineConstants.*;
import org.jnode.driver.net.ethernet.spi.Flags;
-import org.jnode.shell.CommandLine;
-import org.jnode.shell.help.ParsedArguments;
import java.io.*;
-import java.net.URL;
/**
* @author Levente S\xE1ntha
*/
-public class ViaRhineCore extends AbstractDeviceCore implements IRQHandler {
+class ViaRhineCore extends AbstractDeviceCore implements IRQHandler {
private final int ioBase;
private final IOResource io;
private final IRQResource irq;
private EthernetAddress hwAddress;
private ViaRhineDriver driver;
+ private ViaRhineRxRing rxRing;
+ private ViaRhineTxRing txRing;
- /*
- char devname[8]; // Used only for kernel debugging.
- const char *product_name;
- struct rhine_rx_desc *rx_ring;
- struct rhine_tx_desc *tx_ring;
- char *rx_buffs[RX_RING_SIZE];
- char *tx_buffs[TX_RING_SIZE];
+ /*
// temporary Rx buffers.
int chip_id;
int chip_revision;
- unsigned short ioaddr;
- unsigned int cur_rx, cur_tx; // The next free and used entries
+
unsigned int dirty_rx, dirty_tx;
// The saved address of a sent-in-place packet/buffer, for skfree().
struct sk_buff *tx_skbuff[TX_RING_SIZE];
unsigned char mc_filter[8]; // Current multicast filter.
char phys[4]; // MII device addresses.
- unsigned int tx_full:1; // The Tx queue is full.
- unsigned int full_duplex:1; // Full-duplex operation requested.
- unsigned int default_port:4; // Last dev->if_port value.
- unsigned int media2:4; // Secondary monitored media port.
- unsigned int medialock:1; // Don't sense media type.
- unsigned int mediasense:1; // Media sensing in progress.
*/
@@ -86,9 +72,6 @@
int medialock = 1; // Don't sense media type.
int mediasense = 1; // Media sensing in progress.
- RxRing rxRing;
- TxRing txRing;
-
public ViaRhineCore(ViaRhineDriver driver, Device device, ResourceOwner owner, Flags flags)
throws DriverException, ResourceNotFreeException{
this.driver = driver;
@@ -164,7 +147,7 @@
Thread.sleep(50);
if(!rxRing.currentDesc().isOwnBit()){
- SocketBuffer packet = rxRing.getPacket();
+ SocketBuffer packet = rxRing.currentDesc().getPacket();
driver.onReceive(packet);
log.debug("New packet");
log.debug(packet.getLinkLayerHeader().getSourceAddress());
@@ -203,22 +186,9 @@
setIRQEnabled(true);
}
- int my_INTR = IntrTxDone | IntrTxError | IntrTxUnderrun;
+ private static final int my_INTR = IntrTxDone | IntrTxError | IntrTxUnderrun;
private void printIntrStatus(){
- /*
- int IntrRxDone=0x0001, IntrRxErr=0x0004, IntrRxEmpty=0x0020,
- IntrTxDone=0x0002, IntrTxError=0x0008, IntrTxUnderrun=0x0210,
- IntrPCIErr=0x0040,
- IntrStatsMax=0x0080, IntrRxEarly=0x0100,
- IntrRxOverflow=0x0400, IntrRxDropped=0x0800, IntrRxNoBuf=0x1000,
- IntrTxAborted=0x2000, IntrLinkChange=0x4000,
- IntrRxWakeUp=0x8000,
- IntrNormalSummary=0x0003, IntrAbnormalSummary=0xC260,
- IntrTxDescRace=0x080000, // mapped from IntrStatus2
- IntrTxErrSummary=0x082218;
- */
-
int intr_status = getIntrStatus();
log.debug("Interrupt status word: 0x" + NumberUtils.hex(intr_status));
@@ -299,7 +269,6 @@
}
public HardwareAddress getHwAddress() {
- log.debug("getHwAddress");
return hwAddress;
}
@@ -311,16 +280,13 @@
public void disable() {
log.debug("disable()");
- /* merge reset and disable */
- //rhine_reset(nic);
+ // merge reset and disable
reset();
- /* Switch to loopback mode to avoid hardware races. */
- //writeb(0x60 | 0x01, byTCR);
+ // Switch to loopback mode to avoid hardware races.
setReg8(byTCR, 0x60 | 0x01);
- /* Stop the chip's Tx and Rx processes. */
- //writew(CR_STOP, byCR0);
+ // Stop the chip's Tx and Rx processes.
setReg16(byCR0, CR_STOP);
}
@@ -330,15 +296,8 @@
MIIDelay();
//init ring
- try {
- final ResourceManager rm = InitialNaming.lookup(ResourceManager.NAME);
- rxRing = new RxRing(rm);
- log.debug("Rx ring initialised");
- txRing = new TxRing(rm);
- log.debug("Tx ring initialised");
- } catch (NameNotFoundException ex) {
- throw new RuntimeException("Cannot find ResourceManager");
- }
+ initRing();
+
/*write TD RD Descriptor to MAC */
setReg32(dwCurrentRxDescAddr, rxRing.ringAddr);
@@ -398,60 +357,24 @@
setReg8(byRCR, 0x60 | rx_mode);
}
- private void reloadEEPROM()
- {
- //int i;
- //outb(0x20, byEECSR);
+ private void reloadEEPROM() {
setReg8(byEECSR, 0x20);
-
/* Typically 2 cycles to reload. */
- //for (i = 0; i < 150; i++)
- // if (! (inb(byEECSR) & 0x20))
- // break;
-
for (int i = 0; i < 150; i++)
if ( (getReg8(byEECSR) & 0x20) == 0)
break;
}
-
void initRing () {
- int i;
- tx_full = 0;
- cur_rx = cur_tx = 0;
- dirty_rx = dirty_tx = 0;
-
- for (i = 0; i < RX_RING_SIZE; i++) {
-
-// rx_ring[i].rxStatus_bits.own_bit = 1;
-// rx_ring[i].rxControl_bits.rx_buf_size = 1536;
-
- //--rx_ring[i].buf_addr_1 = virt_to_bus (tp->rx_buffs[i]);
- //--rx_ring[i].buf_addr_2 = virt_to_bus (&tp->rx_ring[i + 1]);
-
- /* printf("[%d]buf1=%hX,buf2=%hX",i,tp->rx_ring[i].buf_addr_1,tp->rx_ring[i].buf_addr_2); */
+ try {
+ final ResourceManager rm = InitialNaming.lookup(ResourceManager.NAME);
+ rxRing = new ViaRhineRxRing(rm);
+ log.debug("Rx ring initialised");
+ txRing = new ViaRhineTxRing(rm);
+ log.debug("Tx ring initialised");
+ } catch (NameNotFoundException ex) {
+ throw new RuntimeException("Cannot find ResourceManager");
}
- /* Mark the last entry as wrapping the ring. */
- /* tp->rx_ring[i-1].rx_ctrl.bits.rx_buf_size =1518; */
-
- //--rx_ring[i - 1].buf_addr_2 = virt_to_bus (&tp->rx_ring[0]);
-
- /*printf("[%d]buf1=%hX,buf2=%hX",i-1,tp->rx_ring[i-1].buf_addr_1,tp->rx_ring[i-1].buf_addr_2); */
-
- /* The Tx buffer descriptor is filled in as needed, but we
- do need to clear the ownership bit. */
-
- for (i = 0; i < TX_RING_SIZE; i++) {
-
-// tx_ring[i].txStatus_lw = 0;
-// tx_ring[i].txControl_lw = 0x00e08000;
- //--tx_ring[i].buf_addr_1 = virt_to_bus (tp->tx_buffs[i]);
- //--tx_ring[i].buf_addr_2 = virt...
[truncated message content] |
|
From: <ls...@us...> - 2008-06-15 13:01:49
|
Revision: 4243
http://jnode.svn.sourceforge.net/jnode/?rev=4243&view=rev
Author: lsantha
Date: 2008-06-15 06:01:47 -0700 (Sun, 15 Jun 2008)
Log Message:
-----------
Minor fixes.
Modified Paths:
--------------
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineConstants.java
trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java
Modified: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineConstants.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineConstants.java 2008-06-15 12:53:03 UTC (rev 4242)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineConstants.java 2008-06-15 13:01:47 UTC (rev 4243)
@@ -351,8 +351,8 @@
int NIC_LB_INTERNAL = 0x01;
int NIC_LB_PHY = 0x02; /* MII or Internal-10BaseT loopback */
- int TX_RING_SIZE = 2;
- int RX_RING_SIZE = 2;
+ int TX_RING_SIZE = 16;
+ int RX_RING_SIZE = 16;
int PKT_BUF_SZ = 1536; /* Size of each temporary Rx buffer. */
int PCI_REG_MODE3 = 0x53;
Modified: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java 2008-06-15 12:53:03 UTC (rev 4242)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineCore.java 2008-06-15 13:01:47 UTC (rev 4243)
@@ -113,7 +113,7 @@
final PCIHeaderType0 config = ((PCIDevice)device).getConfig().asHeaderType0();
final PCIBaseAddress[] addrs = config.getBaseAddresses();
if (addrs.length < 1) {
- throw new DriverException("Cannot find iobase: not base addresses");
+ throw new DriverException("Cannot find iobase: no base address");
}
if (!addrs[0].isIOSpace()) {
throw new DriverException("Cannot find iobase: first address is not I/O");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|