odp_buffer_hdr_t *pktin_dequeue(queue_entry_t *qentry) { odp_buffer_hdr_t *buf_hdr; buf_hdr = queue_deq(qentry); if (buf_hdr == NULL) { odp_packet_t pkt; odp_buffer_t buf; odp_packet_t pkt_tbl[QUEUE_MULTI_MAX]; odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX]; int pkts, i, j; pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl, QUEUE_MULTI_MAX); if (pkts > 0) { pkt = pkt_tbl[0]; buf = odp_buffer_from_packet(pkt); buf_hdr = odp_buf_to_hdr(buf); for (i = 1, j = 0; i < pkts; ++i) { buf = odp_buffer_from_packet(pkt_tbl[i]); tmp_hdr_tbl[j++] = odp_buf_to_hdr(buf); } queue_enq_multi(qentry, tmp_hdr_tbl, j); } } return buf_hdr; }
int odp_buffer_snprint(char *str, uint32_t n, odp_buffer_t buf) { odp_buffer_hdr_t *hdr; int len = 0; if (!odp_buffer_is_valid(buf)) { ODP_PRINT("Buffer is not valid.\n"); return len; } hdr = odp_buf_to_hdr(buf); len += snprintf(&str[len], n-len, "Buffer\n"); len += snprintf(&str[len], n-len, " pool %" PRIu64 "\n", odp_pool_to_u64(hdr->pool_hdl)); len += snprintf(&str[len], n-len, " addr %p\n", hdr->addr); len += snprintf(&str[len], n-len, " size %" PRIu32 "\n", hdr->size); len += snprintf(&str[len], n-len, " ref_count %" PRIu32 "\n", odp_atomic_load_u32(&hdr->ref_count)); len += snprintf(&str[len], n-len, " type %i\n", hdr->type); return len; }
int pktin_deq_multi(queue_entry_t *qentry, odp_buffer_hdr_t *buf_hdr[], int num) { int nbr; nbr = queue_deq_multi(qentry, buf_hdr, num); if (nbr < num) { odp_packet_t pkt_tbl[QUEUE_MULTI_MAX]; odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX]; odp_buffer_t buf; int pkts, i; pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl, QUEUE_MULTI_MAX); if (pkts > 0) { for (i = 0; i < pkts; ++i) { buf = odp_buffer_from_packet(pkt_tbl[i]); tmp_hdr_tbl[i] = odp_buf_to_hdr(buf); } queue_enq_multi(qentry, tmp_hdr_tbl, pkts); } } return nbr; }
int odp_queue_enq(odp_queue_t handle, odp_event_t ev) { odp_buffer_hdr_t *buf_hdr; queue_entry_t *queue; queue = queue_to_qentry(handle); buf_hdr = odp_buf_to_hdr(odp_buffer_from_event(ev)); return queue->s.enqueue(queue, buf_hdr); }
int odp_queue_enq(odp_queue_t handle, odp_buffer_t buf) { odp_buffer_hdr_t *buf_hdr; queue_entry_t *queue; queue = queue_to_qentry(handle); buf_hdr = odp_buf_to_hdr(buf); return queue->s.enqueue(queue, buf_hdr); }
void odp_buffer_free(odp_buffer_t buf) { odp_buffer_hdr_t *buf_hdr = odp_buf_to_hdr(buf); pool_entry_t *pool = odp_buf_to_pool(buf_hdr); if (odp_unlikely(pool->s.low_wm_assert)) ret_buf(&pool->s, buf_hdr); else ret_local_buf(&local_cache[pool->s.pool_id], buf_hdr); }
void odp_buffer_free(odp_buffer_t buf) { odp_buffer_hdr_t *buf_hdr = odp_buf_to_hdr(buf); pool_entry_t *pool = odp_buf_to_pool(buf_hdr); ODP_ASSERT(buf_hdr->allocator != ODP_FREEBUF); if (odp_unlikely(pool->s.low_wm_assert)) ret_buf(&pool->s, buf_hdr); else ret_local_buf(&pool->s.local_cache[local_id], buf_hdr); }
static int loopback_send(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[], unsigned len) { odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX]; queue_entry_t *qentry; unsigned i; for (i = 0; i < len; ++i) hdr_tbl[i] = odp_buf_to_hdr(_odp_packet_to_buffer(pkt_tbl[i])); qentry = queue_to_qentry(pktio_entry->s.pkt_loop.loopq); return queue_enq_multi(qentry, hdr_tbl, len); }
int odp_queue_enq_multi(odp_queue_t handle, const odp_event_t ev[], int num) { odp_buffer_hdr_t *buf_hdr[QUEUE_MULTI_MAX]; queue_entry_t *queue; int i; if (num > QUEUE_MULTI_MAX) num = QUEUE_MULTI_MAX; queue = queue_to_qentry(handle); for (i = 0; i < num; i++) buf_hdr[i] = odp_buf_to_hdr(odp_buffer_from_event(ev[i])); return queue->s.enqueue_multi(queue, buf_hdr, num); }
uint64_t odp_timeout_tick(odp_timeout_t tmo) { odp_timeout_hdr_t *tmo_hdr; tmo_hdr = (odp_timeout_hdr_t *)odp_buf_to_hdr((odp_buffer_t)tmo); return tmo_hdr->meta.tick; }
static odp_timeout_hdr_t *timeout_hdr_from_buf(odp_buffer_t buf) { return (odp_timeout_hdr_t *)odp_buf_to_hdr(buf); }
odp_pool_t odp_buffer_pool(odp_buffer_t buf) { return odp_buf_to_hdr(buf)->pool_hdl; }
void _odp_buffer_type_set(odp_buffer_t buf, int type) { odp_buffer_hdr_t *hdr = odp_buf_to_hdr(buf); hdr->type = type; }
int _odp_buffer_type(odp_buffer_t buf) { odp_buffer_hdr_t *hdr = odp_buf_to_hdr(buf); return hdr->type; }
uint32_t odp_buffer_size(odp_buffer_t buf) { odp_buffer_hdr_t *hdr = odp_buf_to_hdr(buf); return hdr->size; }
void *odp_buffer_addr(odp_buffer_t buf) { odp_buffer_hdr_t *hdr = odp_buf_to_hdr(buf); return hdr->addr[0]; }