Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1995-1998 Microsoft Corporation
Module Name:
rcantini.c
Abstract:
The module contains the NT-specific init code for the NDIS RCA.
Author:
Richard Machin (RMachin)
Revision History:
Who When What -------- -------- ---------------------------------------------- RMachin 2-18-97 created JameelH 4-18-98 Cleaned up
Notes:
--*/
#include <precomp.h>
#define MODULE_NUMBER MODULE_NTINIT
#define _FILENUMBER 'NITN'
RCA_GLOBAL RcaGlobal = {0};
//
// Local funcion prototypes
//
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath );
//
// All of the init code can be discarded.
//
#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#endif // ALLOC_PRAGMA
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) /*++
Routine Description:
Sets up the driver object to handle the KS interface and PnP Add Device request. Does not set up a handler for PnP Irp's, as they are all dealt with directly by the PDO.
Arguments:
DriverObject - Driver object for this instance.
RegistryPathName - Contains the registry path which was used to load this instance.
Return Values:
Returns STATUS_SUCCESS.
--*/ { RCADEBUGP(0, ("RCA DriverEntry: Built %s, %s\n", __DATE__, __TIME__)); DriverObject->MajorFunction[IRP_MJ_PNP] = KsDefaultDispatchPnp; DriverObject->MajorFunction[IRP_MJ_POWER] = KsDefaultDispatchPower; DriverObject->DriverExtension->AddDevice = PnpAddDevice; DriverObject->DriverUnload = RCAUnload;
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_CREATE); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_CLOSE); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_DEVICE_CONTROL);
RCAInitLock(&(RcaGlobal.SpinLock)); //
// Initialize our stream header pool.
//
RCASHPoolInit();
#if PACKET_POOL_OPTIMIZATION
// SendPPOpt - Start
NdisZeroMemory(g_alSendPPOptBuckets, SENDPPOPT_NUM_BUCKETS * sizeof(g_alSendPPOptBuckets[0])); g_lSendPPOptOutstanding = 0;
NdisAllocateSpinLock(&g_SendPPOptLock); // SendPPOpt - End
// RecvPPOpt - Start
NdisZeroMemory(g_alRecvPPOptBuckets, RECVPPOPT_NUM_BUCKETS * sizeof(g_alRecvPPOptBuckets[0])); g_lRecvPPOptOutstanding = 0;
NdisAllocateSpinLock(&g_RecvPPOptLock); // RecvPPOpt - End
#endif
return STATUS_SUCCESS; }
VOID RCAUnload( IN PDRIVER_OBJECT DriverObject ) /*++
Routine Description:
Free all the allocated resources, etc.
Arguments:
DriverObject - pointer to a driver object
Return Value:
--*/ { NDIS_STATUS Status; PRCA_ADAPTER pAdapter; #if DBG
KIRQL EntryIrq; #endif
RCA_GET_ENTRY_IRQL(EntryIrq);
RCADEBUGP (RCA_LOUD, ( "RCAUnload: enter\n"));
if (RcaGlobal.bProtocolInitialized) { RCACoNdisUninitialize(); RcaGlobal.bProtocolInitialized = FALSE; }
RCAFreeLock(&(RcaGlobal.SpinLock));
#if PACKET_POOL_OPTIMIZATION
// SendPPOpt - Start
NdisAcquireSpinLock(&g_SendPPOptLock); { LONG SendPPOptLoopCtr;
DbgPrint("Send Packet Pool Stats:\n"); for (SendPPOptLoopCtr = 0; SendPPOptLoopCtr < SENDPPOPT_NUM_BUCKETS; SendPPOptLoopCtr++) { DbgPrint("%d\t%d\n", SendPPOptLoopCtr, g_alSendPPOptBuckets[SendPPOptLoopCtr]); } DbgPrint("-----------------------\n"); }
NdisReleaseSpinLock(&g_SendPPOptLock); // SendPPOpt - End
// RecvPPOpt - Start
NdisAcquireSpinLock(&g_RecvPPOptLock); { LONG RecvPPOptLoopCtr;
DbgPrint("Receive Packet Pool Stats:\n"); for (RecvPPOptLoopCtr = 0; RecvPPOptLoopCtr < RECVPPOPT_NUM_BUCKETS; RecvPPOptLoopCtr++) { DbgPrint("%d\t%d\n", RecvPPOptLoopCtr, g_alRecvPPOptBuckets[RecvPPOptLoopCtr]); } DbgPrint("--------------------------\n"); }
NdisReleaseSpinLock(&g_RecvPPOptLock);
// RecvPPOpt - End
#endif
RCASHPoolFree();
RCADEBUGP (RCA_LOUD, ("RCAUnload: exit\n"));
RCA_CHECK_EXIT_IRQL(EntryIrq); }
|