+uint32_t
+eth_em_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id)
+{
+ struct em_rx_queue *rxq;
+ uint32_t nb_pkts_available;
+ uint32_t rx_rdh;
+ uint32_t rx_id;
+
+ if (rx_queue_id >= dev->data->nb_rx_queues) {
+ PMD_RX_LOG(DEBUG,"Invalid RX queue_id=%d\n", rx_queue_id);
+ return 0;
+ }
+
+ rxq = dev->data->rx_queues[rx_queue_id];
+ rx_id = (uint16_t) ((rxq->rx_tail == 0) ? (rxq->nb_rx_desc - 1) :
+ (rxq->rx_tail - 1));
+ rx_rdh = E1000_PCI_REG(rxq->rdh_reg_addr);
+ if (rx_rdh > rx_id)
+ nb_pkts_available = rx_rdh - rx_id;
+ else
+ nb_pkts_available = rx_rdh - rx_id + rxq->nb_rx_desc;
+
+ return (nb_pkts_available);
+}
+