/*++

Copyright (c) 1990-1998  Microsoft Corporation, All Rights Reserved.

Module Name:

    proto.h

Abstract:

    Ndis Atm Sample protocol. 

Author:

    Anil Francis Thomas (10/98)

Environment:

    Kernel

Revision History:

--*/

#ifndef __PROTO_H
#define __PROTO_H

//
// prototypes from atmsmdrv.c
//
NTSTATUS
DriverEntry(
    IN  PDRIVER_OBJECT      pDriverObject,
    IN  PUNICODE_STRING     RegistryPath
    );

VOID
AtmSmShutDown(
    );

NDIS_STATUS
AtmSmInitializeNdis(
    );

NDIS_STATUS
AtmSmDeinitializeNdis(
    );


//
// Prototypes in adapter.c
//

VOID
AtmSmBindAdapter(
    OUT PNDIS_STATUS                pStatus,
    IN  NDIS_HANDLE                 BindContext,
    IN  PNDIS_STRING                pDeviceName,
    IN  PVOID                       SystemSpecific1,
    IN  PVOID                       SystemSpecific2
    );

VOID
AtmSmOpenAdapterComplete(
    IN  NDIS_HANDLE             ProtocolBindingContext,
    IN  NDIS_STATUS             Status,
    IN  NDIS_STATUS             OpenStatus
    );

VOID
AtmSmUnbindAdapter(
    OUT PNDIS_STATUS                pStatus,
    IN  NDIS_HANDLE                 ProtocolBindingContext,
    IN  NDIS_HANDLE                 UnbindContext
    );

NDIS_STATUS
AtmSmShutdownAdapter(
    PATMSM_ADAPTER  pAdapt
    );

VOID
AtmSmCloseAdapterComplete(
    IN  NDIS_HANDLE             ProtocolBindingContext,
    IN  NDIS_STATUS             Status
    );

BOOLEAN
AtmSmReferenceAdapter(
    PATMSM_ADAPTER    pAdapt
    );

LONG
AtmSmDereferenceAdapter(
    PATMSM_ADAPTER    pAdapt
    );

NDIS_STATUS
AtmSmQueryAdapterATMAddresses(
    PATMSM_ADAPTER    pAdapt
    );

VOID
AtmSmQueryAdapter(
    IN  PATMSM_ADAPTER  pAdapt
    );

NDIS_STATUS
AtmSmPnPEvent(
    IN  NDIS_HANDLE             ProtocolBindingContext,
    IN  PNET_PNP_EVENT          pNetPnPEvent
    );

VOID
AtmSmStatus(
    IN  NDIS_HANDLE             ProtocolBindingContext,
    IN  NDIS_STATUS             GeneralStatus,
    IN  PVOID                   StatusBuffer,
    IN  UINT                    StatusBufferSize
    );

VOID
AtmSmReceiveComplete(
    IN  NDIS_HANDLE             ProtocolBindingContext
    );

VOID
AtmSmStatusComplete(
    IN  NDIS_HANDLE             ProtocolBindingContext
    );

VOID
AtmSmCoStatus(
    IN  NDIS_HANDLE             ProtocolBindingContext,
    IN  NDIS_HANDLE             ProtocolVcContext   OPTIONAL,
    IN  NDIS_STATUS             GeneralStatus,
    IN  PVOID                   StatusBuffer,
    IN  UINT                    StatusBufferSize
    );


//
// Prototypes in callmgr.c
//

VOID
AtmSmCoAfRegisterNotify(
    IN  NDIS_HANDLE                 ProtocolBindingContext,
    IN  PCO_ADDRESS_FAMILY          pAddressFamily
    );

VOID
AtmSmOpenAfComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolAfContext,
    IN  NDIS_HANDLE             NdisAfHandle
    );

NDIS_STATUS
AtmSmRegisterSap(
    IN  PATMSM_ADAPTER  pAdapt
    );

VOID
AtmSmRegisterSapComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolSapContext,
    IN  PCO_SAP                 Sap,
    IN  NDIS_HANDLE             NdisSapHandle
    );

VOID
AtmSmDeregisterSapComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolSapContext
    );

VOID
AtmSmCloseAfComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolAfContext
    );

NDIS_STATUS
AtmSmCreateVc(
    IN  NDIS_HANDLE             ProtocolAfContext,
    IN  NDIS_HANDLE             NdisVcHandle,
    OUT PNDIS_HANDLE            ProtocolVcContext
    );

NDIS_STATUS
AtmSmDeleteVc(
    IN  NDIS_HANDLE                 ProtocolVcContext
    );

NDIS_STATUS
AtmSmIncomingCall(
    IN  NDIS_HANDLE             ProtocolSapContext,
    IN  NDIS_HANDLE             ProtocolVcContext,
    IN OUT PCO_CALL_PARAMETERS  CallParameters
    );

VOID
AtmSmCallConnected(
    IN  NDIS_HANDLE             ProtocolVcContext
    );

VOID
AtmSmMakeCallComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolVcContext,
    IN  NDIS_HANDLE             NdisPartyHandle     OPTIONAL,
    IN  PCO_CALL_PARAMETERS     CallParameters
    );

VOID
AtmSmIncomingCloseCall(
    IN  NDIS_STATUS             CloseStatus,
    IN  NDIS_HANDLE             ProtocolVcContext,
    IN  PVOID                   CloseData   OPTIONAL,
    IN  UINT                    Size        OPTIONAL
    );

VOID
AtmSmCloseCallComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolVcContext,
    IN  NDIS_HANDLE             ProtocolPartyContext OPTIONAL
    );

VOID
AtmSmAddPartyComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolPartyContext,
    IN  NDIS_HANDLE             NdisPartyHandle,
    IN  PCO_CALL_PARAMETERS     CallParameters
    );

VOID
AtmSmDropPartyComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolPartyContext
    );

VOID
AtmSmIncomingDropParty(
    IN  NDIS_STATUS             DropStatus,
    IN  NDIS_HANDLE             ProtocolPartyContext,
    IN  PVOID                   CloseData   OPTIONAL,
    IN  UINT                    Size        OPTIONAL
    );

VOID
AtmSmIncomingCallQoSChange(
    IN  NDIS_HANDLE             ProtocolVcContext,
    IN  PCO_CALL_PARAMETERS     CallParameters
    );


//
// Prototypes in misc.c
//

NDIS_STATUS
AtmSmAllocVc(
    IN  PATMSM_ADAPTER  pAdapt,
    OUT PATMSM_VC       *ppVc,
    IN  ULONG           VcType,
    IN  NDIS_HANDLE     NdisVcHandle
    );

BOOLEAN
AtmSmReferenceVc(
    IN  PATMSM_VC   pVc
    );

ULONG
AtmSmDereferenceVc(
    IN  PATMSM_VC   pVc
    );

VOID
AtmSmDisconnectVc(
    IN  PATMSM_VC           pVc
    );

BOOLEAN
DeleteMemberInfoFromVc(
    IN  PATMSM_VC           pVc,
    IN  PATMSM_PMP_MEMBER   pMemberToRemove
    );

VOID
AtmSmDropMemberFromVc(
    IN  PATMSM_VC           pVc,
    IN  PATMSM_PMP_MEMBER   pMemberToDrop
    );

PCO_CALL_PARAMETERS
AtmSmPrepareCallParameters(
    IN  PATMSM_ADAPTER          pAdapt,
    IN  PHW_ADDR                pHwAddr,
    IN  BOOLEAN                 IsMakeCall,
    IN  BOOLEAN                 IsMultipointVC
    );

NTSTATUS
VerifyRecvOpenContext(
    PATMSM_ADAPTER      pAdapt
    );

NTSTATUS
VerifyConnectContext(
    PATMSM_VC       pVc
    );

UINT
CopyPacketToIrp(
    PIRP            pIrp,
    PNDIS_PACKET    pPkt
    );

VOID
AtmSmRecvReturnTimerFunction (
    IN  PVOID                   SystemSpecific1,
    IN  PVOID                   FunctionContext,
    IN  PVOID                   SystemSpecific2,
    IN  PVOID                   SystemSpecific3
    );

VOID
AtmSmConnectToPMPDestinations(
    IN  PATMSM_VC           pVc
    );

VOID
AtmSmConnectPPVC(
    IN  PATMSM_VC           pVc
    );

//
// Prototypes in request.c
//

NDIS_STATUS
AtmSmCoRequest(
    IN  NDIS_HANDLE             ProtocolAfContext,
    IN  NDIS_HANDLE             ProtocolVcContext       OPTIONAL,
    IN  NDIS_HANDLE             ProtocolPartyContext    OPTIONAL,
    IN OUT PNDIS_REQUEST        NdisRequest
    );

VOID
AtmSmCoRequestComplete(
    IN  NDIS_STATUS                 Status,
    IN  NDIS_HANDLE                 ProtocolAfContext,
    IN  NDIS_HANDLE                 ProtocolVcContext   OPTIONAL,
    IN  NDIS_HANDLE                 ProtocolPartyContext    OPTIONAL,
    IN  PNDIS_REQUEST               pNdisRequest
    );

VOID
AtmSmSendAdapterNdisRequest(
    IN  PATMSM_ADAPTER          pAdapt,
    IN  NDIS_OID                Oid,
    IN  PVOID                   pBuffer,
    IN  ULONG                   BufferLength
    );

VOID
AtmSmRequestComplete(
    IN  NDIS_HANDLE             ProtocolBindingContext,
    IN  PNDIS_REQUEST           pRequest,
    IN  NDIS_STATUS             Status
    );


//
// Prototypes in sendrecv.c
//
VOID
AtmSmSendPacketOnVc(
    IN  PATMSM_VC               pVc,
    IN  PNDIS_PACKET            pPacket
    );

VOID
AtmSmSendQueuedPacketsOnVc(
    IN  PATMSM_VC       pVc
    );

VOID
AtmSmCoSendComplete(
    IN  NDIS_STATUS             Status,
    IN  NDIS_HANDLE             ProtocolVcContext,
    IN  PNDIS_PACKET            Packet
    );

UINT
AtmSmCoReceivePacket(
    IN  NDIS_HANDLE ProtocolBindingContext,
    IN  NDIS_HANDLE ProtocolVcContext,
    IN  PNDIS_PACKET Packet
    );


//
// Prototypes in ioctl.c
//

NTSTATUS
AtmSmDispatch(
    IN  PDEVICE_OBJECT  pDeviceObject,
    IN  PIRP            pIrp
    );

NTSTATUS
AtmSmIoctlEnumerateAdapters(
    PIRP                pIrp,
    PIO_STACK_LOCATION  pIrpSp
    );

NTSTATUS
AtmSmIoctlOpenForRecv(
    PIRP                pIrp,
    PIO_STACK_LOCATION  pIrpSp
    );

NTSTATUS
AtmSmIoctlRecvData(
    PIRP                pIrp,
    PIO_STACK_LOCATION  pIrpSp
    );

NTSTATUS
AtmSmIoctlCloseRecvHandle(
    PIRP                pIrp,
    PIO_STACK_LOCATION  pIrpSp
    );

NTSTATUS
AtmSmIoctlConnectToDsts(
    PIRP                pIrp,
    PIO_STACK_LOCATION  pIrpSp
    );

NTSTATUS
AtmSmIoctlSendToDsts(
    PIRP                pIrp,
    PIO_STACK_LOCATION  pIrpSp
    );

NTSTATUS
AtmSmIoctlCloseSendHandle(
    PIRP                pIrp,
    PIO_STACK_LOCATION  pIrpSp
    );


#endif