/*++ Copyright (c) 1996-1999 Microsoft Corporation Module Name: pstub.c Abstract: Stubs for protocol routines Author: Charlie Wickham (charlwi) 22-Apr-1996 Rajesh Sundaram (rajeshsu) 01-Aug-1998. Environment: Kernel Mode Revision History: --*/ #include "psched.h" #pragma hdrstop /* External */ /* Static */ /* Forward */ /* Generated by Emacs 19.17.0 on Wed May 08 10:48:06 1996 */ VOID ClResetComplete( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status ); /* End Forward */ NDIS_STATUS ClPnPEventHandler( IN NDIS_HANDLE Handle, IN PNET_PNP_EVENT NetPnPEvent ) { PADAPTER Adapter = (PADAPTER) Handle; PNDIS_DEVICE_POWER_STATE DeviceState = (PNDIS_DEVICE_POWER_STATE) (NetPnPEvent->Buffer); NDIS_DEVICE_POWER_STATE PrevDeviceState; NDIS_STATUS PnPStatus, Status; ULONG Count; PnPStatus = NDIS_STATUS_SUCCESS; switch(NetPnPEvent->NetEvent) { case NetEventSetPower: PsStructAssert(Adapter); PrevDeviceState = Adapter->PTDeviceState; Adapter->PTDeviceState = *DeviceState; // // if we are being sent to standby, block outstanding requests and sends // if(*DeviceState > NdisDeviceStateD0) { // // For state transistion to > D0, we have to pass the request up before doing anything. // if(Adapter->PsNdisHandle) { PnPStatus = NdisIMNotifyPnPEvent(Adapter->PsNdisHandle, NetPnPEvent); } // // If the physical miniport is going to standby, fail all incoming requests. // if(PrevDeviceState == NdisDeviceStateD0) { Adapter->StandingBy = TRUE; } // // Wait till Oustanding IO on the binding completes. // do { Status = NdisQueryPendingIOCount(Adapter->LowerMpHandle, &Count); if(Status == NDIS_STATUS_SUCCESS && Count != 0) { NdisMSleep(10); } else { break; } } while(TRUE); PsAssert(Adapter->OutstandingNdisRequests == 0); } else { // // If the physical miniport is powering up (from low power state to D0), clear the flag. // if(PrevDeviceState > NdisDeviceStateD0) { Adapter->StandingBy = FALSE; } // This is where we originate the pended ndis requests. if(Adapter->PendedNdisRequest) { PNDIS_REQUEST PendedRequest = (PNDIS_REQUEST) Adapter->PendedNdisRequest; Adapter->PendedNdisRequest = NULL; NdisRequest(&Status, Adapter->LowerMpHandle, PendedRequest); if(NDIS_STATUS_PENDING != Status) { ClRequestComplete(Adapter, PendedRequest, Status); } } // Update link speed. if(IsDeviceStateOn(Adapter)) { PsGetLinkSpeed(Adapter); } // // For state transistion to D0, we have to pass the request after doing our work. // if(Adapter->PsNdisHandle) { PnPStatus = NdisIMNotifyPnPEvent(Adapter->PsNdisHandle, NetPnPEvent); } } break; case NetEventReconfigure: if(Adapter == NULL) { NdisReEnumerateProtocolBindings(ClientProtocolHandle); } else { // // For all other events, pass the request before doing anything. // if(Adapter->PsNdisHandle) { PnPStatus = NdisIMNotifyPnPEvent(Adapter->PsNdisHandle, NetPnPEvent); } } break; default: // // For all other events, pass the request before doing anything. // if(Adapter && Adapter->PsNdisHandle) { PnPStatus = NdisIMNotifyPnPEvent(Adapter->PsNdisHandle, NetPnPEvent); } break; } return(PnPStatus); } VOID ClResetComplete( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status ) /*++ Routine Description: Completion routine for NdisReset Arguments: See the DDK... Return Values: None --*/ { PADAPTER Adapter = (PADAPTER)ProtocolBindingContext; PsStructAssert( Adapter ); PsDbgOut(DBG_TRACE, DBG_PROTOCOL, ("(%08X) ClResetComplete: Status = %08x\n", Adapter, Status)); } VOID ClCoStatus( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE ProtocolVcContext OPTIONAL, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize ) { PsDbgOut(DBG_TRACE, DBG_PROTOCOL, ("(%08X) PcStatusIndication: %08X\n", ProtocolBindingContext, GeneralStatus)); return; } VOID ClCoAfRegisterNotifyHandler( IN NDIS_HANDLE ProtocolBindingContext, IN PCO_ADDRESS_FAMILY AddressFamily ) { PADAPTER Adapter = (PADAPTER)ProtocolBindingContext; PsStructAssert( Adapter ); if(AddressFamily->AddressFamily == CO_ADDRESS_FAMILY_PPP) { OpenWanAddressFamily(Adapter, AddressFamily); } } /* end pstub.c */