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 >
Text File  |  2004-05-23  |  4KB  |  136 lines

  1. diff -urN pearpc/src/io/rtl8139/rtl8139.cc pearpc-verbose14/src/io/rtl8139/rtl8139.cc
  2. --- pearpc/src/io/rtl8139/rtl8139.cc    2004-05-24 12:27:05.000000000 -0500
  3. +++ pearpc-verbose14/src/io/rtl8139/rtl8139.cc    2004-05-24 13:45:41.000000000 -0500
  4. @@ -208,8 +208,6 @@
  5.      bool        mTxEnabled;
  6.      bool        mUpStalled;
  7.      bool        mDnStalled;
  8. -    byte        mRxPacket[MAX_PACKET_SIZE];
  9. -    uint        mRxPacketSize;
  10.      int        mRingBufferSize;
  11.      bool         mGoodBSA;
  12.      enet_iface_t    mENetIf;
  13. @@ -267,7 +265,6 @@
  14.      mTxEnabled = false;
  15.      mUpStalled = false;
  16.      mDnStalled = false;
  17. -    mRxPacketSize = 0;
  18.      // EEPROM config (FIXME: endianess)
  19.  
  20.      // set up mac address
  21. @@ -635,48 +632,49 @@
  22.      return retval;
  23.  }
  24.  
  25. -void handlePacket()
  26. +void handleRxQueue()
  27.  {
  28.      uint16        header;
  29.      uint16        psize;
  30. +    byte            rxPacket[MAX_PACKET_SIZE];
  31. +    uint16          rxPacketSize;
  32.      byte        tmp;
  33.      byte        broadcast[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
  34.  
  35. -    mRxPacketSize = read(mENetIf.fd, mRxPacket, sizeof mRxPacket);
  36. -    if (!mGoodBSA) {
  37. -        mRxPacketSize = 0;
  38. -    } else {
  39. +    while(1) {
  40. +        rxPacketSize = read(mENetIf.fd, rxPacket, sizeof rxPacket);
  41.          if (mVerbose) IO_RTL8139_TRACE("got packet from the world at large\n");
  42.          if (mVerbose > 1) {
  43. -            dumpMem(mRxPacket, mRxPacketSize);
  44. +            dumpMem(rxPacket, rxPacketSize);
  45.          }
  46.          header = 0;
  47. -        if (mRxPacketSize < 64) {
  48. -            for ( ; mRxPacketSize < 60; mRxPacketSize++) {
  49. -                mRxPacket[mRxPacketSize] = 0;
  50. +        if (rxPacketSize < 64) {
  51. +            for ( ; rxPacketSize < 60; rxPacketSize++) {
  52. +                rxPacket[rxPacketSize] = 0;
  53.              }
  54.              //header |= Rx_RUNT; // set runt status
  55.          }
  56.          /* pad to a 4 byte boundary */
  57. -        for (int i = 4-(mRxPacketSize % 4); i != 0; i--) {
  58. -            mRxPacket[mRxPacketSize++] = 0;
  59. +        for (int i = 4-(rxPacketSize % 4); i != 0; i--) {
  60. +            rxPacket[rxPacketSize++] = 0;
  61. +        }
  62. +        if (memcmp(rxPacket, broadcast, 6) == 0) {
  63. +            header |= Rx_BAR;
  64.          }
  65. -        if (memcmp((byte*)&(mRxPacket[0]), (byte*)&(mRegisters.id0), 6) == 0) {
  66. +        sys_lock_mutex(mLock);
  67. +        if (memcmp(rxPacket, (byte*)&(mRegisters.id0), 6) == 0) {
  68.              //    if (mVerbose) IO_RTL8139_TRACE("Physical Address Match\n");
  69.              header |= Rx_PAM;
  70.          }
  71. -        if (memcmp((byte*)&(mRxPacket[0]), broadcast, 6) == 0) {
  72. -            header |= Rx_BAR;
  73. -        }
  74.          // check crc?
  75.          header |= Rx_ROK;
  76. -        psize = mRxPacketSize;
  77. +        psize = rxPacketSize;
  78.          mPackets[mHead].packet[0] = header;
  79.          mPackets[mHead].packet[1] = header>>8;
  80.          mPackets[mHead].packet[2] = psize;
  81.          mPackets[mHead].packet[3] = psize>>8;
  82. -        memcpy(&(mPackets[mHead].packet[4]), mRxPacket, mRxPacketSize);
  83. -        mPackets[mHead].size = mRxPacketSize+4;
  84. +        memcpy(&(mPackets[mHead].packet[4]), rxPacket, rxPacketSize);
  85. +        mPackets[mHead].size = rxPacketSize+4;
  86.          if (mHead == mTail) { /* first recent packet buffer */
  87.              mHead = (mHead+1) % MAX_PACKETS;
  88.          } else {
  89. @@ -688,34 +686,13 @@
  90.              }
  91.          }
  92.          if (mRegisters.CommandRegister & 1) { /* no packets in process, kick one out */
  93. -            sys_lock_mutex(mLock);
  94.              transferPacket(true);
  95. -            sys_unlock_mutex(mLock);
  96.          }
  97. +        sys_unlock_mutex(mLock);
  98.      }
  99.  }
  100.  
  101. -/* new */
  102. -void handleRxQueue()
  103. -{
  104. -    fd_set        rfds;
  105. -    fd_set        zerofds;
  106. -    int        err;
  107. -
  108. -    FD_ZERO(&rfds);
  109. -    FD_ZERO(&zerofds);
  110. -    FD_SET(mENetIf.fd, &rfds);
  111. -
  112. -    mRxPacketSize = 0; // no packets at the moment
  113. -    while (1) {
  114. -        err = select(mENetIf.fd+1, &rfds, &zerofds, &zerofds, NULL);
  115. -        if (err > 0) {
  116. -            handlePacket();
  117. -        }
  118. -    }
  119. -}
  120. -
  121. -};
  122. +}; // end of rtl8139 class
  123.  
  124.  static void *rtl8139HandleRxQueue(void *nic)
  125.  {
  126. @@ -735,9 +712,6 @@
  127.  
  128.  void rtl8139_init()
  129.  {
  130. -    String tunstr_;
  131. -    char   tun_name[1024];
  132. -
  133.      int verbose = 0;
  134.  
  135.      verbose = gConfig->getConfigInt(RTL8139_KEY_VERBOSE); 
  136.