summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/testprot/tpdrvr/media.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/ndis/testprot/tpdrvr/media.h')
-rw-r--r--private/ntos/ndis/testprot/tpdrvr/media.h350
1 files changed, 350 insertions, 0 deletions
diff --git a/private/ntos/ndis/testprot/tpdrvr/media.h b/private/ntos/ndis/testprot/tpdrvr/media.h
new file mode 100644
index 000000000..8bc1e5677
--- /dev/null
+++ b/private/ntos/ndis/testprot/tpdrvr/media.h
@@ -0,0 +1,350 @@
+/*++
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ media.h
+
+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.
+
+ SanjeevK (sanjeevk) 04-06-1993
+ 1. Added Arcnet support
+
+--*/
+
+//
+// Medium array is used during NdisOpenAdapter to determine the
+// media being supported by the card.
+//
+#define NDIS_MEDIUM_ARRAY_SIZE 5
+
+extern NDIS_MEDIUM NdisMediumArray[NDIS_MEDIUM_ARRAY_SIZE];
+
+//
+// Media Specific Information used to describe the form of a packet and
+// the device being used in this instance.
+//
+// The Media of interest are
+//
+// 802.3
+// 802.5 (TokenRing)
+// FDDI
+// ARCNET
+//
+// No special differentiation will be made between 802.3 and DIX
+//
+
+typedef struct _TP_MEDIA_INFO {
+ NDIS_MEDIUM MediumType; // MAC type being used
+ USHORT HeaderSize; // Packet Header size if (exists)
+ USHORT Padding; // Pad to align TP_PACKET_HEADER
+ USHORT AddressLen; // Address length for the Media
+ USHORT SrcAddrOffset;
+ USHORT DestAddrOffset;
+ ULONG MaxPacketLen; // Maximum packet length for Media
+} TP_MEDIA_INFO, *PTP_MEDIA_INFO;
+
+//
+// Ethernet Specific Information
+//
+// The Ethernet Packet Header is constructed as follows:
+//
+// +------------------------------------------+
+// | Dest | Src | Sz | Data |
+// +------------------------------------------+
+//
+// The Src and Dest fields represent the source and destination addresses
+// and are 6 bytes long each, the Sz field represents represents the size
+// of the Data, and finally there is the Data area itself.
+//
+
+#define ETHERNET_ADDRESS_LEN 6
+
+#define ETHERNET_SRC_ADDRESS_OFFSET ETHERNET_ADDRESS_LEN
+
+#define ETHERNET_DEST_ADDRESS_OFFSET 0
+
+#define ETHERNET_DATASIZE_LEN 2
+
+#define ETHERNET_DATA_LEN 1500
+
+#define ETHERNET_HEADER_SIZE (( ETHERNET_ADDRESS_LEN * 2 ) + \
+ ETHERNET_DATASIZE_LEN )
+
+#define ETHERNET_PACKET_SIZE ( ETHERNET_HEADER_SIZE + \
+ ETHERNET_DATA_LEN )
+
+#define ETHERNET_MIN_DATA_LEN 46
+
+#define ETHERNET_MIN_PACKET_SIZE ( ETHERNET_HEADER_SIZE + \
+ ETHERNET_MIN_DATA_LEN )
+
+#define ETHERNET_PADDING 2
+
+//
+// Default Adapter name to be input from Configuration Manager
+//
+//#define ETHERNET_ADAPTER_NAME "\\device\\elnkii"
+
+//
+// TokenRing Specific Information
+//
+//
+// The Token Ring Packet Header is constructed as follows:
+//
+// +---------------------------------------------------+
+// | AC | FC | Dest | Src | Data |
+// +---------------------------------------------------+
+//
+// The AC and FC fields are used to store tokenring information, each is
+// one byte long. The Src and Dest fields represent the source and
+// destination addresses and are 6 bytes long each, and finally there
+// is the Data area itself.
+//
+
+#define TOKENRING_ACFC_SIZE 2
+
+#define TOKENRING_ADDRESS_LEN 6
+
+#define TOKENRING_SRC_ADDRESS_OFFSET ( TOKENRING_ADDRESS_LEN + \
+ TOKENRING_ACFC_SIZE )
+
+#define TOKENRING_DEST_ADDRESS_OFFSET TOKENRING_ACFC_SIZE
+
+#define TOKENRING_HEADER_SIZE (( TOKENRING_ADDRESS_LEN * 2) + \
+ TOKENRING_ACFC_SIZE )
+
+#define TOKENRING_DATA_LEN ( 8192 - TOKENRING_HEADER_SIZE )
+// 17K if 16MB or 8K if 4MB
+
+#define TOKENRING_PACKET_SIZE ( TOKENRING_HEADER_SIZE + \
+ TOKENRING_DATA_LEN )
+
+#define TOKENRING_PADDING 2
+
+//
+// FDDI Specific Information
+//
+//
+// The FDDI Packet Header is constructed as follows:
+//
+// +----------------------------------------------+
+// | XX | Dest | Src | Data |
+// +----------------------------------------------+
+//
+// The XX field is used to store fddi information, it is one byte
+// long. The Src and Dest fields represent the source and destination
+// addresses and are 6 bytes long each, and finally there is the
+// Data area itself.
+//
+
+#define FDDI_XX_SIZE 1
+
+#define FDDI_ADDRESS_LEN 6
+
+#define FDDI_SRC_ADDRESS_OFFSET ( FDDI_ADDRESS_LEN + FDDI_XX_SIZE )
+
+#define FDDI_DEST_ADDRESS_OFFSET FDDI_XX_SIZE
+
+#define FDDI_HEADER_SIZE (( FDDI_ADDRESS_LEN * 2) + FDDI_XX_SIZE )
+
+#define FDDI_DATA_LEN 8192 // 17K if 16MB or 8K if 4MB
+
+#define FDDI_PACKET_SIZE ( FDDI_HEADER_SIZE + FDDI_DATA_LEN )
+
+#define FDDI_PADDING 2
+
+
+
+//
+// STARTCHANGE
+//
+
+//
+// ARCNET Specific Information
+//
+//
+// The ARCNET Software Packet Header is constructed as follows:
+//
+// +----------------------------------------------------------+
+// | Source | Destination | ProtocolID | Data |
+// +----------------------------------------------------------+
+// 1 1 1 0 - 120*504 or 60480
+//
+// CURRENT ARCNET SOFTWARE HEADER
+//
+// The ARCNET Software Packet Header is constructed as follows:
+//
+// +----------------------------------------------------------+
+// | Source | Destination | ProtocolID | Data |
+// +----------------------------------------------------------+
+// 1 1 1 0 - 3*504 or 1512
+//
+//
+// The Src and Dest fields represent the source and destination
+// addresses and are 1 byte long each. The ProtocolID represent
+// the ID of the protocol communicating with the Arcnet MAC driver
+// And finally there is Data area itself.
+//
+// An actual Arcnet Software packet looks like the following. The current provisions
+// for the native ARCNET driver will be responsible for handling these type internally
+// thereby providing ease of packet exchange between the MAC(N) and the layer above the MAC(N+1)
+//
+// SHORT PACKET (Octet)
+// +---+
+// Source | 1 |
+// +---+
+// Destination | 1 |
+// +---+
+// ByteOffset | 1 |
+// +---------+
+// Unused | 0 - 249 | PACKET CONSTANT LENGTH = 256 octets
+// +---------+ MAXIMUM # of FRAGEMENTS = 120
+// ProcolID | 1 |
+// +---+
+// Split Flag | 1 |
+// +---+---+
+// Seqence # | 2 |
+// +----------+
+// Data | 0 - 249 |
+// +----------+
+//
+// EXCEPTION PACKET (Octet)
+// +---+
+// Source | 1 |
+// +---+
+// Destination | 1 |
+// +---+
+// Long Packet Flag | 1 | = 0
+// +---+
+// ByteOffset | 1 |
+// +-----------+
+// Unused | 248 - 250 | PACKET CONSTANT LENGTH = 512 octets
+// +-----------+ MAXIMUM # of FRAGEMENTS = 120
+// Pad1 ProcolID | 1 |
+// +---+
+// Pad2 Split Flag | 1 | = FF
+// +---+
+// Pad3 | 1 |
+// +---+
+// Pad4 | 1 |
+// +---+
+// ProcolID | 1 |
+// +---+
+// Split Flag | 1 |
+// +---+---+
+// Seqence # | 2 |
+// +-----------+
+// Data | 250 - 252 |
+// +-----------+
+//
+//
+// LONG PACKET (Octet)
+// +---+
+// Source | 1 |
+// +---+
+// Destination | 1 |
+// +---+
+// Long Packet Flag | 1 | = 0
+// +---+
+// ByteOffset | 1 |
+// +---------+
+// Unused | 0 - 251 | PACKET CONSTANT LENGTH = 512 octets
+// +---------+ MAXIMUM # of FRAGEMENTS = 120
+// ProcolID | 1 |
+// +---+
+// Split Flag | 1 |
+// +---+---+
+// Seqence # | 2 |
+// +-----------+
+// Data | 253 - 504 |
+// +-----------+
+//
+// The software packet is further broken down into 5 different categories on the wire
+// The frame formats are:
+//
+// INVITATION TO TRANSMIT (ASCII EOT)
+// FREE BUFFER ENQUIRY (ASCII ENQ)
+// PACKET-DATA (ASCII SOH)
+// ACK (ASCII ACK)
+// NACK (ASCII NAK)
+// The Destination octet is duplicated on the wire, the unused data buffer is not transmitted
+// and a 2 octect CRC is generated with the PACKET-DATA format.
+//
+
+#define ARCNET_ADDRESS_LEN 1
+
+#define ARCNET_SRC_ADDRESS_OFFSET 0
+
+#define ARCNET_DEST_ADDRESS_OFFSET ARCNET_ADDRESS_LEN
+
+#define ARCNET_PROTID_OFFSET ARCNET_DEST_ADDRESS_OFFSET + ARCNET_ADDRESS_LEN
+
+#define ARCNET_PROTID_LEN 1
+
+#define ARCNET_HEADER_SIZE (( ARCNET_ADDRESS_LEN * 2) + ARCNET_PROTID_LEN )
+
+#define ARCNET_DATA_LEN 1512
+
+#define ARCNET_PACKET_SIZE ( ARCNET_HEADER_SIZE + ARCNET_DATA_LEN )
+
+#define ARCNET_MIN_DATA_LEN 0
+
+#define ARCNET_MIN_PACKET_SIZE ( ARCNET_HEADER_SIZE + ARCNET_MIN_DATA_LEN )
+
+#define ARCNET_PADDING 0
+
+//
+// STOPCHANGE
+//
+
+
+//
+// Media Initialization routine.
+//
+
+NDIS_STATUS
+TpInitMedia(
+ POPEN_BLOCK OpenP,
+ ULONG FrameSize
+ );
+
+BOOLEAN
+TpInitMediaHeader(
+ PFUNC1_PACKET F1Packet,
+ PTP_MEDIA_INFO Media,
+ PUCHAR DestAddr,
+ PUCHAR SrcAddr,
+ INT PacketSize
+ );
+
+VOID
+TpInitPoolMediaHeader(
+ PFUNC1_PACKET F1Packet,
+ PTP_MEDIA_INFO Media,
+ PUCHAR DestAddr
+ );
+
+VOID
+TpInitTruncatedMediaHeader(
+ PFUNC1_PACKET F1Packet,
+ PTP_MEDIA_INFO Media,
+ PUCHAR DestAddr,
+ INT PacketSize
+ );