Lines Matching refs:ldcp

59 int vsw_setup_tx_dring(vsw_ldc_t *ldcp, dring_info_t *dp);
60 void vsw_destroy_tx_dring(vsw_ldc_t *ldcp);
61 dring_info_t *vsw_map_rx_dring(vsw_ldc_t *ldcp, void *pkt);
62 void vsw_unmap_rx_dring(vsw_ldc_t *ldcp);
65 void vsw_stop_msg_thread(vsw_ldc_t *ldcp);
72 static int vsw_init_multipools(vsw_ldc_t *ldcp, vsw_t *vswp);
78 extern dring_info_t *vsw_map_dring_cmn(vsw_ldc_t *ldcp,
101 #define SND_DRING_NACK(ldcp, pkt) \
103 pkt->tag.vio_sid = ldcp->local_session; \
104 (void) vsw_send_msg(ldcp, (void *)pkt, \
108 vsw_create_tx_dring_info(vsw_ldc_t *ldcp)
112 vsw_t *vswp = ldcp->ldc_vswp;
120 if ((dp = vsw_create_tx_dring(ldcp)) == NULL)
128 mp->tag.vio_sid = ldcp->local_session;
149 vsw_create_tx_dring(vsw_ldc_t *ldcp)
151 vsw_t *vswp = ldcp->ldc_vswp;
158 ldcp->lane_out.dringp = dp;
165 "failed", ldcp->ldc_id);
175 ldcp->ldc_id);
193 if (vsw_setup_tx_dring(ldcp, dp)) {
199 if ((ldc_mem_dring_bind(ldcp->ldc_handle, dp->dring_handle,
203 "%lld", ldcp->ldc_id);
215 vsw_destroy_tx_dring(ldcp);
224 vsw_setup_tx_dring(vsw_ldc_t *ldcp, dring_info_t *dp)
228 vsw_t *vswp = ldcp->ldc_vswp;
292 if ((ldc_mem_alloc_handle(ldcp->ldc_handle,
306 "(rv %d)", name, ldcp->ldc_id, rv);
318 name, ldcp->ldc_id, ncookies, VSW_RING_EL_DATA_SZ);
376 vsw_destroy_tx_dring(vsw_ldc_t *ldcp)
380 lane_t *lp = &ldcp->lane_out;
449 vsw_map_rx_dring(vsw_ldc_t *ldcp, void *pkt)
454 vsw_t *vswp = ldcp->ldc_vswp;
456 dp = vsw_map_dring_cmn(ldcp, dring_pkt);
463 ldcp->lane_in.dringp = dp;
466 rv = vsw_init_multipools(ldcp, vswp);
474 " channel %ld (rv %d)", __func__, ldcp->ldc_id, rv);
484 vsw_unmap_rx_dring(vsw_ldc_t *ldcp)
487 vsw_t *vswp = ldcp->ldc_vswp;
488 lane_t *lp = &ldcp->lane_in;
502 vio_destroy_multipools(&ldcp->vmp, &fvmp);
516 vsw_init_multipools(vsw_ldc_t *ldcp, vsw_t *vswp)
544 ldcp->max_rxpool_size = sz3;
545 rv = vio_init_multipools(&ldcp->vmp,
551 ldcp->max_rxpool_size = sz4;
552 rv = vio_init_multipools(&ldcp->vmp,
574 ldcp->max_rxpool_size = sz3;
576 rv = vio_init_multipools(&ldcp->vmp, VSW_NUM_VMPOOLS,
591 ldcp->max_rxpool_size = sz4;
593 rv = vio_init_multipools(&ldcp->vmp, VSW_NUM_VMPOOLS + 1,
605 ldcp->max_rxpool_size = sz4;
607 rv = vio_init_multipools(&ldcp->vmp, VSW_NUM_VMPOOLS + 1,
627 vsw_send_msg(vsw_ldc_t *ldcp, void *msgp, int size, boolean_t handle_reset)
632 vsw_t *vswp = ldcp->ldc_vswp;
640 ldcp->ldc_id, size);
646 mutex_enter(&ldcp->ldc_txlock);
651 dmsg->seq_num = ldcp->lane_out.seq_num;
655 rmsg->seq_num = ldcp->lane_out.seq_num;
659 imsg->hdr.seq_num = ldcp->lane_out.seq_num;
666 rv = ldc_write(ldcp->ldc_handle, (caddr_t)msgp, &msglen);
670 ldcp->lane_out.seq_num++;
675 "size (%d) msglen(%d)\n", ldcp->ldc_id, rv, size, msglen);
676 ldcp->ldc_stats.oerrors++;
679 mutex_exit(&ldcp->ldc_txlock);
687 DWARN(vswp, "%s (%lld) channel reset", __func__, ldcp->ldc_id);
690 vsw_process_conn_evt(ldcp, VSW_CONN_RESET);
705 vsw_ldc_t *ldcp = (vsw_ldc_t *)arg;
706 vsw_t *vswp = ldcp->ldc_vswp;
708 D1(vswp, "%s(%lld):enter\n", __func__, ldcp->ldc_id);
709 CALLB_CPR_INIT(&cprinfo, &ldcp->msg_thr_lock, callb_generic_cpr,
711 mutex_enter(&ldcp->msg_thr_lock);
712 while (!(ldcp->msg_thr_flags & VSW_WTHR_STOP)) {
719 while (!(ldcp->msg_thr_flags &
721 cv_wait(&ldcp->msg_thr_cv, &ldcp->msg_thr_lock);
723 CALLB_CPR_SAFE_END(&cprinfo, &ldcp->msg_thr_lock)
728 if (ldcp->msg_thr_flags & VSW_WTHR_STOP) {
730 __func__, ldcp->ldc_id);
733 ldcp->msg_thr_flags &= ~VSW_WTHR_DATARCVD;
734 mutex_exit(&ldcp->msg_thr_lock);
736 __func__, ldcp->ldc_id);
737 mutex_enter(&ldcp->ldc_cblock);
738 vsw_process_pkt(ldcp);
739 mutex_exit(&ldcp->ldc_cblock);
740 mutex_enter(&ldcp->msg_thr_lock);
747 ldcp->msg_thr_flags &= ~VSW_WTHR_STOP;
748 ldcp->msg_thread = NULL;
750 D1(vswp, "%s(%lld):exit\n", __func__, ldcp->ldc_id);
756 vsw_stop_msg_thread(vsw_ldc_t *ldcp)
759 vsw_t *vswp = ldcp->ldc_vswp;
761 D1(vswp, "%s(%lld):enter\n", __func__, ldcp->ldc_id);
766 mutex_enter(&ldcp->msg_thr_lock);
767 if (ldcp->msg_thread != NULL) {
768 tid = ldcp->msg_thread->t_did;
769 ldcp->msg_thr_flags |= VSW_WTHR_STOP;
770 cv_signal(&ldcp->msg_thr_cv);
772 mutex_exit(&ldcp->msg_thr_lock);
777 D1(vswp, "%s(%lld):exit\n", __func__, ldcp->ldc_id);
784 vsw_dringsend(vsw_ldc_t *ldcp, mblk_t *mp)
790 vsw_t *vswp = ldcp->ldc_vswp;
797 lane_t *lp = &ldcp->lane_out;
799 D1(vswp, "%s(%lld): enter\n", __func__, ldcp->ldc_id);
802 if ((!(ldcp->lane_out.lstate & VSW_LANE_ACTIVE)) ||
803 (ldcp->ldc_status != LDC_UP) || (ldcp->ldc_handle == NULL)) {
805 "packet\n", __func__, ldcp->ldc_id, ldcp->ldc_status,
806 ldcp->lane_out.lstate);
807 ldcp->ldc_stats.oerrors++;
811 if ((dp = ldcp->lane_out.dringp) == NULL) {
813 " channel %d", __func__, ldcp->ldc_id, ldcp->ldc_id);
814 ldcp->ldc_stats.oerrors++;
821 ldcp->ldc_id, size);
822 ldcp->ldc_stats.oerrors++;
835 "at 0x%llx", __func__, ldcp->ldc_id, dp);
839 ldcp->ldc_stats.tx_no_desc++;
843 "addr 0x%llx\n", __func__, ldcp->ldc_id, idx, priv_desc);
862 ldcp->ldc_stats.brdcstxmt++;
864 ldcp->ldc_stats.multixmt++;
865 ldcp->ldc_stats.opackets++;
866 ldcp->ldc_stats.obytes += priv_desc->datalen;
879 ldcp->ldc_stats.dring_data_msgs_sent++;
889 dring_pkt.tag.vio_sid = ldcp->local_session;
910 ldcp->ldc_id, dp, dring_pkt.dring_ident);
912 __func__, ldcp->ldc_id, dring_pkt.start_idx,
915 (void) vsw_send_msg(ldcp, (void *)&dring_pkt,
923 ldcp->ldc_id, idx);
928 D1(vswp, "%s(%lld): exit\n", __func__, ldcp->ldc_id);
1022 vsw_ldc_t *ldcp = arg;
1027 vsw_t *vswp = ldcp->ldc_vswp;
1042 lane_t *lp = &ldcp->lane_out;
1044 D1(vswp, "%s(%lld): enter", __func__, ldcp->ldc_id);
1060 D2(vswp, "%s(%lld): VIO_SUBTYPE_INFO", __func__, ldcp->ldc_id);
1062 dp = ldcp->lane_in.dringp;
1065 "ident 0x%llx", __func__, ldcp->ldc_id,
1068 SND_DRING_NACK(ldcp, dring_pkt);
1072 ldcp->ldc_stats.dring_data_msgs_rcvd++;
1081 __func__, ldcp->ldc_id, start, end);
1092 ldcp->ldc_id, end, len);
1094 SND_DRING_NACK(ldcp, dring_pkt);
1099 __func__, ldcp->ldc_id, end);
1100 SND_DRING_NACK(ldcp, dring_pkt);
1113 __func__, pos, ldcp->ldc_id, rng_rv);
1114 ldcp->ldc_stats.ierrors++;
1138 "(%d)", __func__, ldcp->ldc_id,
1140 SND_DRING_NACK(ldcp, dring_pkt);
1157 "%d", __func__, ldcp->ldc_id, range_start);
1164 __func__, ldcp->ldc_id, pos, &desc,
1170 ldcp->ldc_stats.ierrors++;
1181 if (nbytes > ldcp->max_rxpool_size) {
1186 vmp = vio_multipool_allocb(&ldcp->vmp, nbytes);
1188 ldcp->ldc_stats.rx_vio_allocb_fail++;
1205 __func__, ldcp->ldc_id);
1209 ldcp->ldc_stats.ierrors++;
1210 ldcp->ldc_stats.rx_allocb_fail++;
1214 rv = ldc_mem_copy(ldcp->ldc_handle,
1220 __func__, ldcp->ldc_id, desc.ncookies,
1227 ldcp->ldc_stats.ierrors++;
1232 ldcp->ldc_id, nbytes, desc.ncookies);
1248 ldcp->ldc_stats.brdcstrcv++;
1250 ldcp->ldc_stats.multircv++;
1252 ldcp->ldc_stats.ipackets++;
1253 ldcp->ldc_stats.rbytes += desc.nbytes;
1258 (void) vsw_vlan_frame_pretag(ldcp->ldc_port,
1282 __func__, pos, ldcp->ldc_id, rng_rv);
1283 ldcp->ldc_stats.ierrors++;
1295 " requested", __func__, ldcp->ldc_id,
1300 dring_pkt->tag.vio_sid = ldcp->local_session;
1302 msg_rv = vsw_send_msg(ldcp, (void *)dring_pkt,
1327 "msgs", __func__, ldcp->ldc_id, chain);
1336 __func__, ldcp->ldc_id, chain);
1338 ldcp->ldc_port, NULL);
1346 vsw_process_conn_evt(ldcp, VSW_CONN_RESTART);
1355 vsw_process_conn_evt(ldcp, VSW_CONN_RESET);
1366 dring_pkt->tag.vio_sid = ldcp->local_session;
1383 __func__, ldcp->ldc_id, dring_pkt->start_idx,
1386 (void) vsw_send_msg(ldcp, (void *)dring_pkt,
1388 ldcp->ldc_stats.dring_data_acks_sent++;
1389 ldcp->ldc_stats.dring_stopped_acks_sent++;
1393 D2(vswp, "%s(%lld): VIO_SUBTYPE_ACK", __func__, ldcp->ldc_id);
1398 dp = ldcp->lane_out.dringp;
1412 ldcp->ldc_stats.dring_data_acks_rcvd++;
1426 __func__, ldcp->ldc_id, dring_pkt->start_idx,
1446 ldcp->ldc_stats.dring_stopped_acks_rcvd++;
1453 dring_pkt->tag.vio_sid = ldcp->local_session;
1459 " %d : %d", __func__, ldcp->ldc_id,
1462 msg_rv = vsw_send_msg(ldcp, (void *)dring_pkt,
1464 ldcp->ldc_stats.dring_data_msgs_sent++;
1474 vsw_process_conn_evt(ldcp, VSW_CONN_RESET);
1480 __func__, ldcp->ldc_id);
1485 vsw_process_conn_evt(ldcp, VSW_CONN_RESTART);
1491 ldcp->ldc_id, dring_pkt->tag.vio_subtype);
1494 D1(vswp, "%s(%lld) exit", __func__, ldcp->ldc_id);