diff options
Diffstat (limited to 'private/ntos/dlc/dlcext.h')
-rw-r--r-- | private/ntos/dlc/dlcext.h | 862 |
1 files changed, 862 insertions, 0 deletions
diff --git a/private/ntos/dlc/dlcext.h b/private/ntos/dlc/dlcext.h new file mode 100644 index 000000000..8e101a1bf --- /dev/null +++ b/private/ntos/dlc/dlcext.h @@ -0,0 +1,862 @@ +/*++ + +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 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 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 + ); |