334 lines
5.5 KiB
C
334 lines
5.5 KiB
C
//
|
|
// Copyright (c) 1998-1999, Microsoft Corporation, all rights reserved
|
|
//
|
|
// send.h
|
|
//
|
|
// IEEE1394 mini-port/call-manager driver
|
|
//
|
|
// Send.h - Mini-port Send routines
|
|
//
|
|
// 06/20/1999 ADube Created,
|
|
//
|
|
|
|
//
|
|
// A Send follows this simple algorithm:
|
|
// Copy incoming data to local buffers
|
|
// Insert Fragment Headers if necessary
|
|
// Create an Mdl for the local copy
|
|
// Store the IRB and VC in the ndispacket
|
|
// Use the ndispacket as context in the irp's completion routine
|
|
//
|
|
|
|
|
|
|
|
NDIS_STATUS
|
|
AsyncStreamSendPacketsHandler (
|
|
IN PVCCB pChannelVc,
|
|
IN PNDIS_PACKET pPacket
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
AsyncWriteSendPacketsHandler(
|
|
IN VCCB *pVC,
|
|
IN NDIS_PACKET *Packet
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicCopyNdisBufferChainToBuffer(
|
|
IN PNDIS_BUFFER pInMdl,
|
|
IN OUT PVOID pLocalBuffer,
|
|
IN UINT Length
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicFreeIrb(
|
|
IN PIRB pIrb
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicFreeIrp(
|
|
IN PIRP pIrp
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicFreeLocalBuffer(
|
|
IN UINT Length,
|
|
IN PVOID pLocalBuffer
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicGetIrb(
|
|
OUT PIRB *ppIrb
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicGetIrp(
|
|
IN PDEVICE_OBJECT pPdo,
|
|
OUT PIRP *ppIrp
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicFreeMdl(
|
|
IN PMDL pMdl
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicFreePrivateIrb(
|
|
PNDIS1394_IRB pIrb
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicGetPrivateIrb(
|
|
IN PADAPTERCB pAdapter OPTIONAL,
|
|
IN PREMOTE_NODE pRemoteNode OPTIONAL,
|
|
IN PVCCB pVc,
|
|
IN PVOID pContext,
|
|
OUT PNDIS1394_IRB *ppIrb
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicGetLocalBuffer(
|
|
IN ULONG Length,
|
|
OUT PVOID *ppLocalBuffer
|
|
);
|
|
|
|
PVOID
|
|
nicGetLookasideBuffer(
|
|
IN PNIC_NPAGED_LOOKASIDE_LIST pLookasideList
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicGetMdl(
|
|
IN UINT Length,
|
|
IN PVOID LocalBuffer,
|
|
OUT PMDL *ppMyMdl
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicGetMdlToTransmit(
|
|
IN PNDIS_PACKET pPacket,
|
|
OUT PMDL *ppMyMdl
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
DummySendPacketsHandler(
|
|
IN PVCCB pVc,
|
|
IN PNDIS_PACKET pPacket
|
|
);
|
|
|
|
VOID
|
|
nicSendFailureInvalidGeneration(
|
|
PVCCB pVc
|
|
);
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Local prototypes (alphabetically)
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
NTSTATUS
|
|
AsyncStreamDummySendComplete(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP pMyIrp,
|
|
IN PVOID Context
|
|
);
|
|
|
|
|
|
NTSTATUS
|
|
AsyncWriteStreamSendComplete(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP pMyIrp,
|
|
IN PVOID Context
|
|
);
|
|
|
|
|
|
NTSTATUS
|
|
AsyncStreamSendComplete(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP pMyIrp,
|
|
IN PVOID Context
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicFreeAsyncWritePacketDataStructures(
|
|
IN PVCCB pVc,
|
|
IN PIRP pIrp OPTIONAL,
|
|
IN PVOID pLocalBuffer OPTIONAL,
|
|
IN PNIC_NPAGED_LOOKASIDE_LIST pLookasideList OPTIONAL
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicEthernetVcSend(
|
|
IN PVCCB pVc,
|
|
IN PNDIS_PACKET pPacket
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
VOID
|
|
nicInitAsyncStreamIrb(
|
|
IN PCHANNEL_VCCB pChannelVc,
|
|
IN PMDL pMdl,
|
|
IN OUT PIRB pIrb
|
|
);
|
|
|
|
|
|
VOID
|
|
nicInitAsyncWriteIrb(
|
|
IN PSENDFIFO_VCCB pVc,
|
|
IN PMDL pMyMdl,
|
|
IN OUT PIRB pMyIrb
|
|
);
|
|
|
|
|
|
|
|
|
|
NDIS_STATUS
|
|
nicInsertGaspHeader (
|
|
IN PADAPTERCB pAdapter,
|
|
IN PNDIS_PACKET pNdisPacket
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicGetGaspHeader (
|
|
IN OUT PNDIS_BUFFER *ppNdisBuffer
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
nicFreeGaspHeader (
|
|
IN PNDIS_BUFFER pGaspNdisBuffer
|
|
);
|
|
|
|
VOID
|
|
nicFreeToNPagedLookasideList (
|
|
IN PNIC_NPAGED_LOOKASIDE_LIST pLookasideList,
|
|
IN PVOID pBuffer
|
|
);
|
|
|
|
VOID
|
|
nicMakeGaspHeader (
|
|
IN PADAPTERCB pAdapter,
|
|
IN PGASP_HEADER pGaspHeader
|
|
);
|
|
|
|
NDIS_STATUS
|
|
nicCopyOneFragment (
|
|
PFRAGMENTATION_STRUCTURE pFragment
|
|
);
|
|
|
|
VOID
|
|
nicCopyUnfragmentedHeader (
|
|
IN PNIC1394_UNFRAGMENTED_HEADER pDestUnfragmentedHeader,
|
|
IN PVOID pSrcUnfragmentedHeader
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
NDIS_STATUS
|
|
nicFirstFragmentInitialization (
|
|
IN PNDIS_BUFFER pStartNdisBuffer,
|
|
IN ULONG DatagramLabelLong,
|
|
OUT PFRAGMENTATION_STRUCTURE pFragment
|
|
);
|
|
|
|
|
|
VOID
|
|
nicInitializeLookasideListHeader (
|
|
IN OUT PLOOKASIDE_BUFFER_HEADER pHeader,
|
|
IN PNDIS_PACKET pNdisPacket,
|
|
IN PVCCB pVc,
|
|
IN PNDIS_BUFFER pCurrNdisBuffer,
|
|
IN BUS_OPERATION AsyncOp,
|
|
IN PADAPTERCB pAdapter
|
|
);
|
|
|
|
|
|
NDIS_STATUS
|
|
nicCopyNdisPacketToUnfragmentedBuffer(
|
|
IN PNIC_NPAGED_LOOKASIDE_LIST pLookasideList,
|
|
IN PNDIS_BUFFER pStartNdisBuffer,
|
|
IN ULONG PacketLength,
|
|
IN BUS_OPERATION AsyncOp,
|
|
IN PGASP_HEADER pGaspHeader,
|
|
OUT PVOID* ppStartFragmentAddress,
|
|
OUT PVOID *ppLookasideListBuffer
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
nicAddFragmentHeader (
|
|
IN PVOID pStartFragmentData,
|
|
IN PFRAGMENTATION_STRUCTURE pFragmentStructure,
|
|
IN ULONG BufferSize
|
|
);
|
|
|
|
|
|
|
|
|
|
NDIS_STATUS
|
|
nicFreeAsyncStreamPacketDataStructures(
|
|
IN PVCCB pVc,
|
|
IN PIRP pIrp OPTIONAL,
|
|
IN PVOID pLocalBuffer OPTIONAL,
|
|
IN PNIC_NPAGED_LOOKASIDE_LIST pLookasideList OPTIONAL
|
|
);
|
|
|
|
|
|
VOID
|
|
nicGetGenerationWorkItem(
|
|
NDIS_WORK_ITEM* pGetGenerationWorkItem,
|
|
IN PVOID Context
|
|
);
|
|
|
|
VOID
|
|
nicMpCoSendComplete (
|
|
NDIS_STATUS NdisStatus,
|
|
PVCCB pVc,
|
|
PNDIS_PACKET pPacket
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
nicSendTimer (
|
|
IN PVOID SystemSpecific1,
|
|
IN PVOID FunctionContext,
|
|
IN PVOID SystemSpecific2,
|
|
IN PVOID SystemSpecific3
|
|
);
|
|
|
|
|
|
|
|
UINT
|
|
nicNumFragmentsNeeded (
|
|
UINT PacketLength ,
|
|
UINT MaxPayload,
|
|
UINT FragmentOverhead
|
|
);
|
|
|