|
|
/*++
Copyright (c) 1991 Microsoft Corporation Copyright (c) 1991 Nokia Data Systems AB
Module Name:
dlcext.h Abstract:
This module includes all internal prototypes and externals of dlc (api driver) module.
Author:
Antti Saarenheimo 22-Jul-1991
Environment:
Kernel mode
Revision History:
--*/
extern USHORT aSpecialOutputBuffers[]; extern BOOLEAN MemoryLockFailed; extern KSPIN_LOCK DlcSpinLock;
NTSTATUS BufferPoolCreate( #if DBG
IN PDLC_FILE_CONTEXT pFileContext, #endif
IN PVOID pUserBuffer, IN LONG MaxBufferSize, IN LONG MinFreeSizeThreshold, OUT HANDLE *pBufferPoolHandle, OUT PVOID* AlignedAddress, OUT PULONG AlignedSize );
NTSTATUS BufferPoolExpand( #if DBG
IN PDLC_FILE_CONTEXT pFileContext, #endif
IN PDLC_BUFFER_POOL pBufferPool );
VOID BufferPoolFreeExtraPages( #if DBG
IN PDLC_FILE_CONTEXT pFileContext, #endif
IN PDLC_BUFFER_POOL pBufferPool );
VOID DeallocateBuffer( #if DBG
IN PDLC_FILE_CONTEXT pFileContext, #endif
IN PDLC_BUFFER_POOL pBufferPool, IN PDLC_BUFFER_HEADER pBuffer );
NTSTATUS AllocateBufferHeader( #if DBG
IN PDLC_FILE_CONTEXT pFileContext, #endif
IN PDLC_BUFFER_POOL pBufferPool, IN PDLC_BUFFER_HEADER pParent, IN UCHAR Size, IN UCHAR Index, IN UINT FreeListTableIndex );
NTSTATUS BufferPoolAllocate( #if DBG
IN PDLC_FILE_CONTEXT pFileContext, #endif
IN PDLC_BUFFER_POOL pBufferPool, IN UINT BufferSize, IN UINT FrameHeaderSize, IN UINT UserDataSize, IN UINT FrameLength, IN UINT SegmentSizeIndex, IN OUT PDLC_BUFFER_HEADER *ppBufferHeader, OUT PUINT puiBufferSizeLeft );
NTSTATUS BufferPoolDeallocate( IN PDLC_BUFFER_POOL pBufferPool, IN UINT BufferCount, IN PLLC_TRANSMIT_DESCRIPTOR pBuffers );
NTSTATUS BufferPoolBuildXmitBuffers( IN PDLC_BUFFER_POOL pBufferPool, IN UINT BufferCount, IN PLLC_TRANSMIT_DESCRIPTOR pBuffers, IN OUT PDLC_PACKET pPacket );
VOID BufferPoolFreeXmitBuffers( IN PDLC_BUFFER_POOL pBufferPool, IN OUT PDLC_PACKET pPacket );
PDLC_BUFFER_HEADER GetBufferHeader( IN PDLC_BUFFER_POOL pBufferPool, IN PVOID pUserBuffer );
VOID BufferPoolDereference( #if DBG
IN PDLC_FILE_CONTEXT pFileContext, #endif
IN PDLC_BUFFER_POOL *pBufferPool );
NTSTATUS BufferPoolReference( IN HANDLE hExternalHandle, OUT PVOID *phOpaqueHandle );
VOID BufferPoolDeallocateList( IN PDLC_BUFFER_POOL pBufferPool, IN PDLC_BUFFER_HEADER pBufferList );
NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegistryPath );
NTSTATUS CreateAdapterFileContext( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
NTSTATUS CloseAdapterFileContext( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
VOID DlcKillFileContext( IN PDLC_FILE_CONTEXT pFileContext );
VOID DlcDriverUnload( IN PDRIVER_OBJECT pDeviceObject );
NTSTATUS CleanupAdapterFileContext( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
NTSTATUS DlcDeviceIoControl( IN PDEVICE_OBJECT pDeviceContext, IN PIRP pIrp );
VOID DlcCompleteIoRequest( IN PIRP pIrp, IN BOOLEAN InCancel );
VOID DlcCancelIrp( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
VOID SetIrpCancelRoutine( IN PIRP Irp, IN BOOLEAN Set );
#ifdef DLC_PRIVATE_PROTOTYPES
DLC_STATUS LlcReceiveIndication( IN PDLC_FILE_CONTEXT hFileContext, IN PDLC_OBJECT hDlcObject, IN NDIS_HANDLE MacReceiveContext, IN USHORT FrameType, IN PUCHAR pLookBuf, IN UINT cbLookBuf );
VOID LlcEventIndication( IN PDLC_FILE_CONTEXT pFileContext, IN PVOID hEventObject, IN UINT Event, IN PVOID pEventInformation, IN ULONG SecondaryInfo );
VOID LlcCommandCompletion( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pDlcObject, IN PDLC_PACKET pPacket );
#else
DLC_STATUS LlcReceiveIndication( IN PVOID hFileContext, IN PVOID hClientHandle, IN NDIS_HANDLE MacReceiveContext, IN USHORT FrameType, IN PVOID pLookBuf, IN UINT cbLookBuf );
VOID LlcEventIndication( IN PVOID hFileContext, IN PVOID hEventObject, IN UINT Event, IN PVOID pEventInformation, IN ULONG SecondaryInformation );
VOID LlcCommandCompletion( IN PVOID hFileContext, IN PVOID hDlcObject, IN PVOID hRequest );
#endif
VOID CompleteTransmitCommand( IN PDLC_FILE_CONTEXT pFileContext, IN PIRP pIrp, IN PDLC_OBJECT pChainObject, IN PDLC_PACKET pRootXmitNode );
NTSTATUS DlcQueryInformation( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcSetInformation( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
VOID GetOpenSapAndStationCount( IN PDLC_FILE_CONTEXT pFileContext, OUT PUCHAR OpenSaps, OUT PUCHAR OpenStations );
NTSTATUS SetupGroupSaps( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pDlcObject, IN UINT GroupSapCount, IN PUCHAR pGroupSapList );
NTSTATUS MakeDlcEvent( IN PDLC_FILE_CONTEXT pFileContext, IN ULONG Event, IN USHORT StationId, IN PDLC_OBJECT pDlcObject, IN PVOID pEventInformation, IN ULONG SecondaryInfo, IN BOOLEAN FreeEventInfo );
NTSTATUS QueueDlcCommand( IN PDLC_FILE_CONTEXT pFileContext, IN ULONG Event, IN USHORT StationId, IN USHORT StationIdMask, IN PIRP pIrp, IN PVOID AbortHandle, IN PFCOMPLETION_HANDLER pfCompletionHandler );
NTSTATUS AbortCommand( IN PDLC_FILE_CONTEXT pFileContext, IN USHORT StationId, IN USHORT StationIdMask, IN PVOID AbortHandle, IN OUT PVOID *ppCcbLink, IN UINT CancelStatus, IN BOOLEAN SuppressCommandCompletion );
VOID CancelDlcCommand( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_COMMAND pDlcCommand, IN OUT PVOID *ppCcbLink, IN UINT CancelStatus, IN BOOLEAN SuppressCommandCompletion );
VOID PurgeDlcEventQueue( IN PDLC_FILE_CONTEXT pFileContext );
VOID PurgeDlcFlowControlQueue( IN PDLC_FILE_CONTEXT pFileContext );
VOID CompleteDlcCommand( IN PDLC_FILE_CONTEXT pFileContext, IN USHORT StationId, IN PDLC_COMMAND pDlcCommand, IN UINT Status );
PDLC_COMMAND IsCommandOnList( IN PVOID RequestHandle, IN PLIST_ENTRY List );
PDLC_COMMAND SearchAndRemoveCommand( IN PLIST_ENTRY pListHead, IN ULONG EventMask, IN USHORT StationId, IN USHORT StationIdMask );
PDLC_COMMAND SearchAndRemoveCommandByHandle( IN PLIST_ENTRY pListHead, IN ULONG EventMask, IN USHORT StationId, IN USHORT StationIdMask, IN PVOID AbortHandle );
PDLC_COMMAND SearchAndRemoveSpecificCommand( IN PLIST_ENTRY pListHead, IN PVOID AbortHandle );
PDLC_COMMAND SearchAndRemoveAnyCommand( IN PDLC_FILE_CONTEXT pFileContext, IN ULONG Event, IN USHORT StationId, IN USHORT StationIdMask, IN PVOID pSearchHandle );
VOID SearchReadCommandForClose( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_CLOSE_WAIT_INFO pClosingInfo, IN PVOID pCcbAddress, IN ULONG CommandCompletionFlag, IN USHORT StationId, IN USHORT StationIdMask );
NTSTATUS DlcBufferFree( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcBufferGet( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcBufferCreate( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcBufferMaintain( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcConnectStation( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcFlowControl( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcReallocate( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcReset( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
BOOLEAN ConnectCompletion( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pDlcObject, IN PIRP pIrp, IN UINT Event, IN PVOID pEventInformation, IN ULONG SecondaryInfo );
NTSTATUS DirSetExceptionFlags( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
VOID DlcCompleteRequest( IN PIRP pIrp, IN PVOID pUserCcbPointer );
VOID CompleteAsyncCommand( IN PDLC_FILE_CONTEXT pFileContext, IN UINT Status, IN PIRP pIrp, IN PVOID pUserCcbPointer, IN BOOLEAN InCancel );
NTSTATUS GetLinkStation( IN PDLC_FILE_CONTEXT pFileContext, IN USHORT StationId, OUT PDLC_OBJECT *ppLinkStation );
NTSTATUS GetSapStation( IN PDLC_FILE_CONTEXT pFileContext, IN USHORT StationId, OUT PDLC_OBJECT *ppLinkStation );
NTSTATUS GetStation( IN PDLC_FILE_CONTEXT pFileContext, IN USHORT StationId, OUT PDLC_OBJECT *ppStation );
NTSTATUS DlcReadCancel( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG ParameterLength, IN ULONG OutputBufferLength );
NTSTATUS DirOpenAdapter( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG ParameterLength, IN ULONG OutputBufferLength );
NTSTATUS DirCloseAdapter( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG ParameterLength, IN ULONG OutputBufferLength );
VOID CompleteDirInitialize( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_CLOSE_WAIT_INFO pClosingInfo, IN PVOID pCcbLink );
VOID CompleteDirCloseAdapter( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_CLOSE_WAIT_INFO pClosingInfo, IN PVOID pCcbLink );
NTSTATUS DlcTransmit( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pParameters, IN ULONG ParameterLength, IN ULONG OutputBufferLength );
NTSTATUS DirTimerSet( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
BOOLEAN DirTimerSetCompletion( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pDlcObject, IN PIRP pIrp, IN UINT Event, IN PVOID pEventInformation, IN ULONG SecondaryInfo );
NTSTATUS DirTimerCancelGroup( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DirTimerCancel( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG ParameterLength, IN ULONG OutputBufferLength );
PDLC_COMMAND* SearchTimerCommand( IN PDLC_COMMAND *ppQueue, IN PVOID pSearchHandle, IN BOOLEAN SearchCompletionFlags );
PDLC_COMMAND SearchPrevCommandWithFlag( IN PDLC_COMMAND pQueueBase, IN ULONG Event, IN ULONG CommandCompletionFlag );
VOID AbortCommandsWithFlag( IN PDLC_FILE_CONTEXT pFileContext, IN ULONG CommandCompletionFlag, IN OUT PVOID *ppCcbLink, IN UINT CancelStatus );
NTSTATUS DlcOpenSap( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DirOpenDirect( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS DlcOpenLinkStation( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
NTSTATUS InitializeLinkStation( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pSap, IN PNT_DLC_PARMS pDlcParms OPTIONAL, IN PVOID LlcLinkHandle OPTIONAL, OUT PDLC_OBJECT *ppLinkStation );
NTSTATUS DlcCloseStation( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
BOOLEAN CloseAllStations( IN PDLC_FILE_CONTEXT pFileContext, IN PIRP pIrp, IN ULONG Event, IN PFCLOSE_COMPLETE pfCloseComplete, IN PNT_DLC_PARMS pDlcParms, IN PDLC_CLOSE_WAIT_INFO pClosingInfo );
VOID CloseAnyStation( IN PDLC_OBJECT pDlcObject, IN PDLC_CLOSE_WAIT_INFO pClosingInfo, IN BOOLEAN DoImmediateClose );
VOID CompleteCloseReset( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_CLOSE_WAIT_INFO pClosingInfo );
NTSTATUS DlcReceiveRequest( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
BOOLEAN ReceiveCompletion( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pDlcObject, IN PIRP pIrp, IN ULONG Event, IN PVOID pEventInformation, IN ULONG SecondaryInfo );
NTSTATUS DlcReadRequest( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG ParameterLength, IN ULONG OutputBufferLength );
BOOLEAN ReadCompletion( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pDlcObject, IN PIRP pIrp, IN ULONG Event, IN PVOID pEventInformation, IN ULONG SecondaryInfo );
VOID CreateBufferChain( IN PDLC_BUFFER_HEADER pBufferHeaders, OUT PVOID *pFirstBuffer, OUT PUSHORT pReceivedFrameCount );
NTSTATUS DlcReceiveCancel( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG ParameterLength, IN ULONG OutputBufferLength );
NTSTATUS DlcCompleteCommand( IN PIRP pIrp, IN PDLC_FILE_CONTEXT pFileContext, IN PNT_DLC_PARMS pDlcParms, IN ULONG InputBufferLength, IN ULONG OutputBufferLength );
VOID GetDlcErrorCounters( IN PDLC_FILE_CONTEXT pFileContext, IN PUCHAR pAdapterErrors );
VOID QueueDlcEvent( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_PACKET pPacket );
VOID CompleteCloseStation( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pDlcObject );
VOID CloseStation( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_OBJECT pDlcObject, IN BOOLEAN DoImmediateClose );
VOID CleanUpEvents( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_CLOSE_WAIT_INFO pClosingInfo, IN PDLC_OBJECT pDlcObject );
VOID CompleteCompletionPacket( IN PDLC_FILE_CONTEXT pFileContext, IN PDLC_COMPLETION_EVENT_INFO pCompletionInfo, IN OUT PNT_DLC_PARMS pParms );
PMDL AllocateProbeAndLockMdl( IN PVOID UserBuffer, IN UINT UserBufferLength );
VOID BuildMappedPartialMdl( IN PMDL pMappedSourceMdl, IN OUT PMDL pTargetMdl, IN PVOID BaseVa, IN ULONG Length );
VOID BufferTrace( IN PDLC_BUFFER_POOL pBufferPool, IN PSZ DebugString );
VOID CheckIrql( PKIRQL pOldIrqLevel );
VOID ResetLocalBusyBufferStates( IN PDLC_FILE_CONTEXT pFileContext );
VOID CompleteLlcObjectClose( IN PDLC_OBJECT pDlcObject );
VOID UnlockAndFreeMdl( PMDL pMdl );
BOOLEAN DecrementCloseCounters( PDLC_FILE_CONTEXT pFileContext, PDLC_CLOSE_WAIT_INFO pClosingInfo );
VOID CompleteDirectOutIrp( IN PIRP Irp, IN UCHAR Status, IN PLLC_CCB NextCcb );
|