/* * UEFI Stop() function * */ EFI_STATUS EFIAPI SnpStop ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp ) { // Check Snp Instance if (Snp == NULL) { return EFI_INVALID_PARAMETER; } // Check state of the driver if (Snp->Mode->State == EfiSimpleNetworkStopped) { return EFI_NOT_STARTED; } // Stop the Tx and Rx StopTx (STOP_TX_CFG | STOP_TX_MAC, Snp); StopRx (0, Snp); // Change the state switch (Snp->Mode->State) { case EfiSimpleNetworkStarted: case EfiSimpleNetworkInitialized: Snp->Mode->State = EfiSimpleNetworkStopped; break; default: return EFI_DEVICE_ERROR; } // Put the device into a power saving mode ? return EFI_SUCCESS; }
// Transmit full frame int SerialIntrf::Tx(int DevAddr, uint8_t *pData, int DataLen) { int count = 0; if (pData && StartTx(DevAddr)) { count = TxData(pData, DataLen); StopTx(); } return count; }
/* ------------------------------------------------------------------------- */ static int OnTxMessage(TServant *const servant) { TTxControl *const ctrl = &servant->m_tx; if (SetTxData(servant->m_session.m_connection, ctrl)) return -EXIT_FAILURE; if (0 == ctrl->m_n_to_send) { StopTx(servant); if (OnMessageSent(servant)) return -EXIT_FAILURE; } return -EXIT_SUCCESS; }
/* ------------------------------------------------------------------------- */ Srv_TSession* Servant_Create(Reg_TRegistry* reg, int connection) { TServant *const servant = Mem_Alloc(sizeof(TServant)); if (!servant) { LOG0_ERROR("servant", "failed to create a new servant: out of memory"); return NULL; } memset(servant, 0, sizeof(*servant)); Srv_InitSession(&servant->m_session, connection, OnIoEvent, (Srv_TTerminateSessionHandler)OnTerminate); servant->m_reg = reg; StopTx(servant); StartRx(servant); return (Srv_TSession*)servant; }