summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/loop/loop.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/ntos/ndis/loop/loop.h223
1 files changed, 223 insertions, 0 deletions
diff --git a/private/ntos/ndis/loop/loop.h b/private/ntos/ndis/loop/loop.h
new file mode 100644
index 000000000..6df8f7f80
--- /dev/null
+++ b/private/ntos/ndis/loop/loop.h
@@ -0,0 +1,223 @@
+// STATIC is used for items which will be static in the release build
+// but we want visible for debugging
+
+#if DEVL
+#define STATIC
+#else
+#define STATIC static
+#endif
+
+#define LOOP_MAJOR_VERSION 0x1
+#define LOOP_MINOR_VERSION 0x0
+
+#define LOOP_NDIS_MAJOR_VERSION 0x3
+#define LOOP_NDIS_MINOR_VERSION 0x0
+
+#define LOOP_ETH_CARD_ADDRESS " LOOP "
+#define LOOP_ETH_MAX_MULTICAST_ADDRESS 16
+#define LOOP_TR_CARD_ADDRESS " LOOP "
+#define LOOP_FDDI_CARD_ADDRESS " LOOP "
+#define LOOP_FDDI_MAX_MULTICAST_LONG 16
+#define LOOP_FDDI_MAX_MULTICAST_SHORT 16
+#define LOOP_LTALK_CARD_ADDRESS 0xAB
+#define LOOP_ARC_CARD_ADDRESS 'L'
+// arbitrary maximums...
+#define LOOP_MAX_LOOKAHEAD 256
+#define LOOP_INDICATE_MAXIMUM 256
+
+#define OID_TYPE_MASK 0xFFFF0000
+#define OID_TYPE 0xFF000000
+#define OID_TYPE_GENERAL 0x00000000
+#define OID_TYPE_GENERAL_OPERATIONAL 0x00010000
+#define OID_TYPE_GENERAL_STATISTICS 0x00020000
+#define OID_TYPE_802_3 0x01000000
+#define OID_TYPE_802_3_OPERATIONAL 0x01010000
+#define OID_TYPE_802_3_STATISTICS 0x01020000
+#define OID_TYPE_802_5 0x02000000
+#define OID_TYPE_802_5_OPERATIONAL 0x02010000
+#define OID_TYPE_802_5_STATISTICS 0x02020000
+#define OID_TYPE_FDDI 0x03000000
+#define OID_TYPE_FDDI_OPERATIONAL 0x03010000
+#define OID_TYPE_LTALK 0x05000000
+#define OID_TYPE_LTALK_OPERATIONAL 0x05010000
+#define OID_TYPE_ARCNET 0x06000000
+#define OID_TYPE_ARCNET_OPERATIONAL 0x06010000
+
+#define OID_REQUIRED_MASK 0x0000FF00
+#define OID_REQUIRED_MANDATORY 0x00000100
+#define OID_REQUIRED_OPTIONAL 0x00000200
+
+#define OID_INDEX_MASK 0x000000FF
+
+#define GM_TRANSMIT_GOOD 0x00
+#define GM_RECEIVE_GOOD 0x01
+#define GM_TRANSMIT_BAD 0x02
+#define GM_RECEIVE_BAD 0x03
+#define GM_RECEIVE_NO_BUFFER 0x04
+#define GM_ARRAY_SIZE 0x05
+
+#define LOOP_LT_IS_BROADCAST(Address) \
+ (BOOLEAN)(Address == 0xFF)
+
+#define LOOP_ARC_IS_BROADCAST(Address) \
+ (BOOLEAN)(!(Address))
+
+typedef
+struct _MEDIA_INFO {
+ ULONG MaxFrameLen;
+ UINT MacHeaderLen;
+ ULONG PacketFilters;
+ ULONG LinkSpeed;
+} MEDIA_INFO, *PMEDIA_INFO;
+
+typedef
+struct _LOOP_ADAPTER {
+
+ // this adapter's name
+ NDIS_STRING DeviceName;
+ UINT DeviceNameLength;
+
+ // MP and syncronization variables
+ NDIS_SPIN_LOCK Lock;
+ NDIS_TIMER LoopTimer;
+ BOOLEAN InTimerProc;
+ BOOLEAN TimerSet;
+
+ // reference count
+ UINT References;
+
+ // List of Bindings
+ UINT OpenCount;
+ LIST_ENTRY OpenBindings;
+
+ // the rest of the adapters
+ LIST_ENTRY AdapterList;
+
+ // handles for the adapter and mac driver
+ NDIS_HANDLE NdisMacHandle;
+ NDIS_HANDLE NdisAdapterHandle;
+
+ // loopback params
+ PNDIS_PACKET Loopback;
+ PNDIS_PACKET LastLoopback;
+ PNDIS_PACKET CurrentLoopback;
+ UCHAR LoopBuffer[LOOP_MAX_LOOKAHEAD];
+
+ BOOLEAN ResetInProgress;
+ UINT MaxLookAhead;
+
+ // media specific info
+ UCHAR PermanentAddress[6];
+ UCHAR CurrentAddress[6];
+ NDIS_MEDIUM Medium;
+ ULONG MediumLinkSpeed;
+ ULONG MediumMinPacketLen;
+ ULONG MediumMaxPacketLen;
+ UINT MediumMacHeaderLen;
+ ULONG MediumMaxFrameLen;
+ ULONG MediumPacketFilters;
+ union {
+ PETH_FILTER Eth;
+ PTR_FILTER Tr;
+ PFDDI_FILTER Fddi;
+ } Filter;
+
+ // statistics
+ ULONG GeneralMandatory[GM_ARRAY_SIZE];
+} LOOP_ADAPTER, *PLOOP_ADAPTER;
+
+#define BINDING_OPEN 0x00000001
+#define BINDING_CLOSING 0x00000002
+#define BINDING_RECEIVED_PACKET 0x00000004
+
+typedef
+struct _LOOP_OPEN {
+ LIST_ENTRY OpenList;
+ BOOLEAN BindingClosing;
+ UINT Flags;
+ PLOOP_ADAPTER OwningLoop;
+ NDIS_HANDLE NdisBindingContext;
+ NDIS_HANDLE NdisFilterHandle;
+ UINT References;
+ UINT CurrentLookAhead;
+ UINT CurrentPacketFilter;
+} LOOP_OPEN, *PLOOP_OPEN;
+
+typedef struct _LOOP_PACKET_RESERVED {
+ PNDIS_PACKET Next;
+ NDIS_HANDLE MacBindingHandle;
+ USHORT PacketLength;
+ UCHAR HeaderLength;
+} LOOP_PACKET_RESERVED, *PLOOP_PACKET_RESERVED;
+
+//
+// Given a MacBindingHandle this macro returns a pointer to the
+// LOOP_ADAPTER.
+//
+#define PLOOP_ADAPTER_FROM_BINDING_HANDLE(Handle) \
+ (((PLOOP_OPEN)((PVOID)(Handle)))->OwningLoop)
+
+//
+// Given a MacContextHandle return the PLOOP_ADAPTER
+// it represents.
+//
+#define PLOOP_ADAPTER_FROM_CONTEXT_HANDLE(Handle) \
+ ((PLOOP_ADAPTER)((PVOID)(Handle)))
+
+//
+// Given a pointer to a LOOP_ADAPTER return the
+// proper MacContextHandle.
+//
+#define CONTEXT_HANDLE_FROM_PLOOP_ADAPTER(Ptr) \
+ ((NDIS_HANDLE)((PVOID)(Ptr)))
+
+//
+// This macro returns a pointer to a PLOOP_OPEN given a MacBindingHandle.
+//
+#define PLOOP_OPEN_FROM_BINDING_HANDLE(Handle) \
+ ((PLOOP_OPEN)((PVOID)Handle))
+
+//
+// This macro returns a NDIS_HANDLE from a PLOOP_OPEN
+//
+#define BINDING_HANDLE_FROM_PLOOP_OPEN(Open) \
+ ((NDIS_HANDLE)((PVOID)Open))
+
+//
+// This macro returns a pointer to the LOOP reserved portion of the packet
+//
+#define PLOOP_RESERVED_FROM_PACKET(Packet) \
+ ((PLOOP_PACKET_RESERVED)((PVOID)((Packet)->MacReserved)))
+
+#define PLOOP_PACKET_FROM_RESERVED(Reserved) \
+ ((PNDIS_PACKET)((PVOID)((Reserved)->Packet)))
+
+extern
+NDIS_STATUS
+LoopQueryGlobalStats(
+ IN NDIS_HANDLE MacBindingContext,
+ IN PNDIS_REQUEST NdisRequest
+ );
+
+extern
+NDIS_STATUS
+LoopRequest(
+ IN NDIS_HANDLE MacBindingContext,
+ IN PNDIS_REQUEST NdisRequest
+ );
+
+extern
+NDIS_STATUS
+LoopSend(
+ IN NDIS_HANDLE MacBindingHandle,
+ IN PNDIS_PACKET Packet
+ );
+
+extern
+VOID
+LoopTimerProc(
+ IN PVOID SystemSpecific1,
+ IN PVOID Context,
+ IN PVOID SystemSpecific2,
+ IN PVOID SystemSpecific3
+ );