mirror of
https://github.com/reactos/reactos.git
synced 2026-06-09 17:33:50 +08:00
Minor fix to get ROS pinging reliably over ne2000 as tested on hardware and bochs.
svn path=/trunk/; revision=3542
This commit is contained in:
@@ -54,6 +54,7 @@
|
||||
|
||||
/* Default number of transmit buffers */
|
||||
#define DRIVER_DEFAULT_TX_BUFFER_COUNT 12
|
||||
#define BUFFERS_PER_TX_BUF 1
|
||||
|
||||
/* Interrupt Mask Register value */
|
||||
#define DRIVER_INTERRUPT_MASK IMR_ALLE - IMR_RDCE
|
||||
|
||||
@@ -502,10 +502,22 @@ VOID NICStartTransmit(
|
||||
*/
|
||||
{
|
||||
UINT Length;
|
||||
UCHAR FrameStart;
|
||||
UCHAR Tmp;
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||
|
||||
//FrameStart = Adapter->TXStart + Adapter->TXCurrent * DRIVER_BLOCK_SIZE;
|
||||
//FrameStart = Adapter->TXStart;
|
||||
FrameStart = (UCHAR)(Adapter->TXStart + (UCHAR)(Adapter->TXCurrent * BUFFERS_PER_TX_BUF));
|
||||
|
||||
/* Set start of frame */
|
||||
NdisRawWritePortUchar(Adapter->IOBase + PG0_TPSR,
|
||||
Adapter->TXStart + Adapter->TXCurrent * DRIVER_BLOCK_SIZE);
|
||||
NdisRawReadPortUchar(Adapter->IOBase + PG0_TPSR, &Tmp);
|
||||
// NdisRawWritePortUchar(Adapter->IOBase + PG0_TPSR,
|
||||
// Adapter->TXStart + Adapter->TXCurrent * DRIVER_BLOCK_SIZE);
|
||||
|
||||
NdisRawWritePortUchar(Adapter->IOBase + PG0_TPSR, FrameStart);
|
||||
//NDIS_DbgPrint(MID_TRACE, ("Setting start of frame to (%d).\n", FrameStart));
|
||||
|
||||
/* Set length of frame */
|
||||
Length = Adapter->TXSize[Adapter->TXCurrent];
|
||||
@@ -515,8 +527,10 @@ VOID NICStartTransmit(
|
||||
/* Start transmitting */
|
||||
NdisRawWritePortUchar(Adapter->IOBase + PG0_CR, CR_STA | CR_TXP | CR_RD2);
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Transmitting. Buffer (%d) Size (%d).\n",
|
||||
NDIS_DbgPrint(MID_TRACE, ("Transmitting. FrameStart (%d) TXCurrent (%d) TXStart (%d) Length (%d).\n\n",
|
||||
FrameStart,
|
||||
Adapter->TXCurrent,
|
||||
Adapter->TXStart,
|
||||
Length));
|
||||
|
||||
}
|
||||
@@ -698,7 +712,6 @@ VOID NICWriteDataAlign(
|
||||
|
||||
|
||||
/* Now output some data */
|
||||
|
||||
Count = Length;
|
||||
|
||||
/* Initialize RSAR0 and RSAR1 - Remote Start Address Registers */
|
||||
@@ -853,7 +866,7 @@ VOID NICIndicatePacket(
|
||||
Adapter->PacketOffset + sizeof(PACKET_HEADER),
|
||||
IndicateLength + DRIVER_HEADER_SIZE);
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Indicating (%d) bytes.\n", IndicateLength));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Indicating (%d) bytes.\n", IndicateLength));
|
||||
|
||||
#if 0
|
||||
NDIS_DbgPrint(MAX_TRACE, ("FRAME:\n"));
|
||||
@@ -965,7 +978,7 @@ VOID NICWritePacket(
|
||||
&SrcBuffer,
|
||||
&Adapter->TXSize[Adapter->TXNext]);
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Packet Size (%d) is now (%d).\n",
|
||||
NDIS_DbgPrint(MID_TRACE, ("Packet (%d) is now size (%d).\n",
|
||||
Adapter->TXNext,
|
||||
Adapter->TXSize[Adapter->TXNext]));
|
||||
|
||||
@@ -1109,7 +1122,7 @@ VOID HandleReceive(
|
||||
|
||||
if (Adapter->BufferOverflow) {
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Receive ring overflow.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Receive ring overflow.\n"));
|
||||
|
||||
/* Select page 0 and stop the NIC */
|
||||
NdisRawWritePortUchar(Adapter->IOBase + PG0_CR, CR_STP | CR_RD2 | CR_PAGE0);
|
||||
@@ -1149,7 +1162,7 @@ VOID HandleReceive(
|
||||
}
|
||||
|
||||
if (Adapter->ReceiveError) {
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Receive error.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Receive error.\n"));
|
||||
|
||||
/* Skip this packet */
|
||||
Adapter->NextPacket = Adapter->CurrentPage;
|
||||
@@ -1161,15 +1174,15 @@ VOID HandleReceive(
|
||||
for (;;) {
|
||||
NICGetCurrentPage(Adapter);
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Current page (0x%X) NextPacket (0x%X).\n",
|
||||
NDIS_DbgPrint(MID_TRACE, ("Current page (0x%X) NextPacket (0x%X).\n",
|
||||
Adapter->CurrentPage,
|
||||
Adapter->NextPacket));
|
||||
|
||||
if (Adapter->CurrentPage == Adapter->NextPacket) {
|
||||
NDIS_DbgPrint(MAX_TRACE, ("No more packets.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("No more packets.\n"));
|
||||
break;
|
||||
} else {
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Got a packet in the receive ring.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Got a packet in the receive ring.\n"));
|
||||
|
||||
/* Read packet from receive buffer ring */
|
||||
NICReadPacket(Adapter);
|
||||
@@ -1185,7 +1198,7 @@ VOID HandleReceive(
|
||||
}
|
||||
|
||||
if ((Adapter->TransmitPending) && (Adapter->TXCurrent != -1)) {
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Retransmitting current packet at (%d).\n", Adapter->TXCurrent));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Retransmitting current packet at (%d).\n", Adapter->TXCurrent));
|
||||
/* Retransmit packet */
|
||||
NICStartTransmit(Adapter);
|
||||
Adapter->TransmitPending = FALSE;
|
||||
@@ -1207,6 +1220,10 @@ VOID HandleTransmit(
|
||||
UINT Length;
|
||||
UINT BufferCount;
|
||||
|
||||
// PIP_PACKET pIPPacket;
|
||||
// pIPPacket = (PIP_PACKET)
|
||||
// DisplayIPPacket(pIPPacket);
|
||||
|
||||
if (Adapter->TransmitError) {
|
||||
/* FIXME: Retransmit now or let upper layer protocols handle retransmit? */
|
||||
Adapter->TransmitError = FALSE;
|
||||
@@ -1216,7 +1233,7 @@ VOID HandleTransmit(
|
||||
Length = Adapter->TXSize[Adapter->TXCurrent];
|
||||
BufferCount = (Length + DRIVER_BLOCK_SIZE - 1) / DRIVER_BLOCK_SIZE;
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Freeing (%d) buffers at (%d).\n",
|
||||
NDIS_DbgPrint(MID_TRACE, ("Freeing (%d) buffers at (%d).\n",
|
||||
BufferCount,
|
||||
Adapter->TXCurrent));
|
||||
|
||||
@@ -1225,7 +1242,7 @@ VOID HandleTransmit(
|
||||
Adapter->TXCurrent = (Adapter->TXCurrent + BufferCount) % Adapter->TXCount;
|
||||
|
||||
if (Adapter->TXSize[Adapter->TXCurrent] == 0) {
|
||||
NDIS_DbgPrint(MAX_TRACE, ("No more packets in transmit buffer.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("No more packets in transmit buffer.\n"));
|
||||
|
||||
Adapter->TXCurrent = -1;
|
||||
}
|
||||
@@ -1256,7 +1273,7 @@ VOID MiniportHandleInterrupt(
|
||||
ISRMask = Adapter->InterruptMask;
|
||||
NdisRawReadPortUchar(Adapter->IOBase + PG0_ISR, &ISRValue);
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("ISRValue (0x%X).\n", ISRValue));
|
||||
NDIS_DbgPrint(MID_TRACE, ("ISRValue (0x%X).\n", ISRValue));
|
||||
|
||||
Adapter->InterruptStatus |= (ISRValue & ISRMask);
|
||||
|
||||
@@ -1267,7 +1284,7 @@ VOID MiniportHandleInterrupt(
|
||||
Mask = 0x01;
|
||||
while (Adapter->InterruptStatus != 0x00) {
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Adapter->InterruptStatus (0x%X) Mask (0x%X).\n",
|
||||
NDIS_DbgPrint(MID_TRACE, ("Adapter->InterruptStatus (0x%X) Mask (0x%X).\n",
|
||||
Adapter->InterruptStatus, Mask));
|
||||
|
||||
/* Find next interrupt type */
|
||||
@@ -1276,7 +1293,7 @@ VOID MiniportHandleInterrupt(
|
||||
|
||||
switch (Adapter->InterruptStatus & Mask) {
|
||||
case ISR_OVW:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Overflow interrupt.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Overflow interrupt.\n"));
|
||||
/* Overflow. Handled almost the same way as a receive interrupt */
|
||||
Adapter->BufferOverflow = TRUE;
|
||||
|
||||
@@ -1286,13 +1303,13 @@ VOID MiniportHandleInterrupt(
|
||||
break;
|
||||
|
||||
case ISR_RXE:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Receive error interrupt.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Receive error interrupt.\n"));
|
||||
NICUpdateCounters(Adapter);
|
||||
|
||||
Adapter->ReceiveError = TRUE;
|
||||
|
||||
case ISR_PRX:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Receive interrupt.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Receive interrupt.\n"));
|
||||
|
||||
HandleReceive(Adapter);
|
||||
|
||||
@@ -1300,13 +1317,13 @@ VOID MiniportHandleInterrupt(
|
||||
break;
|
||||
|
||||
case ISR_TXE:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Transmit error interrupt.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Transmit error interrupt.\n"));
|
||||
NICUpdateCounters(Adapter);
|
||||
|
||||
Adapter->TransmitError = TRUE;
|
||||
|
||||
case ISR_PTX:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Transmit interrupt.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Transmit interrupt.\n"));
|
||||
|
||||
HandleTransmit(Adapter);
|
||||
|
||||
@@ -1314,7 +1331,7 @@ VOID MiniportHandleInterrupt(
|
||||
break;
|
||||
|
||||
case ISR_CNT:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Counter interrupt.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Counter interrupt.\n"));
|
||||
/* Counter overflow. Read counters from the NIC */
|
||||
NICUpdateCounters(Adapter);
|
||||
|
||||
@@ -1322,7 +1339,7 @@ VOID MiniportHandleInterrupt(
|
||||
break;
|
||||
|
||||
default:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Unknown interrupt. Adapter->InterruptStatus (0x%X).\n", Adapter->InterruptStatus));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Unknown interrupt. Adapter->InterruptStatus (0x%X).\n", Adapter->InterruptStatus));
|
||||
Adapter->InterruptStatus &= ~Mask;
|
||||
break;
|
||||
}
|
||||
@@ -1333,7 +1350,7 @@ VOID MiniportHandleInterrupt(
|
||||
|
||||
NdisRawReadPortUchar(Adapter->IOBase + PG0_ISR, &ISRValue);
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("ISRValue (0x%X).\n", ISRValue));
|
||||
NDIS_DbgPrint(MID_TRACE, ("ISRValue (0x%X).\n", ISRValue));
|
||||
|
||||
Adapter->InterruptStatus |= (ISRValue & ISRMask);
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#ifdef DBG
|
||||
|
||||
/* See debug.h for debug/trace constants */
|
||||
//DWORD DebugTraceLevel = MID_TRACE;
|
||||
ULONG DebugTraceLevel = MIN_TRACE;
|
||||
|
||||
#endif /* DBG */
|
||||
@@ -130,7 +131,9 @@ VOID MiniportHalt(
|
||||
Adapter->IOBase);
|
||||
|
||||
/* Remove adapter from global adapter list */
|
||||
RemoveEntryList(&Adapter->ListEntry);
|
||||
if ((&Adapter->ListEntry)->Blink != NULL) {
|
||||
RemoveEntryList(&Adapter->ListEntry);
|
||||
}
|
||||
|
||||
/* Free adapter context area */
|
||||
NdisFreeMemory(Adapter, sizeof(NIC_ADAPTER), 0);
|
||||
@@ -225,9 +228,9 @@ NDIS_STATUS MiniportInitialize(
|
||||
return Status;
|
||||
}
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("BOARDDATA:\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("BOARDDATA:\n"));
|
||||
for (i = 0; i < 4; i++) {
|
||||
NDIS_DbgPrint(MAX_TRACE, ("%02X %02X %02X %02X\n",
|
||||
NDIS_DbgPrint(MID_TRACE, ("%02X %02X %02X %02X\n",
|
||||
Adapter->SAPROM[i*4+0],
|
||||
Adapter->SAPROM[i*4+1],
|
||||
Adapter->SAPROM[i*4+2],
|
||||
@@ -249,12 +252,12 @@ NDIS_STATUS MiniportInitialize(
|
||||
/* Setup the NIC */
|
||||
NICSetup(Adapter);
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("TXStart (0x%X) TXCount (0x%X) PageStart (0x%X)\n",
|
||||
NDIS_DbgPrint(MID_TRACE, ("TXStart (0x%X) TXCount (0x%X) PageStart (0x%X)\n",
|
||||
Adapter->TXStart,
|
||||
Adapter->TXCount,
|
||||
Adapter->PageStart));
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("PageStop (0x%X) CurrentPage (0x%X) NextPacket (0x%X).\n",
|
||||
NDIS_DbgPrint(MID_TRACE, ("PageStop (0x%X) CurrentPage (0x%X) NextPacket (0x%X).\n",
|
||||
Adapter->PageStop,
|
||||
Adapter->CurrentPage,
|
||||
Adapter->NextPacket));
|
||||
@@ -413,7 +416,7 @@ NDIS_STATUS MiniportQueryInformation(
|
||||
GenericULONG = DRIVER_FRAME_SIZE;
|
||||
break;
|
||||
case OID_GEN_PROTOCOL_OPTIONS:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("OID_GEN_PROTOCOL_OPTIONS.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("OID_GEN_PROTOCOL_OPTIONS.\n"));
|
||||
Status = NDIS_STATUS_NOT_SUPPORTED;
|
||||
break;
|
||||
case OID_GEN_MAC_OPTIONS:
|
||||
@@ -437,14 +440,14 @@ NDIS_STATUS MiniportQueryInformation(
|
||||
CopySize = DRIVER_LENGTH_OF_ADDRESS;
|
||||
break;
|
||||
case OID_802_3_MULTICAST_LIST:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("OID_802_3_MULTICAST_LIST.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("OID_802_3_MULTICAST_LIST.\n"));
|
||||
Status = NDIS_STATUS_NOT_SUPPORTED;
|
||||
break;
|
||||
case OID_802_3_MAXIMUM_LIST_SIZE:
|
||||
GenericULONG = Adapter->MaxMulticastListSize;
|
||||
break;
|
||||
case OID_802_3_MAC_OPTIONS:
|
||||
NDIS_DbgPrint(MAX_TRACE, ("OID_802_3_MAC_OPTIONS.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("OID_802_3_MAC_OPTIONS.\n"));
|
||||
Status = NDIS_STATUS_NOT_SUPPORTED;
|
||||
break;
|
||||
default:
|
||||
@@ -531,7 +534,7 @@ NDIS_STATUS MiniportSend(
|
||||
{
|
||||
PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext;
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Queueing packet.\n"));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Queueing packet.\n"));
|
||||
|
||||
#ifdef NOCARD
|
||||
NdisMSendComplete(Adapter->MiniportAdapterHandle,
|
||||
@@ -738,7 +741,7 @@ NDIS_STATUS MiniportTransferData(
|
||||
SrcData = RecvStart;
|
||||
}
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Transferred (%d) bytes.\n", BytesToTransfer));
|
||||
NDIS_DbgPrint(MID_TRACE, ("Transferred (%d) bytes.\n", BytesToTransfer));
|
||||
|
||||
*BytesTransferred = BytesCopied;
|
||||
|
||||
|
||||
@@ -7,12 +7,19 @@
|
||||
* REVISIONS:
|
||||
* CSH 01/08-2000 Created
|
||||
*/
|
||||
#define DBG
|
||||
#include <miniport.h>
|
||||
#include <protocol.h>
|
||||
#ifdef DBG
|
||||
#include <buffer.h>
|
||||
#endif /* DBG */
|
||||
|
||||
#ifdef DBG
|
||||
/* See debug.h for debug/trace constants */
|
||||
ULONG DebugTraceLevel = MIN_TRACE;
|
||||
//ULONG DebugTraceLevel = (MAX_TRACE + DEBUG_MINIPORT);
|
||||
#endif /* DBG */
|
||||
|
||||
|
||||
/* Number of media we know */
|
||||
#define MEDIA_ARRAY_SIZE 15
|
||||
@@ -111,18 +118,18 @@ MiniIndicateData(
|
||||
DbgPrint("HEADER:");
|
||||
p = HeaderBuffer;
|
||||
for (i = 0; i < HeaderBufferSize; i++) {
|
||||
if (i % 12 == 0)
|
||||
if (i % 16 == 0)
|
||||
DbgPrint("\n%04X ", i);
|
||||
DbgPrint("%02X ", *p);
|
||||
(ULONG_PTR)p += 1;
|
||||
}
|
||||
|
||||
DbgPrint("\nFRAME:\n");
|
||||
DbgPrint("\nFRAME:");
|
||||
|
||||
p = LookaheadBuffer;
|
||||
Length = (LookaheadBufferSize < 64)? LookaheadBufferSize : 64;
|
||||
for (i = 0; i < Length; i++) {
|
||||
if (i % 12 == 0)
|
||||
if (i % 16 == 0)
|
||||
DbgPrint("\n%04X ", i);
|
||||
DbgPrint("%02X ", *p);
|
||||
(ULONG_PTR)p += 1;
|
||||
@@ -135,6 +142,11 @@ MiniIndicateData(
|
||||
|
||||
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
||||
CurrentEntry = Adapter->ProtocolListHead.Flink;
|
||||
|
||||
if (CurrentEntry == &Adapter->ProtocolListHead) {
|
||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("WARNING: No upper protocol layer.\n"));
|
||||
}
|
||||
|
||||
while (CurrentEntry != &Adapter->ProtocolListHead) {
|
||||
AdapterBinding = CONTAINING_RECORD(CurrentEntry,
|
||||
ADAPTER_BINDING,
|
||||
|
||||
Reference in New Issue
Block a user