|
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_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 () {
@@ -684,7 +607,6 @@
// destination.writeTo(buf, 0);
// hwAddress.writeTo(buf, 6);
txRing.currentDesc().setOwnBit();
- txRing.currentDesc().setFrameLength(buf.getSize());
txRing.currentDesc().setPacket(buf);
log.debug("\n" + hexDump(buf.toByteArray()) + "\n");
Added: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineDesc.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineDesc.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineDesc.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -0,0 +1,67 @@
+/*
+ * $Id$
+ */
+package org.jnode.driver.net.via_rhine;
+
+import org.jnode.system.MemoryResource;
+import org.jnode.system.ResourceManager;
+import static org.jnode.driver.net.via_rhine.ViaRhineConstants.PKT_BUF_SZ;
+import org.apache.log4j.Logger;
+import org.vmmagic.unboxed.Address;
+
+/**
+ * @author Levente S\xE1ntha
+ */
+class ViaRhineDesc {
+ private static final int OWN_BIT_MASK = 0x80000000;
+ protected final Logger log = Logger.getLogger(getClass());
+ byte[] desc;
+ int descOffs;
+ MemoryResource descMr;
+ byte[] data;
+ int dataOffs;
+ MemoryResource dataMr;
+ int descAddr;
+
+ public ViaRhineDesc(ResourceManager rm) {
+ desc = new byte[16 + 32];
+ descMr = rm.asMemoryResource(desc);
+ Address descma = descMr.getAddress();
+ descOffs = align32(descma);
+ descAddr = descma.add(descOffs).toInt();
+ data = new byte[PKT_BUF_SZ + 32];
+ dataMr = rm.asMemoryResource(data);
+ Address datma = dataMr.getAddress();
+ dataOffs = align32(datma);
+ descMr.setInt(descOffs + 8, datma.add(dataOffs).toInt());
+ }
+
+ void setOwnBit(){
+ descMr.setInt(descOffs, descMr.getInt(descOffs) | OWN_BIT_MASK);
+ }
+
+ boolean isOwnBit(){
+ return (descMr.getInt(descOffs) & OWN_BIT_MASK) != 0;
+ }
+
+ void setNextDescAddr(int addr){
+ descMr.setInt(descOffs + 12, addr);
+ }
+
+ /**
+ * Align an addres on 32-byte boundary.
+ * @param addr the address
+ * @return the the aligned address offset relative to addr
+ */
+ private int align32(Address addr){
+ int i_addr = addr.toInt();
+ int offs = 0;
+
+ while ((i_addr & 31) != 0) {
+ i_addr++;
+ offs++;
+ }
+
+ return offs;
+ }
+}
Modified: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineFlags.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineFlags.java 2007-05-03 06:30:23 UTC (rev 3181)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineFlags.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -9,7 +9,7 @@
/**
* @author Levente S\xE1ntha
*/
-public class ViaRhineFlags implements Flags {
+class ViaRhineFlags implements Flags {
private final String name;
public ViaRhineFlags(ConfigurationElement config) {
Added: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineRing.java
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineRing.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineRing.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -0,0 +1,42 @@
+/*
+ * $Id$
+ */
+package org.jnode.driver.net.via_rhine;
+
+import org.jnode.system.ResourceManager;
+import java.util.Arrays;
+
+/**
+ * @author Levente S\xE1ntha
+ */
+abstract class ViaRhineRing<T extends ViaRhineDesc> {
+ final int RING_SIZE;
+ ViaRhineDesc[] ring;
+ int ringAddr;
+ int current;
+
+ ViaRhineRing(ResourceManager rm, int size){
+ this.RING_SIZE = size;
+ ring = new ViaRhineDesc[RING_SIZE];
+ for(int i = 0; i < RING_SIZE; i++){
+ ring[i] = createDescr(rm);
+ if(i == 0)
+ ringAddr = ring[0].descAddr;
+ else
+ ring[i - 1].setNextDescAddr(ring[i].descAddr);
+
+
+ }
+ ring[RING_SIZE - 1].setNextDescAddr(ringAddr);
+ }
+
+ abstract ViaRhineDesc createDescr(ResourceManager rm);
+
+ T currentDesc(){
+ return (T) ring[current];
+ }
+
+ void next(){
+ current = (current + 1) % RING_SIZE;
+ }
+}
Copied: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineRxRing.java (from rev 3178, trunk/net/src/driver/org/jnode/driver/net/via_rhine/RxRing.java)
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineRxRing.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineRxRing.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -0,0 +1,45 @@
+/*
+ * $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
+ */
+class ViaRhineRxRing extends ViaRhineRing<ViaRhineRxRing.RxDesc> {
+ ViaRhineRxRing(ResourceManager rm){
+ super(rm, RX_RING_SIZE);
+ }
+
+ RxDesc createDescr(ResourceManager rm) {
+ return new RxDesc(rm);
+ }
+
+ static class RxDesc extends ViaRhineDesc{
+ RxDesc(ResourceManager rm){
+ super(rm);
+ setOwnBit();
+ setDataBufferSize(PKT_BUF_SZ);
+ }
+
+ private void setDataBufferSize(int size) {
+ descMr.setInt(descOffs + 4, size);
+ }
+
+ int getFrameLength(){
+ return descMr.getChar(descOffs + 2) & 0x000007FF;
+ }
+
+ SocketBuffer getPacket(){
+ int ln = getFrameLength();
+ log.debug("packetlength: " + ln);
+ byte[] buf = new byte[ln];
+ System.arraycopy(data, dataOffs, buf, 0, ln);
+ return new SocketBuffer(buf, 0, ln);
+ }
+ }
+}
Copied: trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineTxRing.java (from rev 3178, trunk/net/src/driver/org/jnode/driver/net/via_rhine/TxRing.java)
===================================================================
--- trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineTxRing.java (rev 0)
+++ trunk/net/src/driver/org/jnode/driver/net/via_rhine/ViaRhineTxRing.java 2007-05-05 20:51:01 UTC (rev 3182)
@@ -0,0 +1,52 @@
+/*
+ * $Id$
+ */
+package org.jnode.driver.net.via_rhine;
+
+import java.util.Arrays;
+import static org.jnode.driver.net.via_rhine.ViaRhineConstants.PKT_BUF_SZ;
+import static org.jnode.driver.net.via_rhine.ViaRhineConstants.TX_RING_SIZE;
+import org.jnode.net.SocketBuffer;
+import static org.jnode.net.ethernet.EthernetConstants.ETH_ZLEN;
+import org.jnode.system.ResourceManager;
+
+/**
+ * @author Levente S\xE1ntha
+ */
+class ViaRhineTxRing extends ViaRhineRing<ViaRhineTxRing.TxDesc> {
+ ViaRhineTxRing(ResourceManager rm) {
+ super(rm, TX_RING_SIZE);
+ }
+
+ TxDesc createDescr(ResourceManager rm) {
+ return new TxDesc(rm);
+ }
+
+ static class TxDesc extends ViaRhineDesc {
+ TxDesc(ResourceManager rm) {
+ super(rm);
+ setControlStatus();
+ }
+
+ private void setControlStatus() {
+ descMr.setInt(descOffs + 4, descMr.getInt(descOffs + 4) | 0x00e08000);
+ }
+
+ void setFrameLength(int size) {
+ descMr.setInt(descOffs + 4, ((descMr.getInt(descOffs + 4) & ~0x000007FF) | (size & 0x000007FF)));
+ }
+
+ void setPacket(SocketBuffer sb) {
+ int size = sb.getSize();
+ log.debug("packetlength: " + size);
+ sb.get(data, dataOffs, 0, size);
+
+ if (size < ETH_ZLEN) {
+ Arrays.fill(data, dataOffs + size, dataOffs + ETH_ZLEN, (byte) 0);
+ setFrameLength(ETH_ZLEN);
+ } else {
+ setFrameLength(size);
+ }
+ }
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|