Lines Matching refs:ring

197 xgell_rx_buffer_replenish_all(xgell_rx_ring_t *ring)  in xgell_rx_buffer_replenish_all()  argument
199 xgell_rx_buffer_pool_t *bf_pool = &ring->bf_pool; in xgell_rx_buffer_replenish_all()
207 (xge_hal_ring_dtr_reserve(ring->channelh, &dtr) == XGE_HAL_OK)) { in xgell_rx_buffer_replenish_all()
218 xge_hal_ring_dtr_private(ring->channelh, dtr); in xgell_rx_buffer_replenish_all()
223 xge_hal_ring_dtr_post(ring->channelh, dtr); in xgell_rx_buffer_replenish_all()
236 xgell_rx_ring_t *ring = rx_buffer->ring; in xgell_rx_buffer_release() local
237 xgell_rx_buffer_pool_t *bf_pool = &ring->bf_pool; in xgell_rx_buffer_release()
268 xgell_rx_ring_t *ring = rx_buffer->ring; in xgell_rx_buffer_recycle() local
269 xgelldev_t *lldev = ring->lldev; in xgell_rx_buffer_recycle()
270 xgell_rx_buffer_pool_t *bf_pool = &ring->bf_pool; in xgell_rx_buffer_recycle()
284 if ((lldev->is_initialized != 0) && (ring->live) && in xgell_rx_buffer_recycle()
293 xgell_rx_buffer_replenish_all(ring); in xgell_rx_buffer_recycle()
307 xgell_rx_buffer_alloc(xgell_rx_ring_t *ring) in xgell_rx_buffer_alloc() argument
309 xgelldev_t *lldev = ring->lldev; in xgell_rx_buffer_alloc()
310 xgell_rx_buffer_pool_t *bf_pool = &ring->bf_pool; in xgell_rx_buffer_alloc()
371 rx_buffer->ring = ring; in xgell_rx_buffer_alloc()
396 xgell_rx_destroy_buffer_pool(xgell_rx_ring_t *ring) in xgell_rx_destroy_buffer_pool() argument
398 xgelldev_t *lldev = ring->lldev; in xgell_rx_destroy_buffer_pool()
399 xgell_rx_buffer_pool_t *bf_pool = &ring->bf_pool; in xgell_rx_destroy_buffer_pool()
474 xgell_rx_create_buffer_pool(xgell_rx_ring_t *ring) in xgell_rx_create_buffer_pool() argument
476 xgelldev_t *lldev = ring->lldev; in xgell_rx_create_buffer_pool()
477 xgell_rx_buffer_pool_t *bf_pool = &ring->bf_pool; in xgell_rx_create_buffer_pool()
509 if ((rx_buffer = xgell_rx_buffer_alloc(ring)) == NULL) { in xgell_rx_create_buffer_pool()
510 (void) xgell_rx_destroy_buffer_pool(ring); in xgell_rx_create_buffer_pool()
534 xgell_rx_ring_t *ring = userdata; in xgell_rx_dtr_replenish() local
535 xgell_rx_buffer_pool_t *bf_pool = &ring->bf_pool; in xgell_rx_dtr_replenish()
657 xgell_rx_1b_msg_alloc(xgell_rx_ring_t *ring, xgell_rx_buffer_t *rx_buffer, in xgell_rx_1b_msg_alloc() argument
660 xgelldev_t *lldev = ring->lldev; in xgell_rx_1b_msg_alloc()
706 xgell_rx_ring_t *ring = (xgell_rx_ring_t *)userdata; in xgell_rx_1b_callback() local
707 xgelldev_t *lldev = ring->lldev; in xgell_rx_1b_callback()
713 xge_debug_ll(XGE_TRACE, "xgell_rx_1b_callback on ring %d", ring->index); in xgell_rx_1b_callback()
715 mutex_enter(&ring->bf_pool.pool_lock); in xgell_rx_1b_callback()
760 if (ring->bf_pool.post > ring->bf_pool.post_hiwat) { in xgell_rx_1b_callback()
766 mp = xgell_rx_1b_msg_alloc(ring, rx_buffer, pkt_length, in xgell_rx_1b_callback()
780 ring->bf_pool.post++; in xgell_rx_1b_callback()
796 ring->rx_pkts++; in xgell_rx_1b_callback()
797 ring->rx_bytes += pkt_length; in xgell_rx_1b_callback()
810 if ((ring->poll_mp == NULL) && (ring->poll_bytes > 0)) { in xgell_rx_1b_callback()
811 ring->poll_mp = mp_head; in xgell_rx_1b_callback()
813 if (ring->poll_mp != NULL) { in xgell_rx_1b_callback()
814 if ((ring->poll_bytes -= pkt_length) <= 0) { in xgell_rx_1b_callback()
830 if (ring->bf_pool.post > ring->bf_pool.post_hiwat) { in xgell_rx_1b_callback()
832 xgell_rx_buffer_replenish_all(ring); in xgell_rx_1b_callback()
834 mutex_exit(&ring->bf_pool.pool_lock); in xgell_rx_1b_callback()
836 mac_rx_ring(lldev->mh, ring->ring_handle, mp_head, in xgell_rx_1b_callback()
837 ring->ring_gen_num); in xgell_rx_1b_callback()
841 mutex_enter(&ring->bf_pool.pool_lock); in xgell_rx_1b_callback()
849 xgell_rx_buffer_replenish_all(ring); in xgell_rx_1b_callback()
850 mutex_exit(&ring->bf_pool.pool_lock); in xgell_rx_1b_callback()
856 if ((ring->poll_mp == NULL) && (mp_head != NULL)) { in xgell_rx_1b_callback()
857 mac_rx_ring(lldev->mh, ring->ring_handle, mp_head, in xgell_rx_1b_callback()
858 ring->ring_gen_num); in xgell_rx_1b_callback()
867 xgell_rx_ring_t *ring = (xgell_rx_ring_t *)arg; in xgell_rx_poll() local
871 xge_debug_ll(XGE_TRACE, "xgell_rx_poll on ring %d", ring->index); in xgell_rx_poll()
873 ring->poll_mp = NULL; in xgell_rx_poll()
874 ring->poll_bytes = bytes_to_pickup; in xgell_rx_poll()
875 (void) xge_hal_device_poll_rx_channel(ring->channelh, &got_rx); in xgell_rx_poll()
877 mp = ring->poll_mp; in xgell_rx_poll()
878 ring->poll_bytes = -1; in xgell_rx_poll()
879 ring->polled_bytes += got_rx; in xgell_rx_poll()
880 ring->poll_mp = NULL; in xgell_rx_poll()
897 xgell_tx_ring_t *ring = userdata; in xgell_xmit_compl() local
898 xgelldev_t *lldev = ring->lldev; in xgell_xmit_compl()
935 if (ring->need_resched) in xgell_xmit_compl()
936 mac_tx_ring_update(lldev->mh, ring->ring_handle); in xgell_xmit_compl()
944 xgell_tx_ring_t *ring = (xgell_tx_ring_t *)arg; in xgell_ring_tx() local
946 xgelldev_t *lldev = ring->lldev; in xgell_ring_tx()
972 if (xge_hal_channel_dtr_count(ring->channelh) in xgell_ring_tx()
977 ((xge_hal_channel_t *)ring->channelh)->post_qid, in xgell_ring_tx()
982 status = xge_hal_fifo_dtr_reserve(ring->channelh, &dtr); in xgell_ring_tx()
990 ring->channelh)->post_qid); in xgell_ring_tx()
997 ring->channelh)->post_qid); in xgell_ring_tx()
1054 rc = xge_hal_fifo_dtr_buffer_append(ring->channelh, in xgell_ring_tx()
1062 ring->channelh, dtr, frag_cnt++); in xgell_ring_tx()
1066 xge_hal_fifo_dtr_buffer_finalize(ring->channelh, in xgell_ring_tx()
1120 xge_hal_fifo_dtr_buffer_set(ring->channelh, dtr, in xgell_ring_tx()
1153 xge_hal_fifo_dtr_buffer_finalize(ring->channelh, dtr, in xgell_ring_tx()
1180 xge_hal_fifo_dtr_post(ring->channelh, dtr); in xgell_ring_tx()
1183 atomic_inc_64(&ring->tx_pkts); in xgell_ring_tx()
1184 atomic_add_64(&ring->tx_bytes, sent_bytes); in xgell_ring_tx()
1199 xge_hal_fifo_dtr_free(ring->channelh, dtr); in xgell_ring_tx()
1205 ring->need_resched = B_TRUE; in xgell_ring_tx()
1213 xgell_rx_ring_maddr_init(xgell_rx_ring_t *ring) in xgell_rx_ring_maddr_init() argument
1216 xgelldev_t *lldev = ring->lldev; in xgell_rx_ring_maddr_init()
1222 ring->mmac.naddr = XGE_RX_MULTI_MAC_ADDRESSES_MAX; in xgell_rx_ring_maddr_init()
1223 ring->mmac.naddrfree = ring->mmac.naddr; in xgell_rx_ring_maddr_init()
1236 slot_start = ring->index * 32; in xgell_rx_ring_maddr_init()
1237 for (i = 0; i < ring->mmac.naddr; i++) { in xgell_rx_ring_maddr_init()
1239 ring->mmac.mac_addr + i); in xgell_rx_ring_maddr_init()
1240 ring->mmac.mac_addr_set[i] = B_FALSE; in xgell_rx_ring_maddr_init()
1249 xgell_rx_ring_t *ring = arg; in xgell_addmac() local
1250 xgelldev_t *lldev = ring->lldev; in xgell_addmac()
1259 if (ring->mmac.naddrfree == 0) { in xgell_addmac()
1265 for (slot = 0; slot < ring->mmac.naddr; slot++) { in xgell_addmac()
1266 if (ring->mmac.mac_addr_set[slot] == B_FALSE) { in xgell_addmac()
1271 ASSERT(slot < ring->mmac.naddr); in xgell_addmac()
1273 slot_start = ring->index * 32; in xgell_addmac()
1288 ring->mmac.mac_addr + slot) != XGE_HAL_OK) { in xgell_addmac()
1293 ring->mmac.mac_addr_set[slot] = B_TRUE; in xgell_addmac()
1294 ring->mmac.naddrfree--; in xgell_addmac()
1304 xgell_rx_ring_t *ring = arg; in xgell_remmac() local
1305 xgelldev_t *lldev = ring->lldev; in xgell_remmac()
1317 slot_start = ring->index * 32; in xgell_remmac()
1327 if (slot < 0 || slot >= ring->mmac.naddr) in xgell_remmac()
1331 xge_assert(ring->mmac.mac_addr_set[slot]); in xgell_remmac()
1334 if (!ring->mmac.mac_addr_set[slot]) { in xgell_remmac()
1351 ring->mmac.mac_addr_set[slot] = B_FALSE; in xgell_remmac()
1352 ring->mmac.naddrfree++; in xgell_remmac()
1362 ring->mmac.mac_addr + slot); in xgell_remmac()
1377 xgell_rx_ring_t *ring = (xgell_rx_ring_t *)ih; in xgell_rx_ring_intr_enable() local
1379 mutex_enter(&ring->ring_lock); in xgell_rx_ring_intr_enable()
1380 xge_hal_device_rx_channel_disable_polling(ring->channelh); in xgell_rx_ring_intr_enable()
1381 mutex_exit(&ring->ring_lock); in xgell_rx_ring_intr_enable()
1389 xgell_rx_ring_t *ring = (xgell_rx_ring_t *)ih; in xgell_rx_ring_intr_disable() local
1391 mutex_enter(&ring->ring_lock); in xgell_rx_ring_intr_disable()
1392 xge_hal_device_rx_channel_enable_polling(ring->channelh); in xgell_rx_ring_intr_disable()
1393 mutex_exit(&ring->ring_lock); in xgell_rx_ring_intr_disable()
1573 xgell_rx_ring_t *ring = rx_buffer->ring; in xgell_rx_dtr_term() local
1575 mutex_enter(&ring->bf_pool.pool_lock); in xgell_rx_dtr_term()
1578 mutex_exit(&ring->bf_pool.pool_lock); in xgell_rx_dtr_term()
1872 hldev->config.ring.queue[XGELL_RX_RING_MAIN].rti.ufc_b = in xgell_initiate_start()
1877 hldev->config.ring.queue[XGELL_RX_RING_MAIN].rti.ufc_c = in xgell_initiate_start()