예제 #1
0
int ef_vi_free(ef_vi* ep, ef_driver_handle fd)
{
  int rc;

  if( ep->vi_io_mmap_ptr != NULL ) {
    rc = ci_resource_munmap(fd, ep->vi_io_mmap_ptr, ep->vi_io_mmap_bytes);
    if( rc < 0 ) {
      LOGV(ef_log("%s: ci_resource_munmap %d", __FUNCTION__, rc));
      return rc;
    }
  }

  if( ep->vi_mem_mmap_ptr != NULL ) {
    /* TODO: support variable sized DMAQ and evq */
    rc = ci_resource_munmap(fd, ep->vi_mem_mmap_ptr, ep->vi_mem_mmap_bytes);
    if( rc < 0 ) {
      LOGVV(ef_log("%s: ci_resource_munmap iobuffer %d", __FUNCTION__, rc));
      return rc;
    }
  }

  free(ep->ep_state);

  EF_VI_DEBUG(memset(ep, 0, sizeof(*ep)));

  LOGVVV(ef_log("%s: DONE", __FUNCTION__));
  return 0;
}
예제 #2
0
static void ef10_tx_event_ts_enabled(ef_vi* evq, const ef_vi_event* ev,
				     ef_event** evs, int* evs_len)
{
  EF_VI_ASSERT(evq->vi_flags & EF_VI_TX_TIMESTAMPS);
  /* When TX timestamping is enabled, we get three events for
   * every transmit.  A TX completion and two timestamp events.
   * We ignore the completion and store the first timestamp in
   * the per TXQ state.  On the second timestamp we retrieve the
   * first one and construct a EF_EVENT_TYPE_TX_WITH_TIMESTAMP
   * event to send to the user. */
  if(QWORD_GET_U(ESF_DZ_TX_SOFT1, *ev) == 
     TX_TIMESTAMP_EVENT_TX_EV_COMPLETION) {
    /* TX completion event.  Ignored */
  }
  else if(QWORD_GET_U(ESF_DZ_TX_SOFT1, *ev) ==
          TX_TIMESTAMP_EVENT_TX_EV_TSTAMP_LO) {
    ef_vi_txq_state* qs = &evq->ep_state->txq;
    EF_VI_DEBUG(
                EF_VI_BUG_ON(qs->ts_nsec !=
                             EF_VI_TX_TIMESTAMP_TS_NSEC_INVALID)
                );
    qs->ts_nsec =
      (((((uint64_t)timestamp_extract(*ev)) *
         1000000000UL) >> 29) << 2) |
      evq->ep_state->evq.sync_flags;
  }
예제 #3
0
파일: pd.c 프로젝트: bmschwa/openonload
int ef_pd_free(ef_pd* pd, ef_driver_handle pd_dh)
{
  free(pd->pd_intf_name);
  if( pd->pd_cluster_sock != -1 ) {
    return ef_pd_cluster_free(pd, pd_dh);
  }
  else {
    EF_VI_DEBUG(memset(pd, 0, sizeof(*pd)));
    return 0;
  }
}