/*++ Copyright (c) 1991 Microsoft Corporation Module Name: dlext.h Abstract: This module includes all internal function prototypes and external global variables. Author: Antti Saarenheimo (o-anttis) 17-MAY-1991 Revision History: --*/ // // External variables: // extern DLC_LINK_PARAMETERS DefaultParameters; extern UCHAR auchLlcCommands[]; extern UCHAR Swap[]; extern LLC_TICKS TimerTicks; extern ULONG AbsoluteTime; extern BOOLEAN TraceEnabled; extern LLC_XID_INFORMATION Ieee802Xid; extern PMDL pXidMdl; extern KSPIN_LOCK LlcSpinLock; extern PVOID LlcProtocolHandle; extern NDIS_PROTOCOL_CHARACTERISTICS LlcCharacteristics; extern KMUTEX NdisAccessMutex; extern KSEMAPHORE OpenAdapterSemaphore; extern UINT NdisSendCount; extern PADAPTER_CONTEXT pAdapters; extern UCHAR PrimaryStates[]; extern UCHAR SecondaryStates[]; #ifdef NDIS40 extern NDIS_EVENT PnPBindsComplete; #endif // NDIS40 UINT CopyReceivedLanHeader( IN UINT TransltionCase, IN PUCHAR DestinationAddress, IN PUCHAR SourceAddress ); UCHAR CopyLanHeader( IN UINT AddressTranslationMode, IN PUCHAR pSrcLanHeader, IN PUCHAR pNodeAddress, OUT PUCHAR pDestLanHeader, IN BOOLEAN SwapAddressBits ); VOID SwappingMemCpy( IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len ); UINT RunStateMachine( IN OUT PDATA_LINK pLink, IN USHORT usInput, IN BOOLEAN boolPollFinal, IN BOOLEAN boolResponse ); UINT RunInterlockedStateMachineCommand( PDATA_LINK pStation, USHORT Command ); VOID SaveStatusChangeEvent( IN PDATA_LINK pLink, IN PUCHAR puchLlcHdr, IN BOOLEAN boolResponse ); VOID ResendPackets( IN OUT PDATA_LINK pLink // data link strcuture ); VOID UpdateVa( IN OUT PDATA_LINK pLink // data link station strcuture ); VOID UpdateVaChkpt( IN OUT PDATA_LINK pLink // data link station strcuture ); VOID AdjustWw( IN OUT PDATA_LINK pLink // data link strcuture ); VOID SendAck( IN OUT PDATA_LINK pLink ); UINT RunStateMachineCommand( IN OUT PVOID hLink, IN UINT uiInput ); PDATA_LINK SearchLink( IN PADAPTER_CONTEXT pAdapterContext, IN LAN802_ADDRESS LanAddr ); PDATA_LINK * SearchLinkAddress( IN PADAPTER_CONTEXT pAdapterContext, IN LAN802_ADDRESS LanAddr ); DLC_STATUS SetLinkParameters( IN OUT PDATA_LINK pLink, IN PUCHAR pNewParameters ); DLC_STATUS CheckLinkParameters( PDLC_LINK_PARAMETERS pParms ); VOID CopyLinkParameters( OUT PUCHAR pOldParameters, IN PUCHAR pNewParameters, IN PUCHAR pDefaultParameters ); VOID CompleteClose( IN PLLC_OBJECT pLlcObject, IN UINT Status ); NDIS_STATUS InitNdisPackets( OUT PLLC_NDIS_PACKET * ppLlcPacketPool, IN NDIS_HANDLE hNdisPool ); VOID LlcResetPacket( IN OUT PLLC_NDIS_PACKET pNdisPacket ); NDIS_STATUS GetNdisParameter( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_OID NdisOid, IN PVOID pDataAddress, IN UINT DataSize ); DLC_STATUS SyncNdisRequest( IN PADAPTER_CONTEXT pAdapterContext, IN PLLC_NDIS_REQUEST pRequest ); NDIS_STATUS WaitAsyncOperation( IN PKEVENT pEvent, IN PNDIS_STATUS pAsyncStatus, IN NDIS_STATUS Status ); #ifdef LLC_PRIVATE_NDIS_PROTOTYPES NDIS_STATUS LlcNdisReceiveIndication ( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID pHeadBuf, IN UINT cbHeadBuf, IN PVOID pLookBuf, IN UINT cbLookBuf, IN UINT cbPacketSize ); VOID LlcNdisSendComplete( IN PADAPTER_CONTEXT pAdapterContext, IN PNDIS_PACKET pNdisPacket, IN NDIS_STATUS NdisStatus ); VOID LlcNdisReceiveComplete( IN PADAPTER_CONTEXT pAdapterContext ); VOID LlcNdisTransferDataComplete( IN PADAPTER_CONTEXT pAdapterContext, IN PNDIS_PACKET pPacket, IN NDIS_STATUS NdisStatus, IN UINT uiBytesTransferred ); VOID LlcNdisOpenAdapterComplete( IN PVOID hAdapterContext, IN NDIS_STATUS NdisStatus, IN NDIS_STATUS OpenErrorStatus ); VOID LlcNdisCloseComplete( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_STATUS NdisStatus ); VOID LlcNdisRequestComplete( IN PADAPTER_CONTEXT pAdapterContext, IN PNDIS_REQUEST RequestHandle, IN NDIS_STATUS NdisStatus ); VOID LlcNdisResetComplete( PADAPTER_CONTEXT pAdapterContext, NDIS_STATUS NdisStatus ); VOID NdisStatusHandler( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_STATUS NdisStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize ); #else VOID NdisStatusHandler( IN PVOID hAdapterContext, IN NDIS_STATUS NdisStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize ); VOID LlcNdisTransferDataComplete( IN PVOID hAdapterContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS NdisStatus, IN UINT uiBytesTransferred ); VOID LlcNdisRequestComplete( IN PVOID hAdapterContext, IN PNDIS_REQUEST RequestHandle, IN NDIS_STATUS NdisStatus ); VOID LlcNdisOpenAdapterComplete( PVOID hAdapterContext, NDIS_STATUS NdisStatus, NDIS_STATUS OpenErrorStatus ); VOID LlcNdisStatus( IN PVOID hAdapterContext, IN NDIS_STATUS Status, IN UINT SpecificStatus ); VOID LlcNdisStatusComplete( IN PVOID hAdapterContext ); NDIS_STATUS LlcNdisReceiveIndication ( IN PVOID pAdapterContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID pHeadBuf, IN UINT cbHeadBuf, IN PVOID pLookBuf, IN UINT cbLookBuf, IN UINT cbPacketSize ); VOID LlcNdisSendComplete( IN PVOID hAdapter, IN PNDIS_PACKET Packet, IN NDIS_STATUS NdisStatus ); VOID LlcNdisResetComplete( PVOID hAdapterContext, NDIS_STATUS NdisStatus ); VOID LlcNdisCloseComplete( PVOID hAdapterContext, NDIS_STATUS NdisStatus ); VOID LlcNdisReceiveComplete( IN PVOID hAdapter ); #ifdef NDIS40 VOID LlcBindAdapterHandler( OUT PNDIS_STATUS pStatus, IN NDIS_HANDLE BindContext, IN PNDIS_STRING pDeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2 ); VOID LlcUnbindAdapterHandler( OUT PNDIS_STATUS pStatus, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext ); NDIS_STATUS LlcPnPEventHandler( IN NDIS_HANDLE ProtocolBindingContext, IN PNET_PNP_EVENT pNetPnPEvent ); VOID CloseAllAdapters(); #endif // NDIS40 #endif VOID ProcessType1_Frames( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_HANDLE MacReceiveContext, IN PLLC_SAP pSap, IN LLC_HEADER LlcHeader ); VOID MakeRcvIndication( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_HANDLE MacReceiveContext, IN PLLC_OBJECT pStation ); VOID ProcessType2_Frames( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_HANDLE MacReceiveContext, IN OUT PDATA_LINK pLink, IN LLC_HEADER LlcHeader ); VOID ProcessNewSabme( IN PADAPTER_CONTEXT pAdapterContext, IN PLLC_SAP pSap, IN LLC_HEADER LlcHeader ); VOID SaveReceiveEvent( IN PADAPTER_CONTEXT pAdapterContext, IN PLLC_TRANSFER_PACKET pTransferPacket ); VOID RunSendTaskAndUnlock( IN PADAPTER_CONTEXT pAdapterContext ); VOID BackgroundProcessAndUnlock( IN PADAPTER_CONTEXT pAdapter ); VOID BackgroundProcess( IN PADAPTER_CONTEXT pAdapter ); PLLC_PACKET GetI_Packet( IN PADAPTER_CONTEXT pAdapter ); VOID StartSendProcess( IN PADAPTER_CONTEXT pAdapter, IN PDATA_LINK pLink ); VOID EnableSendProcess( IN PDATA_LINK pLink ); VOID StopSendProcess( IN PADAPTER_CONTEXT pAdapter, IN PDATA_LINK pLink ); VOID DisableSendProcess( IN PDATA_LINK pLink ); PLLC_PACKET BuildDirOrU_Packet( PADAPTER_CONTEXT pAdapter ); DLC_STATUS SendLlcFrame( IN PDATA_LINK pLink, IN UCHAR LlcCommandId ); PLLC_PACKET GetLlcCommandPacket( PADAPTER_CONTEXT pAdapter ); VOID SendNdisPacket( IN PADAPTER_CONTEXT pAdapterContext, IN PLLC_PACKET pPacket ); VOID CompleteSendAndLock( IN PADAPTER_CONTEXT pAdapterContext, IN PLLC_NDIS_PACKET NdisPacket, IN NDIS_STATUS NdisStatus ); VOID RespondTestOrXid( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_HANDLE MacReceiveContext, IN LLC_HEADER LlcHeader, IN UINT SourceSap ); VOID CopyNonZeroBytes( OUT PUCHAR pOldParameters, IN PUCHAR pNewParameters, IN PUCHAR pDefaultParameters, IN UINT Length ); VOID ScanTimersDpc( IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2 ); BOOLEAN TerminateTimer( IN PADAPTER_CONTEXT pAdapterContext, IN PLLC_TIMER pTimer ); DLC_STATUS InitializeLinkTimers( IN OUT PDATA_LINK pLink ); DLC_STATUS InitializeTimer( IN PADAPTER_CONTEXT pAdapterContext, PLLC_TIMER pTimer, UCHAR TickCount, UCHAR TickOne, UCHAR TickTwo, UINT Input, PVOID hContextHandle, UINT DefaultDelay, IN BOOLEAN StartNewTimer ); VOID StartTimer( IN PLLC_TIMER pTimer ); BOOLEAN StopTimer( IN PLLC_TIMER pTimer ); VOID SwapMemCpy( IN BOOLEAN SwapBytes, IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len ); VOID LlcSleep( IN LONG lMicroSeconds ); DLC_STATUS LlcInitUnicodeString( IN PUNICODE_STRING pStringDest, IN PUNICODE_STRING pStringSrc ); VOID LlcFreeUnicodeString( IN PUNICODE_STRING UnicodeString ); VOID InitiateAsyncLinkCommand( IN PDATA_LINK pLink, IN PLLC_PACKET pPacket, UINT StateMachineCommand, UINT CompletionCode ); VOID AllocateCompletionPacket( IN PLLC_OBJECT pLlcObject, IN UINT CompletionCode, IN PVOID pPacket ); VOID QueueCommandCompletion( IN PLLC_OBJECT pLlcObject, IN UINT CompletionCode, IN UINT Status ); DLC_STATUS LinkFlowControl( IN PDATA_LINK pLink, IN UCHAR FlowControlState ); VOID LlcInitializeTimerSystem( VOID ); VOID LlcTerminateTimerSystem( VOID ); VOID ExecuteAllBackroundProcesses( VOID ); DLC_STATUS UpdateFunctionalAddress( IN PADAPTER_CONTEXT pAdapter ); DLC_STATUS UpdateGroupAddress( IN PADAPTER_CONTEXT pAdapter, IN PBINDING_CONTEXT pBindingContext ); NDIS_STATUS SetNdisParameter( IN PADAPTER_CONTEXT pAdapterContext, IN NDIS_OID Oid, IN PVOID pRequestInfo, IN UINT RequestLength ); VOID CancelTransmitCommands( IN PLLC_OBJECT pLlcObject, IN UINT Status ); VOID CancelTransmitsInQueue( IN PLLC_OBJECT pLlcObject, IN UINT Status, IN PLIST_ENTRY pQueue, IN PLLC_QUEUE pLlcQueue ); VOID LlcNdis30RequestComplete( IN PVOID hAdapterContext, IN PNDIS_REQUEST RequestHandle, IN NDIS_REQUEST_TYPE RequestType, IN NDIS_STATUS NdisStatus ); VOID LlcNdis30TransferDataComplete( IN PVOID pAdapterContext, IN PNDIS_REQUEST RequestHandle, IN NDIS_STATUS NdisStatus ); VOID CompletePendingLlcCommand( PLLC_OBJECT pLlcObject ); DLC_STATUS CheckAndDuplicatePacket( #if DBG IN PADAPTER_CONTEXT pAdapterContext, #endif IN PBINDING_CONTEXT pBinding, IN PLLC_PACKET pPacket, IN PLLC_QUEUE pQueue ); VOID QueuePacket( IN PADAPTER_CONTEXT pAdapterContext, IN PLLC_QUEUE pQueue, IN PLLC_PACKET pPacket ); VOID PrintLastInputs( IN PUCHAR pszMessage, IN PDATA_LINK pLink ); VOID BackgroundProcessWithinLock( IN PADAPTER_CONTEXT pAdapterContext ); #ifdef LLC_PRIVATE_PROTOTYPES // // LLCADDR.C... // UINT LlcCopyReceivedLanHeader( IN PBINDING_CONTEXT pBinding, IN PUCHAR DestinationAddress, IN PUCHAR SourceAddress ); // // LLCLINK.C... // DLC_STATUS LlcOpenLinkStation( IN PLLC_SAP pSap, IN UCHAR DestinationSap, IN PUCHAR pDestinationAddress OPTIONAL, IN PUCHAR pReceivedLanHeader OPTIONAL, IN PVOID hClientStation, OUT PVOID *phLlcHandle ); VOID LlcBindLinkStation( IN PDATA_LINK pStation, IN PVOID hClientHandle ); VOID LlcConnectStation( IN PDATA_LINK pStation, IN PLLC_PACKET pPacket, IN PVOID pSourceRouting OPTIONAL, IN PUSHORT pusMaxInformationField ); VOID LlcDisconnectStation( IN PDATA_LINK pLink, IN PLLC_PACKET pPacket ); DLC_STATUS LlcFlowControl( IN PLLC_OBJECT pStation, IN UCHAR FlowControlState ); DLC_STATUS LlcResetBroadcastAddresses( IN PBINDING_CONTEXT pBindingContext ); // // LLCNDIS.C... // VOID LlcDisableAdapter( IN PBINDING_CONTEXT pBindingContext ); DLC_STATUS LlcCloseAdapter( IN PBINDING_CONTEXT pBindingContext, IN BOOLEAN CloseAtNdisLevel ); VOID LlcNdisReset( IN PBINDING_CONTEXT pBindingContext, IN PLLC_PACKET pPacket ); // // LLCOBJ.C... // DLC_STATUS LlcOpenStation( IN PBINDING_CONTEXT pBindingContext, IN PVOID hClientHandle, IN USHORT ObjectAddress, IN UCHAR ObjectType, IN USHORT OpenOptions, OUT PVOID* phStation ); DLC_STATUS LlcCloseStation( IN PLLC_OBJECT pStation, IN PLLC_PACKET pCompletionPacket ); VOID CompleteObjectDelete( IN PLLC_OBJECT pStation ); VOID LlcSetDirectOpenOptions( IN PLLC_OBJECT pDirect, IN USHORT OpenOptions ); // // LLCRCV.C... // VOID LlcTransferData( IN PBINDING_CONTEXT pBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PLLC_PACKET pPacket, IN PMDL pMdl, IN UINT uiCopyOffset, IN UINT cbCopyLength ); // // LLCSEND.C... // VOID LlcSendI( IN PDATA_LINK pStation, IN PLLC_PACKET pPacket ); VOID LlcSendU( IN PLLC_OBJECT pStation, IN PLLC_PACKET pPacket, IN UINT eFrameType, IN UINT uDestinationSap ); #else // // LLCADDR.C... // UINT LlcCopyReceivedLanHeader( IN PVOID pBinding, IN PUCHAR DestinationAddress, IN PUCHAR SourceAddress ); // // LLCLINK.C... // DLC_STATUS LlcOpenLinkStation( IN PVOID pSap, IN UCHAR DestinationSap, IN PUCHAR pDestinationAddress OPTIONAL, IN PUCHAR pReceivedLanHeader OPTIONAL, IN PVOID hClientStation, OUT PVOID *phLlcHandle ); VOID LlcBindLinkStation( IN PVOID pStation, IN PVOID hClientHandle ); VOID LlcConnectStation( IN PVOID pStation, IN PLLC_PACKET pPacket, IN PVOID pSourceRouting OPTIONAL, IN PUSHORT pusMaxInformationField ); VOID LlcDisconnectStation( IN PVOID pLink, IN PLLC_PACKET pPacket ); DLC_STATUS LlcFlowControl( IN PVOID pStation, IN UCHAR FlowControlState ); DLC_STATUS LlcResetBroadcastAddresses( IN PVOID pBindingContext ); // // LLCNDIS.C... // VOID LlcDisableAdapter( IN PVOID pBindingContext ); DLC_STATUS LlcCloseAdapter( IN PVOID pBindingContext, IN BOOLEAN CloseAtNdisLevel ); VOID LlcNdisReset( IN PVOID pBindingContext, IN PLLC_PACKET pPacket ); // // LLCOBJ.C... // DLC_STATUS LlcOpenStation( IN PVOID pBindingContext, IN PVOID hClientHandle, IN USHORT ObjectAddress, IN UCHAR ObjectType, IN USHORT OpenOptions, OUT PVOID* phStation ); DLC_STATUS LlcCloseStation( IN PVOID pStation, IN PLLC_PACKET pCompletionPacket ); VOID CompleteObjectDelete( IN PVOID pStation ); VOID LlcSetDirectOpenOptions( IN PVOID pDirect, IN USHORT OpenOptions ); // // LLCRCV.C... // VOID LlcTransferData( IN PBINDING_CONTEXT pBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PLLC_PACKET pPacket, IN PMDL pMdl, IN UINT uiCopyOffset, IN UINT cbCopyLength ); // // LLCSEND.C... // VOID LlcSendI( IN PVOID pStation, IN PLLC_PACKET pPacket ); VOID LlcSendU( IN PVOID pStation, IN PLLC_PACKET pPacket, IN UINT eFrameType, IN UINT uDestinationSap ); #endif