// // Copyright (c) 1998-1999, Microsoft Corporation, all rights reserved // // cm.c // // IEEE1394 mini-port/call-manager driver // // Call Manager routines // // 06/20/1999 ADube Created - Declarations for call-manager routines // // Debug counts of client oddities that should not be happening. // extern ULONG g_ulUnexpectedInCallCompletes; extern ULONG g_ulCallsNotClosable; //#define MaxNumSlistEntry 0x100 #define MAX_NUM_ISOCH_DESCRIPTOR 0x20 #define MAX_CHANNEL_BUFFER_SIZE 0x300 #define MAX_CHANNEL_BYTES_PER_FRAME 0x280 //----------------------------------------------------------------------------- // L O C A L T Y P E S F O R cm.c //----------------------------------------------------------------------------- typedef enum _VC_SEND_RECEIVE { TransmitVc = 0, ReceiveVc, TransmitAndReceiveVc, InvalidType } VC_SEND_RECEIVE ; //----------------------------------------------------------------------------- // N D I S C A L L - M A N A G E R H A N D L E R S //----------------------------------------------------------------------------- NDIS_STATUS NicCmOpenAf( IN NDIS_HANDLE CallMgrBindingContext, IN PCO_ADDRESS_FAMILY AddressFamily, IN NDIS_HANDLE NdisAfHandle, OUT PNDIS_HANDLE CallMgrAfContext ); NDIS_STATUS NicCmCloseAf( IN NDIS_HANDLE CallMgrAfContext ); NDIS_STATUS NicCmCreateVc( IN NDIS_HANDLE ProtocolAfContext, IN NDIS_HANDLE NdisVcHandle, OUT PNDIS_HANDLE ProtocolVcContext ); NDIS_STATUS NicCmDeleteVc( IN NDIS_HANDLE ProtocolVcContext ); NDIS_STATUS NicCmMakeCall( IN NDIS_HANDLE CallMgrVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters, IN NDIS_HANDLE NdisPartyHandle, OUT PNDIS_HANDLE CallMgrPartyContext ); NDIS_STATUS NicCmCloseCall( IN NDIS_HANDLE CallMgrVcContext, IN NDIS_HANDLE CallMgrPartyContext, IN PVOID CloseData, IN UINT Size ); NDIS_STATUS NicCmModifyCallQoS( IN NDIS_HANDLE CallMgrVcContext, IN PCO_CALL_PARAMETERS CallParameters ); NDIS_STATUS NicCmRequest( IN NDIS_HANDLE CallMgrAfContext, IN NDIS_HANDLE CallMgrVcContext, IN NDIS_HANDLE CallMgrPartyContext, IN OUT PNDIS_REQUEST NdisRequest ); NDIS_STATUS nicRegisterSapHandler( IN NDIS_HANDLE CallMgrAfContext, IN PCO_SAP Sap, IN NDIS_HANDLE NdisSapHandle, OUT PNDIS_HANDLE CallMgrSapContext ); NDIS_STATUS nicDeregisterSapHandler( IN NDIS_HANDLE CallMgrSapContext ); NDIS_STATUS nicCmAddPartyHandler( IN NDIS_HANDLE CallMgrVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters, IN NDIS_HANDLE NdisPartyHandle, OUT PNDIS_HANDLE CallMgrPartyContext ); NDIS_STATUS nicCmDropPartyHandler( IN NDIS_HANDLE CallMgrPartyContext, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL ); //----------------------------------------------------------------------------- // Local prototypes (alphabetically) //----------------------------------------------------------------------------- VOID InterceptMakeCallParameters( PCO_MEDIA_PARAMETERS pMediaParams, PNIC1394_MEDIA_PARAMETERS pN1394Params ); NDIS_STATUS nicAllocateAddressRangeOnActiveRemoteNodes ( IN PADAPTERCB pAdapter ); VOID nicCallSetupComplete( IN VCCB* pVc ); VOID nicChannelCallFreeResources ( IN PCHANNEL_VCCB pChannelVc, IN PADAPTERCB pAdapter, IN HANDLE hResource, IN ULONG NumDescriptors, IN PISOCH_DESCRIPTOR pIsochDesciptor, IN BOOLEAN fChannelAllocated, IN ULONG Channel, IN PNIC_PACKET_POOL pPool ); VOID nicChannelCallCleanDataStructure ( IN PCHANNEL_VCCB pChannelVc, IN HANDLE hResource, IN ULONG NumDescriptors, IN PISOCH_DESCRIPTOR pIsochDesciptor, IN BOOLEAN fChannelAllocated, IN ULONG Channel, IN NDIS_HANDLE hPacketPoolHandle, OUT PULONG pNumRefsDecremented ); NDIS_STATUS nicAllocateChannelResourcesAndListen ( IN PADAPTERCB pAdapter, IN PCHANNEL_VCCB pChannelVc ); NDIS_STATUS nicCmGenericMakeCallInit ( IN PVCCB pVc ); VOID nicCmGenrericMakeCallFailure ( IN PVCCB pVc ); VOID nicCmCloseCallComplete( NDIS_WORK_ITEM* pCloseCallCompleteWorkItem, IN PVOID Context ); NDIS_STATUS nicCmCloseCallEthernet ( IN PVCCB pVc ); NDIS_STATUS nicCmCloseCallMultiChannel ( IN PVCCB pVc ); NDIS_STATUS nicCmCloseCallRecvFIFO ( IN PVCCB pVc ); NDIS_STATUS nicCmCloseCallSendFIFO ( IN PVCCB pVc ); NDIS_STATUS nicCmCloseCallSendRecvChannel ( IN PVCCB pVc ); NDIS_STATUS nicCmCloseCallSendChannel( IN PVCCB pVc ); VOID nicCmMakeCallComplete ( NDIS_WORK_ITEM* pMakeCallCompleteWorkItem, IN PVOID Context ); VOID nicCmMakeCallCompleteFailureCleanUp( IN OUT PVCCB pVc ); NDIS_STATUS nicCmMakeCallInitRecvChannelVc( IN OUT PVCCB pVc ); NDIS_STATUS nicCmMakeCallInitSendChannelVc( IN OUT PVCCB pVc ); NDIS_STATUS nicCmMakeCallInitSendRecvChannelVc( IN OUT PVCCB pVc ); NDIS_STATUS nicCmMakeCallInitEthernet( IN PVCCB pVc ); NDIS_STATUS nicCmMakeCallSendChannel ( IN PVCCB pVc ); NDIS_STATUS nicCmMakeCallMultiChannel ( IN PVCCB pVc ); NDIS_STATUS nicAllocateRequestedChannelMakeCallComplete ( IN PADAPTERCB pAdapter, IN PCHANNEL_VCCB pChannelVc, IN OUT PULONG pChannel ); NDIS_STATUS nicCmMakeCallInitRecvFIFOVc( IN OUT PVCCB pVc ); NDIS_STATUS nicCmMakeCallInitSendFIFOVc( IN OUT PVCCB pVc ); VOID nicDereferenceAF( IN AFCB* pAF ); ULONG nicGetMaxPayLoadForSpeed( IN ULONG Speed, IN ULONG mtu ); VOID nicInactiveCallCleanUp( IN VCCB* pVc ); NDIS_STATUS nicInitRecvFifoDataStructures ( IN PRECVFIFO_VCCB pRecvFIFOVc ); VOID nicUnInitRecvFifoDataStructures ( IN PRECVFIFO_VCCB pRecvFIFOVc ); VOID nicFreeAF( IN AFCB* pAF ); VOID nicReferenceAF( IN AFCB* pAF ); #if TODO VOID nicTimerQTerminateComplete( IN TIMERQ* pTimerQ, IN VOID* pContext ); #endif // TODO NDIS_STATUS nicCmQueryInformation( IN NDIS_HANDLE CallMgrAfContext, IN NDIS_HANDLE CallMgrVcContext, IN NDIS_HANDLE CallMgrPartyContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesWritten, OUT PULONG BytesNeeded ); NDIS_STATUS nicCmSetInformation( IN NDIS_HANDLE CallMgrAfContext, IN NDIS_HANDLE CallMgrVcContext, IN NDIS_HANDLE CallMgrPartyContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesRead, OUT PULONG BytesNeeded ); NDIS_STATUS nicGetActiveRemoteNode ( PADAPTERCB pAdpater, PREMOTE_NODE* ppRemoteNodePdoCb ); NDIS_STATUS nicChangeChannelChar ( PVCCB pVc, PNIC1394_CHANNEL_CHARACTERISTICS pMcChar ); NDIS_STATUS nicCmGenericMakeCallInitChannels ( IN PCHANNEL_VCCB pChannelVc, VC_SEND_RECEIVE VcType ); NDIS_STATUS nicCmGenericMakeCallInitFifo ( IN PVCCB pVc, VC_SEND_RECEIVE VcType ); NDIS_STATUS nicCmGenericMakeCallMutilChannel ( IN PVCCB pVc, VC_SEND_RECEIVE VcType ); NDIS_STATUS nicCmGenericMakeCallEthernet( IN PVCCB pVc, IN VC_SEND_RECEIVE VcType ); VOID nicInterceptMakeCallParameters ( PCO_MEDIA_PARAMETERS pMedia ); NDIS_STATUS nicQueryRemoteNodeCaps ( IN PADAPTERCB pAdapter, IN PREMOTE_NODE pRemoteNode, OUT PULONG pSpeed, OUT PULONG pMaxBufferSize, OUT PULONG pMaxRec ); UINT nicSpeedFlagsToSCode( IN UINT SpeedFlags );