Lines Matching defs:channel

98 lcs_alloc_channel(struct lcs_channel *channel)
105 channel->iob[cnt].data =
107 if (channel->iob[cnt].data == NULL)
109 channel->iob[cnt].state = LCS_BUF_STATE_EMPTY;
115 kfree(channel->iob[cnt].data);
125 lcs_free_channel(struct lcs_channel *channel)
131 kfree(channel->iob[cnt].data);
132 channel->iob[cnt].data = NULL;
137 * Cleanup channel.
140 lcs_cleanup_channel(struct lcs_channel *channel)
143 /* Kill write channel tasklets. */
144 tasklet_kill(&channel->irq_tasklet);
145 /* Free channel buffers. */
146 lcs_free_channel(channel);
177 /* Allocate io buffers for the read channel. */
184 /* Allocate io buffers for the write channel. */
201 * Setup read channel.
231 /* Last ccw is a tic (transfer in channel). */
235 /* Setg initial state of the read channel. */
248 /* Initialize read channel tasklet. */
256 * Setup write channel.
278 /* Last ccw is a tic (transfer in channel). */
282 /* Set initial state of the write channel. */
295 /* Initialize write channel tasklet. */
468 * Start channel.
471 lcs_start_channel(struct lcs_channel *channel)
476 LCS_DBF_TEXT_(4, trace,"ssch%s", dev_name(&channel->ccwdev->dev));
477 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
478 rc = ccw_device_start(channel->ccwdev,
479 channel->ccws + channel->io_idx, 0, 0,
482 channel->state = LCS_CH_STATE_RUNNING;
483 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
486 dev_name(&channel->ccwdev->dev));
487 dev_err(&channel->ccwdev->dev,
495 lcs_clear_channel(struct lcs_channel *channel)
501 LCS_DBF_TEXT_(4, trace, "%s", dev_name(&channel->ccwdev->dev));
502 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
503 rc = ccw_device_clear(channel->ccwdev, 0);
504 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
507 dev_name(&channel->ccwdev->dev));
510 wait_event(channel->wait_q, (channel->state == LCS_CH_STATE_CLEARED));
511 channel->state = LCS_CH_STATE_STOPPED;
517 * Stop channel.
520 lcs_stop_channel(struct lcs_channel *channel)
525 if (channel->state == LCS_CH_STATE_STOPPED)
528 LCS_DBF_TEXT_(4, trace, "%s", dev_name(&channel->ccwdev->dev));
529 channel->state = LCS_CH_STATE_INIT;
530 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
531 rc = ccw_device_halt(channel->ccwdev, 0);
532 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
535 dev_name(&channel->ccwdev->dev));
539 wait_event(channel->wait_q, (channel->state == LCS_CH_STATE_HALTED));
540 lcs_clear_channel(channel);
545 * start read and write channel
553 /* start read channel */
557 /* start write channel */
565 * stop read and write channel
580 __lcs_get_buffer(struct lcs_channel *channel)
585 index = channel->io_idx;
587 if (channel->iob[index].state == LCS_BUF_STATE_EMPTY) {
588 channel->iob[index].state = LCS_BUF_STATE_LOCKED;
589 return channel->iob + index;
592 } while (index != channel->io_idx);
597 lcs_get_buffer(struct lcs_channel *channel)
603 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
604 buffer = __lcs_get_buffer(channel);
605 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
610 * Resume channel program if the channel is suspended.
613 __lcs_resume_channel(struct lcs_channel *channel)
617 if (channel->state != LCS_CH_STATE_SUSPENDED)
619 if (channel->ccws[channel->io_idx].flags & CCW_FLAG_SUSPEND)
621 LCS_DBF_TEXT_(5, trace, "rsch%s", dev_name(&channel->ccwdev->dev));
622 rc = ccw_device_resume(channel->ccwdev);
625 dev_name(&channel->ccwdev->dev));
626 dev_err(&channel->ccwdev->dev,
630 channel->state = LCS_CH_STATE_RUNNING;
638 static void __lcs_ready_buffer_bits(struct lcs_channel *channel, int index)
646 if (channel->ccws[next].flags & CCW_FLAG_SUSPEND) {
648 if (!(channel->ccws[prev].flags & CCW_FLAG_SUSPEND))
650 channel->ccws[index].flags |= CCW_FLAG_PCI;
652 channel->ccws[index].flags &= ~CCW_FLAG_SUSPEND;
657 lcs_ready_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
665 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
667 index = buffer - channel->iob;
669 channel->ccws[index].count = buffer->count;
671 __lcs_ready_buffer_bits(channel, index);
672 rc = __lcs_resume_channel(channel);
673 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
683 __lcs_processed_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
690 index = buffer - channel->iob;
694 channel->ccws[index].flags |= CCW_FLAG_SUSPEND;
695 channel->ccws[index].flags &= ~CCW_FLAG_PCI;
697 if (channel->iob[prev].state == LCS_BUF_STATE_READY) {
704 __lcs_ready_buffer_bits(channel, prev);
707 channel->ccws[next].flags &= ~CCW_FLAG_PCI;
708 return __lcs_resume_channel(channel);
715 lcs_release_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
722 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
724 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
1361 struct lcs_channel *channel;
1370 channel = &card->read;
1372 channel = &card->write;
1382 /* Check for channel and device errors presented */
1390 channel->state = LCS_CH_STATE_ERROR;
1393 if (channel->state == LCS_CH_STATE_ERROR) {
1399 if ((channel->state != LCS_CH_STATE_INIT) &&
1403 - channel->ccws;
1408 while (channel->io_idx != index) {
1409 __lcs_processed_buffer(channel,
1410 channel->iob + channel->io_idx);
1411 channel->io_idx =
1412 (channel->io_idx + 1) & (LCS_NUM_BUFFS - 1);
1419 /* Mark channel as stopped. */
1420 channel->state = LCS_CH_STATE_STOPPED;
1423 channel->state = LCS_CH_STATE_SUSPENDED;
1426 ccw_device_halt(channel->ccwdev, 0);
1429 /* The channel has been stopped by halt_IO. */
1430 channel->state = LCS_CH_STATE_HALTED;
1433 channel->state = LCS_CH_STATE_CLEARED;
1435 tasklet_schedule(&channel->irq_tasklet);
1445 struct lcs_channel *channel;
1449 channel = (struct lcs_channel *) data;
1450 LCS_DBF_TEXT_(5, trace, "tlet%s", dev_name(&channel->ccwdev->dev));
1453 iob = channel->iob;
1454 buf_idx = channel->buf_idx;
1458 iob[buf_idx].callback(channel, iob + buf_idx);
1461 channel->buf_idx = buf_idx;
1463 if (channel->state == LCS_CH_STATE_STOPPED)
1464 lcs_start_channel(channel);
1465 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
1466 if (channel->state == LCS_CH_STATE_SUSPENDED &&
1467 channel->iob[channel->io_idx].state == LCS_BUF_STATE_READY)
1468 __lcs_resume_channel(channel);
1469 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
1471 /* Something happened on the channel. Wake up waiters. */
1472 wake_up(&channel->wait_q);
1493 lcs_txbuffer_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
1499 lcs_release_buffer(channel, buffer);
1500 card = container_of(channel, struct lcs_card, write);
1773 lcs_get_frames_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
1785 card = container_of(channel, struct lcs_card, read);
1923 "not a channel",
1925 "2216 channel",
1927 "unknown channel type",
1928 "unsupported channel type",