#ifndef _PROTOCOL_H #define PROTOCOL_H //----------------------------------------------------------// // Local structures // //----------------------------------------------------------// typedef struct _STATUS_INDICATION_CONTEXT { PVOID StatusBuffer; UINT StatusBufferSize; NDIS_STATUS GeneralStatus; } STATUS_INDICATION_CONTEXT, *PSTATUS_INDICATION_CONTEXT; //----------------------------------------------------------// // epvc protocol helper functions // //----------------------------------------------------------// VOID epvcAdapterDelete ( PRM_OBJECT_HEADER pObj, PRM_STACK_RECORD psr ); PRM_OBJECT_HEADER epvcAdapterCreate( PRM_OBJECT_HEADER pParentObject, PVOID pCreateParams, PRM_STACK_RECORD psr ); ULONG epvcAdapterHash( PVOID pKey ); BOOLEAN epvcAdapterCompareKey( PVOID pKey, PRM_HASH_LINK pItem ); NDIS_STATUS epvcTaskInitializeAdapter( IN struct _RM_TASK * pTask, IN RM_TASK_OPERATION Code, IN UINT_PTR UserParam, IN PRM_STACK_RECORD pSR ); NDIS_STATUS epvcTaskActivateAdapter( IN struct _RM_TASK * pTask, IN RM_TASK_OPERATION Code, IN UINT_PTR UserParam, IN PRM_STACK_RECORD pSR ); NDIS_STATUS epvcTaskDeactivateAdapter( IN struct _RM_TASK * pTask, IN RM_TASK_OPERATION Code, IN UINT_PTR UserParam, IN PRM_STACK_RECORD pSR ); NDIS_STATUS epvcReadIntermediateMiniportConfiguration( IN PEPVC_ADAPTER pAdapter, IN NDIS_HANDLE MiniportListConfigName, IN PRM_STACK_RECORD pSR ); NDIS_STATUS epvcReadAdapterConfiguration( PEPVC_ADAPTER pAdapter, PRM_STACK_RECORD pSR ); NDIS_STATUS epvcTaskShutdownAdapter( IN struct _RM_TASK * pTask, IN RM_TASK_OPERATION Code, IN UINT_PTR UserParam, IN PRM_STACK_RECORD pSR ); NDIS_STATUS epvcTaskStartIMiniport( IN struct _RM_TASK * pTask, IN RM_TASK_OPERATION Code, IN UINT_PTR UserParam, IN PRM_STACK_RECORD pSR ); INT epvcAfInitEnumerate( PRM_OBJECT_HEADER pHdr, PVOID pvContext, // Unused PRM_STACK_RECORD pSR ); VOID epvcInstantiateMiniport( IN PEPVC_ADAPTER pAdapter, NDIS_HANDLE MIniportConfigHandle, PRM_STACK_RECORD pSR ); VOID epvcGetAdapterInfo( IN PEPVC_ADAPTER pAdapter, IN PRM_STACK_RECORD pSR, IN PRM_TASK pTask // OPTIONAL ); INT epvcProcessStatusIndication ( PRM_OBJECT_HEADER pHdr, PVOID pvContext, PRM_STACK_RECORD pSR ); VOID epvcMediaWorkItem( PNDIS_WORK_ITEM pWorkItem, PVOID Context ); NDIS_STATUS epvcTaskCloseIMiniport( IN struct _RM_TASK * pTask, IN RM_TASK_OPERATION Code, IN UINT_PTR UserParam, IN PRM_STACK_RECORD pSR ); INT epvcReconfigureMiniport ( PRM_OBJECT_HEADER pHdr, PVOID pvContext, PRM_STACK_RECORD pSR ); NDIS_STATUS epvcPtNetEventReconfigure( IN PEPVC_ADAPTER pAdapter, IN PVOID pBuffer, IN PRM_STACK_RECORD pSR ); INT epvcMiniportDoUnbind( PRM_OBJECT_HEADER pHdr, PVOID pvContext, PRM_STACK_RECORD pSR ); INT epvcMiniportCloseAf( IN PEPVC_I_MINIPORT pMiniport, PRM_STACK_RECORD pSR ); NDIS_STATUS epvcProcessOidCloseAf( PEPVC_I_MINIPORT pMiniport, PRM_STACK_RECORD pSR ); VOID nicCloseAfWotkItem( IN PNDIS_WORK_ITEM pWorkItem, IN PVOID Context ); //----------------------------------------------------------// // epvc protocol entry functions // //----------------------------------------------------------// VOID EpvcRequestComplete( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_REQUEST NdisRequest, IN NDIS_STATUS Status ); VOID EpvcUnbindAdapter( OUT PNDIS_STATUS pStatus, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext ); VOID EpvcOpenAdapterComplete( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenErrorStatus ); VOID EpvcCloseAdapterComplete( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status ); VOID EpvcBindAdapter( OUT PNDIS_STATUS pStatus, IN NDIS_HANDLE BindContext, IN PNDIS_STRING pDeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2 ); NDIS_STATUS EpvcPtPNPHandler( IN NDIS_HANDLE ProtocolBindingContext, IN PNET_PNP_EVENT pNetPnPEvent ); VOID EpvcPtSendComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN PNDIS_PACKET Packet ); UINT EpvcPtCoReceive( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE ProtocolVcContext, IN PNDIS_PACKET Packet ); VOID EpvcPtReceiveComplete( IN NDIS_HANDLE ProtocolBindingContext ); VOID epvcRemoveExtraNdisBuffers ( IN PEPVC_I_MINIPORT pMiniport, IN PEPVC_SEND_COMPLETE pStruct ); VOID epvcExtractSendCompleteInfo ( OUT PEPVC_SEND_COMPLETE pStruct, PEPVC_I_MINIPORT pMiniport, PNDIS_PACKET pPacket ); NDIS_STATUS epvcGetRecvPkt ( IN PEPVC_RCV_STRUCT pRcvStruct, IN PEPVC_I_MINIPORT pMiniport, IN PNDIS_PACKET Packet ); NDIS_STATUS epvcAddEthHeaderToNewPacket ( IN PEPVC_RCV_STRUCT pRcvStruct, IN PEPVC_I_MINIPORT pMiniport ); NDIS_STATUS epvcStripLLCHeaderFromNewPacket ( IN PEPVC_RCV_STRUCT pRcvStruct, IN PEPVC_I_MINIPORT pMiniport ); VOID epvcReturnPacketToOriginalState ( IN PEPVC_RCV_STRUCT pRcvStruct, IN PEPVC_I_MINIPORT pMiniport, IN PNDIS_PACKET Packet ); UINT EpvcCoReceive( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE ProtocolVcContext, IN PNDIS_PACKET Packet ); NDIS_STATUS epvcCopyNdisBufferChain ( IN PEPVC_RCV_STRUCT pRcvStruct, IN PNDIS_BUFFER pInBuffer, IN PUCHAR pCurrOffset ); VOID epvcValidatePacket ( IN PNDIS_PACKET pPacket ); INT epvcReconfigureAdapter( PRM_OBJECT_HEADER pHdr, PVOID pvContext, PRM_STACK_RECORD pSR ); BOOLEAN epvcIsPacketLengthAcceptable ( IN PNDIS_PACKET Packet, IN PEPVC_I_MINIPORT pMiniport ); VOID EpvcStatus( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize ); NDIS_STATUS epvcStripHeaderFromNewPacket ( IN PEPVC_RCV_STRUCT pRcvStruct, IN PEPVC_I_MINIPORT pMiniport ); #endif