Lines Matching defs:channel

103 lcs_alloc_channel(struct lcs_channel *channel)
110 channel->iob[cnt].data =
112 if (channel->iob[cnt].data == NULL)
114 channel->iob[cnt].state = LCS_BUF_STATE_EMPTY;
120 kfree(channel->iob[cnt].data);
130 lcs_free_channel(struct lcs_channel *channel)
136 kfree(channel->iob[cnt].data);
137 channel->iob[cnt].data = NULL;
142 * Cleanup channel.
145 lcs_cleanup_channel(struct lcs_channel *channel)
148 /* Kill write channel tasklets. */
149 tasklet_kill(&channel->irq_tasklet);
150 /* Free channel buffers. */
151 lcs_free_channel(channel);
182 /* Allocate io buffers for the read channel. */
189 /* Allocate io buffers for the write channel. */
206 * Setup read channel.
236 /* Last ccw is a tic (transfer in channel). */
240 /* Setg initial state of the read channel. */
253 /* Initialize read channel tasklet. */
261 * Setup write channel.
283 /* Last ccw is a tic (transfer in channel). */
287 /* Set initial state of the write channel. */
300 /* Initialize write channel tasklet. */
472 * Start channel.
475 lcs_start_channel(struct lcs_channel *channel)
480 LCS_DBF_TEXT_(4, trace,"ssch%s", dev_name(&channel->ccwdev->dev));
481 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
482 rc = ccw_device_start(channel->ccwdev,
483 channel->ccws + channel->io_idx, 0, 0,
486 channel->state = LCS_CH_STATE_RUNNING;
487 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
490 dev_name(&channel->ccwdev->dev));
491 dev_err(&channel->ccwdev->dev,
499 lcs_clear_channel(struct lcs_channel *channel)
505 LCS_DBF_TEXT_(4, trace, "%s", dev_name(&channel->ccwdev->dev));
506 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
507 rc = ccw_device_clear(channel->ccwdev, 0);
508 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
511 dev_name(&channel->ccwdev->dev));
514 wait_event(channel->wait_q, (channel->state == LCS_CH_STATE_CLEARED));
515 channel->state = LCS_CH_STATE_STOPPED;
521 * Stop channel.
524 lcs_stop_channel(struct lcs_channel *channel)
529 if (channel->state == LCS_CH_STATE_STOPPED)
532 LCS_DBF_TEXT_(4, trace, "%s", dev_name(&channel->ccwdev->dev));
533 channel->state = LCS_CH_STATE_INIT;
534 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
535 rc = ccw_device_halt(channel->ccwdev, 0);
536 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
539 dev_name(&channel->ccwdev->dev));
543 wait_event(channel->wait_q, (channel->state == LCS_CH_STATE_HALTED));
544 lcs_clear_channel(channel);
549 * start read and write channel
557 /* start read channel */
561 /* start write channel */
569 * stop read and write channel
584 __lcs_get_buffer(struct lcs_channel *channel)
589 index = channel->io_idx;
591 if (channel->iob[index].state == LCS_BUF_STATE_EMPTY) {
592 channel->iob[index].state = LCS_BUF_STATE_LOCKED;
593 return channel->iob + index;
596 } while (index != channel->io_idx);
601 lcs_get_buffer(struct lcs_channel *channel)
607 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
608 buffer = __lcs_get_buffer(channel);
609 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
614 * Resume channel program if the channel is suspended.
617 __lcs_resume_channel(struct lcs_channel *channel)
621 if (channel->state != LCS_CH_STATE_SUSPENDED)
623 if (channel->ccws[channel->io_idx].flags & CCW_FLAG_SUSPEND)
625 LCS_DBF_TEXT_(5, trace, "rsch%s", dev_name(&channel->ccwdev->dev));
626 rc = ccw_device_resume(channel->ccwdev);
629 dev_name(&channel->ccwdev->dev));
630 dev_err(&channel->ccwdev->dev,
634 channel->state = LCS_CH_STATE_RUNNING;
642 static void __lcs_ready_buffer_bits(struct lcs_channel *channel, int index)
650 if (channel->ccws[next].flags & CCW_FLAG_SUSPEND) {
652 if (!(channel->ccws[prev].flags & CCW_FLAG_SUSPEND))
654 channel->ccws[index].flags |= CCW_FLAG_PCI;
656 channel->ccws[index].flags &= ~CCW_FLAG_SUSPEND;
661 lcs_ready_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
669 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
671 index = buffer - channel->iob;
673 channel->ccws[index].count = buffer->count;
675 __lcs_ready_buffer_bits(channel, index);
676 rc = __lcs_resume_channel(channel);
677 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
687 __lcs_processed_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
694 index = buffer - channel->iob;
698 channel->ccws[index].flags |= CCW_FLAG_SUSPEND;
699 channel->ccws[index].flags &= ~CCW_FLAG_PCI;
701 if (channel->iob[prev].state == LCS_BUF_STATE_READY) {
708 __lcs_ready_buffer_bits(channel, prev);
711 channel->ccws[next].flags &= ~CCW_FLAG_PCI;
712 return __lcs_resume_channel(channel);
719 lcs_release_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
726 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
728 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
1365 struct lcs_channel *channel;
1374 channel = &card->read;
1376 channel = &card->write;
1386 /* Check for channel and device errors presented */
1394 channel->state = LCS_CH_STATE_ERROR;
1397 if (channel->state == LCS_CH_STATE_ERROR) {
1403 if ((channel->state != LCS_CH_STATE_INIT) &&
1407 - channel->ccws;
1412 while (channel->io_idx != index) {
1413 __lcs_processed_buffer(channel,
1414 channel->iob + channel->io_idx);
1415 channel->io_idx =
1416 (channel->io_idx + 1) & (LCS_NUM_BUFFS - 1);
1423 /* Mark channel as stopped. */
1424 channel->state = LCS_CH_STATE_STOPPED;
1427 channel->state = LCS_CH_STATE_SUSPENDED;
1430 ccw_device_halt(channel->ccwdev, 0);
1433 /* The channel has been stopped by halt_IO. */
1434 channel->state = LCS_CH_STATE_HALTED;
1437 channel->state = LCS_CH_STATE_CLEARED;
1439 tasklet_schedule(&channel->irq_tasklet);
1449 struct lcs_channel *channel;
1453 channel = (struct lcs_channel *) data;
1454 LCS_DBF_TEXT_(5, trace, "tlet%s", dev_name(&channel->ccwdev->dev));
1457 iob = channel->iob;
1458 buf_idx = channel->buf_idx;
1462 iob[buf_idx].callback(channel, iob + buf_idx);
1465 channel->buf_idx = buf_idx;
1467 if (channel->state == LCS_CH_STATE_STOPPED)
1468 lcs_start_channel(channel);
1469 spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
1470 if (channel->state == LCS_CH_STATE_SUSPENDED &&
1471 channel->iob[channel->io_idx].state == LCS_BUF_STATE_READY)
1472 __lcs_resume_channel(channel);
1473 spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
1475 /* Something happened on the channel. Wake up waiters. */
1476 wake_up(&channel->wait_q);
1497 lcs_txbuffer_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
1503 lcs_release_buffer(channel, buffer);
1504 card = container_of(channel, struct lcs_card, write);
1785 lcs_get_frames_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
1797 card = container_of(channel, struct lcs_card, read);
1940 "not a channel",
1942 "2216 channel",
1944 "unknown channel type",
1945 "unsupported channel type",