Lines Matching +full:vm +full:- +full:active +full:- +full:channels

1 // SPDX-License-Identifier: GPL-2.0
126 [CH_XID7_PENDING1] = "Active XID7 P1 Exchange ",
128 [CH_XID7_PENDING3] = "Active XID7 P2 Exchange ",
129 [CH_XID7_PENDING4] = "XID7 Complete - Pending READY ",
135 * ----- static ctcm actions for channel statemachine -----
158 * ----- static ctcmpc actions for ctcmpc channel statemachine -----
195 CTCM_FUNTAIL, ch->id, msg, rc); in ctcm_ccw_check_rc()
197 case -EBUSY: in ctcm_ccw_check_rc()
199 ch->id); in ctcm_ccw_check_rc()
200 fsm_event(ch->fsm, CTC_EVENT_IO_EBUSY, ch); in ctcm_ccw_check_rc()
202 case -ENODEV: in ctcm_ccw_check_rc()
204 ch->id); in ctcm_ccw_check_rc()
205 fsm_event(ch->fsm, CTC_EVENT_IO_ENODEV, ch); in ctcm_ccw_check_rc()
210 fsm_event(ch->fsm, CTC_EVENT_IO_UNKNOWN, ch); in ctcm_ccw_check_rc()
221 refcount_dec(&skb->users); in ctcm_purge_skb_queue()
234 * Actions for channel - statemachines.
239 * skb (it's in io_queue), reset dev->tbusy and
249 struct net_device *dev = ch->netdev; in chx_txdone()
250 struct ctcm_priv *priv = dev->ml_priv; in chx_txdone()
257 CTCM_PR_DEBUG("%s(%s): %s\n", __func__, ch->id, dev->name); in chx_txdone()
259 duration = done_stamp - ch->prof.send_stamp; in chx_txdone()
260 if (duration > ch->prof.tx_time) in chx_txdone()
261 ch->prof.tx_time = duration; in chx_txdone()
263 if (ch->irb->scsw.cmd.count != 0) in chx_txdone()
266 CTCM_FUNTAIL, dev->name, ch->irb->scsw.cmd.count); in chx_txdone()
267 fsm_deltimer(&ch->timer); in chx_txdone()
268 while ((skb = skb_dequeue(&ch->io_queue))) { in chx_txdone()
269 priv->stats.tx_packets++; in chx_txdone()
270 priv->stats.tx_bytes += skb->len - LL_HEADER_LENGTH; in chx_txdone()
272 priv->stats.tx_bytes += 2; in chx_txdone()
275 refcount_dec(&skb->users); in chx_txdone()
278 spin_lock(&ch->collect_lock); in chx_txdone()
279 clear_normalized_cda(&ch->ccw[4]); in chx_txdone()
280 if (ch->collect_len > 0) { in chx_txdone()
284 spin_unlock(&ch->collect_lock); in chx_txdone()
287 ch->trans_skb->data = ch->trans_skb_data; in chx_txdone()
288 skb_reset_tail_pointer(ch->trans_skb); in chx_txdone()
289 ch->trans_skb->len = 0; in chx_txdone()
290 if (ch->prof.maxmulti < (ch->collect_len + 2)) in chx_txdone()
291 ch->prof.maxmulti = ch->collect_len + 2; in chx_txdone()
292 if (ch->prof.maxcqueue < skb_queue_len(&ch->collect_queue)) in chx_txdone()
293 ch->prof.maxcqueue = skb_queue_len(&ch->collect_queue); in chx_txdone()
294 *((__u16 *)skb_put(ch->trans_skb, 2)) = ch->collect_len + 2; in chx_txdone()
296 while ((skb = skb_dequeue(&ch->collect_queue))) { in chx_txdone()
298 skb_put(ch->trans_skb, skb->len), skb->len); in chx_txdone()
299 priv->stats.tx_packets++; in chx_txdone()
300 priv->stats.tx_bytes += skb->len - LL_HEADER_LENGTH; in chx_txdone()
301 refcount_dec(&skb->users); in chx_txdone()
305 ch->collect_len = 0; in chx_txdone()
306 spin_unlock(&ch->collect_lock); in chx_txdone()
307 ch->ccw[1].count = ch->trans_skb->len; in chx_txdone()
308 fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); in chx_txdone()
309 ch->prof.send_stamp = jiffies; in chx_txdone()
310 rc = ccw_device_start(ch->cdev, &ch->ccw[0], 0, 0xff, 0); in chx_txdone()
311 ch->prof.doios_multi++; in chx_txdone()
313 priv->stats.tx_dropped += i; in chx_txdone()
314 priv->stats.tx_errors += i; in chx_txdone()
315 fsm_deltimer(&ch->timer); in chx_txdone()
319 spin_unlock(&ch->collect_lock); in chx_txdone()
337 struct net_device *dev = ch->netdev; in ctcm_chx_txidle()
338 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_txidle()
340 CTCM_PR_DEBUG("%s(%s): %s\n", __func__, ch->id, dev->name); in ctcm_chx_txidle()
342 fsm_deltimer(&ch->timer); in ctcm_chx_txidle()
344 fsm_event(priv->fsm, DEV_EVENT_TXUP, ch->netdev); in ctcm_chx_txidle()
358 struct net_device *dev = ch->netdev; in chx_rx()
359 struct ctcm_priv *priv = dev->ml_priv; in chx_rx()
360 int len = ch->max_bufsize - ch->irb->scsw.cmd.count; in chx_rx()
361 struct sk_buff *skb = ch->trans_skb; in chx_rx()
362 __u16 block_len = *((__u16 *)skb->data); in chx_rx()
366 fsm_deltimer(&ch->timer); in chx_rx()
370 CTCM_FUNTAIL, dev->name, len); in chx_rx()
371 priv->stats.rx_dropped++; in chx_rx()
372 priv->stats.rx_length_errors++; in chx_rx()
375 if (len > ch->max_bufsize) { in chx_rx()
378 CTCM_FUNTAIL, dev->name, len, ch->max_bufsize); in chx_rx()
379 priv->stats.rx_dropped++; in chx_rx()
380 priv->stats.rx_length_errors++; in chx_rx()
385 * VM TCP seems to have a bug sending 2 trailing bytes of garbage. in chx_rx()
387 switch (ch->protocol) { in chx_rx()
399 CTCM_FUNTAIL, dev->name, block_len, len); in chx_rx()
403 *((__u16 *)skb->data) = len; in chx_rx()
404 priv->stats.rx_dropped++; in chx_rx()
405 priv->stats.rx_length_errors++; in chx_rx()
409 *((__u16 *)skb->data) = block_len - 2; in chx_rx()
413 skb->data = ch->trans_skb_data; in chx_rx()
415 skb->len = 0; in chx_rx()
418 ch->ccw[1].count = ch->max_bufsize; in chx_rx()
419 rc = ccw_device_start(ch->cdev, &ch->ccw[0], 0, 0xff, 0); in chx_rx()
439 CTCM_FUNTAIL, ch->id, fsmstate); in chx_firstio()
441 ch->sense_rc = 0; /* reset unit check report control */ in chx_firstio()
445 CTCM_FUNTAIL, ch->id); in chx_firstio()
446 fsm_deltimer(&ch->timer); in chx_firstio()
450 (ch->protocol == CTCM_PROTO_OS390)) { in chx_firstio()
452 if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { in chx_firstio()
453 *((__u16 *)ch->trans_skb->data) = CTCM_INITIAL_BLOCKLEN; in chx_firstio()
454 fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, in chx_firstio()
458 struct net_device *dev = ch->netdev; in chx_firstio()
459 struct ctcm_priv *priv = dev->ml_priv; in chx_firstio()
461 fsm_event(priv->fsm, DEV_EVENT_TXUP, dev); in chx_firstio()
467 * if in compatibility mode, since VM TCP delays the initial in chx_firstio()
470 if ((CHANNEL_DIRECTION(ch->flags) == CTCM_WRITE) || in chx_firstio()
471 (ch->protocol != CTCM_PROTO_S390)) in chx_firstio()
472 fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); in chx_firstio()
474 *((__u16 *)ch->trans_skb->data) = CTCM_INITIAL_BLOCKLEN; in chx_firstio()
475 ch->ccw[1].count = 2; /* Transfer only length */ in chx_firstio()
477 fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) in chx_firstio()
479 rc = ccw_device_start(ch->cdev, &ch->ccw[0], 0, 0xff, 0); in chx_firstio()
481 fsm_deltimer(&ch->timer); in chx_firstio()
489 * reply from VM TCP which brings up the RX channel to it's in chx_firstio()
492 if ((CHANNEL_DIRECTION(ch->flags) == CTCM_READ) && in chx_firstio()
493 (ch->protocol == CTCM_PROTO_S390)) { in chx_firstio()
494 struct net_device *dev = ch->netdev; in chx_firstio()
495 struct ctcm_priv *priv = dev->ml_priv; in chx_firstio()
496 fsm_event(priv->fsm, DEV_EVENT_RXUP, dev); in chx_firstio()
512 struct net_device *dev = ch->netdev; in chx_rxidle()
513 struct ctcm_priv *priv = dev->ml_priv; in chx_rxidle()
517 fsm_deltimer(&ch->timer); in chx_rxidle()
518 buflen = *((__u16 *)ch->trans_skb->data); in chx_rxidle()
520 __func__, dev->name, buflen); in chx_rxidle()
525 ch->ccw[1].count = ch->max_bufsize; in chx_rxidle()
527 rc = ccw_device_start(ch->cdev, &ch->ccw[0], 0, 0xff, 0); in chx_rxidle()
532 fsm_event(priv->fsm, DEV_EVENT_RXUP, dev); in chx_rxidle()
535 __func__, dev->name, in chx_rxidle()
555 fsm_deltimer(&ch->timer); in ctcm_chx_setmode()
559 __func__, smp_processor_id(), ch, ch->id); in ctcm_chx_setmode()
561 fsm_addtimer(&ch->timer, timeout, CTC_EVENT_TIMER, ch); in ctcm_chx_setmode()
563 CTCM_CCW_DUMP((char *)&ch->ccw[6], sizeof(struct ccw1) * 2); in ctcm_chx_setmode()
566 spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_setmode()
570 rc = ccw_device_start(ch->cdev, &ch->ccw[6], 0, 0xff, 0); in ctcm_chx_setmode()
572 spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_setmode()
574 fsm_deltimer(&ch->timer); in ctcm_chx_setmode()
578 ch->retry = 0; in ctcm_chx_setmode()
595 CTCM_FUNTAIL, ch->id, in ctcm_chx_start()
596 (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? "RX" : "TX"); in ctcm_chx_start()
598 if (ch->trans_skb != NULL) { in ctcm_chx_start()
599 clear_normalized_cda(&ch->ccw[1]); in ctcm_chx_start()
600 dev_kfree_skb(ch->trans_skb); in ctcm_chx_start()
601 ch->trans_skb = NULL; in ctcm_chx_start()
603 if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { in ctcm_chx_start()
604 ch->ccw[1].cmd_code = CCW_CMD_READ; in ctcm_chx_start()
605 ch->ccw[1].flags = CCW_FLAG_SLI; in ctcm_chx_start()
606 ch->ccw[1].count = 0; in ctcm_chx_start()
608 ch->ccw[1].cmd_code = CCW_CMD_WRITE; in ctcm_chx_start()
609 ch->ccw[1].flags = CCW_FLAG_SLI | CCW_FLAG_CC; in ctcm_chx_start()
610 ch->ccw[1].count = 0; in ctcm_chx_start()
616 CTCM_FUNTAIL, ch->id, in ctcm_chx_start()
617 (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? in ctcm_chx_start()
620 ch->ccw[0].cmd_code = CCW_CMD_PREPARE; in ctcm_chx_start()
621 ch->ccw[0].flags = CCW_FLAG_SLI | CCW_FLAG_CC; in ctcm_chx_start()
622 ch->ccw[0].count = 0; in ctcm_chx_start()
623 ch->ccw[0].cda = 0; in ctcm_chx_start()
624 ch->ccw[2].cmd_code = CCW_CMD_NOOP; /* jointed CE + DE */ in ctcm_chx_start()
625 ch->ccw[2].flags = CCW_FLAG_SLI; in ctcm_chx_start()
626 ch->ccw[2].count = 0; in ctcm_chx_start()
627 ch->ccw[2].cda = 0; in ctcm_chx_start()
628 memcpy(&ch->ccw[3], &ch->ccw[0], sizeof(struct ccw1) * 3); in ctcm_chx_start()
629 ch->ccw[4].cda = 0; in ctcm_chx_start()
630 ch->ccw[4].flags &= ~CCW_FLAG_IDA; in ctcm_chx_start()
633 fsm_addtimer(&ch->timer, 1000, CTC_EVENT_TIMER, ch); in ctcm_chx_start()
634 spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_start()
635 rc = ccw_device_halt(ch->cdev, 0); in ctcm_chx_start()
636 spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_start()
638 if (rc != -EBUSY) in ctcm_chx_start()
639 fsm_deltimer(&ch->timer); in ctcm_chx_start()
658 fsm_deltimer(&ch->timer); in ctcm_chx_haltio()
660 fsm_deltimer(&ch->sweep_timer); in ctcm_chx_haltio()
662 fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); in ctcm_chx_haltio()
665 spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_haltio()
670 rc = ccw_device_halt(ch->cdev, 0); in ctcm_chx_haltio()
673 spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_haltio()
676 if (rc != 0 && rc != -EBUSY) { in ctcm_chx_haltio()
677 fsm_deltimer(&ch->timer); in ctcm_chx_haltio()
687 * cleanup channels queue and notify interface statemachine.
696 struct net_device *dev = ch->netdev; in ctcm_chx_cleanup()
697 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_cleanup()
701 CTCM_FUNTAIL, dev->name, ch->id, state); in ctcm_chx_cleanup()
703 fsm_deltimer(&ch->timer); in ctcm_chx_cleanup()
705 fsm_deltimer(&ch->sweep_timer); in ctcm_chx_cleanup()
708 if (state == CTC_STATE_STOPPED && ch->trans_skb != NULL) { in ctcm_chx_cleanup()
709 clear_normalized_cda(&ch->ccw[1]); in ctcm_chx_cleanup()
710 dev_kfree_skb_any(ch->trans_skb); in ctcm_chx_cleanup()
711 ch->trans_skb = NULL; in ctcm_chx_cleanup()
714 ch->th_seg = 0x00; in ctcm_chx_cleanup()
715 ch->th_seq_num = 0x00; in ctcm_chx_cleanup()
716 if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { in ctcm_chx_cleanup()
717 skb_queue_purge(&ch->io_queue); in ctcm_chx_cleanup()
718 fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); in ctcm_chx_cleanup()
720 ctcm_purge_skb_queue(&ch->io_queue); in ctcm_chx_cleanup()
722 ctcm_purge_skb_queue(&ch->sweep_queue); in ctcm_chx_cleanup()
723 spin_lock(&ch->collect_lock); in ctcm_chx_cleanup()
724 ctcm_purge_skb_queue(&ch->collect_queue); in ctcm_chx_cleanup()
725 ch->collect_len = 0; in ctcm_chx_cleanup()
726 spin_unlock(&ch->collect_lock); in ctcm_chx_cleanup()
727 fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); in ctcm_chx_cleanup()
781 struct net_device *dev = ch->netdev; in ctcm_chx_setuperr()
782 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_setuperr()
793 fsm_deltimer(&ch->timer); in ctcm_chx_setuperr()
794 fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); in ctcm_chx_setuperr()
796 (CHANNEL_DIRECTION(ch->flags) == CTCM_READ)) { in ctcm_chx_setuperr()
797 int rc = ccw_device_halt(ch->cdev, 0); in ctcm_chx_setuperr()
807 CTCM_FUNTAIL, dev->name, ctc_ch_event_names[event], in ctcm_chx_setuperr()
808 (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? "RX" : "TX", in ctcm_chx_setuperr()
811 if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { in ctcm_chx_setuperr()
813 fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); in ctcm_chx_setuperr()
816 fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); in ctcm_chx_setuperr()
830 struct net_device *dev = ch->netdev; in ctcm_chx_restart()
837 CTCM_FUNTAIL, ch->id, event, dev->name); in ctcm_chx_restart()
839 fsm_deltimer(&ch->timer); in ctcm_chx_restart()
841 fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); in ctcm_chx_restart()
845 spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_restart()
849 rc = ccw_device_halt(ch->cdev, 0); in ctcm_chx_restart()
851 spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_restart()
853 if (rc != -EBUSY) { in ctcm_chx_restart()
854 fsm_deltimer(&ch->timer); in ctcm_chx_restart()
863 * 0-length block header)
872 struct net_device *dev = ch->netdev; in ctcm_chx_rxiniterr()
873 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_rxiniterr()
878 fsm_deltimer(&ch->timer); in ctcm_chx_rxiniterr()
879 if (ch->retry++ < 3) in ctcm_chx_rxiniterr()
883 fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); in ctcm_chx_rxiniterr()
887 "%s(%s): %s in %s", CTCM_FUNTAIL, ch->id, in ctcm_chx_rxiniterr()
890 dev_warn(&dev->dev, in ctcm_chx_rxiniterr()
907 struct net_device *dev = ch->netdev; in ctcm_chx_rxinitfail()
908 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_rxinitfail()
912 CTCM_FUNTAIL, dev->name, ch->id); in ctcm_chx_rxinitfail()
914 fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); in ctcm_chx_rxinitfail()
928 struct net_device *dev = ch->netdev; in ctcm_chx_rxdisc()
929 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_rxdisc()
932 "%s: %s: remote disconnect - re-init ...", in ctcm_chx_rxdisc()
933 CTCM_FUNTAIL, dev->name); in ctcm_chx_rxdisc()
934 fsm_deltimer(&ch->timer); in ctcm_chx_rxdisc()
938 fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); in ctcm_chx_rxdisc()
939 fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); in ctcm_chx_rxdisc()
942 ch2 = priv->channel[CTCM_WRITE]; in ctcm_chx_rxdisc()
943 fsm_newstate(ch2->fsm, CTC_STATE_DTERM); in ctcm_chx_rxdisc()
945 ccw_device_halt(ch->cdev, 0); in ctcm_chx_rxdisc()
946 ccw_device_halt(ch2->cdev, 0); in ctcm_chx_rxdisc()
959 struct net_device *dev = ch->netdev; in ctcm_chx_txiniterr()
960 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_txiniterr()
963 fsm_deltimer(&ch->timer); in ctcm_chx_txiniterr()
964 if (ch->retry++ < 3) in ctcm_chx_txiniterr()
968 fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); in ctcm_chx_txiniterr()
972 "%s(%s): %s in %s", CTCM_FUNTAIL, ch->id, in ctcm_chx_txiniterr()
975 dev_warn(&dev->dev, in ctcm_chx_txiniterr()
991 struct net_device *dev = ch->netdev; in ctcm_chx_txretry()
992 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_txretry()
996 __func__, smp_processor_id(), ch, ch->id); in ctcm_chx_txretry()
998 fsm_deltimer(&ch->timer); in ctcm_chx_txretry()
999 if (ch->retry++ > 3) { in ctcm_chx_txretry()
1000 struct mpc_group *gptr = priv->mpcg; in ctcm_chx_txretry()
1003 CTCM_FUNTAIL, ch->id); in ctcm_chx_txretry()
1004 fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); in ctcm_chx_txretry()
1007 if (!(gptr && (fsm_getstate(gptr->fsm) != MPCG_STATE_READY))) in ctcm_chx_txretry()
1014 CTCM_FUNTAIL, ch->id, ch->retry); in ctcm_chx_txretry()
1015 skb = skb_peek(&ch->io_queue); in ctcm_chx_txretry()
1019 clear_normalized_cda(&ch->ccw[4]); in ctcm_chx_txretry()
1020 ch->ccw[4].count = skb->len; in ctcm_chx_txretry()
1021 if (set_normalized_cda(&ch->ccw[4], skb->data)) { in ctcm_chx_txretry()
1024 CTCM_FUNTAIL, ch->id); in ctcm_chx_txretry()
1025 fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); in ctcm_chx_txretry()
1029 fsm_addtimer(&ch->timer, 1000, CTC_EVENT_TIMER, ch); in ctcm_chx_txretry()
1031 spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags); in ctcm_chx_txretry()
1036 ctcmpc_dumpit((char *)&ch->ccw[3], in ctcm_chx_txretry()
1039 rc = ccw_device_start(ch->cdev, &ch->ccw[3], 0, 0xff, 0); in ctcm_chx_txretry()
1041 spin_unlock_irqrestore(get_ccwdev_lock(ch->cdev), in ctcm_chx_txretry()
1044 fsm_deltimer(&ch->timer); in ctcm_chx_txretry()
1046 ctcm_purge_skb_queue(&ch->io_queue); in ctcm_chx_txretry()
1063 struct net_device *dev = ch->netdev; in ctcm_chx_iofatal()
1064 struct ctcm_priv *priv = dev->ml_priv; in ctcm_chx_iofatal()
1065 int rd = CHANNEL_DIRECTION(ch->flags); in ctcm_chx_iofatal()
1067 fsm_deltimer(&ch->timer); in ctcm_chx_iofatal()
1070 CTCM_FUNTAIL, ch->id, rd == CTCM_READ ? "RX" : "TX"); in ctcm_chx_iofatal()
1073 priv->stats.tx_dropped++; in ctcm_chx_iofatal()
1074 priv->stats.tx_errors++; in ctcm_chx_iofatal()
1078 fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); in ctcm_chx_iofatal()
1081 fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); in ctcm_chx_iofatal()
1203 * skb (it's in io_queue), reset dev->tbusy and
1213 struct net_device *dev = ch->netdev; in ctcmpc_chx_txdone()
1214 struct ctcm_priv *priv = dev->ml_priv; in ctcmpc_chx_txdone()
1215 struct mpc_group *grp = priv->mpcg; in ctcmpc_chx_txdone()
1228 __func__, dev->name, smp_processor_id()); in ctcmpc_chx_txdone()
1230 duration = done_stamp - ch->prof.send_stamp; in ctcmpc_chx_txdone()
1231 if (duration > ch->prof.tx_time) in ctcmpc_chx_txdone()
1232 ch->prof.tx_time = duration; in ctcmpc_chx_txdone()
1234 if (ch->irb->scsw.cmd.count != 0) in ctcmpc_chx_txdone()
1237 CTCM_FUNTAIL, dev->name, ch->irb->scsw.cmd.count); in ctcmpc_chx_txdone()
1238 fsm_deltimer(&ch->timer); in ctcmpc_chx_txdone()
1239 while ((skb = skb_dequeue(&ch->io_queue))) { in ctcmpc_chx_txdone()
1240 priv->stats.tx_packets++; in ctcmpc_chx_txdone()
1241 priv->stats.tx_bytes += skb->len - TH_HEADER_LENGTH; in ctcmpc_chx_txdone()
1243 priv->stats.tx_bytes += 2; in ctcmpc_chx_txdone()
1246 refcount_dec(&skb->users); in ctcmpc_chx_txdone()
1249 spin_lock(&ch->collect_lock); in ctcmpc_chx_txdone()
1250 clear_normalized_cda(&ch->ccw[4]); in ctcmpc_chx_txdone()
1251 if ((ch->collect_len <= 0) || (grp->in_sweep != 0)) { in ctcmpc_chx_txdone()
1252 spin_unlock(&ch->collect_lock); in ctcmpc_chx_txdone()
1258 spin_unlock(&ch->collect_lock); in ctcmpc_chx_txdone()
1261 ch->trans_skb->data = ch->trans_skb_data; in ctcmpc_chx_txdone()
1262 skb_reset_tail_pointer(ch->trans_skb); in ctcmpc_chx_txdone()
1263 ch->trans_skb->len = 0; in ctcmpc_chx_txdone()
1264 if (ch->prof.maxmulti < (ch->collect_len + TH_HEADER_LENGTH)) in ctcmpc_chx_txdone()
1265 ch->prof.maxmulti = ch->collect_len + TH_HEADER_LENGTH; in ctcmpc_chx_txdone()
1266 if (ch->prof.maxcqueue < skb_queue_len(&ch->collect_queue)) in ctcmpc_chx_txdone()
1267 ch->prof.maxcqueue = skb_queue_len(&ch->collect_queue); in ctcmpc_chx_txdone()
1270 data_space = grp->group_max_buflen - TH_HEADER_LENGTH; in ctcmpc_chx_txdone()
1276 while ((skb = skb_dequeue(&ch->collect_queue))) { in ctcmpc_chx_txdone()
1277 skb_put_data(ch->trans_skb, skb->data, skb->len); in ctcmpc_chx_txdone()
1279 (skb_tail_pointer(ch->trans_skb) - skb->len); in ctcmpc_chx_txdone()
1280 p_header->pdu_flag = 0x00; in ctcmpc_chx_txdone()
1281 if (be16_to_cpu(skb->protocol) == ETH_P_SNAP) in ctcmpc_chx_txdone()
1282 p_header->pdu_flag |= 0x60; in ctcmpc_chx_txdone()
1284 p_header->pdu_flag |= 0x20; in ctcmpc_chx_txdone()
1287 __func__, ch->trans_skb->len); in ctcmpc_chx_txdone()
1290 CTCM_D3_DUMP((char *)p_header, min_t(int, skb->len, 32)); in ctcmpc_chx_txdone()
1292 ch->collect_len -= skb->len; in ctcmpc_chx_txdone()
1293 data_space -= skb->len; in ctcmpc_chx_txdone()
1294 priv->stats.tx_packets++; in ctcmpc_chx_txdone()
1295 priv->stats.tx_bytes += skb->len; in ctcmpc_chx_txdone()
1296 refcount_dec(&skb->users); in ctcmpc_chx_txdone()
1298 peekskb = skb_peek(&ch->collect_queue); in ctcmpc_chx_txdone()
1299 if (peekskb->len > data_space) in ctcmpc_chx_txdone()
1305 p_header->pdu_flag |= PDU_LAST; /*Say it's the last one*/ in ctcmpc_chx_txdone()
1307 header = skb_push(ch->trans_skb, TH_HEADER_LENGTH); in ctcmpc_chx_txdone()
1310 header->th_ch_flag = TH_HAS_PDU; /* Normal data */ in ctcmpc_chx_txdone()
1311 ch->th_seq_num++; in ctcmpc_chx_txdone()
1312 header->th_seq_num = ch->th_seq_num; in ctcmpc_chx_txdone()
1315 __func__, ch->th_seq_num); in ctcmpc_chx_txdone()
1318 __func__, ch->trans_skb->len); in ctcmpc_chx_txdone()
1319 CTCM_PR_DBGDATA("%s: up-to-50 bytes of trans_skb " in ctcmpc_chx_txdone()
1321 CTCM_D3_DUMP((char *)ch->trans_skb->data, in ctcmpc_chx_txdone()
1322 min_t(int, ch->trans_skb->len, 50)); in ctcmpc_chx_txdone()
1324 spin_unlock(&ch->collect_lock); in ctcmpc_chx_txdone()
1325 clear_normalized_cda(&ch->ccw[1]); in ctcmpc_chx_txdone()
1328 (void *)(u64)dma32_to_u32(ch->ccw[1].cda), in ctcmpc_chx_txdone()
1329 ch->trans_skb->data); in ctcmpc_chx_txdone()
1330 ch->ccw[1].count = ch->max_bufsize; in ctcmpc_chx_txdone()
1332 if (set_normalized_cda(&ch->ccw[1], ch->trans_skb->data)) { in ctcmpc_chx_txdone()
1333 dev_kfree_skb_any(ch->trans_skb); in ctcmpc_chx_txdone()
1334 ch->trans_skb = NULL; in ctcmpc_chx_txdone()
1337 CTCM_FUNTAIL, ch->id); in ctcmpc_chx_txdone()
1338 fsm_event(priv->mpcg->fsm, MPCG_EVENT_INOP, dev); in ctcmpc_chx_txdone()
1343 (void *)(u64)dma32_to_u32(ch->ccw[1].cda), in ctcmpc_chx_txdone()
1344 ch->trans_skb->data); in ctcmpc_chx_txdone()
1346 ch->ccw[1].count = ch->trans_skb->len; in ctcmpc_chx_txdone()
1347 fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); in ctcmpc_chx_txdone()
1348 ch->prof.send_stamp = jiffies; in ctcmpc_chx_txdone()
1350 ctcmpc_dumpit((char *)&ch->ccw[0], sizeof(struct ccw1) * 3); in ctcmpc_chx_txdone()
1351 rc = ccw_device_start(ch->cdev, &ch->ccw[0], 0, 0xff, 0); in ctcmpc_chx_txdone()
1352 ch->prof.doios_multi++; in ctcmpc_chx_txdone()
1354 priv->stats.tx_dropped += i; in ctcmpc_chx_txdone()
1355 priv->stats.tx_errors += i; in ctcmpc_chx_txdone()
1356 fsm_deltimer(&ch->timer); in ctcmpc_chx_txdone()
1375 struct net_device *dev = ch->netdev; in ctcmpc_chx_rx()
1376 struct ctcm_priv *priv = dev->ml_priv; in ctcmpc_chx_rx()
1377 struct mpc_group *grp = priv->mpcg; in ctcmpc_chx_rx()
1378 struct sk_buff *skb = ch->trans_skb; in ctcmpc_chx_rx()
1381 int len = ch->max_bufsize - ch->irb->scsw.cmd.count; in ctcmpc_chx_rx()
1384 CTCM_FUNTAIL, dev->name, smp_processor_id(), in ctcmpc_chx_rx()
1385 ch->id, ch->max_bufsize, len); in ctcmpc_chx_rx()
1386 fsm_deltimer(&ch->timer); in ctcmpc_chx_rx()
1391 CTCM_FUNTAIL, dev->name); in ctcmpc_chx_rx()
1398 CTCM_FUNTAIL, dev->name, len); in ctcmpc_chx_rx()
1399 priv->stats.rx_dropped++; in ctcmpc_chx_rx()
1400 priv->stats.rx_length_errors++; in ctcmpc_chx_rx()
1405 new_skb = __dev_alloc_skb(ch->max_bufsize, GFP_ATOMIC); in ctcmpc_chx_rx()
1410 CTCM_FUNTAIL, dev->name); in ctcmpc_chx_rx()
1411 fsm_event(priv->mpcg->fsm, MPCG_EVENT_INOP, dev); in ctcmpc_chx_rx()
1414 switch (fsm_getstate(grp->fsm)) { in ctcmpc_chx_rx()
1421 skb_put_data(new_skb, skb->data, block_len); in ctcmpc_chx_rx()
1422 skb_queue_tail(&ch->io_queue, new_skb); in ctcmpc_chx_rx()
1423 tasklet_schedule(&ch->ch_tasklet); in ctcmpc_chx_rx()
1426 skb_put_data(new_skb, skb->data, len); in ctcmpc_chx_rx()
1427 skb_queue_tail(&ch->io_queue, new_skb); in ctcmpc_chx_rx()
1428 tasklet_hi_schedule(&ch->ch_tasklet); in ctcmpc_chx_rx()
1434 switch (fsm_getstate(grp->fsm)) { in ctcmpc_chx_rx()
1440 ch->trans_skb->data = ch->trans_skb_data; in ctcmpc_chx_rx()
1441 skb_reset_tail_pointer(ch->trans_skb); in ctcmpc_chx_rx()
1442 ch->trans_skb->len = 0; in ctcmpc_chx_rx()
1443 ch->ccw[1].count = ch->max_bufsize; in ctcmpc_chx_rx()
1445 ctcmpc_dumpit((char *)&ch->ccw[0], in ctcmpc_chx_rx()
1450 get_ccwdev_lock(ch->cdev), saveflags); in ctcmpc_chx_rx()
1451 rc = ccw_device_start(ch->cdev, &ch->ccw[0], 0, 0xff, 0); in ctcmpc_chx_rx()
1454 get_ccwdev_lock(ch->cdev), saveflags); in ctcmpc_chx_rx()
1463 __func__, dev->name, ch, ch->id); in ctcmpc_chx_rx()
1477 struct net_device *dev = ch->netdev; in ctcmpc_chx_firstio()
1478 struct ctcm_priv *priv = dev->ml_priv; in ctcmpc_chx_firstio()
1479 struct mpc_group *gptr = priv->mpcg; in ctcmpc_chx_firstio()
1482 __func__, ch->id, ch); in ctcmpc_chx_firstio()
1486 CTCM_FUNTAIL, ch->id, fsm_getstate(fi), in ctcmpc_chx_firstio()
1487 fsm_getstate(gptr->fsm), ch->protocol); in ctcmpc_chx_firstio()
1492 fsm_deltimer(&ch->timer); in ctcmpc_chx_firstio()
1499 if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { in ctcmpc_chx_firstio()
1503 fsm_event(priv->fsm, DEV_EVENT_TXUP, dev); in ctcmpc_chx_firstio()
1510 fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) in ctcmpc_chx_firstio()
1515 __func__, ch->id, ch); in ctcmpc_chx_firstio()
1531 struct net_device *dev = ch->netdev; in ctcmpc_chx_rxidle()
1532 struct ctcm_priv *priv = dev->ml_priv; in ctcmpc_chx_rxidle()
1533 struct mpc_group *grp = priv->mpcg; in ctcmpc_chx_rxidle()
1537 fsm_deltimer(&ch->timer); in ctcmpc_chx_rxidle()
1539 __func__, ch->id, dev->name, smp_processor_id(), in ctcmpc_chx_rxidle()
1540 fsm_getstate(fi), fsm_getstate(grp->fsm)); in ctcmpc_chx_rxidle()
1545 switch (fsm_getstate(grp->fsm)) { in ctcmpc_chx_rxidle()
1550 ch->trans_skb->data = ch->trans_skb_data; in ctcmpc_chx_rxidle()
1551 skb_reset_tail_pointer(ch->trans_skb); in ctcmpc_chx_rxidle()
1552 ch->trans_skb->len = 0; in ctcmpc_chx_rxidle()
1553 ch->ccw[1].count = ch->max_bufsize; in ctcmpc_chx_rxidle()
1554 CTCM_CCW_DUMP((char *)&ch->ccw[0], sizeof(struct ccw1) * 3); in ctcmpc_chx_rxidle()
1557 spin_lock_irqsave(get_ccwdev_lock(ch->cdev), saveflags); in ctcmpc_chx_rxidle()
1558 rc = ccw_device_start(ch->cdev, &ch->ccw[0], 0, 0xff, 0); in ctcmpc_chx_rxidle()
1561 get_ccwdev_lock(ch->cdev), saveflags); in ctcmpc_chx_rxidle()
1572 fsm_event(priv->fsm, DEV_EVENT_RXUP, dev); in ctcmpc_chx_rxidle()
1585 struct net_device *dev = ch->netdev; in ctcmpc_chx_attn()
1586 struct ctcm_priv *priv = dev->ml_priv; in ctcmpc_chx_attn()
1587 struct mpc_group *grp = priv->mpcg; in ctcmpc_chx_attn()
1590 __func__, dev->name, ch->id, ch, smp_processor_id(), in ctcmpc_chx_attn()
1591 fsm_getstate_str(ch->fsm), fsm_getstate_str(grp->fsm)); in ctcmpc_chx_attn()
1593 switch (fsm_getstate(grp->fsm)) { in ctcmpc_chx_attn()
1596 if (!ch->in_mpcgroup) in ctcmpc_chx_attn()
1598 if (fsm_getstate(ch->fsm) == CH_XID0_PENDING) { in ctcmpc_chx_attn()
1599 fsm_deltimer(&grp->timer); in ctcmpc_chx_attn()
1600 fsm_addtimer(&grp->timer, in ctcmpc_chx_attn()
1603 fsm_event(grp->fsm, MPCG_EVENT_XID0DO, ch); in ctcmpc_chx_attn()
1605 } else if (fsm_getstate(ch->fsm) < CH_XID7_PENDING1) in ctcmpc_chx_attn()
1607 fsm_newstate(ch->fsm, CH_XID7_PENDING1); in ctcmpc_chx_attn()
1613 but mid-xid0 processing for group */ in ctcmpc_chx_attn()
1614 if (fsm_getstate(ch->fsm) < CH_XID7_PENDING1) in ctcmpc_chx_attn()
1615 fsm_newstate(ch->fsm, CH_XID7_PENDING1); in ctcmpc_chx_attn()
1621 switch (fsm_getstate(ch->fsm)) { in ctcmpc_chx_attn()
1623 fsm_newstate(ch->fsm, CH_XID7_PENDING1); in ctcmpc_chx_attn()
1626 fsm_newstate(ch->fsm, CH_XID7_PENDING3); in ctcmpc_chx_attn()
1629 fsm_event(grp->fsm, MPCG_EVENT_XID7DONE, dev); in ctcmpc_chx_attn()
1644 struct net_device *dev = ch->netdev; in ctcmpc_chx_attnbusy()
1645 struct ctcm_priv *priv = dev->ml_priv; in ctcmpc_chx_attnbusy()
1646 struct mpc_group *grp = priv->mpcg; in ctcmpc_chx_attnbusy()
1649 __func__, dev->name, ch->id, in ctcmpc_chx_attnbusy()
1650 fsm_getstate_str(ch->fsm), fsm_getstate_str(grp->fsm)); in ctcmpc_chx_attnbusy()
1652 fsm_deltimer(&ch->timer); in ctcmpc_chx_attnbusy()
1654 switch (fsm_getstate(grp->fsm)) { in ctcmpc_chx_attnbusy()
1657 /* only receive one attn-busy at a time so must not */ in ctcmpc_chx_attnbusy()
1659 grp->changed_side = 1; in ctcmpc_chx_attnbusy()
1660 fsm_newstate(grp->fsm, MPCG_STATE_XID2INITW); in ctcmpc_chx_attnbusy()
1663 if (grp->changed_side == 1) { in ctcmpc_chx_attnbusy()
1664 grp->changed_side = 2; in ctcmpc_chx_attnbusy()
1669 /* back to ready-for-xid passive state */ in ctcmpc_chx_attnbusy()
1670 if (grp->estconnfunc) in ctcmpc_chx_attnbusy()
1675 /* processing. Revert back to ready-for-xid and */ in ctcmpc_chx_attnbusy()
1677 if (fsm_getstate(ch->fsm) == CH_XID0_INPROGRESS) { in ctcmpc_chx_attnbusy()
1678 fsm_newstate(ch->fsm, CH_XID0_PENDING) ; in ctcmpc_chx_attnbusy()
1679 fsm_deltimer(&grp->timer); in ctcmpc_chx_attnbusy()
1682 fsm_event(grp->fsm, MPCG_EVENT_INOP, dev); in ctcmpc_chx_attnbusy()
1688 if (grp->changed_side == 1) { in ctcmpc_chx_attnbusy()
1689 grp->changed_side = 2; in ctcmpc_chx_attnbusy()
1699 /* multiple attn-busy indicates too out-of-sync */ in ctcmpc_chx_attnbusy()
1702 fsm_event(grp->fsm, MPCG_EVENT_INOP, dev); in ctcmpc_chx_attnbusy()
1706 if (grp->changed_side == 1) { in ctcmpc_chx_attnbusy()
1707 fsm_deltimer(&grp->timer); in ctcmpc_chx_attnbusy()
1708 fsm_addtimer(&grp->timer, MPC_XID_TIMEOUT_VALUE, in ctcmpc_chx_attnbusy()
1711 if (ch->in_mpcgroup) in ctcmpc_chx_attnbusy()
1712 fsm_event(grp->fsm, MPCG_EVENT_XID0DO, ch); in ctcmpc_chx_attnbusy()
1716 CTCM_FUNTAIL, dev->name, ch->id); in ctcmpc_chx_attnbusy()
1730 struct net_device *dev = ch->netdev; in ctcmpc_chx_resend()
1731 struct ctcm_priv *priv = dev->ml_priv; in ctcmpc_chx_resend()
1732 struct mpc_group *grp = priv->mpcg; in ctcmpc_chx_resend()
1734 fsm_event(grp->fsm, MPCG_EVENT_XID0DO, ch); in ctcmpc_chx_resend()
1746 struct net_device *dev = ach->netdev; in ctcmpc_chx_send_sweep()
1747 struct ctcm_priv *priv = dev->ml_priv; in ctcmpc_chx_send_sweep()
1748 struct mpc_group *grp = priv->mpcg; in ctcmpc_chx_send_sweep()
1749 struct channel *wch = priv->channel[CTCM_WRITE]; in ctcmpc_chx_send_sweep()
1750 struct channel *rch = priv->channel[CTCM_READ]; in ctcmpc_chx_send_sweep()
1757 __func__, smp_processor_id(), ach, ach->id); in ctcmpc_chx_send_sweep()
1759 if (grp->in_sweep == 0) in ctcmpc_chx_send_sweep()
1763 __func__, wch->th_seq_num); in ctcmpc_chx_send_sweep()
1765 __func__, rch->th_seq_num); in ctcmpc_chx_send_sweep()
1767 if (fsm_getstate(wch->fsm) != CTC_STATE_TXIDLE) { in ctcmpc_chx_send_sweep()
1769 fsm_addtimer(&wch->sweep_timer, in ctcmpc_chx_send_sweep()
1774 skb = skb_dequeue(&wch->sweep_queue); in ctcmpc_chx_send_sweep()
1778 if (set_normalized_cda(&wch->ccw[4], skb->data)) { in ctcmpc_chx_send_sweep()
1779 grp->in_sweep = 0; in ctcmpc_chx_send_sweep()
1782 fsm_event(grp->fsm, MPCG_EVENT_INOP, dev); in ctcmpc_chx_send_sweep()
1785 refcount_inc(&skb->users); in ctcmpc_chx_send_sweep()
1786 skb_queue_tail(&wch->io_queue, skb); in ctcmpc_chx_send_sweep()
1790 wch->ccw[4].count = skb->len; in ctcmpc_chx_send_sweep()
1792 header = (struct th_sweep *)skb->data; in ctcmpc_chx_send_sweep()
1793 switch (header->th.th_ch_flag) { in ctcmpc_chx_send_sweep()
1795 grp->sweep_req_pend_num--; in ctcmpc_chx_send_sweep()
1798 grp->sweep_rsp_pend_num--; in ctcmpc_chx_send_sweep()
1802 header->sw.th_last_seq = wch->th_seq_num; in ctcmpc_chx_send_sweep()
1804 CTCM_CCW_DUMP((char *)&wch->ccw[3], sizeof(struct ccw1) * 3); in ctcmpc_chx_send_sweep()
1808 fsm_addtimer(&wch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, wch); in ctcmpc_chx_send_sweep()
1809 fsm_newstate(wch->fsm, CTC_STATE_TX); in ctcmpc_chx_send_sweep()
1811 spin_lock_irqsave(get_ccwdev_lock(wch->cdev), saveflags); in ctcmpc_chx_send_sweep()
1812 wch->prof.send_stamp = jiffies; in ctcmpc_chx_send_sweep()
1813 rc = ccw_device_start(wch->cdev, &wch->ccw[3], 0, 0xff, 0); in ctcmpc_chx_send_sweep()
1814 spin_unlock_irqrestore(get_ccwdev_lock(wch->cdev), saveflags); in ctcmpc_chx_send_sweep()
1816 if ((grp->sweep_req_pend_num == 0) && in ctcmpc_chx_send_sweep()
1817 (grp->sweep_rsp_pend_num == 0)) { in ctcmpc_chx_send_sweep()
1818 grp->in_sweep = 0; in ctcmpc_chx_send_sweep()
1819 rch->th_seq_num = 0x00; in ctcmpc_chx_send_sweep()
1820 wch->th_seq_num = 0x00; in ctcmpc_chx_send_sweep()
1824 CTCM_PR_DBGDATA("%s: To-/From-VTAM_th_seq = %08x/%08x\n" , in ctcmpc_chx_send_sweep()
1825 __func__, wch->th_seq_num, rch->th_seq_num); in ctcmpc_chx_send_sweep()
2043 * Actions for interface - statemachine.
2047 * Startup channels by sending CTC_EVENT_START to each channel.
2056 struct ctcm_priv *priv = dev->ml_priv; in dev_action_start()
2061 fsm_deltimer(&priv->restart_timer); in dev_action_start()
2064 priv->mpcg->channels_terminating = 0; in dev_action_start()
2066 struct channel *ch = priv->channel[direction]; in dev_action_start()
2067 fsm_event(ch->fsm, CTC_EVENT_START, ch); in dev_action_start()
2072 * Shutdown channels by sending CTC_EVENT_STOP to each channel.
2082 struct ctcm_priv *priv = dev->ml_priv; in dev_action_stop()
2088 struct channel *ch = priv->channel[direction]; in dev_action_stop()
2089 fsm_event(ch->fsm, CTC_EVENT_STOP, ch); in dev_action_stop()
2090 ch->th_seq_num = 0x00; in dev_action_stop()
2092 __func__, ch->th_seq_num); in dev_action_stop()
2095 fsm_newstate(priv->mpcg->fsm, MPCG_STATE_RESET); in dev_action_stop()
2102 struct ctcm_priv *priv = dev->ml_priv; in dev_action_restart()
2111 dev_info(&dev->dev, "Restarting device\n"); in dev_action_restart()
2114 fsm_event(priv->fsm, DEV_EVENT_STOP, dev); in dev_action_restart()
2116 fsm_newstate(priv->mpcg->fsm, MPCG_STATE_RESET); in dev_action_restart()
2121 fsm_addtimer(&priv->restart_timer, restart_timer, in dev_action_restart()
2136 struct ctcm_priv *priv = dev->ml_priv; in dev_action_chup()
2141 dev->name, dev->ml_priv, dev_stat, event); in dev_action_chup()
2153 dev_info(&dev->dev, in dev_action_chup()
2161 dev_info(&dev->dev, in dev_action_chup()
2178 mpc_channel_action(priv->channel[CTCM_READ], in dev_action_chup()
2181 mpc_channel_action(priv->channel[CTCM_WRITE], in dev_action_chup()
2198 struct ctcm_priv *priv = dev->ml_priv; in dev_action_chdown()
2234 mpc_channel_action(priv->channel[CTCM_READ], in dev_action_chdown()
2237 mpc_channel_action(priv->channel[CTCM_WRITE], in dev_action_chdown()
2284 /* --- This is the END my friend --- */