[RTL8139]

- Fix receive stalling if more than 10 packets are in the receive window
- Tune configuration to use larger DMA transfers and begin DMA earlier

svn path=/trunk/; revision=59429
This commit is contained in:
Cameron Gutman
2013-07-05 08:11:18 +00:00
parent 7630a9f60a
commit 25a49804c0
2 changed files with 16 additions and 9 deletions
+10 -2
View File
@@ -78,7 +78,6 @@ MiniportHandleInterrupt (
)
{
PRTL_ADAPTER adapter = (PRTL_ADAPTER)MiniportAdapterContext;
ULONG i;
ULONG txStatus;
UCHAR command;
PPACKET_HEADER nicHeader;
@@ -146,7 +145,7 @@ MiniportHandleInterrupt (
//
if (adapter->InterruptPending & (R_I_RXOK | R_I_RXERR))
{
for (i = 0; i < MAX_RECEIVES_PER_INT; i++)
for (;;)
{
NdisRawReadPortUchar(adapter->IoBase + R_CMD, &command);
if (command & R_CMD_RXEMPTY)
@@ -200,6 +199,15 @@ MiniportHandleInterrupt (
adapter->ReceiveOffset += nicHeader->PacketLength + sizeof(PACKET_HEADER);
adapter->ReceiveOffset = (adapter->ReceiveOffset + 3) & ~3;
NdisRawWritePortUshort(adapter->IoBase + R_CAPR, adapter->ReceiveOffset - 0x10);
if (adapter->InterruptPending & (R_I_RXOVRFLW | R_I_FIFOOVR))
{
//
// We can only clear these interrupts once CAPR has been reset
//
NdisRawWritePortUshort(adapter->IoBase + R_IS, R_I_RXOVRFLW | R_I_FIFOOVR);
adapter->InterruptPending &= ~(R_I_RXOVRFLW | R_I_FIFOOVR);
}
}
NdisMEthIndicateReceiveComplete(adapter->MiniportAdapterHandle);
+6 -7
View File
@@ -12,9 +12,8 @@
#define RESOURCE_LIST_TAG 'Rltr'
#define MAX_RESET_ATTEMPTS 25
#define MAX_RECEIVES_PER_INT 10
#define RECEIVE_BUFFER_SIZE (32768)
#define FULL_RECEIVE_BUFFER_SIZE (32768 + 16 + 2048)
#define RECEIVE_BUFFER_SIZE (65536)
#define FULL_RECEIVE_BUFFER_SIZE (65536 + 16 + 2048)
#define RECV_CRC_LENGTH 4
#define MINIMUM_FRAME_SIZE 60
@@ -22,11 +21,11 @@
#define DRIVER_VERSION 1
// 32K RX buffer, 512 byte DMA bursts
#define RC_VAL (0x0001680)
// 1/2 packet early RX, 512 byte FIFO threshold, 64K RX buffer, unlimited DMA bursts, WRAP
#define RC_VAL (0x800BF80)
// 1024 byte DMA bursts
#define TC_VAL (0x600)
// 2048 byte DMA bursts
#define TC_VAL (0x700)
typedef struct _RTL_ADAPTER {
NDIS_HANDLE MiniportAdapterHandle;