Lines Matching refs:ldcp
61 void vsw_destroy_rx_dring(vsw_ldc_t *ldcp);
62 dring_info_t *vsw_map_tx_dring(vsw_ldc_t *ldcp, void *pkt);
63 void vsw_unmap_tx_dring(vsw_ldc_t *ldcp);
66 void vsw_stop_rcv_thread(vsw_ldc_t *ldcp);
71 static int vsw_setup_rx_dring(vsw_ldc_t *ldcp, dring_info_t *dp);
72 static void vsw_process_dringdata_info_shm(vsw_ldc_t *ldcp,
74 static void vsw_process_dringdata_ack_shm(vsw_ldc_t *ldcp,
76 static void vsw_ldc_rcv_shm(vsw_ldc_t *ldcp);
77 static int vsw_receive_packet(vsw_ldc_t *ldcp, mblk_t **bp);
78 static int vsw_send_msg_shm(vsw_ldc_t *ldcp, void *msgp, int size,
84 extern dring_info_t *vsw_map_dring_cmn(vsw_ldc_t *ldcp,
97 #define VSW_SWITCH_FRAMES(vswp, ldcp, bp, bpt, count, total_count) \ argument
99 DTRACE_PROBE2(vsw_rx_pkts, vsw_ldc_t *, (ldcp), int, (count)); \
101 (ldcp)->ldc_port, NULL); \
107 vsw_create_rx_dring_info(vsw_ldc_t *ldcp) in vsw_create_rx_dring_info() argument
113 vsw_t *vswp = ldcp->ldc_vswp; in vsw_create_rx_dring_info()
121 if ((dp = vsw_create_rx_dring(ldcp)) == NULL) in vsw_create_rx_dring_info()
130 mp->tag.vio_sid = ldcp->local_session; in vsw_create_rx_dring_info()
170 vsw_create_rx_dring(vsw_ldc_t *ldcp) in vsw_create_rx_dring() argument
172 vsw_t *vswp = ldcp->ldc_vswp; in vsw_create_rx_dring()
178 ldcp->lane_out.dringp = dp; in vsw_create_rx_dring()
184 "failed", ldcp->ldc_id); in vsw_create_rx_dring()
193 ldcp->ldc_id); in vsw_create_rx_dring()
215 if (vsw_setup_rx_dring(ldcp, dp)) { in vsw_create_rx_dring()
224 if ((ldc_mem_dring_bind(ldcp->ldc_handle, dp->dring_handle, in vsw_create_rx_dring()
228 "%lld", ldcp->ldc_id); in vsw_create_rx_dring()
239 vsw_destroy_rx_dring(ldcp); in vsw_create_rx_dring()
248 vsw_setup_rx_dring(vsw_ldc_t *ldcp, dring_info_t *dp) in vsw_setup_rx_dring() argument
257 vsw_t *vswp = ldcp->ldc_vswp; in vsw_setup_rx_dring()
291 rv = ldc_mem_alloc_handle(ldcp->ldc_handle, &dp->data_handle); in vsw_setup_rx_dring()
309 "(rv %d)", name, ldcp->ldc_id, rv); in vsw_setup_rx_dring()
365 vsw_destroy_rx_dring(vsw_ldc_t *ldcp) in vsw_destroy_rx_dring() argument
367 vsw_t *vswp = ldcp->ldc_vswp; in vsw_destroy_rx_dring()
368 lane_t *lp = &ldcp->lane_out; in vsw_destroy_rx_dring()
441 vsw_map_tx_dring(vsw_ldc_t *ldcp, void *pkt) in vsw_map_tx_dring() argument
450 dp = vsw_map_dring_cmn(ldcp, dring_pkt); in vsw_map_tx_dring()
460 ldcp->dringdata_msgid = 0; in vsw_map_tx_dring()
461 ldcp->lane_in.dringp = dp; in vsw_map_tx_dring()
505 vsw_unmap_tx_dring(vsw_ldc_t *ldcp) in vsw_unmap_tx_dring() argument
507 lane_t *lp = &ldcp->lane_in; in vsw_unmap_tx_dring()
549 vsw_ldc_t *ldcp = (vsw_ldc_t *)arg; in vsw_ldc_rcv_worker() local
550 vsw_t *vswp = ldcp->ldc_vswp; in vsw_ldc_rcv_worker()
552 D1(vswp, "%s(%lld):enter\n", __func__, ldcp->ldc_id); in vsw_ldc_rcv_worker()
553 CALLB_CPR_INIT(&cprinfo, &ldcp->rcv_thr_lock, callb_generic_cpr, in vsw_ldc_rcv_worker()
555 mutex_enter(&ldcp->rcv_thr_lock); in vsw_ldc_rcv_worker()
556 while (!(ldcp->rcv_thr_flags & VSW_WTHR_STOP)) { in vsw_ldc_rcv_worker()
563 while (!(ldcp->rcv_thr_flags & in vsw_ldc_rcv_worker()
565 cv_wait(&ldcp->rcv_thr_cv, &ldcp->rcv_thr_lock); in vsw_ldc_rcv_worker()
567 CALLB_CPR_SAFE_END(&cprinfo, &ldcp->rcv_thr_lock) in vsw_ldc_rcv_worker()
572 if (ldcp->rcv_thr_flags & VSW_WTHR_STOP) { in vsw_ldc_rcv_worker()
574 __func__, ldcp->ldc_id); in vsw_ldc_rcv_worker()
577 ldcp->rcv_thr_flags &= ~VSW_WTHR_DATARCVD; in vsw_ldc_rcv_worker()
578 mutex_exit(&ldcp->rcv_thr_lock); in vsw_ldc_rcv_worker()
580 __func__, ldcp->ldc_id); in vsw_ldc_rcv_worker()
581 vsw_ldc_rcv_shm(ldcp); in vsw_ldc_rcv_worker()
582 mutex_enter(&ldcp->rcv_thr_lock); in vsw_ldc_rcv_worker()
589 ldcp->rcv_thr_flags &= ~VSW_WTHR_STOP; in vsw_ldc_rcv_worker()
590 ldcp->rcv_thread = NULL; in vsw_ldc_rcv_worker()
592 D1(vswp, "%s(%lld):exit\n", __func__, ldcp->ldc_id); in vsw_ldc_rcv_worker()
601 vsw_ldc_rcv_shm(vsw_ldc_t *ldcp) in vsw_ldc_rcv_shm() argument
613 vsw_t *vswp = ldcp->ldc_vswp; in vsw_ldc_rcv_shm()
614 lane_t *lp = &ldcp->lane_out; in vsw_ldc_rcv_shm()
619 rv = vsw_receive_packet(ldcp, &mp); in vsw_ldc_rcv_shm()
632 vsw_ldc_t *, ldcp); in vsw_ldc_rcv_shm()
638 VSW_SWITCH_FRAMES(vswp, ldcp, bp, bpt, count, in vsw_ldc_rcv_shm()
667 VSW_SWITCH_FRAMES(vswp, ldcp, bp, bpt, count, in vsw_ldc_rcv_shm()
677 DTRACE_PROBE2(vsw_rx_total_count, vsw_ldc_t *, ldcp, in vsw_ldc_rcv_shm()
680 VSW_SWITCH_FRAMES(vswp, ldcp, bp, bpt, count, in vsw_ldc_rcv_shm()
690 msgp->dring_ident = ldcp->lane_in.dringp->ident; in vsw_ldc_rcv_shm()
691 msgp->tag.vio_sid = ldcp->local_session; in vsw_ldc_rcv_shm()
696 (void) vsw_send_msg_shm(ldcp, (void *)msgp, in vsw_ldc_rcv_shm()
699 ldcp->ldc_stats.dring_data_acks_sent++; in vsw_ldc_rcv_shm()
700 ldcp->ldc_stats.dring_stopped_acks_sent++; in vsw_ldc_rcv_shm()
715 vsw_receive_packet(vsw_ldc_t *ldcp, mblk_t **bp) in vsw_receive_packet() argument
726 vgen_stats_t *statsp = &ldcp->ldc_stats; in vsw_receive_packet()
727 dring_info_t *dp = ldcp->lane_out.dringp; in vsw_receive_packet()
747 (rxdp->nbytes > ldcp->lane_in.mtu) || in vsw_receive_packet()
829 vsw_stop_rcv_thread(vsw_ldc_t *ldcp) in vsw_stop_rcv_thread() argument
832 vsw_t *vswp = ldcp->ldc_vswp; in vsw_stop_rcv_thread()
834 D1(vswp, "%s(%lld):enter\n", __func__, ldcp->ldc_id); in vsw_stop_rcv_thread()
839 mutex_enter(&ldcp->rcv_thr_lock); in vsw_stop_rcv_thread()
840 if (ldcp->rcv_thread != NULL) { in vsw_stop_rcv_thread()
841 tid = ldcp->rcv_thread->t_did; in vsw_stop_rcv_thread()
842 ldcp->rcv_thr_flags |= VSW_WTHR_STOP; in vsw_stop_rcv_thread()
843 cv_signal(&ldcp->rcv_thr_cv); in vsw_stop_rcv_thread()
845 mutex_exit(&ldcp->rcv_thr_lock); in vsw_stop_rcv_thread()
850 D1(vswp, "%s(%lld):exit\n", __func__, ldcp->ldc_id); in vsw_stop_rcv_thread()
854 vsw_dringsend_shm(vsw_ldc_t *ldcp, mblk_t *mp) in vsw_dringsend_shm() argument
873 vgen_stats_t *statsp = &ldcp->ldc_stats; in vsw_dringsend_shm()
874 lane_t *lane_in = &ldcp->lane_in; in vsw_dringsend_shm()
875 lane_t *lane_out = &ldcp->lane_out; in vsw_dringsend_shm()
877 vsw_t *vswp = ldcp->ldc_vswp; in vsw_dringsend_shm()
880 (ldcp->ldc_status != LDC_UP) || (ldcp->ldc_handle == NULL)) { in vsw_dringsend_shm()
882 "packet\n", __func__, ldcp->ldc_id, ldcp->ldc_status, in vsw_dringsend_shm()
890 " channel %d", __func__, ldcp->ldc_id, ldcp->ldc_id); in vsw_dringsend_shm()
905 ldcp->ldc_id, size); in vsw_dringsend_shm()
935 __func__, ldcp->ldc_id); in vsw_dringsend_shm()
1026 msgp->tag.vio_sid = ldcp->local_session; in vsw_dringsend_shm()
1031 rv = vsw_send_msg_shm(ldcp, (void *)msgp, sizeof (*msgp), in vsw_dringsend_shm()
1036 __func__, ldcp->ldc_id); in vsw_dringsend_shm()
1047 vsw_process_conn_evt(ldcp, VSW_CONN_RESET); in vsw_dringsend_shm()
1055 vsw_ldc_t *ldcp = arg; in vsw_process_dringdata_shm() local
1056 vsw_t *vswp = ldcp->ldc_vswp; in vsw_process_dringdata_shm()
1061 D2(vswp, "%s(%lld): VIO_SUBTYPE_INFO", __func__, ldcp->ldc_id); in vsw_process_dringdata_shm()
1062 vsw_process_dringdata_info_shm(ldcp, dring_pkt); in vsw_process_dringdata_shm()
1066 D2(vswp, "%s(%lld): VIO_SUBTYPE_ACK", __func__, ldcp->ldc_id); in vsw_process_dringdata_shm()
1067 vsw_process_dringdata_ack_shm(ldcp, dring_pkt); in vsw_process_dringdata_shm()
1072 __func__, ldcp->ldc_id); in vsw_process_dringdata_shm()
1077 vsw_process_conn_evt(ldcp, VSW_CONN_RESTART); in vsw_process_dringdata_shm()
1082 ldcp->ldc_id, dring_pkt->tag.vio_subtype); in vsw_process_dringdata_shm()
1087 vsw_process_dringdata_info_shm(vsw_ldc_t *ldcp, vio_dring_msg_t *msg) in vsw_process_dringdata_info_shm() argument
1089 dring_info_t *dp = ldcp->lane_in.dringp; in vsw_process_dringdata_info_shm()
1090 vsw_t *vswp = ldcp->ldc_vswp; in vsw_process_dringdata_info_shm()
1091 vgen_stats_t *statsp = &ldcp->ldc_stats; in vsw_process_dringdata_info_shm()
1096 __func__, ldcp->ldc_id, msg->dring_ident); in vsw_process_dringdata_info_shm()
1105 ASSERT(MUTEX_HELD(&ldcp->ldc_cblock)); in vsw_process_dringdata_info_shm()
1106 mutex_exit(&ldcp->ldc_cblock); in vsw_process_dringdata_info_shm()
1107 mutex_enter(&ldcp->rcv_thr_lock); in vsw_process_dringdata_info_shm()
1108 if (!(ldcp->rcv_thr_flags & VSW_WTHR_DATARCVD)) { in vsw_process_dringdata_info_shm()
1109 ldcp->rcv_thr_flags |= VSW_WTHR_DATARCVD; in vsw_process_dringdata_info_shm()
1110 cv_signal(&ldcp->rcv_thr_cv); in vsw_process_dringdata_info_shm()
1112 mutex_exit(&ldcp->rcv_thr_lock); in vsw_process_dringdata_info_shm()
1113 mutex_enter(&ldcp->ldc_cblock); in vsw_process_dringdata_info_shm()
1117 vsw_process_dringdata_ack_shm(vsw_ldc_t *ldcp, vio_dring_msg_t *msg) in vsw_process_dringdata_ack_shm() argument
1128 vsw_t *vswp = ldcp->ldc_vswp; in vsw_process_dringdata_ack_shm()
1129 vgen_stats_t *statsp = &ldcp->ldc_stats; in vsw_process_dringdata_ack_shm()
1131 dp = ldcp->lane_in.dringp; in vsw_process_dringdata_ack_shm()
1145 __func__, ldcp->ldc_id, start, end); in vsw_process_dringdata_ack_shm()
1150 if (msg->dring_ident != ldcp->lane_out.dringp->ident) { in vsw_process_dringdata_ack_shm()
1153 __func__, ldcp->ldc_id, msg->dring_ident); in vsw_process_dringdata_ack_shm()
1225 msg->tag.vio_sid = ldcp->local_session; in vsw_process_dringdata_ack_shm()
1226 msg->dring_ident = ldcp->lane_out.dringp->ident; in vsw_process_dringdata_ack_shm()
1229 rv = vsw_send_msg_shm(ldcp, (void *)msg, in vsw_process_dringdata_ack_shm()
1239 vsw_process_conn_evt(ldcp, VSW_CONN_RESET); in vsw_process_dringdata_ack_shm()
1247 vsw_send_msg_shm(vsw_ldc_t *ldcp, void *msgp, int size, boolean_t handle_reset) in vsw_send_msg_shm() argument
1252 vsw_t *vswp = ldcp->ldc_vswp; in vsw_send_msg_shm()
1256 ldcp->ldc_id, size); in vsw_send_msg_shm()
1258 dmsg->seq_num = atomic_inc_32_nv(&ldcp->dringdata_msgid); in vsw_send_msg_shm()
1262 rv = ldc_write(ldcp->ldc_handle, (caddr_t)msgp, &msglen); in vsw_send_msg_shm()
1268 ldcp->ldc_id, rv, size, msglen); in vsw_send_msg_shm()
1269 ldcp->ldc_stats.oerrors++; in vsw_send_msg_shm()
1278 DWARN(vswp, "%s (%lld) channel reset", __func__, ldcp->ldc_id); in vsw_send_msg_shm()
1281 vsw_process_conn_evt(ldcp, VSW_CONN_RESET); in vsw_send_msg_shm()