home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.urbanrage.com
/
2015-02-07.ftp.urbanrage.com.tar
/
ftp.urbanrage.com
/
pub
/
pearpc
/
pearpc-verbose14-rtl8139.patch
< prev
next >
Wrap
Text File
|
2004-05-23
|
4KB
|
136 lines
diff -urN pearpc/src/io/rtl8139/rtl8139.cc pearpc-verbose14/src/io/rtl8139/rtl8139.cc
--- pearpc/src/io/rtl8139/rtl8139.cc 2004-05-24 12:27:05.000000000 -0500
+++ pearpc-verbose14/src/io/rtl8139/rtl8139.cc 2004-05-24 13:45:41.000000000 -0500
@@ -208,8 +208,6 @@
bool mTxEnabled;
bool mUpStalled;
bool mDnStalled;
- byte mRxPacket[MAX_PACKET_SIZE];
- uint mRxPacketSize;
int mRingBufferSize;
bool mGoodBSA;
enet_iface_t mENetIf;
@@ -267,7 +265,6 @@
mTxEnabled = false;
mUpStalled = false;
mDnStalled = false;
- mRxPacketSize = 0;
// EEPROM config (FIXME: endianess)
// set up mac address
@@ -635,48 +632,49 @@
return retval;
}
-void handlePacket()
+void handleRxQueue()
{
uint16 header;
uint16 psize;
+ byte rxPacket[MAX_PACKET_SIZE];
+ uint16 rxPacketSize;
byte tmp;
byte broadcast[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
- mRxPacketSize = read(mENetIf.fd, mRxPacket, sizeof mRxPacket);
- if (!mGoodBSA) {
- mRxPacketSize = 0;
- } else {
+ while(1) {
+ rxPacketSize = read(mENetIf.fd, rxPacket, sizeof rxPacket);
if (mVerbose) IO_RTL8139_TRACE("got packet from the world at large\n");
if (mVerbose > 1) {
- dumpMem(mRxPacket, mRxPacketSize);
+ dumpMem(rxPacket, rxPacketSize);
}
header = 0;
- if (mRxPacketSize < 64) {
- for ( ; mRxPacketSize < 60; mRxPacketSize++) {
- mRxPacket[mRxPacketSize] = 0;
+ if (rxPacketSize < 64) {
+ for ( ; rxPacketSize < 60; rxPacketSize++) {
+ rxPacket[rxPacketSize] = 0;
}
//header |= Rx_RUNT; // set runt status
}
/* pad to a 4 byte boundary */
- for (int i = 4-(mRxPacketSize % 4); i != 0; i--) {
- mRxPacket[mRxPacketSize++] = 0;
+ for (int i = 4-(rxPacketSize % 4); i != 0; i--) {
+ rxPacket[rxPacketSize++] = 0;
+ }
+ if (memcmp(rxPacket, broadcast, 6) == 0) {
+ header |= Rx_BAR;
}
- if (memcmp((byte*)&(mRxPacket[0]), (byte*)&(mRegisters.id0), 6) == 0) {
+ sys_lock_mutex(mLock);
+ if (memcmp(rxPacket, (byte*)&(mRegisters.id0), 6) == 0) {
// if (mVerbose) IO_RTL8139_TRACE("Physical Address Match\n");
header |= Rx_PAM;
}
- if (memcmp((byte*)&(mRxPacket[0]), broadcast, 6) == 0) {
- header |= Rx_BAR;
- }
// check crc?
header |= Rx_ROK;
- psize = mRxPacketSize;
+ psize = rxPacketSize;
mPackets[mHead].packet[0] = header;
mPackets[mHead].packet[1] = header>>8;
mPackets[mHead].packet[2] = psize;
mPackets[mHead].packet[3] = psize>>8;
- memcpy(&(mPackets[mHead].packet[4]), mRxPacket, mRxPacketSize);
- mPackets[mHead].size = mRxPacketSize+4;
+ memcpy(&(mPackets[mHead].packet[4]), rxPacket, rxPacketSize);
+ mPackets[mHead].size = rxPacketSize+4;
if (mHead == mTail) { /* first recent packet buffer */
mHead = (mHead+1) % MAX_PACKETS;
} else {
@@ -688,34 +686,13 @@
}
}
if (mRegisters.CommandRegister & 1) { /* no packets in process, kick one out */
- sys_lock_mutex(mLock);
transferPacket(true);
- sys_unlock_mutex(mLock);
}
+ sys_unlock_mutex(mLock);
}
}
-/* new */
-void handleRxQueue()
-{
- fd_set rfds;
- fd_set zerofds;
- int err;
-
- FD_ZERO(&rfds);
- FD_ZERO(&zerofds);
- FD_SET(mENetIf.fd, &rfds);
-
- mRxPacketSize = 0; // no packets at the moment
- while (1) {
- err = select(mENetIf.fd+1, &rfds, &zerofds, &zerofds, NULL);
- if (err > 0) {
- handlePacket();
- }
- }
-}
-
-};
+}; // end of rtl8139 class
static void *rtl8139HandleRxQueue(void *nic)
{
@@ -735,9 +712,6 @@
void rtl8139_init()
{
- String tunstr_;
- char tun_name[1024];
-
int verbose = 0;
verbose = gConfig->getConfigInt(RTL8139_KEY_VERBOSE);