summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/testprot/tpdrvr/media.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/ndis/testprot/tpdrvr/media.c')
-rw-r--r--private/ntos/ndis/testprot/tpdrvr/media.c385
1 files changed, 385 insertions, 0 deletions
diff --git a/private/ntos/ndis/testprot/tpdrvr/media.c b/private/ntos/ndis/testprot/tpdrvr/media.c
new file mode 100644
index 000000000..8bdeff293
--- /dev/null
+++ b/private/ntos/ndis/testprot/tpdrvr/media.c
@@ -0,0 +1,385 @@
+/*++
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ media.c
+
+Abstract:
+
+ Functions used to determine information about a specific MAC, it's
+ packet size, and other media specifici information.
+
+Author:
+
+ Tom Adams (tomad) 14-Jul-1990
+
+Environment:
+
+ Kernel mode, FSD
+
+Revision History:
+
+ Tom Adams (tomad) 03-Jan-1991 Changed to support all MAC types.
+
+ Sanjeev Katariya (sanjeevk) 04-6-1993
+ Added native ARCNET support
+--*/
+
+#include <ndis.h>
+
+#include "tpdefs.h"
+#include "media.h"
+
+//
+// Medium array is used during NdisOpenAdapter to determine the
+// media being supported by the card.
+//
+
+//
+// STARTCHANGE
+//
+NDIS_MEDIUM NdisMediumArray[NDIS_MEDIUM_ARRAY_SIZE] = {
+ NdisMedium802_3,
+ NdisMedium802_5,
+ NdisMediumDix,
+ NdisMediumFddi,
+ NdisMediumArcnet878_2
+};
+//
+// STOPCHANGE
+//
+
+
+NDIS_STATUS
+TpInitMedia(
+ POPEN_BLOCK OpenP,
+ ULONG FrameSize
+ )
+
+/*++
+
+Routine Description:
+
+ TpInitMedia initializes the media data structure with information
+ specific to the media type that will be test on. The information
+ descibes the size of various elements of a packet for the media in
+ question, and is used when creating and destroying packets, etc.
+
+Arguments:
+
+ MediumType - the specific NDIS Media that is being used in this test.
+
+Return Value:
+
+ PTP_MEDIA_INFO - a pointer to the media information structure for
+ the Media being used in this test.
+
+--*/
+
+{
+ NDIS_STATUS Status;
+
+ Status = NdisAllocateMemory(
+ (PVOID *)&OpenP->Media,
+ sizeof( TP_MEDIA_INFO ),
+ 0,
+ HighestAddress
+ );
+
+ if ( Status != NDIS_STATUS_SUCCESS )
+ {
+ IF_TPDBG ( TP_DEBUG_RESOURCES )
+ {
+ TpPrint0("TpInitMedia: failed to allocate Media buffer.\n");
+ }
+ return NDIS_STATUS_RESOURCES;
+ }
+ else
+ {
+ NdisZeroMemory( OpenP->Media,sizeof( TP_MEDIA_INFO ) );
+ }
+
+ OpenP->Media->MediumType = NdisMediumArray[OpenP->MediumIndex];
+ OpenP->Media->MaxPacketLen = FrameSize;
+
+ switch( NdisMediumArray[OpenP->MediumIndex] )
+ {
+
+ case NdisMedium802_5: // TokenRing
+
+ OpenP->Media->HeaderSize = TOKENRING_HEADER_SIZE;
+ OpenP->Media->Padding = TOKENRING_PADDING;
+ OpenP->Media->AddressLen = TOKENRING_ADDRESS_LEN;
+ OpenP->Media->DestAddrOffset = TOKENRING_DEST_ADDRESS_OFFSET;
+ OpenP->Media->SrcAddrOffset = TOKENRING_SRC_ADDRESS_OFFSET;
+ break;
+
+ case NdisMedium802_3: // Ethernet
+ case NdisMediumDix:
+
+ OpenP->Media->HeaderSize = ETHERNET_HEADER_SIZE;
+ OpenP->Media->Padding = ETHERNET_PADDING;
+ OpenP->Media->AddressLen = ETHERNET_ADDRESS_LEN;
+ OpenP->Media->DestAddrOffset = ETHERNET_DEST_ADDRESS_OFFSET;
+ OpenP->Media->SrcAddrOffset = ETHERNET_SRC_ADDRESS_OFFSET;
+ break;
+
+ case NdisMediumFddi:
+
+ OpenP->Media->HeaderSize = FDDI_HEADER_SIZE;
+ OpenP->Media->Padding = FDDI_PADDING;
+ OpenP->Media->AddressLen = FDDI_ADDRESS_LEN;
+ OpenP->Media->DestAddrOffset = FDDI_DEST_ADDRESS_OFFSET;
+ OpenP->Media->SrcAddrOffset = FDDI_SRC_ADDRESS_OFFSET;
+ break;
+
+ //
+ // STARTCHANGE
+ //
+
+ case NdisMediumArcnet878_2:
+
+ OpenP->Media->HeaderSize = ARCNET_HEADER_SIZE;
+ OpenP->Media->Padding = ARCNET_PADDING;
+ OpenP->Media->AddressLen = ARCNET_ADDRESS_LEN;
+ OpenP->Media->DestAddrOffset = ARCNET_DEST_ADDRESS_OFFSET;
+ OpenP->Media->SrcAddrOffset = ARCNET_SRC_ADDRESS_OFFSET;
+ break;
+ //
+ // STOPCHANGE
+ //
+
+ default:
+ IF_TPDBG ( TP_DEBUG_RESOURCES )
+ {
+ TpPrint0("TpInitMedia: Invalid media type.\n");
+ }
+
+ return NDIS_STATUS_NOT_SUPPORTED;
+ }
+
+ return NDIS_STATUS_SUCCESS;
+}
+
+
+BOOLEAN
+TpInitMediaHeader(
+ PFUNC1_PACKET F1Packet,
+ PTP_MEDIA_INFO Media,
+ PUCHAR DestAddr,
+ PUCHAR SrcAddr,
+ INT PacketSize
+ )
+{
+ PUCHAR p;
+ PUCHAR q;
+ USHORT DataSizeShort;
+ SHORT i;
+
+// DestAddr += (ADDRESS_LENGTH - Media->AddressLen);
+// SrcAddr += (ADDRESS_LENGTH - Media->AddressLen);
+
+ switch( Media->MediumType )
+ {
+ case NdisMediumDix:
+ case NdisMedium802_3:
+
+ p = (PUCHAR)&F1Packet->media.e.DestAddress[0];
+ q = (PUCHAR)&F1Packet->media.e.SrcAddress[0];
+
+ for ( i = 0 ; i < Media->AddressLen ; i++ )
+ {
+ *p++ = *DestAddr++;
+ *q++ = *SrcAddr++;
+ }
+
+ DataSizeShort = (USHORT)( PacketSize - Media->HeaderSize );
+
+ F1Packet->media.e.PacketSize_Hi = (UCHAR)( DataSizeShort >> 8 );
+ F1Packet->media.e.PacketSize_Lo = (UCHAR)DataSizeShort;
+
+ break;
+
+
+ case NdisMedium802_5:
+
+ F1Packet->media.tr.AC = 0x10;
+ F1Packet->media.tr.FC = 0x40;
+
+ p = (PUCHAR)&F1Packet->media.tr.DestAddress[0];
+ q = (PUCHAR)&F1Packet->media.tr.SrcAddress[0];
+
+ for ( i = 0 ; i < Media->AddressLen ; i++ )
+ {
+ *p++ = *DestAddr++;
+ *q++ = *SrcAddr++;
+ }
+
+ break;
+
+
+ case NdisMediumFddi:
+
+ F1Packet->media.fddi.FC = 0x57;
+
+ p = (PUCHAR)&F1Packet->media.fddi.DestAddress[0];
+ q = (PUCHAR)&F1Packet->media.fddi.SrcAddress[0];
+
+ for ( i = 0 ; i < Media->AddressLen ; i++ )
+ {
+ *p++ = *DestAddr++;
+ *q++ = *SrcAddr++;
+ }
+
+ break;
+
+ //
+ // STARTCHANGE
+ //
+ case NdisMediumArcnet878_2:
+
+ F1Packet->media.a.ProtocolID = ARCNET_DEFAULT_PROTOCOLID;
+
+ p = (PUCHAR)&F1Packet->media.a.DestAddress[0];
+ q = (PUCHAR)&F1Packet->media.a.SrcAddress[0];
+
+ for ( i = 0 ; i < Media->AddressLen ; i++ )
+ {
+ *p++ = *DestAddr++;
+ *q++ = *SrcAddr++;
+ }
+
+ break;
+ //
+ // STOPCHANGE
+ //
+
+ default:
+ IF_TPDBG ( TP_DEBUG_RESOURCES )
+ {
+ TpPrint0("TpStressInitPacketHeader: Unsupported MAC Type\n");
+ }
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+VOID
+TpInitPoolMediaHeader(
+ PFUNC1_PACKET F1Packet,
+ PTP_MEDIA_INFO Media,
+ PUCHAR DestAddr
+ )
+{
+ USHORT i;
+
+// DestAddr += (ADDRESS_LENGTH - Media->AddressLen);
+
+ switch( Media->MediumType )
+ {
+ case NdisMediumDix:
+ case NdisMedium802_3:
+ for ( i = 0 ; i < (USHORT)Media->AddressLen ; i++ )
+ {
+ F1Packet->media.e.DestAddress[i] = *DestAddr++;
+ }
+ break;
+ case NdisMedium802_5:
+ for ( i = 0 ; i < (USHORT)Media->AddressLen ; i++ )
+ {
+ F1Packet->media.tr.DestAddress[i] = *DestAddr++;
+ }
+ break;
+ case NdisMediumFddi:
+ for ( i = 0 ; i < (USHORT)Media->AddressLen ; i++ )
+ {
+ F1Packet->media.fddi.DestAddress[i] = *DestAddr++;
+ }
+ break;
+ //
+ // STARTCHANGE
+ //
+ case NdisMediumArcnet878_2:
+ for ( i = 0 ; i < (USHORT)Media->AddressLen ; i++ )
+ {
+ F1Packet->media.a.DestAddress[i] = *DestAddr++;
+ }
+ break;
+ //
+ // STOPCHANGE
+ //
+ default:
+ IF_TPDBG ( TP_DEBUG_RESOURCES )
+ {
+ TpPrint0("TpStressSetPoolPacketInfo: Unsupported MAC Type\n");
+ }
+ break;
+ }
+}
+
+
+VOID
+TpInitTruncatedMediaHeader(
+ PFUNC1_PACKET F1Packet,
+ PTP_MEDIA_INFO Media,
+ PUCHAR DestAddr,
+ INT PacketSize
+ )
+{
+ USHORT DataSizeShort;
+ USHORT i;
+
+// DestAddr += (ADDRESS_LENGTH - Media->AddressLen);
+
+ switch( Media->MediumType )
+ {
+ case NdisMediumDix:
+ case NdisMedium802_3:
+
+ DataSizeShort = (USHORT)( PacketSize - Media->HeaderSize );
+
+ F1Packet->media.e.PacketSize_Hi = (UCHAR)( DataSizeShort >> 8 );
+ F1Packet->media.e.PacketSize_Lo = (UCHAR)DataSizeShort;
+
+ for ( i=0;i<(USHORT)Media->AddressLen;i++ )
+ {
+ F1Packet->media.e.DestAddress[i] = *DestAddr++;
+ }
+ break;
+
+ case NdisMedium802_5:
+ for ( i=0;i<(USHORT)Media->AddressLen;i++ )
+ {
+ F1Packet->media.tr.DestAddress[i] = *DestAddr++;
+ }
+ break;
+
+ case NdisMediumFddi:
+ for ( i=0;i<(USHORT)Media->AddressLen;i++ )
+ {
+ F1Packet->media.fddi.DestAddress[i] = *DestAddr++;
+ }
+ break;
+ //
+ // STARTCHANGE
+ //
+ case NdisMediumArcnet878_2:
+ for ( i = 0 ; i < (USHORT)Media->AddressLen ; i++ )
+ {
+ F1Packet->media.a.DestAddress[i] = *DestAddr++;
+ }
+ break;
+ //
+ // STOPCHANGE
+ //
+ default:
+ IF_TPDBG ( TP_DEBUG_RESOURCES )
+ {
+ TpPrint0("TpStressSetTruncatedPacketInfo: Unsupported MAC Type\n");
+ }
+ break;
+ }
+}