Lines Matching refs:dr
48 static inline u32 vnet_tx_dring_avail(struct vio_dring_state *dr)
50 return vio_dring_avail(dr, VNET_TX_RING_SIZE);
262 struct vio_dring_state *dr;
264 dr = &vio->drings[VIO_DRIVER_RX_RING];
265 dr->rcv_nxt = 1;
266 dr->snd_nxt = 1;
268 dr = &vio->drings[VIO_DRIVER_TX_RING];
269 dr->rcv_nxt = 1;
270 dr->snd_nxt = 1;
469 static int vnet_send_ack(struct vnet_port *port, struct vio_dring_state *dr,
479 .dring_ident = dr->ident,
487 hdr.seq = dr->snd_nxt;
492 dr->snd_nxt++;
519 struct vio_dring_state *dr,
525 err = ldc_get_dring_entry(port->vio.lp, desc, dr->entry_size,
526 (index * dr->entry_size),
527 dr->cookies, dr->ncookies);
535 struct vio_dring_state *dr,
541 err = ldc_put_dring_entry(port->vio.lp, desc, dr->entry_size,
542 (index * dr->entry_size),
543 dr->cookies, dr->ncookies);
551 struct vio_dring_state *dr,
554 struct vio_net_desc *desc = get_rx_desc(port, dr, index);
579 err = put_rx_desc(port, dr, desc, index);
586 static int vnet_walk_rx(struct vnet_port *port, struct vio_dring_state *dr,
593 end = (end == (u32)-1) ? vio_dring_prev(dr, start)
594 : vio_dring_next(dr, end);
599 int ack = 0, err = vnet_walk_rx_one(port, dr, start, &ack);
609 start = vio_dring_next(dr, start);
611 err = vnet_send_ack(port, dr, ack_start, ack_end,
623 ack_end = vio_dring_prev(dr, start);
631 return vnet_send_ack(port, dr, ack_start, ack_end,
647 struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_RX_RING];
651 pkt->tag.stype_env, pkt->seq, dr->rcv_nxt);
655 if (unlikely(pkt->seq != dr->rcv_nxt)) {
657 pkt->seq, dr->rcv_nxt);
662 dr->rcv_nxt++;
666 return vnet_walk_rx(port, dr, pkt->start_idx, pkt->end_idx,
670 static int idx_is_pending(struct vio_dring_state *dr, u32 end)
672 u32 idx = dr->cons;
675 while (idx != dr->prod) {
680 idx = vio_dring_next(dr, idx);
687 struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING];
700 if (unlikely(!idx_is_pending(dr, end))) {
710 dr->cons = vio_dring_next(dr, end);
711 desc = vio_dring_entry(dr, dr->cons);
717 if (__vnet_tx_trigger(port, dr->cons) > 0)
728 vnet_tx_dring_avail(dr) >= VNET_TX_WAKEUP_THRESH(dr)))
844 struct vio_dring_state *dr =
850 pkt->seq = dr->rcv_nxt;
851 pkt->start_idx = vio_dring_next(dr,
941 struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING];
949 .dring_ident = dr->ident,
968 hdr.seq = dr->snd_nxt;
973 dr->snd_nxt++;
991 struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING];
997 txi = dr->prod;
1005 d = vio_dring_entry(dr, txi);
1225 struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING];
1256 if (unlikely(vnet_tx_dring_avail(dr) < gso_segs)) {
1261 if (vnet_tx_dring_avail(dr) < skb_shinfo(skb)->gso_segs)
1328 struct vio_dring_state *dr;
1377 dr = &port->vio.drings[VIO_DRIVER_TX_RING];
1380 if (unlikely(vnet_tx_dring_avail(dr) < 1)) {
1392 d = vio_dring_cur(dr);
1394 txi = dr->prod;
1451 /* Exactly one ldc "start" trigger (for dr->cons) needs to be sent
1454 * a DRING_STOPPED is received from the consumer. The dr->cons field
1473 port->vio._peer_sid, dr->cons);
1477 err = __vnet_tx_trigger(port, dr->cons);
1495 dr->prod = (dr->prod + 1) & (VNET_TX_RING_SIZE - 1);
1496 if (unlikely(vnet_tx_dring_avail(dr) < 1)) {
1499 if (vnet_tx_dring_avail(dr) > VNET_TX_WAKEUP_THRESH(dr))
1672 struct vio_dring_state *dr;
1675 dr = &port->vio.drings[VIO_DRIVER_TX_RING];
1677 if (!dr->base)
1687 d = vio_dring_entry(dr, i);
1696 ldc_free_exp_dring(port->vio.lp, dr->base,
1697 (dr->entry_size * dr->num_entries),
1698 dr->cookies, dr->ncookies);
1699 dr->base = NULL;
1700 dr->entry_size = 0;
1701 dr->num_entries = 0;
1702 dr->pending = 0;
1703 dr->ncookies = 0;
1719 struct vio_dring_state *dr;
1724 dr = &port->vio.drings[VIO_DRIVER_TX_RING];
1734 dr->cookies, &ncookies,
1743 dr->base = dring;
1744 dr->entry_size = elen;
1745 dr->num_entries = VNET_TX_RING_SIZE;
1746 dr->prod = 0;
1747 dr->cons = 0;
1749 dr->pending = VNET_TX_RING_SIZE;
1750 dr->ncookies = ncookies;
1755 d = vio_dring_entry(dr, i);