mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 05:15:41 +00:00
changed callbacks to use stdcall
made a number of changes to the protocol->miniport send path clarified locking and irql manipulation code added support for SendPacketsHandler cleaned up NdisRegisterProtocol and NdisOpenAdapter svn path=/trunk/; revision=6086
This commit is contained in:
parent
c7198d46d8
commit
ed00963623
8 changed files with 718 additions and 493 deletions
|
@ -4,7 +4,6 @@
|
||||||
* FILE: include/debug.h
|
* FILE: include/debug.h
|
||||||
* PURPOSE: Debugging support macros
|
* PURPOSE: Debugging support macros
|
||||||
* DEFINES: DBG - Enable debug output
|
* DEFINES: DBG - Enable debug output
|
||||||
* NASSERT - Disable assertions
|
|
||||||
*/
|
*/
|
||||||
#ifndef __DEBUG_H
|
#ifndef __DEBUG_H
|
||||||
#define __DEBUG_H
|
#define __DEBUG_H
|
||||||
|
@ -45,19 +44,6 @@ extern DWORD DebugTraceLevel;
|
||||||
|
|
||||||
#endif /* _MSC_VER */
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
|
|
||||||
/* ASSERT is in rtl.h */
|
|
||||||
#if 0
|
|
||||||
#ifdef ASSERT
|
|
||||||
#undef ASSERT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef NASSERT
|
|
||||||
#define ASSERT(x)
|
|
||||||
#else /* NASSERT */
|
|
||||||
#define ASSERT(x) if (!(x)) { NDIS_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); KeBugCheck(0); }
|
|
||||||
#endif /* NASSERT */
|
|
||||||
#endif
|
|
||||||
#define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x))
|
#define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x))
|
||||||
|
|
||||||
#else /* DBG */
|
#else /* DBG */
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
### THIS FILE IS OFFICIALLY OBSOLETE ###
|
||||||
|
### SEE ../README.TXT ###
|
||||||
|
|
||||||
TARGETNAME=ndis
|
TARGETNAME=ndis
|
||||||
TARGETPATH=..\objects
|
TARGETPATH=..\objects
|
||||||
TARGETTYPE=EXPORT_DRIVER
|
TARGETTYPE=EXPORT_DRIVER
|
||||||
|
|
|
@ -393,8 +393,6 @@ VOID NdisStartDevices()
|
||||||
/* read class, looking for net guid */
|
/* read class, looking for net guid */
|
||||||
RtlInitUnicodeString(&ValueName, L"ClassGUID");
|
RtlInitUnicodeString(&ValueName, L"ClassGUID");
|
||||||
|
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("About to ask for 0x%x bytes\n", VALUE_INFORMATION_SIZE));
|
|
||||||
|
|
||||||
KeyValueInformation = ExAllocatePool(PagedPool, VALUE_INFORMATION_SIZE);
|
KeyValueInformation = ExAllocatePool(PagedPool, VALUE_INFORMATION_SIZE);
|
||||||
if(!KeyValueInformation)
|
if(!KeyValueInformation)
|
||||||
{
|
{
|
||||||
|
|
|
@ -172,6 +172,26 @@ MiniIndicateData(
|
||||||
|
|
||||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
||||||
|
|
||||||
|
#if DBG
|
||||||
|
if(!AdapterBinding)
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MIN_TRACE, ("AdapterBinding was null\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!AdapterBinding->ProtocolBinding)
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MIN_TRACE, ("AdapterBinding->ProtocolBinding was null\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!AdapterBinding->ProtocolBinding->Chars.u4.ReceiveHandler)
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MIN_TRACE, ("AdapterBinding->ProtocolBinding->Chars.u4.ReceiveHandler was null\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
(*AdapterBinding->ProtocolBinding->Chars.u4.ReceiveHandler)(
|
(*AdapterBinding->ProtocolBinding->Chars.u4.ReceiveHandler)(
|
||||||
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
|
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
|
||||||
MacReceiveContext,
|
MacReceiveContext,
|
||||||
|
@ -186,6 +206,8 @@ MiniIndicateData(
|
||||||
CurrentEntry = CurrentEntry->Flink;
|
CurrentEntry = CurrentEntry->Flink;
|
||||||
}
|
}
|
||||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
||||||
|
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("Leaving.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -200,9 +222,51 @@ MiniIndicateReceivePacket(
|
||||||
* Miniport: Miniport handle for the adapter
|
* Miniport: Miniport handle for the adapter
|
||||||
* PacketArray: pointer to a list of packet pointers to indicate
|
* PacketArray: pointer to a list of packet pointers to indicate
|
||||||
* NumberOfPackets: number of packets to indicate
|
* NumberOfPackets: number of packets to indicate
|
||||||
|
* NOTES:
|
||||||
|
* - This currently is a big temporary hack. In the future this should
|
||||||
|
* call ProtocolReceivePacket() on each bound protocol if it exists.
|
||||||
|
* For now it just mimics NdisMEthIndicateReceive.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
UINT i;
|
||||||
|
|
||||||
|
for(i = 0; i < NumberOfPackets; i++)
|
||||||
|
{
|
||||||
|
PCHAR PacketBuffer = 0;
|
||||||
|
UINT PacketLength = 0;
|
||||||
|
PNDIS_BUFFER NdisBuffer = 0;
|
||||||
|
|
||||||
|
#define PACKET_TAG (('k' << 24) + ('P' << 16) + ('D' << 8) + 'N')
|
||||||
|
|
||||||
|
NdisAllocateMemoryWithTag((PVOID)&PacketBuffer, 1518, PACKET_TAG);
|
||||||
|
if(!PacketBuffer)
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MIN_TRACE, ("insufficient resources\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NdisQueryPacket(PacketArray[i], NULL, NULL, &NdisBuffer, NULL);
|
||||||
|
|
||||||
|
while(NdisBuffer)
|
||||||
|
{
|
||||||
|
PNDIS_BUFFER CurrentBuffer;
|
||||||
|
PVOID BufferVa;
|
||||||
|
UINT BufferLen;
|
||||||
|
|
||||||
|
NdisQueryBuffer(NdisBuffer, &BufferVa, &BufferLen);
|
||||||
|
memcpy(PacketBuffer + PacketLength, BufferVa, BufferLen);
|
||||||
|
PacketLength += BufferLen;
|
||||||
|
|
||||||
|
CurrentBuffer = NdisBuffer;
|
||||||
|
NdisGetNextBuffer(CurrentBuffer, &NdisBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
NDIS_DbgPrint(MID_TRACE, ("indicating a %d-byte packet\n", PacketLength));
|
||||||
|
|
||||||
|
MiniIndicateData(Miniport, 0, PacketBuffer, 14, PacketBuffer+14, PacketLength-14, PacketLength-14);
|
||||||
|
|
||||||
|
NdisFreeMemory(PacketBuffer, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -246,7 +310,7 @@ MiniEthReceiveComplete(
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
MiniEthReceiveIndication(
|
MiniEthReceiveIndication(
|
||||||
IN PETH_FILTER Filter,
|
IN PETH_FILTER Filter, /* shouldn't be NDIS_HANDLE? */
|
||||||
IN NDIS_HANDLE MacReceiveContext,
|
IN NDIS_HANDLE MacReceiveContext,
|
||||||
IN PCHAR Address,
|
IN PCHAR Address,
|
||||||
IN PVOID HeaderBuffer,
|
IN PVOID HeaderBuffer,
|
||||||
|
@ -363,7 +427,20 @@ MiniAdapterHasAddress(
|
||||||
|
|
||||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||||
|
|
||||||
Start1 = (PUCHAR)&Adapter->Address;
|
#if DBG
|
||||||
|
if(!Adapter)
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MID_TRACE, ("Adapter object was null\n"));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!Packet)
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MID_TRACE, ("Packet was null\n"));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
NdisQueryPacket(Packet, NULL, NULL, &NdisBuffer, NULL);
|
NdisQueryPacket(Packet, NULL, NULL, &NdisBuffer, NULL);
|
||||||
if (!NdisBuffer) {
|
if (!NdisBuffer) {
|
||||||
NDIS_DbgPrint(MID_TRACE, ("Packet contains no buffers.\n"));
|
NDIS_DbgPrint(MID_TRACE, ("Packet contains no buffers.\n"));
|
||||||
|
@ -391,6 +468,11 @@ MiniAdapterHasAddress(
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Start1 = (PUCHAR)&Adapter->Address;
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("packet address: %x:%x:%x:%x:%x:%x adapter address: %x:%x:%x:%x:%x:%x\n",
|
||||||
|
*((char *)Start1), *(((char *)Start1)+1), *(((char *)Start1)+2), *(((char *)Start1)+3), *(((char *)Start1)+4), *(((char *)Start1)+5),
|
||||||
|
*((char *)Start2), *(((char *)Start2)+1), *(((char *)Start2)+2), *(((char *)Start2)+3), *(((char *)Start2)+4), *(((char *)Start2)+5)
|
||||||
|
));
|
||||||
return (RtlCompareMemory((PVOID)Start1, (PVOID)Start2, Length) == Length);
|
return (RtlCompareMemory((PVOID)Start1, (PVOID)Start2, Length) == Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -696,26 +778,45 @@ VOID STDCALL MiniportDpc(
|
||||||
Adapter->MiniportAdapterBinding = AdapterBinding;
|
Adapter->MiniportAdapterBinding = AdapterBinding;
|
||||||
switch (WorkItemType) {
|
switch (WorkItemType) {
|
||||||
case NdisWorkItemSend:
|
case NdisWorkItemSend:
|
||||||
|
/*
|
||||||
|
* called by ProSend when protocols want to send packets to the miniport
|
||||||
|
*/
|
||||||
#ifdef DBG
|
#ifdef DBG
|
||||||
MiniDisplayPacket((PNDIS_PACKET)WorkItemContext);
|
MiniDisplayPacket((PNDIS_PACKET)WorkItemContext);
|
||||||
#endif
|
#endif
|
||||||
NdisStatus = (*Adapter->Miniport->Chars.u1.SendHandler)(
|
if(Adapter->Miniport->Chars.SendPacketsHandler)
|
||||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
{
|
||||||
(PNDIS_PACKET)WorkItemContext,
|
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n"));
|
||||||
0);
|
|
||||||
if (NdisStatus != NDIS_STATUS_PENDING) {
|
/*
|
||||||
MiniSendComplete((NDIS_HANDLE)Adapter,
|
* XXX assumes single-packet - prolly OK since we'll call something
|
||||||
(PNDIS_PACKET)WorkItemContext,
|
* different on multi-packet sends
|
||||||
NdisStatus);
|
*/
|
||||||
|
(*Adapter->Miniport->Chars.SendPacketsHandler)(
|
||||||
|
Adapter->NdisMiniportBlock.MiniportAdapterContext, (PPNDIS_PACKET)&WorkItemContext, 1);
|
||||||
|
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("back from miniport's SendPackets handler\n"));
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n"));
|
||||||
|
NdisStatus = (*Adapter->Miniport->Chars.u1.SendHandler)(
|
||||||
|
Adapter->NdisMiniportBlock.MiniportAdapterContext, (PNDIS_PACKET)WorkItemContext, 0);
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("back from miniport's Send handler\n"));
|
||||||
|
|
||||||
|
if (NdisStatus != NDIS_STATUS_PENDING)
|
||||||
|
MiniSendComplete((NDIS_HANDLE)Adapter, (PNDIS_PACKET)WorkItemContext, NdisStatus);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NdisWorkItemSendLoopback:
|
case NdisWorkItemSendLoopback:
|
||||||
NdisStatus = ProIndicatePacket(Adapter,
|
/*
|
||||||
(PNDIS_PACKET)WorkItemContext);
|
* called by ProSend when protocols want to send loopback packets
|
||||||
MiniSendComplete((NDIS_HANDLE)Adapter,
|
*/
|
||||||
(PNDIS_PACKET)WorkItemContext,
|
/* XXX atm ProIndicatePacket sends a packet up via the loopback adapter only */
|
||||||
NdisStatus);
|
NdisStatus = ProIndicatePacket(Adapter, (PNDIS_PACKET)WorkItemContext);
|
||||||
|
MiniSendComplete((NDIS_HANDLE)Adapter, (PNDIS_PACKET)WorkItemContext, NdisStatus);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NdisWorkItemReturnPackets:
|
case NdisWorkItemReturnPackets:
|
||||||
|
@ -1284,7 +1385,7 @@ NdisIStartAdapter(
|
||||||
Status = ZwOpenKey(&RegKeyHandle, KEY_ALL_ACCESS, &RegKeyAttributes);
|
Status = ZwOpenKey(&RegKeyHandle, KEY_ALL_ACCESS, &RegKeyAttributes);
|
||||||
if(Status != STATUS_SUCCESS)
|
if(Status != STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
NDIS_DbgPrint(MIN_TRACE,("failed to open adapter-specific reg key %ws\n", RegKeyPath));
|
NDIS_DbgPrint(MIN_TRACE,("failed to open adapter-specific reg key %wZ\n", &RegKeyPathU));
|
||||||
ExFreePool(Adapter);
|
ExFreePool(Adapter);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1697,6 +1798,7 @@ NdisMSetAttributesEx(
|
||||||
if(AttributeFlags & NDIS_ATTRIBUTE_DESERIALIZE)
|
if(AttributeFlags & NDIS_ATTRIBUTE_DESERIALIZE)
|
||||||
{
|
{
|
||||||
NDIS_DbgPrint(MIN_TRACE, ("Deserialized miniport - UNIMPLEMENTED\n"));
|
NDIS_DbgPrint(MIN_TRACE, ("Deserialized miniport - UNIMPLEMENTED\n"));
|
||||||
|
/* XXX when this is implemented, be sure to fix ProSend() to not nail the irql up to dispatch_level */
|
||||||
#ifdef DBG
|
#ifdef DBG
|
||||||
__asm__("int $3\n");
|
__asm__("int $3\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,18 +4,24 @@
|
||||||
* FILE: ndis/protocol.c
|
* FILE: ndis/protocol.c
|
||||||
* PURPOSE: Routines used by NDIS protocol drivers
|
* PURPOSE: Routines used by NDIS protocol drivers
|
||||||
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
||||||
|
* Vizzini (vizzini@plasmic.com)
|
||||||
* REVISIONS:
|
* REVISIONS:
|
||||||
* CSH 01/08-2000 Created
|
* CSH 01/08-2000 Created
|
||||||
|
* 09-13-2003 Vizzini Updates for SendPackets support
|
||||||
*/
|
*/
|
||||||
#include <ndissys.h>
|
#include <ndissys.h>
|
||||||
#include <miniport.h>
|
#include <miniport.h>
|
||||||
#include <protocol.h>
|
#include <protocol.h>
|
||||||
#include <buffer.h>
|
#include <buffer.h>
|
||||||
|
|
||||||
|
#define SERVICES_KEY L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"
|
||||||
|
#define LINKAGE_KEY L"\\Linkage"
|
||||||
|
#define PARAMETERS_KEY L"\\Parameters\\"
|
||||||
|
|
||||||
LIST_ENTRY ProtocolListHead;
|
LIST_ENTRY ProtocolListHead;
|
||||||
KSPIN_LOCK ProtocolListLock;
|
KSPIN_LOCK ProtocolListLock;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -32,22 +38,17 @@ NdisCompleteBindAdapter(
|
||||||
* Packet = Pointer to packet to indicate
|
* Packet = Pointer to packet to indicate
|
||||||
* RETURNS:
|
* RETURNS:
|
||||||
* Status of operation
|
* Status of operation
|
||||||
|
* NOTES:
|
||||||
|
* - FIXME: partially-implemented
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* XXX partially-implemented!
|
|
||||||
*
|
|
||||||
* need to handle error conditions, and i'm not sure this is even what this func should do.
|
|
||||||
* be sure to fix NdisRegisterProtocol before fixing this, though.
|
|
||||||
*/
|
|
||||||
|
|
||||||
PROTOCOL_BINDING *Protocol = (PROTOCOL_BINDING *)BindAdapterContext;
|
PROTOCOL_BINDING *Protocol = (PROTOCOL_BINDING *)BindAdapterContext;
|
||||||
|
|
||||||
/* Put protocol binding struct on global list */
|
/* Put protocol binding struct on global list */
|
||||||
ExInterlockedInsertTailList(&ProtocolListHead, &Protocol->ListEntry, &ProtocolListLock);
|
ExInterlockedInsertTailList(&ProtocolListHead, &Protocol->ListEntry, &ProtocolListLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
ProIndicatePacket(
|
ProIndicatePacket(
|
||||||
PLOGICAL_ADAPTER Adapter,
|
PLOGICAL_ADAPTER Adapter,
|
||||||
|
@ -58,12 +59,14 @@ ProIndicatePacket(
|
||||||
* Adapter = Pointer to logical adapter
|
* Adapter = Pointer to logical adapter
|
||||||
* Packet = Pointer to packet to indicate
|
* Packet = Pointer to packet to indicate
|
||||||
* RETURNS:
|
* RETURNS:
|
||||||
* Status of operation
|
* STATUS_SUCCESS in all cases
|
||||||
|
* NOTES:
|
||||||
|
* - XXX ATM, this only handles loopback packets - is that its designed function?
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
KIRQL OldIrql;
|
KIRQL OldIrql;
|
||||||
UINT Length;
|
UINT BufferedLength;
|
||||||
UINT Total;
|
UINT PacketLength;
|
||||||
|
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||||
|
|
||||||
|
@ -71,48 +74,37 @@ ProIndicatePacket(
|
||||||
MiniDisplayPacket(Packet);
|
MiniDisplayPacket(Packet);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NdisQueryPacket(Packet, NULL, NULL, NULL, &Total);
|
NdisQueryPacket(Packet, NULL, NULL, NULL, &PacketLength);
|
||||||
|
|
||||||
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
||||||
|
{
|
||||||
Adapter->LoopPacket = Packet;
|
Adapter->LoopPacket = Packet;
|
||||||
|
BufferedLength = CopyPacketToBuffer(Adapter->LookaheadBuffer, Packet, 0, Adapter->CurLookaheadLength);
|
||||||
Length = CopyPacketToBuffer(
|
}
|
||||||
Adapter->LookaheadBuffer,
|
|
||||||
Packet,
|
|
||||||
0,
|
|
||||||
Adapter->CurLookaheadLength);
|
|
||||||
|
|
||||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
||||||
|
|
||||||
if (Length > Adapter->MediumHeaderSize) {
|
if (BufferedLength > Adapter->MediumHeaderSize)
|
||||||
MiniIndicateData(Adapter,
|
{
|
||||||
NULL,
|
/* XXX Change this to call SendPackets so we don't have to duplicate this wacky logic */
|
||||||
Adapter->LookaheadBuffer,
|
MiniIndicateData(Adapter, NULL, Adapter->LookaheadBuffer, Adapter->MediumHeaderSize,
|
||||||
Adapter->MediumHeaderSize,
|
&Adapter->LookaheadBuffer[Adapter->MediumHeaderSize], BufferedLength - Adapter->MediumHeaderSize,
|
||||||
&Adapter->LookaheadBuffer[Adapter->MediumHeaderSize],
|
PacketLength - Adapter->MediumHeaderSize);
|
||||||
Length - Adapter->MediumHeaderSize,
|
}
|
||||||
Total - Adapter->MediumHeaderSize);
|
else
|
||||||
} else {
|
{
|
||||||
MiniIndicateData(Adapter,
|
MiniIndicateData(Adapter, NULL, Adapter->LookaheadBuffer, Adapter->MediumHeaderSize, NULL, 0, 0);
|
||||||
NULL,
|
|
||||||
Adapter->LookaheadBuffer,
|
|
||||||
Adapter->MediumHeaderSize,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
||||||
|
{
|
||||||
Adapter->LoopPacket = NULL;
|
Adapter->LoopPacket = NULL;
|
||||||
|
}
|
||||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
ProRequest(
|
ProRequest(
|
||||||
IN NDIS_HANDLE MacBindingHandle,
|
IN NDIS_HANDLE MacBindingHandle,
|
||||||
|
@ -127,41 +119,58 @@ ProRequest(
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
KIRQL OldIrql;
|
KIRQL OldIrql;
|
||||||
BOOLEAN Queue;
|
BOOLEAN QueueWorkItem;
|
||||||
NDIS_STATUS NdisStatus;
|
NDIS_STATUS NdisStatus;
|
||||||
PADAPTER_BINDING AdapterBinding = GET_ADAPTER_BINDING(MacBindingHandle);
|
PADAPTER_BINDING AdapterBinding;
|
||||||
PLOGICAL_ADAPTER Adapter = AdapterBinding->Adapter;
|
PLOGICAL_ADAPTER Adapter;
|
||||||
|
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||||
|
|
||||||
|
ASSERT(MacBindingHandle);
|
||||||
|
AdapterBinding = GET_ADAPTER_BINDING(MacBindingHandle);
|
||||||
|
|
||||||
|
ASSERT(AdapterBinding->Adapter);
|
||||||
|
Adapter = AdapterBinding->Adapter;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the miniport is already busy, queue a workitem
|
||||||
|
*/
|
||||||
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
||||||
Queue = Adapter->MiniportBusy;
|
{
|
||||||
if (Queue) {
|
if(Adapter->MiniportBusy)
|
||||||
MiniQueueWorkItem(Adapter,
|
QueueWorkItem = TRUE;
|
||||||
NdisWorkItemRequest,
|
else
|
||||||
(PVOID)NdisRequest,
|
|
||||||
(NDIS_HANDLE)AdapterBinding);
|
|
||||||
} else {
|
|
||||||
Adapter->MiniportBusy = TRUE;
|
Adapter->MiniportBusy = TRUE;
|
||||||
}
|
}
|
||||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
||||||
|
|
||||||
if (!Queue) {
|
if (QueueWorkItem)
|
||||||
|
{
|
||||||
|
MiniQueueWorkItem(Adapter, NdisWorkItemRequest, (PVOID)NdisRequest, (NDIS_HANDLE)AdapterBinding);
|
||||||
|
return NDIS_STATUS_PENDING;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MiniportQueryInformation (called by MiniDoRequest) runs at DISPATCH_LEVEL */
|
||||||
|
/* TODO (?): move the irql raise into MiniDoRequest */
|
||||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||||
|
{
|
||||||
NdisStatus = MiniDoRequest(Adapter, NdisRequest);
|
NdisStatus = MiniDoRequest(Adapter, NdisRequest);
|
||||||
|
|
||||||
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||||
|
{
|
||||||
Adapter->MiniportBusy = FALSE;
|
Adapter->MiniportBusy = FALSE;
|
||||||
|
|
||||||
if (Adapter->WorkQueueHead)
|
if (Adapter->WorkQueueHead)
|
||||||
KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
|
KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
|
||||||
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
|
||||||
KeLowerIrql(OldIrql);
|
|
||||||
} else {
|
|
||||||
NdisStatus = NDIS_STATUS_PENDING;
|
|
||||||
}
|
}
|
||||||
|
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||||
|
}
|
||||||
|
KeLowerIrql(OldIrql);
|
||||||
|
|
||||||
return NdisStatus;
|
return NdisStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
ProReset(
|
ProReset(
|
||||||
IN NDIS_HANDLE MacBindingHandle)
|
IN NDIS_HANDLE MacBindingHandle)
|
||||||
|
@ -171,7 +180,7 @@ ProReset(
|
||||||
return NDIS_STATUS_FAILURE;
|
return NDIS_STATUS_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
ProSend(
|
ProSend(
|
||||||
IN NDIS_HANDLE MacBindingHandle,
|
IN NDIS_HANDLE MacBindingHandle,
|
||||||
|
@ -181,91 +190,173 @@ ProSend(
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
* MacBindingHandle = Adapter binding handle
|
* MacBindingHandle = Adapter binding handle
|
||||||
* Packet = Pointer to NDIS packet descriptor
|
* Packet = Pointer to NDIS packet descriptor
|
||||||
|
* RETURNS:
|
||||||
|
* NDIS_STATUS_SUCCESS always
|
||||||
|
* NOTES:
|
||||||
|
* TODO:
|
||||||
|
* - Fix return values
|
||||||
|
* - Should queue packet if miniport returns NDIS_STATUS_RESOURCES
|
||||||
|
* - Queue packets directly on the adapters when possible (i.e.
|
||||||
|
* when miniports not busy)
|
||||||
|
* - Break this up
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
KIRQL OldIrql;
|
KIRQL RaiseOldIrql, SpinOldIrql;
|
||||||
BOOLEAN Queue;
|
BOOLEAN QueueWorkItem;
|
||||||
NDIS_STATUS NdisStatus;
|
NDIS_STATUS NdisStatus;
|
||||||
PADAPTER_BINDING AdapterBinding = GET_ADAPTER_BINDING(MacBindingHandle);
|
PADAPTER_BINDING AdapterBinding;
|
||||||
PLOGICAL_ADAPTER Adapter = AdapterBinding->Adapter;
|
PLOGICAL_ADAPTER Adapter;
|
||||||
|
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||||
|
|
||||||
/* FIXME: Should queue packet if miniport returns NDIS_STATUS_RESOURCES */
|
ASSERT(MacBindingHandle);
|
||||||
|
AdapterBinding = GET_ADAPTER_BINDING(MacBindingHandle);
|
||||||
|
|
||||||
|
ASSERT(AdapterBinding);
|
||||||
|
Adapter = AdapterBinding->Adapter;
|
||||||
|
|
||||||
|
ASSERT(Adapter);
|
||||||
|
|
||||||
|
/* if the following is not true, KeRaiseIrql() below will break */
|
||||||
|
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
|
||||||
|
|
||||||
|
/* XXX what is this crazy black magic? */
|
||||||
Packet->Reserved[0] = (ULONG_PTR)MacBindingHandle;
|
Packet->Reserved[0] = (ULONG_PTR)MacBindingHandle;
|
||||||
|
|
||||||
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
/*
|
||||||
Queue = Adapter->MiniportBusy;
|
* Acquire this lock in order to see if the miniport is busy.
|
||||||
|
* If it is not busy, we mark it as busy and release the lock.
|
||||||
/* We may have to loop this packet if miniport cannot */
|
* Else we don't do anything because we have to queue a workitem
|
||||||
if (Adapter->NdisMiniportBlock.MacOptions & NDIS_MAC_OPTION_NO_LOOPBACK) {
|
* anyway.
|
||||||
if (MiniAdapterHasAddress(Adapter, Packet)) {
|
*/
|
||||||
/* Do software loopback because miniport does not support it */
|
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &SpinOldIrql);
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* if the miniport is marked as busy, we queue the packet as a work item,
|
||||||
|
* else we send the packet directly to the miniport. Sending to the miniport
|
||||||
|
* makes it busy.
|
||||||
|
*/
|
||||||
|
if (Adapter->MiniportBusy)
|
||||||
|
QueueWorkItem = TRUE;
|
||||||
|
else
|
||||||
|
Adapter->MiniportBusy = TRUE;
|
||||||
|
}
|
||||||
|
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test the packet to see if it is a MAC loopback.
|
||||||
|
*
|
||||||
|
* We may have to loop this packet if miniport cannot.
|
||||||
|
* If dest MAC address of packet == MAC address of adapter,
|
||||||
|
* this is a loopback frame.
|
||||||
|
*/
|
||||||
|
if ((Adapter->NdisMiniportBlock.MacOptions & NDIS_MAC_OPTION_NO_LOOPBACK) &&
|
||||||
|
MiniAdapterHasAddress(Adapter, Packet))
|
||||||
|
{
|
||||||
NDIS_DbgPrint(MIN_TRACE, ("Looping packet.\n"));
|
NDIS_DbgPrint(MIN_TRACE, ("Looping packet.\n"));
|
||||||
|
|
||||||
if (Queue) {
|
if (QueueWorkItem)
|
||||||
|
{
|
||||||
/* FIXME: Packets should properbly be queued directly on the adapter instead */
|
MiniQueueWorkItem(Adapter, NdisWorkItemSendLoopback, (PVOID)Packet, (NDIS_HANDLE)AdapterBinding);
|
||||||
|
|
||||||
MiniQueueWorkItem(Adapter,
|
|
||||||
NdisWorkItemSendLoopback,
|
|
||||||
(PVOID)Packet,
|
|
||||||
(NDIS_HANDLE)AdapterBinding);
|
|
||||||
} else {
|
|
||||||
Adapter->MiniportBusy = TRUE;
|
|
||||||
}
|
|
||||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
|
||||||
|
|
||||||
if (!Queue) {
|
|
||||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
|
||||||
NdisStatus = ProIndicatePacket(Adapter, Packet);
|
|
||||||
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
|
||||||
Adapter->MiniportBusy = FALSE;
|
|
||||||
if (Adapter->WorkQueueHead)
|
|
||||||
KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
|
|
||||||
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
|
||||||
KeLowerIrql(OldIrql);
|
|
||||||
return NdisStatus;
|
|
||||||
} else {
|
|
||||||
return NDIS_STATUS_PENDING;
|
return NDIS_STATUS_PENDING;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Queue) {
|
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* atm this *only* handles loopback packets - it calls MiniIndicateData to
|
||||||
|
* send back to the protocol. FIXME: this will need to be adjusted a bit.
|
||||||
|
* Also, I'm not sure you really have to be at dispatch level for this. It
|
||||||
|
* might use a ReceivePackets handler, which can run <= DISPATCH_LEVEL.
|
||||||
|
*/
|
||||||
|
NdisStatus = ProIndicatePacket(Adapter, Packet);
|
||||||
|
|
||||||
/* FIXME: Packets should properbly be queued directly on the adapter instead */
|
|
||||||
|
|
||||||
MiniQueueWorkItem(Adapter,
|
|
||||||
NdisWorkItemSend,
|
|
||||||
(PVOID)Packet,
|
|
||||||
(NDIS_HANDLE)AdapterBinding);
|
|
||||||
} else {
|
|
||||||
Adapter->MiniportBusy = TRUE;
|
|
||||||
}
|
|
||||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
|
||||||
|
|
||||||
if (!Queue) {
|
|
||||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
|
||||||
NdisStatus = (*Adapter->Miniport->Chars.u1.SendHandler)(
|
|
||||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
|
||||||
Packet,
|
|
||||||
0);
|
|
||||||
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||||
|
{
|
||||||
Adapter->MiniportBusy = FALSE;
|
Adapter->MiniportBusy = FALSE;
|
||||||
|
|
||||||
if (Adapter->WorkQueueHead)
|
if (Adapter->WorkQueueHead)
|
||||||
KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
|
KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
|
||||||
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
else
|
||||||
KeLowerIrql(OldIrql);
|
NDIS_DbgPrint(MID_TRACE,("Failed to insert packet into work queue\n"));
|
||||||
} else {
|
|
||||||
NdisStatus = NDIS_STATUS_PENDING;
|
|
||||||
}
|
}
|
||||||
|
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||||
|
}
|
||||||
|
KeLowerIrql(RaiseOldIrql);
|
||||||
|
|
||||||
|
return NdisStatus;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
NDIS_DbgPrint(MID_TRACE,("Not a loopback packet\n"));
|
||||||
|
|
||||||
|
/* This is a normal send packet, not a loopback packet. */
|
||||||
|
if (QueueWorkItem)
|
||||||
|
{
|
||||||
|
MiniQueueWorkItem(Adapter, NdisWorkItemSend, (PVOID)Packet, (NDIS_HANDLE)AdapterBinding);
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("Queued a work item and returning\n"));
|
||||||
|
return NDIS_STATUS_PENDING;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT(Adapter->Miniport);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Call the appropriate send handler
|
||||||
|
*
|
||||||
|
* If a miniport provides a SendPackets handler, we always call it. If not, we call the
|
||||||
|
* Send handler.
|
||||||
|
*/
|
||||||
|
if(Adapter->Miniport->Chars.SendPacketsHandler)
|
||||||
|
{
|
||||||
|
/* TODO: support deserialized miniports by checking for attributes */
|
||||||
|
/* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */
|
||||||
|
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n"));
|
||||||
|
(*Adapter->Miniport->Chars.SendPacketsHandler)(Adapter->NdisMiniportBlock.MiniportAdapterContext, &Packet, 1);
|
||||||
|
}
|
||||||
|
KeLowerIrql(RaiseOldIrql);
|
||||||
|
|
||||||
|
/* XXX why the hell do we do this? */
|
||||||
|
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &SpinOldIrql);
|
||||||
|
{
|
||||||
|
if (Adapter->WorkQueueHead)
|
||||||
|
KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
|
||||||
|
}
|
||||||
|
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
|
||||||
|
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("MiniportDpc queued; returning NDIS_STATUS_SCUCESS\n"));
|
||||||
|
|
||||||
|
/* SendPackets handlers return void - they always "succeed" */
|
||||||
|
NdisStatus = NDIS_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Send handlers always run at DISPATCH_LEVEL so we raise here */
|
||||||
|
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
|
||||||
|
{
|
||||||
|
/* XXX FIXME THIS IS WRONG */
|
||||||
|
/* uh oh... forgot why i thought that... */
|
||||||
|
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n"));
|
||||||
|
NdisStatus = (*Adapter->Miniport->Chars.u1.SendHandler)(Adapter->NdisMiniportBlock.MiniportAdapterContext, Packet, 0);
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n"));
|
||||||
|
|
||||||
|
/* XXX why the hell do we do this? */
|
||||||
|
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||||
|
{
|
||||||
|
if (Adapter->WorkQueueHead)
|
||||||
|
KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
|
||||||
|
}
|
||||||
|
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||||
|
}
|
||||||
|
KeLowerIrql(RaiseOldIrql);
|
||||||
|
}
|
||||||
|
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("returning 0x%x\n", NdisStatus));
|
||||||
return NdisStatus;
|
return NdisStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
ProSendPackets(
|
ProSendPackets(
|
||||||
IN NDIS_HANDLE NdisBindingHandle,
|
IN NDIS_HANDLE NdisBindingHandle,
|
||||||
|
@ -275,7 +366,7 @@ ProSendPackets(
|
||||||
UNIMPLEMENTED
|
UNIMPLEMENTED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
ProTransferData(
|
ProTransferData(
|
||||||
IN NDIS_HANDLE MacBindingHandle,
|
IN NDIS_HANDLE MacBindingHandle,
|
||||||
|
@ -301,6 +392,7 @@ ProTransferData(
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||||
|
|
||||||
/* FIXME: Interrupts must be disabled for adapter */
|
/* FIXME: Interrupts must be disabled for adapter */
|
||||||
|
/* XXX sd - why is that true? */
|
||||||
|
|
||||||
if (Packet == Adapter->LoopPacket) {
|
if (Packet == Adapter->LoopPacket) {
|
||||||
/* NDIS is responsible for looping this packet */
|
/* NDIS is responsible for looping this packet */
|
||||||
|
@ -434,6 +526,13 @@ NdisOpenAdapter(
|
||||||
|
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||||
|
|
||||||
|
if(!NdisProtocolHandle)
|
||||||
|
{
|
||||||
|
NDIS_DbgPrint(MAX_TRACE, ("NdisProtocolHandle is NULL\n"));
|
||||||
|
*OpenErrorStatus = *Status = NDIS_STATUS_FAILURE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Adapter = MiniLocateDevice(AdapterName);
|
Adapter = MiniLocateDevice(AdapterName);
|
||||||
if (!Adapter) {
|
if (!Adapter) {
|
||||||
NDIS_DbgPrint(MIN_TRACE, ("Adapter not found.\n"));
|
NDIS_DbgPrint(MIN_TRACE, ("Adapter not found.\n"));
|
||||||
|
@ -518,9 +617,14 @@ NdisRegisterProtocol(
|
||||||
* NdisProtocolHandle = Address of buffer for handle used to identify the driver
|
* NdisProtocolHandle = Address of buffer for handle used to identify the driver
|
||||||
* ProtocolCharacteristics = Pointer to NDIS_PROTOCOL_CHARACTERISTICS structure
|
* ProtocolCharacteristics = Pointer to NDIS_PROTOCOL_CHARACTERISTICS structure
|
||||||
* CharacteristicsLength = Size of structure which ProtocolCharacteristics targets
|
* CharacteristicsLength = Size of structure which ProtocolCharacteristics targets
|
||||||
|
* NOTES:
|
||||||
|
* - you *must* set NdisProtocolHandle before doing anything that could wind up
|
||||||
|
* getting BindAdapterHandler, as it will probably call OpenAdapter with this handle
|
||||||
|
* - the above implies that the initialization of the protocol block must be complete
|
||||||
|
* by then
|
||||||
* TODO:
|
* TODO:
|
||||||
* break this function up
|
* - break this function up - probably do a 'ndisRefreshProtocolBindings' function
|
||||||
* make this thing able to handle >1 protocol
|
* - make this thing able to handle >1 protocol
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PPROTOCOL_BINDING Protocol;
|
PPROTOCOL_BINDING Protocol;
|
||||||
|
@ -532,9 +636,12 @@ NdisRegisterProtocol(
|
||||||
|
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||||
|
|
||||||
switch (ProtocolCharacteristics->MajorNdisVersion) {
|
/* first validate the PROTOCOL_CHARACTERISTICS */
|
||||||
case 0x03: /* we don't really want to support ndis3 drivers - so we complainf or now */
|
switch (ProtocolCharacteristics->MajorNdisVersion)
|
||||||
NDIS_DbgPrint(MID_TRACE, ("Ndis 3 protocol attempting to register\n"));
|
{
|
||||||
|
case 0x03:
|
||||||
|
/* we don't really want to support ndis3 drivers - so we complain for now */
|
||||||
|
NDIS_DbgPrint(MID_TRACE, ("NDIS 3 protocol attempting to register\n"));
|
||||||
MinSize = sizeof(NDIS30_PROTOCOL_CHARACTERISTICS_S);
|
MinSize = sizeof(NDIS30_PROTOCOL_CHARACTERISTICS_S);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -552,14 +659,17 @@ NdisRegisterProtocol(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CharacteristicsLength < MinSize) {
|
if (CharacteristicsLength < MinSize)
|
||||||
|
{
|
||||||
NDIS_DbgPrint(DEBUG_PROTOCOL, ("Bad protocol characteristics.\n"));
|
NDIS_DbgPrint(DEBUG_PROTOCOL, ("Bad protocol characteristics.\n"));
|
||||||
*Status = NDIS_STATUS_BAD_CHARACTERISTICS;
|
*Status = NDIS_STATUS_BAD_CHARACTERISTICS;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* set up the protocol block */
|
||||||
Protocol = ExAllocatePool(NonPagedPool, sizeof(PROTOCOL_BINDING));
|
Protocol = ExAllocatePool(NonPagedPool, sizeof(PROTOCOL_BINDING));
|
||||||
if (!Protocol) {
|
if (!Protocol)
|
||||||
|
{
|
||||||
NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
|
NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
|
||||||
*Status = NDIS_STATUS_RESOURCES;
|
*Status = NDIS_STATUS_RESOURCES;
|
||||||
return;
|
return;
|
||||||
|
@ -568,10 +678,9 @@ NdisRegisterProtocol(
|
||||||
RtlZeroMemory(Protocol, sizeof(PROTOCOL_BINDING));
|
RtlZeroMemory(Protocol, sizeof(PROTOCOL_BINDING));
|
||||||
RtlCopyMemory(&Protocol->Chars, ProtocolCharacteristics, MinSize);
|
RtlCopyMemory(&Protocol->Chars, ProtocolCharacteristics, MinSize);
|
||||||
|
|
||||||
NtStatus = RtlUpcaseUnicodeString(&Protocol->Chars.Name,
|
NtStatus = RtlUpcaseUnicodeString(&Protocol->Chars.Name, &ProtocolCharacteristics->Name, TRUE);
|
||||||
&ProtocolCharacteristics->Name,
|
if (!NT_SUCCESS(NtStatus))
|
||||||
TRUE);
|
{
|
||||||
if (!NT_SUCCESS(NtStatus)) {
|
|
||||||
NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
|
NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
|
||||||
ExFreePool(Protocol);
|
ExFreePool(Protocol);
|
||||||
*Status = NDIS_STATUS_RESOURCES;
|
*Status = NDIS_STATUS_RESOURCES;
|
||||||
|
@ -596,11 +705,7 @@ NdisRegisterProtocol(
|
||||||
UNICODE_STRING RegistryPath;
|
UNICODE_STRING RegistryPath;
|
||||||
WCHAR *RegistryPathStr;
|
WCHAR *RegistryPathStr;
|
||||||
|
|
||||||
#define SERVICES_KEY L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"
|
RegistryPathStr = ExAllocatePool(PagedPool, sizeof(SERVICES_KEY) + ProtocolCharacteristics->Name.Length + sizeof(LINKAGE_KEY));
|
||||||
#define LINKAGE_KEY L"\\Linkage"
|
|
||||||
|
|
||||||
RegistryPathStr = ExAllocatePool(PagedPool,
|
|
||||||
sizeof(SERVICES_KEY) + ProtocolCharacteristics->Name.Length + sizeof(LINKAGE_KEY));
|
|
||||||
if(!RegistryPathStr)
|
if(!RegistryPathStr)
|
||||||
{
|
{
|
||||||
NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
|
NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
|
||||||
|
@ -610,8 +715,7 @@ NdisRegisterProtocol(
|
||||||
}
|
}
|
||||||
|
|
||||||
wcscpy(RegistryPathStr, SERVICES_KEY);
|
wcscpy(RegistryPathStr, SERVICES_KEY);
|
||||||
wcsncat(RegistryPathStr, ((WCHAR *)ProtocolCharacteristics->Name.Buffer),
|
wcsncat(RegistryPathStr, ((WCHAR *)ProtocolCharacteristics->Name.Buffer), ProtocolCharacteristics->Name.Length / sizeof(WCHAR));
|
||||||
ProtocolCharacteristics->Name.Length / sizeof(WCHAR));
|
|
||||||
RegistryPathStr[wcslen(SERVICES_KEY)+ProtocolCharacteristics->Name.Length/sizeof(WCHAR)] = 0;
|
RegistryPathStr[wcslen(SERVICES_KEY)+ProtocolCharacteristics->Name.Length/sizeof(WCHAR)] = 0;
|
||||||
wcscat(RegistryPathStr, LINKAGE_KEY);
|
wcscat(RegistryPathStr, LINKAGE_KEY);
|
||||||
|
|
||||||
|
@ -693,7 +797,6 @@ NdisRegisterProtocol(
|
||||||
* This is constructed as follows:
|
* This is constructed as follows:
|
||||||
* SERVICES_KEY + extracted device name + Protocol name from characteristics
|
* SERVICES_KEY + extracted device name + Protocol name from characteristics
|
||||||
*/
|
*/
|
||||||
#define PARAMETERS_KEY L"\\Parameters\\"
|
|
||||||
|
|
||||||
PathLength = sizeof(SERVICES_KEY) + /* \Registry\Machine\System\CurrentControlSet\Services\ */
|
PathLength = sizeof(SERVICES_KEY) + /* \Registry\Machine\System\CurrentControlSet\Services\ */
|
||||||
wcslen( ((WCHAR *)KeyInformation->Data)+8 ) * sizeof(WCHAR) + /* Adapter1 (extracted from \Device\Adapter1) */
|
wcslen( ((WCHAR *)KeyInformation->Data)+8 ) * sizeof(WCHAR) + /* Adapter1 (extracted from \Device\Adapter1) */
|
||||||
|
@ -723,6 +826,8 @@ NdisRegisterProtocol(
|
||||||
&DeviceName, &RegistryPath));
|
&DeviceName, &RegistryPath));
|
||||||
|
|
||||||
/* XXX SD must do something with bind context */
|
/* XXX SD must do something with bind context */
|
||||||
|
*NdisProtocolHandle = Protocol;
|
||||||
|
|
||||||
{
|
{
|
||||||
BIND_HANDLER BindHandler = ProtocolCharacteristics->BindAdapterHandler;
|
BIND_HANDLER BindHandler = ProtocolCharacteristics->BindAdapterHandler;
|
||||||
if(BindHandler)
|
if(BindHandler)
|
||||||
|
@ -730,6 +835,7 @@ NdisRegisterProtocol(
|
||||||
else
|
else
|
||||||
NDIS_DbgPrint(MID_TRACE, ("No protocol bind handler specified\n"));
|
NDIS_DbgPrint(MID_TRACE, ("No protocol bind handler specified\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
(*(Protocol->Chars.BindAdapterHandler))(Status, BindContext, &DeviceName, &RegistryPath, 0);
|
(*(Protocol->Chars.BindAdapterHandler))(Status, BindContext, &DeviceName, &RegistryPath, 0);
|
||||||
*/
|
*/
|
||||||
|
@ -739,6 +845,7 @@ NdisRegisterProtocol(
|
||||||
/* Put protocol binding struct on global list */
|
/* Put protocol binding struct on global list */
|
||||||
ExInterlockedInsertTailList(&ProtocolListHead, &Protocol->ListEntry, &ProtocolListLock);
|
ExInterlockedInsertTailList(&ProtocolListHead, &Protocol->ListEntry, &ProtocolListLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
else if(*Status != NDIS_STATUS_PENDING)
|
else if(*Status != NDIS_STATUS_PENDING)
|
||||||
{
|
{
|
||||||
|
@ -749,11 +856,10 @@ NdisRegisterProtocol(
|
||||||
DataOffset += wcslen((WCHAR *)KeyInformation->Data);
|
DataOffset += wcslen((WCHAR *)KeyInformation->Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
*NdisProtocolHandle = Protocol;
|
|
||||||
*Status = NDIS_STATUS_SUCCESS;
|
*Status = NDIS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -774,7 +880,7 @@ NdisRequest(
|
||||||
*Status = ProRequest(NdisBindingHandle, NdisRequest);
|
*Status = ProRequest(NdisBindingHandle, NdisRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -787,7 +893,7 @@ NdisReset(
|
||||||
*Status = ProReset(NdisBindingHandle);
|
*Status = ProReset(NdisBindingHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -808,7 +914,7 @@ NdisSend(
|
||||||
*Status = ProSend(NdisBindingHandle, Packet);
|
*Status = ProSend(NdisBindingHandle, Packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -822,7 +928,7 @@ NdisSendPackets(
|
||||||
ProSendPackets(NdisBindingHandle, PacketArray, NumberOfPackets);
|
ProSendPackets(NdisBindingHandle, PacketArray, NumberOfPackets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,6 +1,21 @@
|
||||||
Build instructions for NDIS library
|
Build instructions for NDIS library
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
|
- Building of ndis is currently only supported with the mingw gcc compiler
|
||||||
|
|
||||||
|
- from this directory:
|
||||||
|
'make' to make the library
|
||||||
|
'make clean' to clean it
|
||||||
|
|
||||||
|
- from the top level reactos directory:
|
||||||
|
'make ndis'
|
||||||
|
|
||||||
|
- make must be run from the top level reactos directory to update the import
|
||||||
|
library, unless you manually update it
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
All of the below is outdated.
|
||||||
|
-----------------------------
|
||||||
Building with Visual C++ and Windows NT DDK:
|
Building with Visual C++ and Windows NT DDK:
|
||||||
|
|
||||||
Variables:
|
Variables:
|
||||||
|
|
|
@ -482,6 +482,7 @@ UINT ResizePacket(
|
||||||
VOID DisplayIPPacket(
|
VOID DisplayIPPacket(
|
||||||
PIP_PACKET IPPacket)
|
PIP_PACKET IPPacket)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
UINT i;
|
UINT i;
|
||||||
PCHAR p;
|
PCHAR p;
|
||||||
UINT Length;
|
UINT Length;
|
||||||
|
@ -527,6 +528,7 @@ VOID DisplayIPPacket(
|
||||||
}
|
}
|
||||||
DbgPrint("\n");
|
DbgPrint("\n");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* DBG */
|
#endif /* DBG */
|
||||||
|
|
||||||
|
|
|
@ -20,10 +20,23 @@
|
||||||
*
|
*
|
||||||
* rationale: you're never going to use *this* ndis.h to build a driver for win9x. You'll
|
* rationale: you're never going to use *this* ndis.h to build a driver for win9x. You'll
|
||||||
* use the MS ddk. This assumption drammatically simplifies ndis.h.
|
* use the MS ddk. This assumption drammatically simplifies ndis.h.
|
||||||
|
*
|
||||||
|
* There have been lots of instances of stdcall/cdecl mismatches, particularly in the
|
||||||
|
* callback routines. I have now nailed them all to STDCALL, which is what they ought to
|
||||||
|
* be. If you cross-check with the ndis.h from the MS DDK, you'll note that the compiler
|
||||||
|
* is set to a default calling conveition of stdcall with the /Gz command-line switch.
|
||||||
|
* There are only a few functions that should actually be cdecl:
|
||||||
|
* - DbgPrint()
|
||||||
|
* - DbgPrintReturnControlC()
|
||||||
|
* - NdisWriteErrorLogEntry()
|
||||||
|
*
|
||||||
|
* All other functions declared in ndis.h should be stdcall.
|
||||||
|
*
|
||||||
|
* TODO:
|
||||||
|
* - finish sanitizing NDIS40 and NDIS50; think about NDIS51
|
||||||
|
* - make sure everything is stdcall
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO: finish sanitizing NDIS40 and NDIS50; think about NDIS51
|
|
||||||
|
|
||||||
#ifndef __NDIS_H
|
#ifndef __NDIS_H
|
||||||
#define __NDIS_H
|
#define __NDIS_H
|
||||||
|
|
||||||
|
@ -768,7 +781,7 @@ typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
|
||||||
} NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
|
} NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
|
||||||
|
|
||||||
|
|
||||||
typedef VOID (*ADAPTER_SHUTDOWN_HANDLER)(
|
typedef VOID STDCALL (*ADAPTER_SHUTDOWN_HANDLER)(
|
||||||
IN PVOID ShutdownContext);
|
IN PVOID ShutdownContext);
|
||||||
|
|
||||||
|
|
||||||
|
@ -990,21 +1003,21 @@ typedef enum _NET_DEVICE_POWER_STATE
|
||||||
|
|
||||||
/* Call Manager */
|
/* Call Manager */
|
||||||
|
|
||||||
typedef NDIS_STATUS (*CO_CREATE_VC_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*CO_CREATE_VC_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolAfContext,
|
IN NDIS_HANDLE ProtocolAfContext,
|
||||||
IN NDIS_HANDLE NdisVcHandle,
|
IN NDIS_HANDLE NdisVcHandle,
|
||||||
OUT PNDIS_HANDLE ProtocolVcContext);
|
OUT PNDIS_HANDLE ProtocolVcContext);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*CO_DELETE_VC_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*CO_DELETE_VC_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolVcContext);
|
IN NDIS_HANDLE ProtocolVcContext);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*CO_REQUEST_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*CO_REQUEST_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolAfContext,
|
IN NDIS_HANDLE ProtocolAfContext,
|
||||||
IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
|
IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
|
||||||
IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
|
IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
|
||||||
IN OUT PNDIS_REQUEST NdisRequest);
|
IN OUT PNDIS_REQUEST NdisRequest);
|
||||||
|
|
||||||
typedef VOID (*CO_REQUEST_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CO_REQUEST_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolAfContext OPTIONAL,
|
IN NDIS_HANDLE ProtocolAfContext OPTIONAL,
|
||||||
IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
|
IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
|
||||||
|
@ -1012,7 +1025,7 @@ typedef VOID (*CO_REQUEST_COMPLETE_HANDLER)(
|
||||||
IN PNDIS_REQUEST NdisRequest);
|
IN PNDIS_REQUEST NdisRequest);
|
||||||
|
|
||||||
|
|
||||||
typedef NDIS_STATUS (*CM_OPEN_AF_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*CM_OPEN_AF_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrBindingContext,
|
IN NDIS_HANDLE CallMgrBindingContext,
|
||||||
IN PCO_ADDRESS_FAMILY AddressFamily,
|
IN PCO_ADDRESS_FAMILY AddressFamily,
|
||||||
IN NDIS_HANDLE NdisAfHandle,
|
IN NDIS_HANDLE NdisAfHandle,
|
||||||
|
@ -1021,13 +1034,13 @@ typedef NDIS_STATUS (*CM_OPEN_AF_HANDLER)(
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
(*CM_CLOSE_AF_HANDLER)(
|
STDCALL (*CM_CLOSE_AF_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrAfContext
|
IN NDIS_HANDLE CallMgrAfContext
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
(*CM_REG_SAP_HANDLER)(
|
STDCALL (*CM_REG_SAP_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrAfContext,
|
IN NDIS_HANDLE CallMgrAfContext,
|
||||||
IN PCO_SAP Sap,
|
IN PCO_SAP Sap,
|
||||||
IN NDIS_HANDLE NdisSapHandle,
|
IN NDIS_HANDLE NdisSapHandle,
|
||||||
|
@ -1036,13 +1049,13 @@ NDIS_STATUS
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
(*CM_DEREG_SAP_HANDLER)(
|
STDCALL (*CM_DEREG_SAP_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrSapContext
|
IN NDIS_HANDLE CallMgrSapContext
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
(*CM_MAKE_CALL_HANDLER)(
|
STDCALL (*CM_MAKE_CALL_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrVcContext,
|
IN NDIS_HANDLE CallMgrVcContext,
|
||||||
IN OUT PCO_CALL_PARAMETERS CallParameters,
|
IN OUT PCO_CALL_PARAMETERS CallParameters,
|
||||||
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
|
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
|
||||||
|
@ -1051,7 +1064,7 @@ NDIS_STATUS
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
(*CM_CLOSE_CALL_HANDLER)(
|
STDCALL (*CM_CLOSE_CALL_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrVcContext,
|
IN NDIS_HANDLE CallMgrVcContext,
|
||||||
IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
|
IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
|
||||||
IN PVOID CloseData OPTIONAL,
|
IN PVOID CloseData OPTIONAL,
|
||||||
|
@ -1060,7 +1073,7 @@ NDIS_STATUS
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(*CM_INCOMING_CALL_COMPLETE_HANDLER)(
|
STDCALL (*CM_INCOMING_CALL_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE CallMgrVcContext,
|
IN NDIS_HANDLE CallMgrVcContext,
|
||||||
IN PCO_CALL_PARAMETERS CallParameters
|
IN PCO_CALL_PARAMETERS CallParameters
|
||||||
|
@ -1068,7 +1081,7 @@ VOID
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
(*CM_ADD_PARTY_HANDLER)(
|
STDCALL (*CM_ADD_PARTY_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrVcContext,
|
IN NDIS_HANDLE CallMgrVcContext,
|
||||||
IN OUT PCO_CALL_PARAMETERS CallParameters,
|
IN OUT PCO_CALL_PARAMETERS CallParameters,
|
||||||
IN NDIS_HANDLE NdisPartyHandle,
|
IN NDIS_HANDLE NdisPartyHandle,
|
||||||
|
@ -1077,7 +1090,7 @@ NDIS_STATUS
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
(*CM_DROP_PARTY_HANDLER)(
|
STDCALL (*CM_DROP_PARTY_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrPartyContext,
|
IN NDIS_HANDLE CallMgrPartyContext,
|
||||||
IN PVOID CloseData OPTIONAL,
|
IN PVOID CloseData OPTIONAL,
|
||||||
IN UINT Size OPTIONAL
|
IN UINT Size OPTIONAL
|
||||||
|
@ -1085,7 +1098,7 @@ NDIS_STATUS
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
|
STDCALL (*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE CallMgrVcContext,
|
IN NDIS_HANDLE CallMgrVcContext,
|
||||||
IN PCO_CALL_PARAMETERS CallParameters
|
IN PCO_CALL_PARAMETERS CallParameters
|
||||||
|
@ -1093,14 +1106,14 @@ VOID
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
|
STDCALL (*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE CallMgrVcContext
|
IN NDIS_HANDLE CallMgrVcContext
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NDIS_STATUS
|
NDIS_STATUS
|
||||||
(*CM_MODIFY_CALL_QOS_HANDLER)(
|
STDCALL (*CM_MODIFY_CALL_QOS_HANDLER)(
|
||||||
IN NDIS_HANDLE CallMgrVcContext,
|
IN NDIS_HANDLE CallMgrVcContext,
|
||||||
IN PCO_CALL_PARAMETERS CallParameters
|
IN PCO_CALL_PARAMETERS CallParameters
|
||||||
);
|
);
|
||||||
|
@ -1135,73 +1148,73 @@ typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
|
||||||
|
|
||||||
/* Call Manager clients */
|
/* Call Manager clients */
|
||||||
|
|
||||||
typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_OPEN_AF_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolAfContext,
|
IN NDIS_HANDLE ProtocolAfContext,
|
||||||
IN NDIS_HANDLE NdisAfHandle);
|
IN NDIS_HANDLE NdisAfHandle);
|
||||||
|
|
||||||
typedef VOID (*CL_CLOSE_AF_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_CLOSE_AF_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolAfContext);
|
IN NDIS_HANDLE ProtocolAfContext);
|
||||||
|
|
||||||
typedef VOID (*CL_REG_SAP_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_REG_SAP_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolSapContext,
|
IN NDIS_HANDLE ProtocolSapContext,
|
||||||
IN PCO_SAP Sap,
|
IN PCO_SAP Sap,
|
||||||
IN NDIS_HANDLE NdisSapHandle);
|
IN NDIS_HANDLE NdisSapHandle);
|
||||||
|
|
||||||
typedef VOID (*CL_DEREG_SAP_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_DEREG_SAP_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolSapContext);
|
IN NDIS_HANDLE ProtocolSapContext);
|
||||||
|
|
||||||
typedef VOID (*CL_MAKE_CALL_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_MAKE_CALL_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolVcContext,
|
IN NDIS_HANDLE ProtocolVcContext,
|
||||||
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
|
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
|
||||||
IN PCO_CALL_PARAMETERS CallParameters);
|
IN PCO_CALL_PARAMETERS CallParameters);
|
||||||
|
|
||||||
typedef VOID (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolVcContext,
|
IN NDIS_HANDLE ProtocolVcContext,
|
||||||
IN PCO_CALL_PARAMETERS CallParameters);
|
IN PCO_CALL_PARAMETERS CallParameters);
|
||||||
|
|
||||||
typedef VOID (*CL_CLOSE_CALL_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_CLOSE_CALL_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolVcContext,
|
IN NDIS_HANDLE ProtocolVcContext,
|
||||||
IN NDIS_HANDLE ProtocolPartyContext OPTIONAL);
|
IN NDIS_HANDLE ProtocolPartyContext OPTIONAL);
|
||||||
|
|
||||||
typedef VOID (*CL_ADD_PARTY_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_ADD_PARTY_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolPartyContext,
|
IN NDIS_HANDLE ProtocolPartyContext,
|
||||||
IN NDIS_HANDLE NdisPartyHandle,
|
IN NDIS_HANDLE NdisPartyHandle,
|
||||||
IN PCO_CALL_PARAMETERS CallParameters);
|
IN PCO_CALL_PARAMETERS CallParameters);
|
||||||
|
|
||||||
typedef VOID (*CL_DROP_PARTY_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CL_DROP_PARTY_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolPartyContext);
|
IN NDIS_HANDLE ProtocolPartyContext);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*CL_INCOMING_CALL_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*CL_INCOMING_CALL_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolSapContext,
|
IN NDIS_HANDLE ProtocolSapContext,
|
||||||
IN NDIS_HANDLE ProtocolVcContext,
|
IN NDIS_HANDLE ProtocolVcContext,
|
||||||
IN OUT PCO_CALL_PARAMETERS CallParameters);
|
IN OUT PCO_CALL_PARAMETERS CallParameters);
|
||||||
|
|
||||||
typedef VOID (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
|
typedef VOID STDCALL (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolVcContext,
|
IN NDIS_HANDLE ProtocolVcContext,
|
||||||
IN PCO_CALL_PARAMETERS CallParameters);
|
IN PCO_CALL_PARAMETERS CallParameters);
|
||||||
|
|
||||||
typedef VOID (*CL_INCOMING_CLOSE_CALL_HANDLER)(
|
typedef VOID STDCALL (*CL_INCOMING_CLOSE_CALL_HANDLER)(
|
||||||
IN NDIS_STATUS CloseStatus,
|
IN NDIS_STATUS CloseStatus,
|
||||||
IN NDIS_HANDLE ProtocolVcContext,
|
IN NDIS_HANDLE ProtocolVcContext,
|
||||||
IN PVOID CloseData OPTIONAL,
|
IN PVOID CloseData OPTIONAL,
|
||||||
IN UINT Size OPTIONAL);
|
IN UINT Size OPTIONAL);
|
||||||
|
|
||||||
typedef VOID (*CL_INCOMING_DROP_PARTY_HANDLER)(
|
typedef VOID STDCALL (*CL_INCOMING_DROP_PARTY_HANDLER)(
|
||||||
IN NDIS_STATUS DropStatus,
|
IN NDIS_STATUS DropStatus,
|
||||||
IN NDIS_HANDLE ProtocolPartyContext,
|
IN NDIS_HANDLE ProtocolPartyContext,
|
||||||
IN PVOID CloseData OPTIONAL,
|
IN PVOID CloseData OPTIONAL,
|
||||||
IN UINT Size OPTIONAL);
|
IN UINT Size OPTIONAL);
|
||||||
|
|
||||||
typedef VOID (*CL_CALL_CONNECTED_HANDLER)(
|
typedef VOID STDCALL (*CL_CALL_CONNECTED_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolVcContext);
|
IN NDIS_HANDLE ProtocolVcContext);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1239,53 +1252,53 @@ typedef struct _NDIS_CLIENT_CHARACTERISTICS
|
||||||
|
|
||||||
/* Prototypes for NDIS 3.0 protocol characteristics */
|
/* Prototypes for NDIS 3.0 protocol characteristics */
|
||||||
|
|
||||||
typedef VOID (*OPEN_ADAPTER_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*OPEN_ADAPTER_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_STATUS OpenErrorStatus);
|
IN NDIS_STATUS OpenErrorStatus);
|
||||||
|
|
||||||
typedef VOID (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN NDIS_STATUS Status);
|
IN NDIS_STATUS Status);
|
||||||
|
|
||||||
typedef VOID (*RESET_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*RESET_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN NDIS_STATUS Status);
|
IN NDIS_STATUS Status);
|
||||||
|
|
||||||
typedef VOID (*REQUEST_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*REQUEST_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN PNDIS_REQUEST NdisRequest,
|
IN PNDIS_REQUEST NdisRequest,
|
||||||
IN NDIS_STATUS Status);
|
IN NDIS_STATUS Status);
|
||||||
|
|
||||||
typedef VOID (*STATUS_HANDLER)(
|
typedef VOID STDCALL (*STATUS_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN NDIS_STATUS GeneralStatus,
|
IN NDIS_STATUS GeneralStatus,
|
||||||
IN PVOID StatusBuffer,
|
IN PVOID StatusBuffer,
|
||||||
IN UINT StatusBufferSize);
|
IN UINT StatusBufferSize);
|
||||||
|
|
||||||
typedef VOID (*STATUS_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*STATUS_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext);
|
IN NDIS_HANDLE ProtocolBindingContext);
|
||||||
|
|
||||||
typedef VOID (*SEND_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*SEND_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN PNDIS_PACKET Packet,
|
IN PNDIS_PACKET Packet,
|
||||||
IN NDIS_STATUS Status);
|
IN NDIS_STATUS Status);
|
||||||
|
|
||||||
typedef VOID (*WAN_SEND_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*WAN_SEND_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN PNDIS_WAN_PACKET Packet,
|
IN PNDIS_WAN_PACKET Packet,
|
||||||
IN NDIS_STATUS Status);
|
IN NDIS_STATUS Status);
|
||||||
|
|
||||||
typedef VOID (*TRANSFER_DATA_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*TRANSFER_DATA_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN PNDIS_PACKET Packet,
|
IN PNDIS_PACKET Packet,
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN UINT BytesTransferred);
|
IN UINT BytesTransferred);
|
||||||
|
|
||||||
typedef VOID (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
|
||||||
VOID);
|
VOID);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*RECEIVE_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*RECEIVE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN NDIS_HANDLE MacReceiveContext,
|
IN NDIS_HANDLE MacReceiveContext,
|
||||||
IN PVOID HeaderBuffer,
|
IN PVOID HeaderBuffer,
|
||||||
|
@ -1294,12 +1307,12 @@ typedef NDIS_STATUS (*RECEIVE_HANDLER)(
|
||||||
IN UINT LookaheadBufferSize,
|
IN UINT LookaheadBufferSize,
|
||||||
IN UINT PacketSize);
|
IN UINT PacketSize);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*WAN_RECEIVE_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*WAN_RECEIVE_HANDLER)(
|
||||||
IN NDIS_HANDLE NdisLinkHandle,
|
IN NDIS_HANDLE NdisLinkHandle,
|
||||||
IN PUCHAR Packet,
|
IN PUCHAR Packet,
|
||||||
IN ULONG PacketSize);
|
IN ULONG PacketSize);
|
||||||
|
|
||||||
typedef VOID (*RECEIVE_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*RECEIVE_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext);
|
IN NDIS_HANDLE ProtocolBindingContext);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1380,30 +1393,30 @@ typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS_S
|
||||||
|
|
||||||
/* Prototypes for NDIS 4.0 protocol characteristics */
|
/* Prototypes for NDIS 4.0 protocol characteristics */
|
||||||
|
|
||||||
typedef INT (*RECEIVE_PACKET_HANDLER)(
|
typedef INT STDCALL (*RECEIVE_PACKET_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN PNDIS_PACKET Packet);
|
IN PNDIS_PACKET Packet);
|
||||||
|
|
||||||
typedef VOID (*BIND_HANDLER)(
|
typedef VOID STDCALL (*BIND_HANDLER)(
|
||||||
OUT PNDIS_STATUS Status,
|
OUT PNDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE BindContext,
|
IN NDIS_HANDLE BindContext,
|
||||||
IN PNDIS_STRING DeviceName,
|
IN PNDIS_STRING DeviceName,
|
||||||
IN PVOID SystemSpecific1,
|
IN PVOID SystemSpecific1,
|
||||||
IN PVOID SystemSpecific2);
|
IN PVOID SystemSpecific2);
|
||||||
|
|
||||||
typedef VOID (*UNBIND_HANDLER)(
|
typedef VOID STDCALL (*UNBIND_HANDLER)(
|
||||||
OUT PNDIS_STATUS Status,
|
OUT PNDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN NDIS_HANDLE UnbindContext);
|
IN NDIS_HANDLE UnbindContext);
|
||||||
|
|
||||||
typedef VOID (*TRANSLATE_HANDLER)(
|
typedef VOID STDCALL (*TRANSLATE_HANDLER)(
|
||||||
OUT PNDIS_STATUS Status,
|
OUT PNDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
OUT PNET_PNP_ID IdList,
|
OUT PNET_PNP_ID IdList,
|
||||||
IN ULONG IdListLength,
|
IN ULONG IdListLength,
|
||||||
OUT PULONG BytesReturned);
|
OUT PULONG BytesReturned);
|
||||||
|
|
||||||
typedef VOID (*UNLOAD_PROTOCOL_HANDLER)(
|
typedef VOID STDCALL (*UNLOAD_PROTOCOL_HANDLER)(
|
||||||
VOID);
|
VOID);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1439,24 +1452,24 @@ typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS_S
|
||||||
|
|
||||||
#ifdef NDIS50
|
#ifdef NDIS50
|
||||||
|
|
||||||
typedef VOID (*CO_SEND_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*CO_SEND_COMPLETE_HANDLER)(
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE ProtocolVcContext,
|
IN NDIS_HANDLE ProtocolVcContext,
|
||||||
IN PNDIS_PACKET Packet);
|
IN PNDIS_PACKET Packet);
|
||||||
|
|
||||||
typedef VOID (*CO_STATUS_HANDLER)(
|
typedef VOID STDCALL (*CO_STATUS_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
|
IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
|
||||||
IN NDIS_STATUS GeneralStatus,
|
IN NDIS_STATUS GeneralStatus,
|
||||||
IN PVOID StatusBuffer,
|
IN PVOID StatusBuffer,
|
||||||
IN UINT StatusBufferSize);
|
IN UINT StatusBufferSize);
|
||||||
|
|
||||||
typedef UINT (*CO_RECEIVE_PACKET_HANDLER)(
|
typedef UINT STDCALL (*CO_RECEIVE_PACKET_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN NDIS_HANDLE ProtocolVcContext,
|
IN NDIS_HANDLE ProtocolVcContext,
|
||||||
IN PNDIS_PACKET Packet);
|
IN PNDIS_PACKET Packet);
|
||||||
|
|
||||||
typedef VOID (*CO_AF_REGISTER_NOTIFY_HANDLER)(
|
typedef VOID STDCALL (*CO_AF_REGISTER_NOTIFY_HANDLER)(
|
||||||
IN NDIS_HANDLE ProtocolBindingContext,
|
IN NDIS_HANDLE ProtocolBindingContext,
|
||||||
IN PCO_ADDRESS_FAMILY AddressFamily);
|
IN PCO_ADDRESS_FAMILY AddressFamily);
|
||||||
|
|
||||||
|
@ -3964,18 +3977,18 @@ typedef struct _NDIS30_MINIPORT_CHARACTERISTICS_S
|
||||||
|
|
||||||
/* Extensions for NDIS 4.0 miniports */
|
/* Extensions for NDIS 4.0 miniports */
|
||||||
|
|
||||||
typedef VOID (*W_SEND_PACKETS_HANDLER)(
|
typedef VOID STDCALL (*W_SEND_PACKETS_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterContext,
|
IN NDIS_HANDLE MiniportAdapterContext,
|
||||||
IN PPNDIS_PACKET PacketArray,
|
IN PPNDIS_PACKET PacketArray,
|
||||||
IN UINT NumberOfPackets);
|
IN UINT NumberOfPackets);
|
||||||
|
|
||||||
#ifdef NDIS40
|
#ifdef NDIS40
|
||||||
|
|
||||||
typedef VOID (*W_RETURN_PACKET_HANDLER)(
|
typedef VOID STDCALL (*W_RETURN_PACKET_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterContext,
|
IN NDIS_HANDLE MiniportAdapterContext,
|
||||||
IN PNDIS_PACKET Packet);
|
IN PNDIS_PACKET Packet);
|
||||||
|
|
||||||
typedef VOID (*W_ALLOCATE_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*W_ALLOCATE_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterContext,
|
IN NDIS_HANDLE MiniportAdapterContext,
|
||||||
IN PVOID VirtualAddress,
|
IN PVOID VirtualAddress,
|
||||||
IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
|
IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
|
||||||
|
@ -4010,27 +4023,27 @@ typedef struct _NDIS40_MINIPORT_CHARACTERISTICS_S
|
||||||
|
|
||||||
#ifdef NDIS50
|
#ifdef NDIS50
|
||||||
|
|
||||||
typedef NDIS_STATUS (*W_CO_CREATE_VC_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*W_CO_CREATE_VC_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterContext,
|
IN NDIS_HANDLE MiniportAdapterContext,
|
||||||
IN NDIS_HANDLE NdisVcHandle,
|
IN NDIS_HANDLE NdisVcHandle,
|
||||||
OUT PNDIS_HANDLE MiniportVcContext);
|
OUT PNDIS_HANDLE MiniportVcContext);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*W_CO_DELETE_VC_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*W_CO_DELETE_VC_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportVcContext);
|
IN NDIS_HANDLE MiniportVcContext);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*W_CO_ACTIVATE_VC_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*W_CO_ACTIVATE_VC_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportVcContext,
|
IN NDIS_HANDLE MiniportVcContext,
|
||||||
IN OUT PCO_CALL_PARAMETERS CallParameters);
|
IN OUT PCO_CALL_PARAMETERS CallParameters);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*W_CO_DEACTIVATE_VC_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*W_CO_DEACTIVATE_VC_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportVcContext);
|
IN NDIS_HANDLE MiniportVcContext);
|
||||||
|
|
||||||
typedef VOID (*W_CO_SEND_PACKETS_HANDLER)(
|
typedef VOID STDCALL (*W_CO_SEND_PACKETS_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportVcContext,
|
IN NDIS_HANDLE MiniportVcContext,
|
||||||
IN PPNDIS_PACKET PacketArray,
|
IN PPNDIS_PACKET PacketArray,
|
||||||
IN UINT NumberOfPackets);
|
IN UINT NumberOfPackets);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*W_CO_REQUEST_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*W_CO_REQUEST_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterContext,
|
IN NDIS_HANDLE MiniportAdapterContext,
|
||||||
IN NDIS_HANDLE MiniportVcContext OPTIONAL,
|
IN NDIS_HANDLE MiniportVcContext OPTIONAL,
|
||||||
IN OUT PNDIS_REQUEST NdisRequest);
|
IN OUT PNDIS_REQUEST NdisRequest);
|
||||||
|
@ -4089,11 +4102,11 @@ typedef NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef NDIS_STATUS (*SEND_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*SEND_HANDLER)(
|
||||||
IN NDIS_HANDLE MacBindingHandle,
|
IN NDIS_HANDLE MacBindingHandle,
|
||||||
IN PNDIS_PACKET Packet);
|
IN PNDIS_PACKET Packet);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*TRANSFER_DATA_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*TRANSFER_DATA_HANDLER)(
|
||||||
IN NDIS_HANDLE MacBindingHandle,
|
IN NDIS_HANDLE MacBindingHandle,
|
||||||
IN NDIS_HANDLE MacReceiveContext,
|
IN NDIS_HANDLE MacReceiveContext,
|
||||||
IN UINT ByteOffset,
|
IN UINT ByteOffset,
|
||||||
|
@ -4101,10 +4114,10 @@ typedef NDIS_STATUS (*TRANSFER_DATA_HANDLER)(
|
||||||
OUT PNDIS_PACKET Packet,
|
OUT PNDIS_PACKET Packet,
|
||||||
OUT PUINT BytesTransferred);
|
OUT PUINT BytesTransferred);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*RESET_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*RESET_HANDLER)(
|
||||||
IN NDIS_HANDLE MacBindingHandle);
|
IN NDIS_HANDLE MacBindingHandle);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*REQUEST_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*REQUEST_HANDLER)(
|
||||||
IN NDIS_HANDLE MacBindingHandle,
|
IN NDIS_HANDLE MacBindingHandle,
|
||||||
IN PNDIS_REQUEST NdisRequest);
|
IN PNDIS_REQUEST NdisRequest);
|
||||||
|
|
||||||
|
@ -4167,7 +4180,7 @@ typedef struct _NDIS_ADAPTER_INFORMATION
|
||||||
|
|
||||||
/* Prototypes for NDIS_MAC_CHARACTERISTICS */
|
/* Prototypes for NDIS_MAC_CHARACTERISTICS */
|
||||||
|
|
||||||
typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*OPEN_ADAPTER_HANDLER)(
|
||||||
OUT PNDIS_STATUS OpenErrorStatus,
|
OUT PNDIS_STATUS OpenErrorStatus,
|
||||||
OUT NDIS_HANDLE * MacBindingHandle,
|
OUT NDIS_HANDLE * MacBindingHandle,
|
||||||
OUT PUINT SelectedMediumIndex,
|
OUT PUINT SelectedMediumIndex,
|
||||||
|
@ -4178,25 +4191,25 @@ typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
|
||||||
IN UINT OpenOptions,
|
IN UINT OpenOptions,
|
||||||
IN PSTRING AddressingInformation OPTIONAL);
|
IN PSTRING AddressingInformation OPTIONAL);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*CLOSE_ADAPTER_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*CLOSE_ADAPTER_HANDLER)(
|
||||||
IN NDIS_HANDLE MacBindingHandle);
|
IN NDIS_HANDLE MacBindingHandle);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*WAN_TRANSFER_DATA_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*WAN_TRANSFER_DATA_HANDLER)(
|
||||||
VOID);
|
VOID);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*QUERY_GLOBAL_STATISTICS_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*QUERY_GLOBAL_STATISTICS_HANDLER)(
|
||||||
IN NDIS_HANDLE MacAdapterContext,
|
IN NDIS_HANDLE MacAdapterContext,
|
||||||
IN PNDIS_REQUEST NdisRequest);
|
IN PNDIS_REQUEST NdisRequest);
|
||||||
|
|
||||||
typedef VOID (*UNLOAD_MAC_HANDLER)(
|
typedef VOID STDCALL (*UNLOAD_MAC_HANDLER)(
|
||||||
IN NDIS_HANDLE MacMacContext);
|
IN NDIS_HANDLE MacMacContext);
|
||||||
|
|
||||||
typedef NDIS_STATUS (*ADD_ADAPTER_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*ADD_ADAPTER_HANDLER)(
|
||||||
IN NDIS_HANDLE MacMacContext,
|
IN NDIS_HANDLE MacMacContext,
|
||||||
IN NDIS_HANDLE WrapperConfigurationContext,
|
IN NDIS_HANDLE WrapperConfigurationContext,
|
||||||
IN PNDIS_STRING AdapterName);
|
IN PNDIS_STRING AdapterName);
|
||||||
|
|
||||||
typedef VOID (*REMOVE_ADAPTER_HANDLER)(
|
typedef VOID STDCALL (*REMOVE_ADAPTER_HANDLER)(
|
||||||
IN NDIS_HANDLE MacAdapterContext);
|
IN NDIS_HANDLE MacAdapterContext);
|
||||||
|
|
||||||
typedef struct _NDIS_MAC_CHARACTERISTICS
|
typedef struct _NDIS_MAC_CHARACTERISTICS
|
||||||
|
@ -4424,10 +4437,10 @@ typedef struct _FILTERDBS
|
||||||
} FILTERDBS, *PFILTERDBS;
|
} FILTERDBS, *PFILTERDBS;
|
||||||
|
|
||||||
|
|
||||||
typedef VOID (*ETH_RCV_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*ETH_RCV_COMPLETE_HANDLER)(
|
||||||
IN PETH_FILTER Filter);
|
IN PETH_FILTER Filter);
|
||||||
|
|
||||||
typedef VOID (*ETH_RCV_INDICATE_HANDLER)(
|
typedef VOID STDCALL (*ETH_RCV_INDICATE_HANDLER)(
|
||||||
IN PETH_FILTER Filter,
|
IN PETH_FILTER Filter,
|
||||||
IN NDIS_HANDLE MacReceiveContext,
|
IN NDIS_HANDLE MacReceiveContext,
|
||||||
IN PCHAR Address,
|
IN PCHAR Address,
|
||||||
|
@ -4437,10 +4450,10 @@ typedef VOID (*ETH_RCV_INDICATE_HANDLER)(
|
||||||
IN UINT LookaheadBufferSize,
|
IN UINT LookaheadBufferSize,
|
||||||
IN UINT PacketSize);
|
IN UINT PacketSize);
|
||||||
|
|
||||||
typedef VOID (*FDDI_RCV_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*FDDI_RCV_COMPLETE_HANDLER)(
|
||||||
IN PFDDI_FILTER Filter);
|
IN PFDDI_FILTER Filter);
|
||||||
|
|
||||||
typedef VOID (*FDDI_RCV_INDICATE_HANDLER)(
|
typedef VOID STDCALL (*FDDI_RCV_INDICATE_HANDLER)(
|
||||||
IN PFDDI_FILTER Filter,
|
IN PFDDI_FILTER Filter,
|
||||||
IN NDIS_HANDLE MacReceiveContext,
|
IN NDIS_HANDLE MacReceiveContext,
|
||||||
IN PCHAR Address,
|
IN PCHAR Address,
|
||||||
|
@ -4451,15 +4464,15 @@ typedef VOID (*FDDI_RCV_INDICATE_HANDLER)(
|
||||||
IN UINT LookaheadBufferSize,
|
IN UINT LookaheadBufferSize,
|
||||||
IN UINT PacketSize);
|
IN UINT PacketSize);
|
||||||
|
|
||||||
typedef VOID STDCALL (*FILTER_PACKET_INDICATION_HANDLER)(
|
typedef VOID STDCALL STDCALL (*FILTER_PACKET_INDICATION_HANDLER)(
|
||||||
IN NDIS_HANDLE Miniport,
|
IN NDIS_HANDLE Miniport,
|
||||||
IN PPNDIS_PACKET PacketArray,
|
IN PPNDIS_PACKET PacketArray,
|
||||||
IN UINT NumberOfPackets);
|
IN UINT NumberOfPackets);
|
||||||
|
|
||||||
typedef VOID (*TR_RCV_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*TR_RCV_COMPLETE_HANDLER)(
|
||||||
IN PTR_FILTER Filter);
|
IN PTR_FILTER Filter);
|
||||||
|
|
||||||
typedef VOID (*TR_RCV_INDICATE_HANDLER)(
|
typedef VOID STDCALL (*TR_RCV_INDICATE_HANDLER)(
|
||||||
IN PTR_FILTER Filter,
|
IN PTR_FILTER Filter,
|
||||||
IN NDIS_HANDLE MacReceiveContext,
|
IN NDIS_HANDLE MacReceiveContext,
|
||||||
IN PVOID HeaderBuffer,
|
IN PVOID HeaderBuffer,
|
||||||
|
@ -4468,11 +4481,11 @@ typedef VOID (*TR_RCV_INDICATE_HANDLER)(
|
||||||
IN UINT LookaheadBufferSize,
|
IN UINT LookaheadBufferSize,
|
||||||
IN UINT PacketSize);
|
IN UINT PacketSize);
|
||||||
|
|
||||||
typedef VOID (*WAN_RCV_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*WAN_RCV_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle,
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||||||
IN NDIS_HANDLE NdisLinkContext);
|
IN NDIS_HANDLE NdisLinkContext);
|
||||||
|
|
||||||
typedef VOID (*WAN_RCV_HANDLER)(
|
typedef VOID STDCALL (*WAN_RCV_HANDLER)(
|
||||||
OUT PNDIS_STATUS Status,
|
OUT PNDIS_STATUS Status,
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle,
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||||||
IN NDIS_HANDLE NdisLinkContext,
|
IN NDIS_HANDLE NdisLinkContext,
|
||||||
|
@ -4497,42 +4510,42 @@ typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)(
|
||||||
IN NDIS_WORK_ITEM_TYPE WorkItemType,
|
IN NDIS_WORK_ITEM_TYPE WorkItemType,
|
||||||
IN PVOID WorkItemContext);
|
IN PVOID WorkItemContext);
|
||||||
|
|
||||||
typedef VOID (*NDIS_M_REQ_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*NDIS_M_REQ_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle,
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||||||
IN NDIS_STATUS Status);
|
IN NDIS_STATUS Status);
|
||||||
|
|
||||||
typedef VOID (*NDIS_M_RESET_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*NDIS_M_RESET_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle,
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN BOOLEAN AddressingReset);
|
IN BOOLEAN AddressingReset);
|
||||||
|
|
||||||
typedef VOID (*NDIS_M_SEND_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*NDIS_M_SEND_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle,
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||||||
IN PNDIS_PACKET Packet,
|
IN PNDIS_PACKET Packet,
|
||||||
IN NDIS_STATUS Status);
|
IN NDIS_STATUS Status);
|
||||||
|
|
||||||
typedef VOID (*NDIS_M_SEND_RESOURCES_HANDLER)(
|
typedef VOID STDCALL (*NDIS_M_SEND_RESOURCES_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle);
|
IN NDIS_HANDLE MiniportAdapterHandle);
|
||||||
|
|
||||||
typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)(
|
typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)(
|
||||||
IN PNDIS_MINIPORT_BLOCK Miniport);
|
IN PNDIS_MINIPORT_BLOCK Miniport);
|
||||||
|
|
||||||
typedef VOID (*NDIS_M_STATUS_HANDLER)(
|
typedef VOID STDCALL (*NDIS_M_STATUS_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportHandle,
|
IN NDIS_HANDLE MiniportHandle,
|
||||||
IN NDIS_STATUS GeneralStatus,
|
IN NDIS_STATUS GeneralStatus,
|
||||||
IN PVOID StatusBuffer,
|
IN PVOID StatusBuffer,
|
||||||
IN UINT StatusBufferSize);
|
IN UINT StatusBufferSize);
|
||||||
|
|
||||||
typedef VOID (*NDIS_M_STS_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*NDIS_M_STS_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle);
|
IN NDIS_HANDLE MiniportAdapterHandle);
|
||||||
|
|
||||||
typedef VOID (*NDIS_M_TD_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*NDIS_M_TD_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle,
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||||||
IN PNDIS_PACKET Packet,
|
IN PNDIS_PACKET Packet,
|
||||||
IN NDIS_STATUS Status,
|
IN NDIS_STATUS Status,
|
||||||
IN UINT BytesTransferred);
|
IN UINT BytesTransferred);
|
||||||
|
|
||||||
typedef VOID (*NDIS_WM_SEND_COMPLETE_HANDLER)(
|
typedef VOID STDCALL (*NDIS_WM_SEND_COMPLETE_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterHandle,
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||||||
IN PVOID Packet,
|
IN PVOID Packet,
|
||||||
IN NDIS_STATUS Status);
|
IN NDIS_STATUS Status);
|
||||||
|
@ -4805,14 +4818,14 @@ struct _NDIS_MINIPORT_BLOCK
|
||||||
|
|
||||||
/* Handler prototypes for NDIS_OPEN_BLOCK */
|
/* Handler prototypes for NDIS_OPEN_BLOCK */
|
||||||
|
|
||||||
typedef NDIS_STATUS (*WAN_SEND_HANDLER)(
|
typedef NDIS_STATUS STDCALL (*WAN_SEND_HANDLER)(
|
||||||
IN NDIS_HANDLE MacBindingHandle,
|
IN NDIS_HANDLE MacBindingHandle,
|
||||||
IN NDIS_HANDLE LinkHandle,
|
IN NDIS_HANDLE LinkHandle,
|
||||||
IN PVOID Packet);
|
IN PVOID Packet);
|
||||||
|
|
||||||
/* NDIS 4.0 extension */
|
/* NDIS 4.0 extension */
|
||||||
|
|
||||||
typedef VOID (*SEND_PACKETS_HANDLER)(
|
typedef VOID STDCALL (*SEND_PACKETS_HANDLER)(
|
||||||
IN NDIS_HANDLE MiniportAdapterContext,
|
IN NDIS_HANDLE MiniportAdapterContext,
|
||||||
IN PPNDIS_PACKET PacketArray,
|
IN PPNDIS_PACKET PacketArray,
|
||||||
IN UINT NumberOfPackets);
|
IN UINT NumberOfPackets);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue