Example #1
0
/*
 *  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;
}
Example #3
0
/* ------------------------------------------------------------------------- */
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;
}
Example #4
0
/* ------------------------------------------------------------------------- */
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;
}