// // Copyright (c) 1998-1999, Microsoft Corporation, all rights reserved // // receive.h // // IEEE1394 mini-port/call-manager driver // // Mini-port Receive routines // // 2/13/1998 ADube Created, adapted from the l2tp and 1394diag sources. // #define ISOCH_PREFIX_LENGTH (sizeof(LONG) + sizeof (ISOCH_HEADER)) VOID nicAbortReassembly ( IN PNDIS1394_REASSEMBLY_STRUCTURE pReassembly ); VOID nicAllocateAddressRangeCallback( IN PNOTIFICATION_INFO NotificationInfo ); VOID nicAllocateAddressRangeDebugSpew( IN PIRB pIrb ); NDIS_STATUS nicAllocateAddressRangeSucceeded ( IN PIRB pIrb, IN OUT PRECVFIFO_VCCB pRecvFIFOVc ); NDIS_STATUS nicGetInitializedAddressFifoElement( IN UINT BufferLength, IN OUT PADDRESS_FIFO *ppElement ); NDIS_STATUS nicInitAllocateAddressIrb( IN PIRB pIrb, IN PVOID pContext, IN ULONG fulFlags, IN ULONG nLength, IN ULONG MaxSegmentSize, IN ULONG fulAccessType, IN ULONG fulNotificationOptions, IN PADDRESS_OFFSET pOffset, IN PRECVFIFO_VCCB pRecvFIFOVc ); NDIS_STATUS nicGetEmptyAddressFifoElement( IN PADDRESS_FIFO *ppElement ); NDIS_STATUS nicAllocateAddressRange( IN PADAPTERCB pAdapter, IN PRECVFIFO_VCCB pRecvFIFOVc ); NDIS_STATUS nicFillAllocateAddressRangeSList( IN RECVFIFO_VCCB *pRecvFIFO, IN UINT *Num ); NDIS_STATUS nicFreeRecvFifoAddressRange( IN REMOTE_NODE *pRemoteNode ); NDIS_STATUS nicFreeRecvFifoAddressRangeOnAllRemoteNodes ( IN PADAPTERCB pAdapter ); NDIS_STATUS nicFreeAllAllocatedAddressRangesOnPdo ( IN PREMOTE_NODE pRemoteNode ); NDIS_STATUS nicFreeAllocateAddressRangeSList( IN PRECVFIFO_VCCB pRecvFIFOVc ); NDIS_STATUS nicGetNdisBuffer( IN UINT Length, IN PVOID pLocalBuffer, IN OUT PNDIS_BUFFER *ppNdisBuffer ); NDIS_STATUS nicFreeAddressFifo( IN PADDRESS_FIFO pAddressFifo, IN PRECVFIFO_VCCB pRecvFIFOVc ); VOID nicFifoReturnPacket ( IN PVCCB pVc, IN PNDIS_PACKET pMyPacket ); // // Isoch Functions // NDIS_STATUS nicAllocateAndInitializeIsochDescriptors ( IN PCHANNEL_VCCB pChannelVc, IN UINT NumDescriptors, IN UINT BufferLength, IN OUT PPISOCH_DESCRIPTOR ppIsochDescriptor ); NDIS_STATUS nicFreeIsochDescriptors( IN UINT Num, IN PISOCH_DESCRIPTOR pIsochDescriptor, IN PVCCB pVc ); NDIS_STATUS nicFreeSingleIsochDescriptor( IN PISOCH_DESCRIPTOR pIsochDescriptor, IN PVCCB pVc ); VOID nicReturnNdisBufferChain ( IN PNDIS_BUFFER pNdisBuffer, IN PVCCB pVc ); VOID nicChannelReturnPacket ( IN PVCCB pVc, IN PNDIS_PACKET pMyPacket ); NDIS_STATUS nicFindReassemblyStructure ( IN PREMOTE_NODE pRemoteNode, IN USHORT dgl, IN BUS_OPERATION BusOp, IN PVCCB pVc, OUT PNDIS1394_REASSEMBLY_STRUCTURE* ppReassembly ); NDIS_STATUS nicGetReassemblyStructure ( IN PNDIS1394_REASSEMBLY_STRUCTURE* ppReassembly ); VOID nicFreeReassemblyStructure ( IN PNDIS1394_REASSEMBLY_STRUCTURE pReassembly ); NDIS_STATUS nicInitializeReassemblyStructure ( IN PNDIS1394_REASSEMBLY_STRUCTURE pReassembly, IN USHORT Dgl, IN PREMOTE_NODE pRemoteNode, IN PVCCB pVc, IN BUS_OPERATION ReceiveOp ); VOID nicReturnFifoChain ( IN PADDRESS_FIFO pAddressFifo, IN PRECVFIFO_VCCB pRecvFifoVc ); VOID nicReturnDescriptorChain ( IN PISOCH_DESCRIPTOR pIsochDescriptor , IN PCHANNEL_VCCB pChannelVc ); VOID nicInternalReturnPacket( IN PVCCB pVc , IN PNDIS_PACKET pPacket ); // // Generic Receive functions // VOID NicReturnPacket( IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET pPacket ); VOID nicIndicateNdisPacketToNdis ( PNDIS_PACKET pPacket, PVCCB pVc, PADAPTERCB pAdapter ); VOID RcvIndicateTimer ( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3 ); VOID nicIndicateMultiplePackets( PNDIS_PACKET *ppPacket, NDIS_HANDLE NdisVcHandle, PADAPTERCB pAdapter, ULONG NumPackets ); VOID nicAbortReassemblyList ( PLIST_ENTRY pToBeFreedList ); VOID nicFreeAllPendingReassemblyStructures( IN PADAPTERCB pAdapter ); ULONG nicDereferenceReassembly ( IN PNDIS1394_REASSEMBLY_STRUCTURE pReassembly, PCHAR pString ); ULONG nicReferenceReassembly ( IN PNDIS1394_REASSEMBLY_STRUCTURE pReassembly, PCHAR pString ); NDIS_STATUS nicValidateRecvData( IN PMDL pMdl, IN BUS_OPERATION RecvOp, IN PVOID pIndicatedStruct, IN PVCCB pVc, OUT PNIC_RECV_DATA_INFO pInfo ); VOID nicInitRecvDataFragmented ( IN PMDL pMdl, IN BUS_OPERATION RecvOp, IN PVOID pIndicatedStruct, OUT PNIC_RECV_DATA_INFO pRcvInfo ); NDIS_STATUS nicReceiveInOrderReassembly ( PNDIS1394_REASSEMBLY_STRUCTURE pReassembly, PVOID pIndicatedStructure, PNDIS_BUFFER pNdisBuffer, PVOID pNdisBufferStartData, ULONG IPLength, PNDIS1394_FRAGMENT_HEADER pHeader, IN ULONG FragOffset ); NDIS_STATUS nicReceiveOutOfOrderReassembly ( PNDIS1394_REASSEMBLY_STRUCTURE pReassembly, PVOID pIndicatedStructure, PNDIS_BUFFER pNdisBuffer, PVOID pNdisBufferStartData, ULONG IPLength, PNDIS1394_FRAGMENT_HEADER pHeader, IN ULONG FragOffset ); VOID nicInsertEarliestFragment ( PMDL pMdl, PNDIS_BUFFER pNdisBuffer, PVOID pStartData, PVOID pIndicatedStructure, ULONG CurrFragOffset, ULONG IPLength, PNDIS1394_FRAGMENT_HEADER pHeader, PNDIS1394_REASSEMBLY_STRUCTURE pReassembly ); BOOLEAN nicIsOutOfOrderReassemblyComplete ( IN PNDIS1394_REASSEMBLY_STRUCTURE pReassembly ); NDIS_STATUS nicValidateOutOfOrder( IN PNDIS1394_REASSEMBLY_STRUCTURE pReassembly, IN ULONG CurrFragOffset, IN ULONG IPLength, OUT PULONG pFragmentNum, OUT PREASSEMBLY_INSERT_TYPE pInsertionManner, OUT PBOOLEAN pfAbort ); NDIS_STATUS nicDoReassembly ( IN PNIC_RECV_DATA_INFO pRcvInfo, OUT PNDIS1394_REASSEMBLY_STRUCTURE *ppReassembly, PBOOLEAN pfReassemblyComplete ); VOID nicAddUnfragmentedHeader ( IN PNDIS1394_REASSEMBLY_STRUCTURE pReassembly, IN PVOID pEncapHeader ); VOID nicReceiveCommonCallback ( IN PVOID pIndicatedStruct, IN PVCCB pVc, BUS_OPERATION RecvOp, PMDL pMdl ); NDIS_STATUS nicGetNdisBufferForReassembly( IN PNIC_RECV_DATA_INFO pRcvInfo, OUT PNDIS_BUFFER *ppNdisBuffer ); NDIS_STATUS nicInsertFragmentInReassembly ( PNDIS1394_REASSEMBLY_STRUCTURE pReassembly, PNIC_RECV_DATA_INFO pRcvInfo ); VOID nicFindInsertionPosition ( PNDIS1394_REASSEMBLY_STRUCTURE pReassmbly, ULONG FragOffset, ULONG IPLength, PULONG pFragmentNum ); VOID nicChainReassembly ( PNDIS1394_REASSEMBLY_STRUCTURE pReassembly ); VOID nicRecvNoRemoteNode( PADAPTERCB pAdapter ); VOID nicInsertNodeAddressAtHead ( IN PNDIS_PACKET pPacket, IN PNIC_RECV_DATA_INFO pRcvInfo ); VOID nicUpdateNodeTable( NDIS_WORK_ITEM* pUpdateTable, IN PVOID Context ); NDIS_STATUS nicInitSerializedReassemblyStruct( PADAPTERCB pAdapter ); VOID nicDeInitSerializedReassmblyStruct( PADAPTERCB pAdapter ); NDIS_STATUS nicQueueReassemblyTimer( PADAPTERCB pAdapter, BOOLEAN fIsLastTimer );