Пример #1
0
NTSTATUS
MpResetWorkItem(
    _In_  PVOID                   Context,
    _In_  NDIS_HANDLE             NdisIoWorkItemHandle
    )    
{
    PADAPTER                    adapter = (PADAPTER)Context;
    NDIS_STATUS                 ndisStatus = NDIS_STATUS_SUCCESS;
    BOOLEAN                     addressingReset = FALSE;

    MP_VERIFY_PASSIVE_IRQL();

    //
    // Pass the reset request to the helper port
    //
    ndisStatus = HelperPortHandleMiniportReset(adapter->HelperPort, &addressingReset);
    if (ndisStatus != NDIS_STATUS_SUCCESS)
    {
        MpTrace(COMP_MISC, DBG_SERIOUS, ("Requesting adapter removal because Hw Reset has failed\n"));
        MpRemoveAdapter(adapter);            
    }

    MP_CLEAR_ADAPTER_STATUS(adapter, MP_ADAPTER_IN_RESET);

    NdisFreeIoWorkItem(NdisIoWorkItemHandle);

    // Inform NDIS about reset complete
    NdisMResetComplete(
        adapter->MiniportAdapterHandle,
        ndisStatus,
        addressingReset
        );

    return STATUS_SUCCESS;
}
Пример #2
0
VOID
VenetResetTimerDpc(PVOID s1, PVOID context, PVOID s2, PVOID s3)
{
    PADAPTER	a = (PADAPTER) context;
    LARGE_INTEGER	interval;
    BOOLEAN		done = TRUE;
    NDIS_STATUS	rc = NDIS_STATUS_SOFT_ERRORS;
    UNREFERENCED_PARAMETER(s1);
    UNREFERENCED_PARAMETER(s2);
    UNREFERENCED_PARAMETER(s3);

    VENET_ADAPTER_GET(a);

    if (VENET_IS_BUSY(a)) {
        done = FALSE;
        VenetFreeQueuedSend(a, NDIS_STATUS_RESET_IN_PROGRESS);
    }

    /* Not done, try again? */
    if (!done && ++a->resetCount <= 20) {
        interval.QuadPart = 500;
        NdisSetTimerObject(a->resetTimer, interval, 0, NULL);
        VENET_ADAPTER_PUT(a);
        return;
    }

    if (done) {
        VENET_CLEAR_FLAG(a, VNET_ADAPTER_RESET);
        rc = NDIS_STATUS_SUCCESS;
    }

    NdisMResetComplete(a->adapterHandle, rc, FALSE);
    VENET_ADAPTER_PUT(a);
}
static void OnResetWorkItem(NDIS_WORK_ITEM * pWorkItem, PVOID  Context)
{
	tGeneralWorkItem *pwi = (tGeneralWorkItem *)pWorkItem;
	PARANDIS_ADAPTER *pContext = pwi->pContext;
	DEBUG_ENTRY(0);

	ParaNdis_IndicateConnect(pContext, FALSE, FALSE);
	ParaNdis_Suspend(pContext);
	ParaNdis_Resume(pContext);
	ParaNdis_ReportLinkStatus(pContext);

	NdisFreeMemory(pwi, 0, 0);
	ParaNdis_DebugHistory(pContext, hopSysReset, NULL, 0, NDIS_STATUS_SUCCESS, 0);
	NdisMResetComplete(pContext->MiniportHandle, NDIS_STATUS_SUCCESS, TRUE);
}
static void OnResetWorkItem(PVOID  WorkItemContext, NDIS_HANDLE  NdisIoWorkItemHandle)
{
    if (WorkItemContext)
    {
        tGeneralWorkItem *pwi = (tGeneralWorkItem *)WorkItemContext;
        PARANDIS_ADAPTER *pContext = pwi->pContext;
        BOOLEAN bSendActive, bReceiveActive;
        DEBUG_ENTRY(0);
        bSendActive = pContext->SendState == srsEnabled;
        bReceiveActive = pContext->ReceiveState == srsEnabled;
        pContext->bResetInProgress = TRUE;
        ParaNdis_Suspend(pContext);
        ParaNdis_PowerOff(pContext);
        ParaNdis_PowerOn(pContext);
        if (bSendActive) ParaNdis6_SendPauseRestart(pContext, FALSE, NULL);
        if (bReceiveActive) ParaNdis6_ReceivePauseRestart(pContext, FALSE, NULL);
        pContext->bResetInProgress = FALSE;

        NdisFreeMemory(pwi, 0, 0);
        NdisFreeIoWorkItem(NdisIoWorkItemHandle);
        ParaNdis_DebugHistory(pContext, hopSysReset, NULL, 0, NDIS_STATUS_SUCCESS, 0);
        NdisMResetComplete(pContext->MiniportHandle, NDIS_STATUS_SUCCESS, TRUE);
    }
}
Пример #5
0
// Reset handler of adapter
NDIS_STATUS NeoNdisReset(BOOLEAN *AddressingReset, NDIS_HANDLE MiniportAdapterContext)
{
	NdisMResetComplete(ctx->NdisMiniport, NDIS_STATUS_SUCCESS, FALSE);
	return NDIS_STATUS_SUCCESS;
}