• Home
  • Raw
  • Download

Lines Matching full:dr

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