#pragma GCC system_header
#endif
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include "ntddk.h"
#include "ntddndis.h"
#include "netpnp.h"
#include "netevent.h"
-#include <winsock2.h>
+#include <qos.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
#if defined(NDIS_WRAPPER)
#define NDISAPI DECLSPEC_EXPORT
struct {
KSPIN_LOCK SpinLock;
PVOID Context;
- } s;
+ };
UCHAR Reserved[16];
- } u;
+ };
NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
} NDIS_RW_LOCK, *PNDIS_RW_LOCK;
#define NDIS_GUID_UNICODE_STRING 0x00000008
#define NDIS_GUID_ARRAY 0x00000010
-
-typedef struct _NDIS_PACKET_POOL {
- NDIS_SPIN_LOCK SpinLock;
- struct _NDIS_PACKET *FreeList;
- UINT PacketLength;
- UCHAR Buffer[1];
-} NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
+typedef HANDLE PNDIS_PACKET_POOL;
/* NDIS_PACKET_PRIVATE.Flags constants */
#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
struct {
UCHAR MiniportReserved[2 * sizeof(PVOID)];
UCHAR WrapperReserved[2 * sizeof(PVOID)];
- } s1;
+ };
struct {
UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
UCHAR WrapperReservedEx[sizeof(PVOID)];
- } s2;
+ };
struct {
UCHAR MacReserved[4 * sizeof(PVOID)];
- } s3;
- } u;
+ };
+ };
ULONG_PTR Reserved[2];
UCHAR ProtocolReserved[1];
} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
/* OID_GEN_NETWORK_LAYER_ADDRESSES */
typedef struct _NETWORK_ADDRESS {
- USHORT AddressLength;
- USHORT AddressType;
- UCHAR Address[1];
+ USHORT AddressLength;
+ USHORT AddressType;
+ UCHAR Address[1];
} NETWORK_ADDRESS, *PNETWORK_ADDRESS;
typedef struct _NETWORK_ADDRESS_LIST {
- LONG AddressCount;
- USHORT AddressType;
- NETWORK_ADDRESS Address[1];
+ LONG AddressCount;
+ USHORT AddressType;
+ NETWORK_ADDRESS Address[1];
} NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
/* Protocol types supported by NDIS */
/* OID_GEN_TRANSPORT_HEADER_OFFSET */
typedef struct _TRANSPORT_HEADER_OFFSET {
- USHORT ProtocolType;
- USHORT HeaderOffset;
+ USHORT ProtocolType;
+ USHORT HeaderOffset;
} TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
ULONG MinorVersion;
} CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
-typedef struct _CO_FLOW_PARAMETERS {
- ULONG TokenRate;
- ULONG TokenBucketSize;
- ULONG PeakBandwidth;
- ULONG Latency;
- ULONG DelayVariation;
- SERVICETYPE ServiceType;
- ULONG MaxSduSize;
- ULONG MinimumPolicedSize;
-} CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
-
typedef struct _CO_SPECIFIC_PARAMETERS {
ULONG ParamType;
ULONG Length;
} CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
typedef struct _CO_CALL_MANAGER_PARAMETERS {
- CO_FLOW_PARAMETERS Transmit;
- CO_FLOW_PARAMETERS Receive;
+ FLOWSPEC Transmit;
+ FLOWSPEC Receive;
CO_SPECIFIC_PARAMETERS CallMgrSpecific;
} CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
ULONG V4_OPTIONS;
ULONG RESERVED;
} Supported;
-
+
struct {
ULONG MD5 : 1;
ULONG SHA_1 : 1;
ULONG Send : 1;
ULONG Receive : 1;
} V4AH;
-
+
struct {
ULONG DES : 1;
ULONG RESERVED : 1;
ULONG UdpChecksum:1;
ULONG IpChecksum:1;
} V4Transmit;
-
+
struct {
ULONG IpOptionsSupported : 1;
ULONG TcpOptionsSupported : 1;
ULONG UdpChecksum : 1;
ULONG IpChecksum : 1;
} V4Receive;
-
+
struct {
ULONG IpOptionsSupported : 1;
ULONG TcpOptionsSupported : 1;
ULONG TcpChecksum : 1;
ULONG UdpChecksum : 1;
} V6Transmit;
-
+
struct {
ULONG IpOptionsSupported : 1;
ULONG TcpOptionsSupported : 1;
ULONG NdisPacketUdpChecksum : 1;
ULONG NdisPacketIpChecksum : 1;
} Transmit;
-
+
struct {
ULONG NdisPacketTcpChecksumFailed : 1;
ULONG NdisPacketUdpChecksumFailed : 1;
} NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
typedef struct _WAN_CO_LINKPARAMS {
- ULONG TransmitSpeed;
- ULONG ReceiveSpeed;
- ULONG SendWindow;
+ ULONG TransmitSpeed;
+ ULONG ReceiveSpeed;
+ ULONG SendWindow;
} WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
BIND_HANDLER BindAdapterHandler; \
UNBIND_HANDLER UnbindAdapterHandler; \
PNP_EVENT_HANDLER PnPEventHandler; \
- UNLOAD_PROTOCOL_HANDLER UnloadHandler;
+ UNLOAD_PROTOCOL_HANDLER UnloadHandler;
#else /* !__cplusplus */
BIND_HANDLER BindAdapterHandler; \
UNBIND_HANDLER UnbindAdapterHandler; \
PNP_EVENT_HANDLER PnPEventHandler; \
- UNLOAD_PROTOCOL_HANDLER UnloadHandler;
+ UNLOAD_PROTOCOL_HANDLER UnloadHandler;
#endif /* __cplusplus */
/*
* UINT
* NdisGetPacketFlags(
- * IN PNDIS_PACKET Packet);
+ * IN PNDIS_PACKET Packet);
*/
#define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
(PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset)
-
+
/*
* VOID
* NdisQueryPacket(
* VOID
* NdisSetPacketFlags(
* IN PNDIS_PACKET Packet,
- * IN UINT Flags);
+ * IN UINT Flags);
*/
#define NdisSetPacketFlags(Packet, Flags) \
(Packet)->Private.Flags |= (Flags);
* VOID
* NDIS_PHYSICAL_ADDRESS_CONST(
* IN ULONG Low,
- * IN LONG High);
+ * IN LONG High);
*/
#define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
{ {(ULONG)(Low), (LONG)(High)} }
* VOID
* NdisStoreUlong(
* IN PULONG DestinationAddress,
- * IN ULONG Value);
+ * IN ULONG Value);
*/
#define NdisStoreUlong(DestinationAddress, Value) \
RtlStoreUlong(DestinationAddress, Value)
IN ULONG Length);
NDISAPI
-ULONG
+ULONG
DDKAPI
NdisWritePciSlotInformation(
IN NDIS_HANDLE NdisAdapterHandle,
#endif
+NDISAPI
+CCHAR
+DDKAPI
+NdisSystemProcessorCount(VOID);
+
NDISAPI
VOID
DDKAPI
/*
* VOID
- * NDIS_PAGABLE_FUNCTION(FunctionName)
+ * NDIS_PAGABLE_FUNCTION(FunctionName)
*/
#define NDIS_PAGEABLE_FUNCTION(FunctionName) \
alloc_text(page, FunctionName)
OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL);
NDISAPI
-NDIS_STATUS
+NDIS_STATUS
DDKAPI
NdisClModifyCallQoS(
IN NDIS_HANDLE NdisVcHandle,
IN PNDIS_REQUEST Request);
NDISAPI
-VOID
+VOID
DDKAPI
NdisMCoSendComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolHandle);
NDISAPI
-NDIS_STATUS
+NDIS_STATUS
DDKAPI
NdisIMCancelInitializeDeviceInstance(
IN NDIS_HANDLE DriverHandle,
#endif /* ARCNET */
-#define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
-
typedef struct _NDIS_LOG {
PNDIS_MINIPORT_BLOCK Miniport;
KSPIN_LOCK LogLock;
UCHAR LogBuf[1];
} NDIS_LOG, *PNDIS_LOG;
-typedef struct _FILTERDBS {
- _ANONYMOUS_UNION union {
- PETH_FILTER EthDB;
- PNULL_FILTER NullDB;
- } DUMMYUNIONNAME;
- PTR_FILTER TrDB;
- PFDDI_FILTER FddiDB;
#if ARCNET
+#define FILTERDBS_ARCNET_S \
PARC_FILTER ArcDB;
#else /* !ARCNET */
+#define FILTERDBS_ARCNET_S \
PVOID XXXDB;
#endif /* !ARCNET */
+
+#define FILTERDBS_S \
+ _ANONYMOUS_UNION union { \
+ PETH_FILTER EthDB; \
+ PNULL_FILTER NullDB; \
+ } DUMMYUNIONNAME; \
+ PTR_FILTER TrDB; \
+ PFDDI_FILTER FddiDB; \
+ FILTERDBS_ARCNET_S
+
+typedef struct _FILTERDBS {
+ FILTERDBS_S
} FILTERDBS, *PFILTERDBS;
USHORT CFHangCurrentTick;
NDIS_STATUS ResetStatus;
NDIS_HANDLE ResetOpen;
- FILTERDBS FilterDbs;
+ FILTERDBS_S
FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
} DUMMYUNIONNAME2;
PVOID SavedSendPacketsHandler;
PVOID SavedCancelSendPacketsHandler;
- W_SEND_PACKETS_HANDLER WSendPacketsHandler;
+ W_SEND_PACKETS_HANDLER WSendPacketsHandler;
ULONG MiniportAttributes;
PDMA_ADAPTER SavedSystemAdapterObject;
USHORT NumOpens;
- USHORT CFHangXTicks;
+ USHORT CFHangXTicks;
ULONG RequestCount;
ULONG IndicatedPacketsCount;
ULONG PhysicalMediumType;
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
-
-typedef struct _NDIS_COMMON_OPEN_BLOCK {
- PVOID MacHandle;
- NDIS_HANDLE BindingHandle;
- PNDIS_MINIPORT_BLOCK MiniportHandle;
- PNDIS_PROTOCOL_BLOCK ProtocolHandle;
- NDIS_HANDLE ProtocolBindingContext;
- PNDIS_OPEN_BLOCK MiniportNextOpen;
- PNDIS_OPEN_BLOCK ProtocolNextOpen;
- NDIS_HANDLE MiniportAdapterContext;
- BOOLEAN Reserved1;
- BOOLEAN Reserved2;
- BOOLEAN Reserved3;
- BOOLEAN Reserved4;
- PNDIS_STRING BindDeviceName;
- KSPIN_LOCK Reserved5;
- PNDIS_STRING RootDeviceName;
- _ANONYMOUS_UNION union {
- SEND_HANDLER SendHandler;
- WAN_SEND_HANDLER WanSendHandler;
- } DUMMYUNIONNAME;
- TRANSFER_DATA_HANDLER TransferDataHandler;
- SEND_COMPLETE_HANDLER SendCompleteHandler;
- TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
- RECEIVE_HANDLER ReceiveHandler;
- RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
- WAN_RECEIVE_HANDLER WanReceiveHandler;
- REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
- RECEIVE_PACKET_HANDLER ReceivePacketHandler;
- SEND_PACKETS_HANDLER SendPacketsHandler;
- RESET_HANDLER ResetHandler;
- REQUEST_HANDLER RequestHandler;
- RESET_COMPLETE_HANDLER ResetCompleteHandler;
- STATUS_HANDLER StatusHandler;
- STATUS_COMPLETE_HANDLER StatusCompleteHandler;
#if defined(NDIS_WRAPPER)
- ULONG Flags;
- ULONG References;
- KSPIN_LOCK SpinLock;
- NDIS_HANDLE FilterHandle;
- ULONG ProtocolOptions;
- USHORT CurrentLookahead;
- USHORT ConnectDampTicks;
- USHORT DisconnectDampTicks;
- W_SEND_HANDLER WSendHandler;
- W_TRANSFER_DATA_HANDLER WTransferDataHandler;
- W_SEND_PACKETS_HANDLER WSendPacketsHandler;
- W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
- ULONG WakeUpEnable;
- PKEVENT CloseCompleteEvent;
- QUEUED_CLOSE QC;
- ULONG AfReferences;
+#define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
+ ULONG Flags; \
+ ULONG References; \
+ KSPIN_LOCK SpinLock; \
+ NDIS_HANDLE FilterHandle; \
+ ULONG ProtocolOptions; \
+ USHORT CurrentLookahead; \
+ USHORT ConnectDampTicks; \
+ USHORT DisconnectDampTicks; \
+ W_SEND_HANDLER WSendHandler; \
+ W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
+ W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
+ W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
+ ULONG WakeUpEnable; \
+ PKEVENT CloseCompleteEvent; \
+ QUEUED_CLOSE QC; \
+ ULONG AfReferences; \
PNDIS_OPEN_BLOCK NextGlobalOpen;
-#endif /* _NDIS_ */
+#else
+#define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
+#endif
+
+#define NDIS_COMMON_OPEN_BLOCK_S \
+ PVOID MacHandle; \
+ NDIS_HANDLE BindingHandle; \
+ PNDIS_MINIPORT_BLOCK MiniportHandle; \
+ PNDIS_PROTOCOL_BLOCK ProtocolHandle; \
+ NDIS_HANDLE ProtocolBindingContext; \
+ PNDIS_OPEN_BLOCK MiniportNextOpen; \
+ PNDIS_OPEN_BLOCK ProtocolNextOpen; \
+ NDIS_HANDLE MiniportAdapterContext; \
+ BOOLEAN Reserved1; \
+ BOOLEAN Reserved2; \
+ BOOLEAN Reserved3; \
+ BOOLEAN Reserved4; \
+ PNDIS_STRING BindDeviceName; \
+ KSPIN_LOCK Reserved5; \
+ PNDIS_STRING RootDeviceName; \
+ _ANONYMOUS_UNION union { \
+ SEND_HANDLER SendHandler; \
+ WAN_SEND_HANDLER WanSendHandler; \
+ } DUMMYUNIONNAME; \
+ TRANSFER_DATA_HANDLER TransferDataHandler; \
+ SEND_COMPLETE_HANDLER SendCompleteHandler; \
+ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
+ RECEIVE_HANDLER ReceiveHandler; \
+ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
+ WAN_RECEIVE_HANDLER WanReceiveHandler; \
+ REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
+ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
+ SEND_PACKETS_HANDLER SendPacketsHandler; \
+ RESET_HANDLER ResetHandler; \
+ REQUEST_HANDLER RequestHandler; \
+ RESET_COMPLETE_HANDLER ResetCompleteHandler; \
+ STATUS_HANDLER StatusHandler; \
+ STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
+ NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
+
+typedef struct _NDIS_COMMON_OPEN_BLOCK {
+ NDIS_COMMON_OPEN_BLOCK_S
} NDIS_COMMON_OPEN_BLOCK;
struct _NDIS_OPEN_BLOCK
{
- NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
+#ifdef __cplusplus
+ NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
+#else
+ NDIS_COMMON_OPEN_BLOCK_S
+#endif
#if defined(NDIS_WRAPPER)
- struct _NDIS_OPEN_CO
- {
- struct _NDIS_CO_AF_BLOCK * NextAf;
- W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler;
- W_CO_REQUEST_HANDLER MiniportCoRequestHandler;
- CO_CREATE_VC_HANDLER CoCreateVcHandler;
- CO_DELETE_VC_HANDLER CoDeleteVcHandler;
- PVOID CmActivateVcCompleteHandler;
- PVOID CmDeactivateVcCompleteHandler;
- PVOID CoRequestCompleteHandler;
- LIST_ENTRY ActiveVcHead;
- LIST_ENTRY InactiveVcHead;
- LONG PendingAfNotifications;
- PKEVENT AfNotifyCompleteEvent;
- };
+ struct _NDIS_OPEN_CO
+ {
+ struct _NDIS_CO_AF_BLOCK * NextAf;
+ W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler;
+ W_CO_REQUEST_HANDLER MiniportCoRequestHandler;
+ CO_CREATE_VC_HANDLER CoCreateVcHandler;
+ CO_DELETE_VC_HANDLER CoDeleteVcHandler;
+ PVOID CmActivateVcCompleteHandler;
+ PVOID CmDeactivateVcCompleteHandler;
+ PVOID CoRequestCompleteHandler;
+ LIST_ENTRY ActiveVcHead;
+ LIST_ENTRY InactiveVcHead;
+ LONG PendingAfNotifications;
+ PKEVENT AfNotifyCompleteEvent;
+ };
#endif /* _NDIS_ */
};
Length) \
{ \
ArcFilterDprIndicateReceive( \
- (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.ArcDB), \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \
(HeaderBuffer), \
(DataBuffer), \
(Length)); \
PacketSize) \
{ \
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
- ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB, \
+ ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \
(MiniportReceiveContext), \
(HeaderBuffer), \
(HeaderBuffer), \
#define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
{ \
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
- ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.EthDB); \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \
}
/*
PacketSize) \
{ \
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
- (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.FddiDB), \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \
(MiniportReceiveContext), \
(PUCHAR)(HeaderBuffer) + 1, \
(((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
#define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
{ \
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
- ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.FddiDB); \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \
}
NDISAPI
AdapterType)
NDISAPI
-VOID
+VOID
DDKAPI
NdisMSetAttributesEx(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE MiniportAdapterContext,
IN UINT CheckForHangTimeInSeconds OPTIONAL,
IN ULONG AttributeFlags,
- IN NDIS_INTERFACE_TYPE AdapterType);
+ IN NDIS_INTERFACE_TYPE AdapterType);
/*
* VOID
PacketSize) \
{ \
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
- (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.TrDB), \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \
(MiniportReceiveContext), \
(HeaderBuffer), \
(HeaderBuffer), \
#define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
{ \
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
- ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.TrDB); \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \
}
NDISAPI
+/* Event functions */
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitializeEvent(
+ IN PNDIS_EVENT Event);
+
+NDISAPI
+VOID
+DDKAPI
+NdisSetEvent(
+ IN PNDIS_EVENT Event);
+
+NDISAPI
+VOID
+DDKAPI
+NdisResetEvent(
+ IN PNDIS_EVENT Event);
+
+NDISAPI
+BOOLEAN
+DDKAPI
+NdisWaitEvent(
+ IN PNDIS_EVENT Event,
+ IN UINT Timeout);
+
+
+
/* NDIS intermediate miniport structures */
typedef VOID (DDKAPI *W_MINIPORT_CALLBACK)(
NTSTATUS
DDKAPI
NdisUpcaseUnicodeString(
- OUT PUNICODE_STRING DestinationString,
+ OUT PUNICODE_STRING DestinationString,
IN PUNICODE_STRING SourceString);