From: Robert Dickenson Date: Tue, 24 Sep 2002 14:34:41 +0000 (+0000) Subject: Minor fix to get ROS pinging reliably over ne2000 as tested on hardware and bochs. X-Git-Tag: ReactOS-0.0.21~147 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=6ee5647f7bcb9bad5e3f3af4936d1a9856b06960 Minor fix to get ROS pinging reliably over ne2000 as tested on hardware and bochs. svn path=/trunk/; revision=3542 --- diff --git a/reactos/drivers/net/dd/ne2000/include/ne2000.h b/reactos/drivers/net/dd/ne2000/include/ne2000.h index b630afe075c..0da7d5035e8 100644 --- a/reactos/drivers/net/dd/ne2000/include/ne2000.h +++ b/reactos/drivers/net/dd/ne2000/include/ne2000.h @@ -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 diff --git a/reactos/drivers/net/dd/ne2000/ne2000/8390.c b/reactos/drivers/net/dd/ne2000/ne2000/8390.c index 59a69994476..2c285d2a529 100644 --- a/reactos/drivers/net/dd/ne2000/ne2000/8390.c +++ b/reactos/drivers/net/dd/ne2000/ne2000/8390.c @@ -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); diff --git a/reactos/drivers/net/dd/ne2000/ne2000/main.c b/reactos/drivers/net/dd/ne2000/ne2000/main.c index b4178a2800c..be3acee2071 100644 --- a/reactos/drivers/net/dd/ne2000/ne2000/main.c +++ b/reactos/drivers/net/dd/ne2000/ne2000/main.c @@ -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; diff --git a/reactos/drivers/net/ndis/ndis/miniport.c b/reactos/drivers/net/ndis/ndis/miniport.c index 3b1a69d0a0b..cd1d3e77627 100644 --- a/reactos/drivers/net/ndis/ndis/miniport.c +++ b/reactos/drivers/net/ndis/ndis/miniport.c @@ -7,12 +7,19 @@ * REVISIONS: * CSH 01/08-2000 Created */ +#define DBG #include #include #ifdef DBG #include #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,